Single Payments
Which request can I use to initiate a single payment?
To initiate a single payment you can send a request with a payload with the following structure to our payment gateway:
{
"reference": "reference within your platform",
"key": "your handshake key or nonce",
"description": "description on banking statement consumer",
"integration": {
"IsTest": false
},
"amount": {
"value": 10,
"currency": "EUR"
},
"paymentMethod": {
"name": "ideal",
"action": "pay",
"paymentType": "donation"
},
"debitor": {
"firstName": "Better",
"lastName": "World",
"addressLine1": "Barbara Strozzilaan 201",
"postalCode": "1083 HN",
"city": "Amsterdam",
"countryCode": "NL",
"emailAddress": "martijn.wilbrink@gmail.com",
"bankAccount": {
"iban": "NL01BW00000000001",
"accountHolder": "Better World"
}
},
"notification": {
"callbackUrl": "https://yourcallbackurl.nl",
"successUrl": "https://yoursuccessurl.nl ",
"failedUrl": "https://yourfailedurl.nl",
"cancelledUrl": "https://yourscancelledurl.nl",
"expiredUrl": "https://yourexpiredurl.nl",
"rejectedUrl": "https://yoursrejectedurl.nl"
}
}
The main object in this request contains the basic information of the payment, like your reference and the description the payee will see on its bank statement.
The integration object indicates if it is a production payment or a test payment. Test payments will be rerouted to a page where you can select the desired status and will not be processed though the payment method.
The amount object contains the amount and the currency of the transaction. Currently we only process transactions in Euros.
In the paymentMethod object you can use the following methods for single payments:
- ideal
- creditcard
- paypal
- bancontact
The paymentType is being used in case of the use of integrations, like Exact Online, with our payment gateway. These kind of integrations use the values ‘donation’ and ‘membership’. When you are not using an integration, you can also use this field for your own value because it is also part of the push notification to your callbackUrl.
For a single payment the ‘debitor’ object is only necessary if you want to include customer information in an integration with your financial administration, CRM or fundraising platform.
The notification object contains the URL’s that will be used after completion of the transaction:
- The callBackUrl will be used to POST a notification to via the back channel after completion of the payment. This value overwrites the value of the CallbackUrl in the configuration of your channel.
- The other URLs will be used to redirect the payee to in the front channel. Only the successUrl and failedUrl are required. If the values of the cancelledUrl, expiredUrl and rejectedUrl are not set it will uses the value of the failedUrl.
Based on this request you will receive a response with the following structure:
{
"transactionId": "8c2b9750-29b6-4b5b-b58f-cf2aea070a71",
"dateTime": "2026-01-18T12:35:54",
"reference": "reference within your platform",
"key": "your handshake key",
"description": "description on banking statement consumer",
"integration": {
"IsTest": false
},
"amount": {
"value": 10,
"currency": "EUR"
},
"paymentMethod": {
"name": "ideal",
"action": "pay",
"paymentType": "donation",
"issuerResponse": {
"customerName": "Your Payee",
"customerIban": "NL01XXX00001",
"customerBic": "FNDS01",
"issuerName": "Better World Payments",
"issuerOrderid": "###############",
"issuerTransactionid": "###############",
"consumerEmail": "payments@betterworld",
"consumerCountry": "NL",
"customerFirstname": "FirstName",
"customerLastname": "LastName",
"customerAddress": "Barbara Strozzilaan 201",
"customerZipcode": "1083 HN",
"customerCity": "Amsterdam",
"customerRegion": "NH",
"customerCardnumber": "1234-****-****-4567",
"customerCardexportation": "01-2023"
}
},
"debitor": {
"debitorId": "DEBITOR-07f8-41a6-875f-af813cce8a19",
"firstName": "Better",
"lastName": "World",
"addressLine1": "Barbara Strozzilaan 201",
"postalCode": "1083 HN",
"city": "Amsterdam",
"countryCode": "NL",
"languageCode": "nl",
"emailAddress": "merchant@example.nl",
"bankAccount": {
"bankaccountId": "BANK-07f8-41a6-875f-af813cce8a19",
"iban": "NL00BANK0000000001",
"accountHolder": "J. Jansen"
},
"notification": {
"authorizationUrl": "https://payments.betterworld.nl/p/redirect/authorization/8c2b9750-29b6-4b5b-b58f-cf2aea070a71",
"callbackUrl": "https://yourcallbackurl.nl",
"successUrl": "https://yoursuccessurl.nl ",
"failedUrl": "https://yourfailedurl.nl",
"cancelledUrl": "https://yourscancelledurl.nl",
"expiredUrl": "https://yourexpiredurl.nl",
"rejectedUrl": "https://yoursrejectedurl.nl"
},
"status": {
"value": 700,
"description": "Transaction Pending",
"subStatus": {
"code": "P701",
"description": "An additional action is required: RedirectToIdeal"
}
}
}
}
The main object is now expanded with our UUID for the transaction and the DateTime of the creation of the payment.
The issuerResponse in the paymentMethod object contains the information of the payee we received from the payment method.
The notification object now also contains an authorizationUrl. You need to redirect the payee to this URL for further authorization of the transaction.
The status object contains the current status and substatus of the transaction.
For more information about this request and involved fields, please also check our API-Reference