Payment Requests
Payment requests represent instructions to transfer money between bank accounts. They can involve single or multiple transfers, and support various payment types and means.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /payment-requests | List payment requests |
| GET | /payment-requests/{id} | Get a specific payment request |
| POST | /payment-requests | Create a payment request |
Query Parameters
The GET /payment-requests endpoint supports the following query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | Yes | Filter by client account ID. Must be one of the user’s eligible client accounts |
| payment_status | string | No | One or more statuses, comma-separated (e.g. NEED_APPROVAL,SCHEDULED). See Payment Status Values for the possible values |
| page | integer | No | Page number for pagination (default: 1) |
| per_page | integer | No | Number of items per page (default: 100) |
| with | string | No | Comma-separated relations to include. transfers is required to get the transfers at all; nested paths expand further, e.g. transfers.debtor.bank_account |
Results are always ordered newest first (by id descending).
GET /payment-requests/{id} takes the same client_account_id and with
parameters. client_account_id is required there too — the request is looked up
within that client account, and a missing or inaccessible one answers 403.
Payment Request Attributes
| Attribute | Type | Description |
|---|---|---|
| id | integer | The unique identifier of the payment request |
| created_at | datetime | When the request was created |
| created_by_id | integer | The ID of the user who created the request |
| client_account_id | integer | The ID of the client account |
| payment_means | string | The means of payment |
| payment_status | string | The current status of the payment |
| rejection_code | string | Code indicating reason for rejection, if applicable |
| rejection_message | string | Detailed message about rejection, if applicable |
Payment Status Values
| Value | Description |
|---|---|
NONE |
No status set yet |
SUBMITTED |
Submitted to the payment provider |
NEED_APPROVAL |
Awaiting approval before it can be sent |
VALIDATED |
Validated and ready to be scheduled |
SCHEDULED |
Scheduled with the payment provider |
PARTIALLY_PAID |
Some but not all transfers have been paid |
CAPTURED |
Processed by the provider, awaiting payout |
COMPLETED |
Fully paid |
REJECTED |
Rejected by the payment provider |
CANCELLED |
Cancelled before completion |
Payment Transfer Attributes
Each payment request can include one or more transfers with the following attributes:
| Attribute | Type | Description |
|---|---|---|
| id | integer | The unique identifier of the transfer |
| created_at | datetime | When the transfer was created |
| created_by_id | integer | The ID of the user who created the transfer |
| requested_transfer_date | date | The requested date for the transfer |
| payment_type | string | The type of payment for this transfer: CREDIT_TRANSFER, SALARY, TAX, INTERCOMPANY, or MIXED (multiple types combined into one transfer) |
| payment_status | string | The current status of the transfer |
| rejection_code | string | Code indicating reason for rejection, if applicable |
| rejection_message | string | Detailed message about rejection, if applicable |
| booking_date | date | The date the transfer was booked |
| booking_reference | string | Reference number for the booking |
| amount | decimal | The transfer amount |
| currency_code | string | The currency code of the transfer |
| exchange_rate | decimal | The exchange rate used |
| creditor_reference | string | Reference for the creditor |
Relationships
Include these with the with query parameter. Nothing below is returned by
default — a payment request without with=transfers is just the eight
attributes above.
| Relationship | with value |
Type | Description |
|---|---|---|---|
| transfers | transfers |
[PaymentTransfer] | The transfers included in this payment request |
| transfers[].debtor.bank_account | transfers.debtor.bank_account |
BankAccount | The debtor’s bank account |
| transfers[].debtor.business_partner | transfers.debtor.business_partner |
BusinessPartner | The business partner owning the debtor bank account |
| transfers[].creditor.bank_account | transfers.creditor.bank_account |
BankAccount | The creditor’s bank account |
| transfers[].creditor.business_partner | transfers.creditor.business_partner |
BusinessPartner | The business partner owning the creditor bank account |
Once transfers is included, each transfer always carries debtor and
creditor objects with their bank_account_id/business_partner_id, plus the
reconciliation_entries and
account_entries arrays — those three
need no further with.
Example Response
Requested with
?with=transfers,transfers.debtor.bank_account,transfers.debtor.business_partner,transfers.creditor.bank_account,transfers.creditor.business_partner.
{
"id": 1,
"created_at": "2023-05-10T12:00:00+00:00",
"created_by_id": 1,
"client_account_id": 1,
"payment_means": "SEPA",
"payment_status": "SCHEDULED",
"rejection_code": null,
"rejection_message": null,
"transfers": [
{
"id": 1,
"created_at": "2023-05-10T12:00:00+00:00",
"created_by_id": 1,
"requested_transfer_date": "2023-05-11",
"payment_type": "CREDIT_TRANSFER",
"payment_status": "SCHEDULED",
"rejection_code": null,
"rejection_message": null,
"booking_date": null,
"booking_reference": null,
"amount": 1000.0,
"currency_code": "EUR",
"exchange_rate": 1.0,
"creditor_reference": "INV123",
"debtor": {
"bank_account_id": 1,
"business_partner_id": 1,
"bank_account": {
"id": 1,
"account_number": "DE89370400440532013000"
},
"business_partner": {
"id": 1,
"name": "ACME Corp"
}
},
"creditor": {
"bank_account_id": 2,
"business_partner_id": 2,
"bank_account": {
"id": 2,
"account_number": "FR7630006000011234567890189"
},
"business_partner": {
"id": 2,
"name": "Supplier Inc"
}
},
"reconciliation_entries": [],
"account_entries": []
}
]
}
Notes
- The client_account_id must be one of the eligible client accounts for the authenticated user.
- When creating a payment request, the created_by_id is automatically set to the authenticated user’s ID.
POST /payment-requestsreads onlyclient_account_id,payment_means,payment_typeandtransfersfrom the body. Any other field is ignored rather than rejected.- The payment request will be processed according to the specified payment_type and payment_means.
payment_typeis accepted in the request body when creating a payment request, but it is not echoed back on the top-level payment request object — onlypayment_meansis returned there. Each transfer undertransfers[]does return its ownpayment_type, which is derived server-side from the transfer’s account entries and may differ from the value submitted in the request (e.g. it becomesMIXEDwhen a transfer combines multiple payment types).- Each transfer in the request can have its own status and rejection information.
- Bank account and business partner relations are expanded with the
withquery parameter (with=transfers.debtor.bank_account), notwith_relations. - Amounts are returned as JSON numbers, not strings. Send them as numbers or as decimal strings; both are accepted on write.
- Dates are ISO 8601 (
YYYY-MM-DD); timestamps are ISO 8601 with a UTC offset (2023-05-10T12:00:00+00:00).