API Reference

Payment Request

The Payment Request API allows you or your customer to request payment links from Rabobank using your application. With this integration, you can create the payment links as a part of your billing process or the billing process of your customer.

Rabobank business customers can send payment links directly using your software.

To know more read the manual that connects to your use case:

Relevant scope(s) for oauth2 access code flow

Scope nameDescription
prs.paymentrequest.read-writeConsent for payment request
📘

Make sure that you use the Authorization and Token URL as provided by the Authorization Services.

Rate Limiting

A default rate limit plan is set for all APIs. The rate limit can be shared or defined per operation. The table below describes the rate limiting for this product.

OperationTypeLimit (API calls / s)Counts towards shared limit
GET /payment-requestsShared5Yes
POST /payment-requestsShared5Yes
GET /payment-requests/accountsShared5Yes
GET /payment-requests/{id}/qr-codesShared5Yes
GET /payment-requests/{id}Shared5Yes
DELETE /payment-requests/{id}Shared5Yes
GET /payment-requests/{id}/transactions/{transactionId}Shared5Yes
All (premium) Oauth callsShared5Yes

Characteristics of the business payment request

Rabobank customers can create payment requests for business accounts using the API.

Business
Maximum amount€ 5,000
Variable amountOptional
Link can be usedOnce
Link expires after100 days
Add a client referenceOptional
Indicate the number of payersNot supported (always 1)
More information (in Dutch)Business Payment Request

Payment request API user flow:

  1. Request a payment link using the Payment request API.

  2. Share the requested payment link or qr-code through email, text, WhatsApp, or social media.

    📘

    You can also choose to delete a payment request, which renders it unpayable.

  3. The receiver of the payment link pays directly using iDEAL.

    📘

    You can request the status of your Payment Request i.e. paid, unpaid or all.

  4. The amount is credited to your account immediately after payment.

redirectUrl

You can use redirectUrl field while creating a payment request to redirect your user to your webpage, where they can see the status of the transaction.

The redirectUrl field must contain a valid URL, and should be implemented by you (party initiating the transaction).

"redirectUrl": https://www.abc.nl/payment-request/redirect

If the payment is completed, canceled, or expired, the user is redirected to the URL as entered in the redirectUrl automatically. You use the id and trxid in the query parameters of the URL to fetch the transaction status and display it to the customer on their page.

https://www.abc.nl/payment-request/redirect?id=fe129503-4141-4f6e-967d-5bdb5b1fd630&trxid=b6248d63-0aad-4d68-9a4c-c925efeeb4a1
🚧
  • Passing a redirectUrl without having a valid page implemented lead to your user landing on an unknown page.
  • The id and trxid fields are automatically filled by us.

You can retrieve the payment request transaction status:

  • GET payment-requests/{id}/transactions/{transactionId}

Requests

The POST Payment-requests requests must contain a digital signature. You can generate a 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 retrieve a list of existing payment requests for the user with GET Payment-requests.

GET https://api-sandbox.rabobank.nl/openapi/sandbox/payments/payment-requests?offset=0&limit=25&completionStatus=ALL

You can receive a payment request link with POST Payment-requests.

POST https://api-sandbox.rabobank.nl/openapi/sandbox/payments/payment-requests
📘

You can let the payer fill in the amount by using the new optional parameter hasVariableAmount (default value = false):

  • If false, the amountCents field is required and must contain a value.
  • If true, the amountCents field is optional and can be null.

You can retrieve a list of accounts that the current user can create payment requests for with GET payment-requests/accounts.

GET https://api-sandbox.rabobank.nl/openapi/sandbox/payments/payment-requests/accounts

You can generate a QR Code for a specific payment request using GET payment-requests/{id}/qr-codes, using the id(s) in the URL.

GET https://api-sandbox.rabobank.nl/openapi/sandbox/payments/payment-requests/2f280203-fb0f-43db-ac3b-3211d3b98f22/qr-codes

You can retrieve an existing payment request by its UUID with GET Payment-requests/{id}, using the id(s) in the URL:

GET https://api-sandbox.rabobank.nl/openapi/sandbox/payments/payment-requests/fe129503-4141-4f6e-967d-5bdb5b1fd630

You can delete a specific payment request using DELETE payment-requests/{id}, using the id(s) in the URL:

DELETE https://api-sandbox.rabobank.nl/openapi/sandbox/payments/payment-requests/fe129503-4141-4f6e-967d-5bdb5b1fd630

Response

GET Payment-requests

To view the GET parameters, read the endpoint description for GET /payment-requests.

{
  "currentDateTime": "2023-09-26T11:14:59.738Z",
  "paymentRequests": [
    {
      "paymentRequest": {
        "id": "fe129503-4141-4f6e-967d-5bdb5b1fd630",
        "created": "2018-09-17T15:43:51.459Z",
        "accountIban": "NL19RABO0123456790",
        "accountName": "The Requester",
        "currency": "EUR",
        "amountCents": 10000,
        "hasVariableAmount": false,
        "numPayers": 1,
        "description": "Can you please pay me for the present",
        "accountSegment": "BUSINESS",
        "clientReference": "TEST ref",
        "transactions": [
          {
            "id": "800b42aa-9a8d-4e5e-a955-bda223e1e80f",
            "tsPaid": "2018-09-17T15:43:51.459Z",
            "accountIban": "NL63RABO0000000000",
            "accountName": "The Payer",
            "amountCents": 10000,
            "chosenAmountCents": 10000
          }
        ],
        "expired": false
      },
      "paymentPageUrl": "https://fake.nl/fakebetaalverzoek/?id=_hKVA0FBT26WfVvbWx_WMA"
    }
  ]
}

The following test scenarios are supported in Sandbox for this endpoint. Some scenarios, as mentioned below, require specific triggers values in the GET payment-requests parameters to receive the mentioned responses.

TriggerHTTP statusDescription
(default)200Happy flow for retrieving a list of payment requests
param limit = -2404No consent information specified
param limit = -1500Technical error

POST Payment-requests

To view the POST parameters, read the endpoint description for POST /payment-requests.

{
  "paymentPageUrl": "https://fake.nl/fakebetaalverzoek/?id=baVGVJPZRg2nNc8-WlLzSw",
  "assignedId": "fe129503-4141-4f6e-967d-5bdb5b1fd630"
}

The following test scenarios are supported in Sandbox for this endpoint. Some scenarios, as mentioned below, require specific triggers values in the Post payment-request parameters to receive the mentioned responses.

Use NL19RABO0123456790 for your Sandbox testing.

TriggerHTTP statusDescription
(default)201Happy flow for initiating a payment request
invalid request (e.g. amount = 0)400Validation error
invalid X-IBM-Client-Id401Unauthorized
field description = INVALID-CONSENT403No consent given for the given IBAN
field description = TECHNICAL-ERROR500Technical error
for missing header - TPP-Signature-Certificate403CERTIFICATE_VALIDATION_ERROR
for missing header - signature, date, digest or x-request-id. or Invalid signature.403SIGNATURE_VALIDATION_ERRO

GET Payment-requests/accounts

To view the GET parameters, read the endpoint description for GET /payment-requests/accounts.

[
  {
    "iban": "NL19RABO0123456789",
    "currency": "EUR",
    "segment": "BUSINESS"
  }
]

The following test scenarios are supported in Sandbox for this endpoint. Some scenarios, as mentioned below, require specific triggers values in the Get payment-requests parameters to receive the mentioned responses.

Trigger     HTTP sttusDescription                      
header x-scenario = TECHNICAL-ERROR            500       Technical error                            
header x-scenario = INVALID-CONSENT        404       No consent information specified           
(default)                   200       Happy flow for retrieving a list of accounts

GETPayment-requests/id/qr-codes

To view the GET parameters, read the endpoint description for GET /payment-requests/{id}/qr-codes.

The following test scenarios are supported in Sandbox for this endpoint. Some scenarios, as mentioned below, require specific id(s) in the URL, example (GET /payments/payment-requests/{id}/qr-codes) to get the mentioned responses.

TriggerHTTP StatusDescription
(default)204Happy flow for generating a QR code
param id = 11111111-1111-1111-1111-111111111111403No consent given for the payment request IBAN
param id = 00000000-0000-0000-0000-000000000000404Payment request could not be found
param id = 22222222-2222-2222-2222-222222222222500Technical error

GETPayment-requests/id

To view the GET parameters, read the endpoint description for GET /payment-requests/{id}.

{
  "currentDateTime": "2022-03-01T08:51:19.196Z",
  "paymentRequestWithMetadata": {
    "paymentRequest": {
      "id": "fe129503-4141-4f6e-967d-5bdb5b1fd630",
      "created": "2018-09-17T15:43:51.459Z",
      "accountIban": "NL19RABO123456790",
      "accountName": "The Requester",
      "currency": "EUR",
      "amountCents": 10000,
      "hasVariableAmount": false,
      "numPayers": 1,
      "description": "Can you please pay me for the present",
      "accountSegment": "BUSINESS",
      "clientReference": "TEST ref",
      "transactions": [
        {
          "id": "800b42aa-9a8d-4e5e-a955-bda223e1e80f",
          "tsPaid": "2018-09-17T15:43:51.459Z",
          "accountIban": "NL00RABO0000000000",
          "accountName": "The Payer",
          "amountCents": 10000,
          "chosenAmountCents": 10000
        }
      ],
      "expired": false
    },
    "paymentPageUrl": "https://fake.nl/fakebetaalverzoek/?id=_hKVA0FBT26WfVvbWx_WMA"
  }
}

The following test scenarios are supported in Sandbox for this endpoint. Some scenarios, as mentioned below, require specific triggers values in the GET payment-requests/{id} parameters to receive the mentioned responses.

TriggerHTTP StatusDescription
param id = fe129503-4141-4f6e-967d-5bdb5b1fd630200Happy flow for retrieving by ID
param id = 11400Bad Request, id should be of type UUID
param id = 11111111-1111-1111-1111-111111111111403No consent information specified
param id = 00000000-0000-0000-0000-000000000000404Payment Request Not found
param id = 22222222-2222-2222-2222-222222222222500Technical error

DELETEPayment-requests/id

To view the DELETE parameters, read the endpoint description for DELETE /payment-requests/{id}.

The following test scenarios are supported in Sandbox for this endpoint. Some scenarios, as mentioned below, require specific id(s) in the URL, example (GET/payments/payment-requests/{id}) to get the mentioned responses.

TriggerHTTP StatusDescription
(default)204Happy flow for deleting a payment request
param id = 11111111-1111-1111-1111-111111111111403No consent given for the payment request IBAN
param id = 00000000-0000-0000-0000-000000000000404Payment request to delete could not be found
param id = 22222222-2222-2222-2222-222222222222500Technical error