With the PSD2 Single Payment Initiation API, Certified Payment Initiation Service Providers (PISPs) can create a seamless journey for your users while providing them full control throughout the process, the account holder can always decide which payments are executed.
You can initiate a single credit transfer on behalf of your users using a Rabobank payment account. You can also retrieve the status of the initiated transaction to keep track.
This API can be used through your app or web service.
The API is suited for one-time or recurring single Euro Payments (SEPA) and World Payments (non SEPA). Euro Payments will be credited directly in case the beneficiary bank participates in Instant Payments.
For more information, read PSD2 Single Payment API flow.
Oauth is not required for this API.
Rate Limiting
A default rate limit plan is set for all APIs. The rate limit can be shared or individual (defined per operation). The table below describes the rate limiting for this product.
Operation | Type | Limit (API calls / s) | Counts towards shared limit |
---|---|---|---|
POST /v1/payments/sepa-credit-transfers | Individual | 5 | No |
GET /v1/payments/sepa-credit-transfers/{paymentId} | Individual | 10 | No |
GET /v1/payments/sepa-credit-transfers/{paymentId}/status | Individual | 10 | No |
POST /v1/payments/cross-border-credit-transfers | Individual | 5 | No |
GET /v1/payments/cross-border-credit-transfers/{paymentId} | Individual | 10 | No |
GET /v1/payments/cross-border-credit-transfers/{paymentId}/status | Individual | 10 | No |
POST /v1/periodic-payments/sepa-credit-transfers | Individual | 5 | No |
GET /v1/periodic-payments/sepa-credit-transfers/{paymentId} | Individual | 10 | No |
GET /v1/periodic-payments/sepa-credit-transfers/{paymentId}/status | Individual | 10 | No |
POST /v1/periodic-payments/cross-border-credit-transfers | Individual | 5 | No |
GET /v1/periodic-payments/cross-border-credit-transfers/{paymentId} | Individual | 10 | No |
GET /v1/periodic-payments/cross-border-credit-transfer/{paymentId}/status | Individual | 10 | No |
DELETE /v1/{paymentService}/{paymentProduct}/{paymentId} | Individual | 5 | No |
All (premium) Oauth calls | Shared | 5 | Yes |
Requests
The POST Payment and GET Status requests must contain a digital signature. You can generate this digital signature using the private key of your certificate. For the Sandbox environment, you can use an example certificate available in the Signing documentation.
You can initiate a payment with POST/v1/payments/sepa-credit-transfers
.
You can retrieve the details of payment with GET /xxx-credit-transfers/{paymentId}
.
You can retrieve the status of a payment with GET /status (GET/v1/payments/cross-border-credit-transfers/{paymentId}/status)
You can delete a periodic or future dated payment via DELETE /{paymentService}/{paymentProduct}/{paymentId}
.
Response
POST Payment for PSD2 Payment Initiation Single Payments
You can initiate a Single PSD2 payment using a POST payments request.
After receiving the payment, a response of ACTC or RJCT is returned. You can use the {paymentId}
endpoint to get the details of the payment and the status endpoint to get the latest status of the payment.
To view the POST parameters, read the following endpoint descriptions:
POST/v1/payments/cross-border-credit-transfers
POST/v1/payments/sepa-credit-transfers
POST/v1/periodic-payments/cross-border-credit-transfers
POST/v1/periodic-payments/sepa-credit-transfers
Below you can find all supported test scenarios. In order to test these scenarios, call the API by using the examples for the fields provided in the endpoint description for POST/sepa-credit-transfers
.
Status Code | Message | Debtor Name | Currency | Amount | Creditor Name | Debtor IBAN | Debtor Currency | Creditor IBAN | Creditor Currency | Category | Subcategory | EndToEnd ID | Notes |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
201 Created | abcde | EUR | 10.25 | someOne | NL65INGB0316260304 | EUR | NL83RABO0305224387 | EUR | SCOR | CUR | 1515140706132013 | ||
400 Bad Request | abcde | EUR | 10.25 | someOne | EUR | EUR | SCOR | CUR | 1515140706132013 | Send a transfer with one of the fields empty (e.g., IBAN) | |||
400 Bad Request | paymentFailed | Payment failed response | |||||||||||
401 Unauthorised | CERTIFICATE_INVALID | Use invalid for header: TPP-Signature-Certificate | |||||||||||
401 Unauthorised | CERTIFICATE_INVALID | Use invalidRole for header: TPP-Signature-Certificate | |||||||||||
401 Unauthorised | CERTIFICATE_EXPIRED | Use expired for header: TPP-Signature-Certificate | |||||||||||
401 Unauthorised | CERTIFICATE_BLOCKED | Use blocked for header: TPP-Signature-Certificate | |||||||||||
401 Unauthorised | CERTIFICATE_REVOKED | Use revoked for header: TPP-Signature-Certificate | |||||||||||
404 Not Found | Change the URL to payments/sepa-credit-transfers | ||||||||||||
405 Method Not Allowed | Use POST instead of GET | ||||||||||||
503 Service Unavailable | serviceUnavailable | Add shown info to EndToEnd ID in body |
To create a recurring payment, you need to use the API contains periodic-payments with the following extra content.
Field | Type | Value |
---|---|---|
startDate | ISO date | 2019-03-25 |
endDate | ISO date | 2020-03-25 |
frequency | Enum value | Monthly |
The difference between single SEPA credit transfer and recurring payment is the startDate
and frequency
are mandatory. The rest of the scenarios are the same as single SEPA credit transfers.
GET Payment details for PSD2 Payment Initiation Single Payments
You can retrieve the detail information for a payment initiation using a GET {paymentId}
request.
Some scenarios, as mentioned below, require specific paymentId(s) in the URL, example: (GET /paymentsGET/v1/payments/sepa-credit-transfers/{paymentId}/status
) to get the mentioned responses.
To view the GET parameters, read the following endpoint descriptions:
GET/v1/payments/cross-border-credit-transfers/{paymentId}
GET/v1/payments/sepa-credit-transfers/{paymentId}
GET/v1/periodic-payments/cross-border-credit-transfers/{paymentId}
GET/v1/periodic-payments/sepa-credit-transfers/{paymentId}
Below you can find all supported test scenarios.
Status Code | Type | ID | Currency | Amount | Debtor Account | Debtor Currency | Creditor Account | Creditor Currency | Creditor Type | Creditor Name | Start Date | Frequency |
---|---|---|---|---|---|---|---|---|---|---|---|---|
200 OK | Single Sepa | 123e4567-e89b-42d3-a456-556642440005 | EUR | 10.25 | NL10RABO0123456789 | EUR | NL10RABO0912345678 | EUR | Company | Mason Stevens | ||
200 OK | Single CB IBAN | c709c408-eb8e-40a5-83d9-05b78cc51b41 | USD | 10.25 | NL10RABO0123456789 | EUR | NL10RABO0912345678 | EUR | Company | Ina Copeland | ||
200 OK | Single CB BBAN | 6509c408-eb8e-40a5-83d9-05b78cc51009 | USD | 10.25 | 02100002112345678901234567 | EUR | NL10RABO0912345678 | EUR | Company | Ina Copeland | ||
200 OK | Periodic Sepa | 4982e122-57e1-4f3f-b39a-43b50dc734b5 | EUR | 10.25 | NL10RABO0123456789 | EUR | NL10RABO0912345678 | EUR | Company | Allen Dawson | 2018-10-22 | Daily |
200 OK | Periodic CB IBAN | 1f22d0e0-a4d5-459f-992e-1ccb4bcbc70e | GBP | 10.25 | GB60BARC48291709876543 | GBP | NL10RABO0123456789 | EUR | Company | Logan Bowen | 2018-10-22 | Quarterly |
200 OK | Periodic CB BBAN | 4522d0e0-a4d5-459f-992e-1ccb4bcbc654 | GBP | 10.25 | 48291709876543 | GBP | NL10RABO0123456789 | EUR | Company | Logan Bowen | 2018-10-22 | Quarterly |
400 Bad Request | 123e4567-e89b-42d3-a456-556642440006 | |||||||||||
404 Not Found | 123e4567-e89b-42d3-a456-556642440007 | |||||||||||
503 Service Unavailable | 123e4567-e89b-42d3-a456-556642440003 | |||||||||||
503 Service Unavailable | 123e4567-e89b-42d3-a456-556642440004 |
Note: These codes are for Sandbox only, for testing with the Sandbox example values for Signature add header Date = Thu, 24 May 2022 06:53:05 GMT.
GET Payment Status for PSD2 Payment Initiation Single Payments
You can retrieve the status information for a payment initiation using a GET status request.
Some scenarios, as mentioned below, require specific paymentId(s) in the URL.
To view the GET parameters, read the following endpoint descriptions:
GET/v1/payments/cross-border-credit-transfers/{paymentId}/status
GET/v1/payments/sepa-credit-transfers/{paymentId}/status
GET/v1/periodic-payments/cross-border-credit-transfers/{paymentId}/status
GET/v1/periodic-payments/sepa-credit-transfers/{paymentId}/status
Below you can find all supported test scenarios.
Status Code | Response Status | Payment ID | Funds Available | Remark |
---|---|---|---|---|
200 OK | ACTC | 123e4567-e89b-42d3-a456-556642440005 | N/A | |
200 OK | PDNG | 123e4567-e89b-42d3-a456-556642440006 | N/A | |
200 OK | ACSP | 123e4567-e89b-42d3-a456-556642440007 | true | |
200 OK | RJCT | 123e4567-e89b-42d3-a456-556642440008 | N/A | |
200 OK | ACSC | 123e4567-e89b-42d3-a456-556642440009 | true | |
200 OK | ACCC | 123e4567-e89b-42d3-a456-556642440011 | true | |
200 OK | CANC | 123e4567-e89b-42d3-a456-556642440014 | N/A | |
200 OK | ACSP | 123e4567-e89b-42d3-a456-556642440018 | false | |
400 Bad Request | 123e4567-e89b-42d3-a456-556642440004 | Header: X-Request-ID is not UUID. | ||
401 Unauthorised | CERTIFICATE_INVALID | Use invalid for header: TPP-Signature-Certificate | ||
401 Unauthorised | CERTIFICATE_INVALID | Use invalidRole for header: TPP-Signature-Certificate | ||
401 Unauthorised | CERTIFICATE_EXPIRED | Use expired for header: TPP-Signature-Certificate | ||
401 Unauthorised | CERTIFICATE_BLOCKED | Use blocked for header: TPP-Signature-Certificate | ||
401 Unauthorised | CERTIFICATE_REVOKED | Use revoked for header: TPP-Signature-Certificate | ||
403 Forbidden | 123e4567-e89b-42d3-a456-556642440002 | Forced status failed, expired resource. | ||
404 Not Found | 123e4567-e89b-42d3-a456-556642440001 | Forced status not found. | ||
405 Method Not Allowed | Use POST instead of GET | |||
503 Service Unavailable | 123e4567-e89b-42d3-a456-556642440003 | Forced service unavailable. |
Note: These codes are for Sandbox only.
The FundsAvailable indicator shows whether funds are available on the customer account for the payment initiated. The availability of the balance is determined immediately after signing by the customer.
If:
- Funds Available = True, at the time of signing, the available balance is found sufficient.
- Funds Available = False, the available balance is not sufficient. You can choose to wait 3 days for the balance to increase or delete the relevant payment using the Delete Payments call. If the account has consistently insufficient funds the payment may get cancelled.
- Funds Available = Anomaly, a different process has been followed, as a result of which the funds available check could not be performed and further processing of the payment is not guaranteed. Please contact Rabobank, if this occurs (frequently).
DELETE Payment for PSD2 Payment Initiation Single Payments
You can cancel the payment created with the Payment Initiation API by using a DELETE payment request.
Some scenarios, as mentioned below, require specific paymentId(s) in the URL, example: (DELETE v1/payments/sepa-credit-transfers/{paymentId}
) to get the mentioned responses.
Below you can find all supported test scenarios. The payment IDs are available among all the supported payment services and products.
Status Code | Payment ID | Remark |
---|---|---|
202 Accepted | 123e4567-e89b-42d3-a456-600000000002 | The URLs returned by test scenario are not valid |
204 No Content | 123e4567-e89b-42d3-a456-600000000001 | The payment is cancelled, no further process needed |
405 Method Not Allowed | 123e4567-e89b-42d3-a456-600000000003 | The payment is already cancelled |
Note: These codes are for Sandbox only.
Expected response statuses with description
Status | Full name | Description |
---|---|---|
ACCC | AcceptedSettlementCompleted | This status is only applicable for instant payments. Settlement on the creditor's account has been completed. |
ACSC | AcceptedSettlementCompleted | Settlement on the debtor's account has been completed. The status ACSC is also applicable when:
|
ACSP | AcceptedSettlementInProcess | All preceding checks such as technical validation and customer profile were successful. The payment initiation was successfully signed. The payment initiation has been accepted for execution, but before settlement in the debtor’s account. Note: It is not guaranteed that the payment will be successfully executed after this status. There are a number of reasons that may lead to its rejection. |
ACTC | AcceptedTechnicalValidation | Authentication and syntactical and semantical validation (Technical validation) are successful. Payment is not signed yet. |
RCVD | Received | Payment initiation has been received by the receiving agent. Technical validation has started. |
PDNG | Pending | Payment initiation or individual transaction included in the payment initiation is pending and in progress for signing. Further checks (and status update) are performed, the payment can still be Rejected or Cancelled if one of the following scenarios occur:
*ACTC - AcceptedTechnicalValidation, RJCT - Rejected, CANC - Cancelled |
RJCT | Rejected | Payment initiation or individual transaction included in the payment initiation has been rejected. |
CANC | Cancelled | Payment initiation has been cancelled before execution. This status is only applicable for future dated payments that have been successfully cancelled. |