PSD2 Single Payment Initiation

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.

OperationTypeLimit (API calls / s)Counts towards shared limit
POST /v1/payments/sepa-credit-transfersIndividual5No
GET /v1/payments/sepa-credit-transfers/{paymentId}Individual10No
GET /v1/payments/sepa-credit-transfers/{paymentId}/statusIndividual10No
POST /v1/payments/cross-border-credit-transfersIndividual5No
GET /v1/payments/cross-border-credit-transfers/{paymentId}Individual10No
GET /v1/payments/cross-border-credit-transfers/{paymentId}/statusIndividual10No
POST /v1/periodic-payments/sepa-credit-transfersIndividual5No
GET /v1/periodic-payments/sepa-credit-transfers/{paymentId}Individual10No
GET /v1/periodic-payments/sepa-credit-transfers/{paymentId}/statusIndividual10No
POST /v1/periodic-payments/cross-border-credit-transfersIndividual5No
GET /v1/periodic-payments/cross-border-credit-transfers/{paymentId}Individual10No
GET /v1/periodic-payments/cross-border-credit-transfer/{paymentId}/statusIndividual10No
DELETE /v1/{paymentService}/{paymentProduct}/{paymentId}Individual5No
All (premium) Oauth callsShared5Yes

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 CodeMessageDebtor NameCurrencyAmountCreditor NameDebtor IBANDebtor CurrencyCreditor IBANCreditor CurrencyCategorySubcategoryEndToEnd IDNotes
201 CreatedabcdeEUR10.25someOneNL65INGB0316260304EURNL83RABO0305224387EURSCORCUR1515140706132013
400 Bad RequestabcdeEUR10.25someOneEUREURSCORCUR1515140706132013Send a transfer with one of the fields empty (e.g., IBAN)
400 Bad RequestpaymentFailedPayment failed response
401 UnauthorisedCERTIFICATE_INVALIDUse invalid for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_INVALIDUse invalidRole for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_EXPIREDUse expired for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_BLOCKEDUse blocked for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_REVOKEDUse revoked for header: TPP-Signature-Certificate
404 Not FoundChange the URL to payments/sepa-credit-transfers
405 Method Not AllowedUse POST instead of GET
503 Service UnavailableserviceUnavailableAdd 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 valueMonthly    

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 CodeTypeIDCurrencyAmountDebtor AccountDebtor CurrencyCreditor AccountCreditor CurrencyCreditor TypeCreditor NameStart DateFrequency
200 OKSingle Sepa123e4567-e89b-42d3-a456-556642440005EUR10.25NL10RABO0123456789EURNL10RABO0912345678EURCompanyMason Stevens
200 OKSingle CB IBANc709c408-eb8e-40a5-83d9-05b78cc51b41USD10.25NL10RABO0123456789EURNL10RABO0912345678EURCompanyIna Copeland
200 OKSingle CB BBAN6509c408-eb8e-40a5-83d9-05b78cc51009USD10.2502100002112345678901234567EURNL10RABO0912345678EURCompanyIna Copeland
200 OKPeriodic Sepa4982e122-57e1-4f3f-b39a-43b50dc734b5EUR10.25NL10RABO0123456789EURNL10RABO0912345678EURCompanyAllen Dawson2018-10-22Daily
200 OKPeriodic CB IBAN1f22d0e0-a4d5-459f-992e-1ccb4bcbc70eGBP10.25GB60BARC48291709876543GBPNL10RABO0123456789EURCompanyLogan Bowen2018-10-22Quarterly
200 OKPeriodic CB BBAN4522d0e0-a4d5-459f-992e-1ccb4bcbc654GBP10.2548291709876543GBPNL10RABO0123456789EURCompanyLogan Bowen2018-10-22Quarterly
400 Bad Request123e4567-e89b-42d3-a456-556642440006
404 Not Found123e4567-e89b-42d3-a456-556642440007
503 Service Unavailable123e4567-e89b-42d3-a456-556642440003
503 Service Unavailable123e4567-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 CodeResponse StatusPayment IDFunds AvailableRemark
200 OKACTC123e4567-e89b-42d3-a456-556642440005N/A
200 OKPDNG123e4567-e89b-42d3-a456-556642440006N/A
200 OKACSP123e4567-e89b-42d3-a456-556642440007true
200 OKRJCT123e4567-e89b-42d3-a456-556642440008N/A
200 OKACSC123e4567-e89b-42d3-a456-556642440009true
200 OKACCC123e4567-e89b-42d3-a456-556642440011true
200 OKCANC123e4567-e89b-42d3-a456-556642440014N/A
200 OKACSP123e4567-e89b-42d3-a456-556642440018false
400 Bad Request123e4567-e89b-42d3-a456-556642440004Header: X-Request-ID is not UUID.
401 UnauthorisedCERTIFICATE_INVALIDUse invalid for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_INVALIDUse invalidRole for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_EXPIREDUse expired for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_BLOCKEDUse blocked for header: TPP-Signature-Certificate
401 UnauthorisedCERTIFICATE_REVOKEDUse revoked for header: TPP-Signature-Certificate
403 Forbidden123e4567-e89b-42d3-a456-556642440002Forced status failed, expired resource.
404 Not Found123e4567-e89b-42d3-a456-556642440001Forced status not found.
405 Method Not AllowedUse POST instead of GET
503 Service Unavailable123e4567-e89b-42d3-a456-556642440003Forced 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 CodePayment IDRemark
202 Accepted123e4567-e89b-42d3-a456-600000000002The URLs returned by test scenario are not valid
204 No Content123e4567-e89b-42d3-a456-600000000001The payment is cancelled, no further process needed
405 Method Not Allowed123e4567-e89b-42d3-a456-600000000003The 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:

  • When a recurring payment has passed the end date.
  • When a recurring payment has been withdrawn.

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:

  • PSU cancels the payment at login page > ACTC → The payment is not signed within 30 minutes → RJCT
  • PSU closes the web browser at login page > ACTC > The payment is not signed within 30 minutes > RJCT
  • PSU logs in > PDNG > PSU cancels the payment at Overview page > CANC
  • PSU logs in > PDNG > PSU closes web browser at Overview page > PDNG > The payment is not signed within 30 minutes > RJCT

*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.