What this API does:
These APIs currently supports FPS, Balance Transfers, CHAPS, and BACS Payments.
This API lets you initiate up to 150 domestic payment and submit payment requests. It also lets you check the payment status and confirm funds.
Endpoint configuration
Sandbox: cb.sandbox-api-nc.cybservices.co.uk/open-banking/v3.1/pisp/file-payment-consents
Production: api.openbanking.virginmoney.com/open-banking/v3.1/pisp/file-payment-consents
The API endpoint lets you ask Virgin Money to create a new file payment consent resource:
- The POST action tells Virgin Money that a file payment consent has been staged. At this point, it does not identify the customer to Virgin Money; the request payload may not contain information about the account to be debited
- The endpoint lets you send a copy of the consent between the customer and you to Virgin Money for the customer to authorise (after the file is uploaded)
Virgin Money will create a file payment consent resource and provide a unique ConsentId for the resource.
Before calling the API, you must have an access token issued by Virgin Money using 'Client Credentials' grant.
Sandbox: cb.sandbox-api-nc.cybservices.co.uk/open-banking/v3.1/pisp/file-payment-consents/{ConsentId}/file
Production: api.openbanking.virginmoney.com/open-banking/v3.1/pisp/file-payment-consents/{ConsentId}/file
The API endpoint lets you upload up to 150 file payment requests to Virgin:
- Support only JSON format for file upload
- All the payments in the file should be of one payment type i.e. FPS, CHAPS or BACS.
- Virgin Money will upload the file payment consent resource for the given unique.
Before calling the API, you must have an access token issued by Virgin Money using 'Client Credentials' grant.
Sandbox: cb.sandbox-api-nc.cybservices.co.uk/open-banking/v3.1/pisp/file-payment-consents/{ConsentId}
Production: api.openbanking.virginmoney.com/open-banking/v3.1/pisp/file-payment-consents/{ConsentId}
Check the status of the payment consent.
Before calling the API, you must have an access token issued by Virgin Money using 'Client Credentials' grant.
Sandbox: cb.sandbox-api-nc.cybservices.co.uk/open-banking/v3.1/pisp/file-payment-consents/{ConsentId}/file
Production: api.openbanking.virginmoney.com/open-banking/v3.1/pisp/file-payment-consents/{ConsentId}/file
Check the status of individual payment requests in the file the payment consent.
Before calling the API, you must have an access token issued by Virgin Money using 'Client Credentials' grant.
Sandbox: cb.sandbox-api-nc.cybservices.co.uk/open-banking/v3.1/pisp/file-payments/{FilePaymentId}
Production: api.openbanking.virginmoney.com/open-banking/v3.1/pisp/file-payments/{FilePaymentId}
Check the status of overall file payment.
Before calling the API, you must have an access token issued by Virgin Money using 'Client Credentials' grant.
Sandbox: cb.sandbox-api-nc.cybservices.co.uk/open-banking/v3.1/pisp/file-payments/{FilePaymentId}/report-file
Production: api.openbanking.virginmoney.com/open-banking/v3.1/pisp/file-payments/{FilePaymentId}/report-file
API calls
File Payments
Name | Description |
---|---|
OBWriteFileConsent3Param * (body) | Default { |
x-fapi-auth-date string (header) | The time when the PSU last logged in with the TPP. |
x-fapi-customer-ip-address string (header) | The PSU's IP address if the PSU is currently logged in with the TPP. |
x-fapi-interaction-id string (header) | An RFC4122 UID used as a correlation id. |
Authorization * string (header) | An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Link opens in a new window |
x-idempotency-key * string (header) | Every request will be processed only once per x-idempotency-key. The |
x-jws-signature * string (header) | A detached JOSE signature of the body of the payload. |
Responses
Code | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
201 | Created { #/definitions/OBWriteFileConsentResponse3OBWriteFileConsentResponse3{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | Bad request { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | Unauthorized Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | Forbidden { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | Not found Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | Method Not Allowed Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | Not Acceptable Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
429 | Too Many Requests Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | Internal Server Error { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
|
Name | Description |
---|---|
ConsentId * string (path) | ConsentId |
x-fapi-auth-date string (header) | The time when the PSU last logged in with the TPP. |
x-fapi-customer-ip-address string (header) | The PSU's IP address if the PSU is currently logged in with the TPP. |
x-fapi-interaction-id string (header) | An RFC4122 UID used as a correlation id. |
Authorization * string (header) | An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Link opens in a new window |
Responses
Code | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
200 | OK { #/definitions/OBWriteFileConsentResponse3OBWriteFileConsentResponse3{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | Bad request { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | Unauthorized Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | Forbidden { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | Not found Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | Method Not Allowed Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | Not Acceptable Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
429 | Too Many Requests Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | Internal Server Error { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
|
Name | Description |
---|---|
ConsentId * string (path) | ConsentId |
x-fapi-auth-date string (header) | The time when the PSU last logged in with the TPP. |
x-fapi-customer-ip-address string (header) | The PSU's IP address if the PSU is currently logged in with the TPP. |
x-fapi-interaction-id string (header) | An RFC4122 UID used as a correlation id. |
Authorization * string (header) | An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Link opens in a new window |
Responses
Code | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
200 | OK { #/definitions/ReadFileResponseReadFileResponse{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | Bad request { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | Unauthorized Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | Forbidden { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | Not found Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | Method Not Allowed Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | Not Acceptable Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
429 | Too Many Requests Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | Internal Server Error { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
|
Name | Description |
---|---|
FileParam * (body) | Default { |
ConsentId * string (path) | ConsentId |
x-fapi-auth-date string (header) | The time when the PSU last logged in with the TPP. |
x-fapi-customer-ip-address string (header) | The PSU's IP address if the PSU is currently logged in with the TPP. |
x-fapi-interaction-id string (header) | An RFC4122 UID used as a correlation id. |
Authorization * string (header) | An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Link opens in a new window |
x-idempotency-key * string (header) | Every request will be processed only once per x-idempotency-key. The |
x-jws-signature * string (header) | A detached JOSE signature of the body of the payload. |
Responses
Code | Description | |||||||||||||||||||||||||||
200 | OK Headers:
| |||||||||||||||||||||||||||
400 | Bad request { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||
401 | Unauthorized Headers:
| |||||||||||||||||||||||||||
403 | Forbidden { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||
404 | Not found Headers:
| |||||||||||||||||||||||||||
405 | Method Not Allowed Headers:
| |||||||||||||||||||||||||||
406 | Not Acceptable Headers:
| |||||||||||||||||||||||||||
429 | Too Many Requests Headers:
| |||||||||||||||||||||||||||
500 | Internal Server Error { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
|
Name | Description |
---|---|
OBWriteFile2Param * (body) | Default { |
x-fapi-auth-date string (header) | The time when the PSU last logged in with the TPP. |
x-fapi-customer-ip-address string (header) | The PSU's IP address if the PSU is currently logged in with the TPP. |
x-fapi-interaction-id string (header) | An RFC4122 UID used as a correlation id. |
Authorization * string (header) | An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Link opens in a new window |
x-idempotency-key * string (header) | Every request will be processed only once per x-idempotency-key. The |
x-jws-signature * string (header) | A detached JOSE signature of the body of the payload. |
Responses
Code | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
201 | Created { #/definitions/OBWriteFileResponse2OBWriteFileResponse2{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | Bad request { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | Unauthorized Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | Forbidden { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | Not found Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | Method Not Allowed Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | Not Acceptable Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
429 | Too Many Requests Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | Internal Server Error { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
|
Name | Description |
---|---|
FilePaymentId * string (path) | FilePaymentId |
x-fapi-auth-date string (header) | The time when the PSU last logged in with the TPP. |
x-fapi-customer-ip-address string (header) | The PSU's IP address if the PSU is currently logged in with the TPP. |
x-fapi-interaction-id string (header) | An RFC4122 UID used as a correlation id. |
Authorization * string (header) | An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Link opens in a new window |
Responses
Code | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
200 | OK { #/definitions/OBWriteFileResponse2OBWriteFileResponse2{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | Bad request { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | Unauthorized Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | Forbidden { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | Not found Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | Method Not Allowed Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | Not Acceptable Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
429 | Too Many Requests Headers:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | Internal Server Error { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
|
Name | Description |
---|---|
FilePaymentId * string (path) | FilePaymentId |
x-fapi-auth-date string (header) | The time when the PSU last logged in with the TPP. |
x-fapi-customer-ip-address string (header) | The PSU's IP address if the PSU is currently logged in with the TPP. |
x-fapi-interaction-id string (header) | An RFC4122 UID used as a correlation id. |
Authorization * string (header) | An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Link opens in a new window |
Responses
Code | Description | |||||||||||||||||||||||||||
200 | OK Headers:
| |||||||||||||||||||||||||||
400 | Bad request { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||
401 | Unauthorized Headers:
| |||||||||||||||||||||||||||
403 | Forbidden { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
| |||||||||||||||||||||||||||
404 | Not found Headers:
| |||||||||||||||||||||||||||
405 | Method Not Allowed Headers:
| |||||||||||||||||||||||||||
406 | Not Acceptable Headers:
| |||||||||||||||||||||||||||
429 | Too Many Requests Headers:
| |||||||||||||||||||||||||||
500 | Internal Server Error { #/definitions/OBErrorResponse1OBErrorResponse1{
Headers:
|
Models
Information that locates and identifies a specific address for a transaction entry, that is presented in free format text.
Date and time at which the resource was created.All dates in the JSON payloads are represented in ISO 8601 date-time format.
All date-time fields in responses must include the timezone. An example is below:
2017-04-05T10:43:07+00:00
All dates in the JSON payloads are represented in ISO 8601 date-time format.
All date-time fields in responses must include the timezone. An example is below:
2017-04-05T10:43:07+00:00
description: | Links relevant to the payload |
Self* | string |
First | string |
Prev | string |
Next | string |
Last | string |
description: | Meta Data relevant to the payload |
TotalPages | integer($int32) |
FirstAvailableDateTime | ISODateTimestring($date-time) All dates in the JSON payloads are represented in ISO 8601 date-time format. |
LastAvailableDateTime | ISODateTimestring($date-time) All dates in the JSON payloads are represented in ISO 8601 date-time format. |
[ Business, Correspondence, DeliveryTo, MailTo, POBox, Postal, Residential, Statement ]
ErrorCode* | string Low level textual error code, e.g., UK.OBIE.Field.Missing |
Message* | string minLength: 1 maxLength: 500 A description of the error that occurred. e.g., 'A mandatory field isn't supplied' or 'RequestedExecutionDateTime must be in future' |
Path | string minLength: 1 maxLength: 500 Recommended but optional reference to the JSON Path of the field with error, e.g., Data.Initiation.InstructedAmount.Currency |
Url | string URL to help remediate the problem, or provide more information, or to API Reference, or help etc |
description: | An array of detail error codes, and messages, and URLs to documentation to help remediation. | ||||||||
Code* | string minLength: 1 maxLength: 40 High level textual error code, to help categorize the errors. | ||||||||
Id | string minLength: 1 maxLength: 40 A unique reference for the error instance, for audit purposes, in case of unknown/unclassified errors. | ||||||||
Message* | string minLength: 1 maxLength: 500 Brief Error message, e.g., 'There is something wrong with the request parameters provided' | ||||||||
Errors* | [ minItems: 1#/definitions/OBError1OBError1{
|
Identifier consisting of a group of letters and/or numbers that is added to a postal address to assist the sorting of mail.
Date and time at which the statement period starts.All dates in the JSON payloads are represented in ISO 8601 date-time format.
All date-time fields in responses must include the timezone. An example is below:
2017-04-05T10:43:07+00:00
Date and time at which the resource status was updated.All dates in the JSON payloads are represented in ISO 8601 date-time format.
All date-time fields in responses must include the timezone. An example is below:
2017-04-05T10:43:07+00:00
Name of a built-up area, with defined boundaries, and a local government.
Data* | {
|
Data* | {
|
Data* | {
| ||||||||||||||||||||||
Links | #/definitions/LinksLinks{
| ||||||||||||||||||||||
Meta | #/definitions/MetaMeta{
|
Data* | {
| ||||||||||||||||||||||||||||||
Links | #/definitions/LinksLinks{
| ||||||||||||||||||||||||||||||
Meta | #/definitions/MetaMeta{
|
File | {
|
description: | RequestBody for File Payments | ||||||||||||
InstructionIdentification* | string minLength: 1 maxLength: 35 Unique identification as assigned by an instructing party for an instructed party to unambiguously identify the instruction. | ||||||||||||
EndToEndIdentification | string minLength: 1 maxLength: 35 Unique identification assigned by the initiating party to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain. | ||||||||||||
LocalInstrument | OBExternalLocalInstrument1Codestring User community specific instrument. | ||||||||||||
RequestedExecutionDateTime | string($date-time) Date at which the initiating party requests the clearing agent to process the payment. | ||||||||||||
InstructedAmount* | {
| ||||||||||||
DebtorAccount | {
| ||||||||||||
CreditorAccount* | {
| ||||||||||||
CreditorPostalAddress | #/definitions/OBPostalAddress6OBPostalAddress6{
| ||||||||||||
RemittanceInformation | {
|
File | {
|
ReadDomesticPaymentsItemResponse
description: | RequestBody for File Payments | ||||||||||||
PaymentId* | string minLength: 1 maxLength: 35 Unique identification as assigned by an instructing party for an instructed party to unambiguously identify the instruction. | ||||||||||||
InstructionIdentification* | string minLength: 1 maxLength: 35 Unique identification as assigned by an instructing party for an instructed party to unambiguously identify the instruction. | ||||||||||||
EndToEndIdentification | string minLength: 1 maxLength: 35 Unique identification assigned by the initiating party to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain. | ||||||||||||
LocalInstrument | OBExternalLocalInstrument1Codestring User community specific instrument. | ||||||||||||
RequestedExecutionDateTime | string($date-time) Date at which the initiating party requests the clearing agent to process the payment. | ||||||||||||
InstructedAmount* | {
| ||||||||||||
DebtorAccount | {
| ||||||||||||
CreditorAccount* | {
| ||||||||||||
CreditorPostalAddress | #/definitions/OBPostalAddress6OBPostalAddress6{
| ||||||||||||
RemittanceInformation | {
|
description: | Information that locates and identifies a specific address, as defined by postal services. |
AddressType | OBAddressTypeCodestring Identifies the nature of the postal address. Enum:[ Business, Correspondence, DeliveryTo, MailTo, POBox, Postal, Residential, Statement ] |
PostCode | PostCodestring Identifier consisting of a group of letters and/or numbers that is added to a postal address to assist the sorting of mail. |
TownName | TownNamestring Name of a built-up area, with defined boundaries, and a local government. |
Country | string pattern: ^[A-Z]{2,2}$ Nation with its own government. |
AddressLine | [ minItems: 0 maxItems: 2string minLength: 1 maxLength: 70 Information that locates and identifies a specific address, as defined by postal services, presented in free format text. |
OBExternalLocalInstrument1Code
User community specific instrument.
Usage: This element is used to specify a local instrument, local clearing option and/or further qualify the service or service level.
OBActiveCurrencyAndAmount_SimpleType
A code allocated to a currency by a Maintenance Agency under an international identification scheme, as described in the latest edition of the international standard ISO 4217 "Codes for the representation of currencies and funds".
OBExternalAccountIdentification4Code
Name of the identification scheme, in a coded form as published in an external list.
Having trouble?
Contact our dedicated team members via our ticketing system or via our support mailbox