This page explains how to make a payout request to transfer funds to third-party bank accounts.
After you make the payout request, you can track the status of the transfer by listening to webhooks.
Requirements
Before you make a payout request:
- Ensure your API credential has the roles to use with the Transfers API.
- Ensure that your server receives and accepts webhooks.
- Contact our Support Team:
- To enable transfers for the source balance account.
- If you want to configure a default transfer description for your platform.
Initiate a payout
To send an on-demand payout, make a /transfers request, specifying the following parameters. Include all the required parameters to decrease the possibility of manual review and processing delays.
Parameter name | Required | Description |
---|---|---|
amount | ![]() |
The amount and the currency of the transfer. |
balanceAccountId | ![]() |
The balance account from which funds are deducted. |
category | ![]() |
Set to bank. |
counterparty.bankAccount | ![]() |
Contains details about the destination bank account and its owner. |
priority | ![]() |
The priority of the bank transfer, which affects the transfer speed and the fees you have to pay. |
priorities | ![]() Required if priority is not included. |
The list of priorities for the bank transfer. For more details see fallback priorities. |
description | Your description for the transfer request, which is used by most recipient banks. Check the character limit based on the location of the counterparty bank account and the priority. | |
reference | Your reference for the transfer. This is only used within your platform and not sent to the recipient. If you do not provide this in the request, Adyen generates a unique reference. | |
referenceForBeneficiary | Your reference for the transfer, which is also sent to the recipient. This reference is also sent in all webhooks related to the transfer, so you can use it to track statuses. | |
ultimateParty.address | The address of the bank account of the ultimate sender (ultimate debtor). To significantly decrease the possibility of manual review and processing delays, we highly recommend that you include this. |
|
type | Set to bankTransfer. |
In the counterparty.bankAccount object, include the following parameters:
Parameter in counterparty.bankAccount |
Required | Description |
---|---|---|
accountHolder.address | ![]() |
The address of the bank account that you pay out to. |
accountHolder.dateOfBirth | ![]() Required only if the owner is an individual. |
The date of birth of the owner of the bank account that you pay out to. |
accountHolder.fullName | ![]() |
The full name of the owner of the bank account that you pay out to. |
accountIdentification | ![]() |
Contains the bank account details. The fields that you include depends on the country of the bank account and the currency of the transfer. |
If the transfer request is successful, you receive an HTTP 202 Accepted response containing an id
of the transfer request.
Fallback priorities
Depending on the payout location, currency, and counterparty, a payout can be subject to additional requirements or limitations. These limitations may affect the transfer route for some priorities. To prevent problems with transfer routes, you can specify a list of priorities for your payout.
When you specify a list of priorities
, Adyen tries to transfer the funds using the first priority in the list. If a transfer route is not available for this priority, Adyen tries to transfer again, but using the next priority in the list.
The following code sample shows how to include a list of priorities
.
In this example, a transfer route for the priority
fast was not available, so Adyen transferred the funds using the priority
regular.
If the payout request is successful, you receive an HTTP 202 Accepted response containing the following:
- The
routingDetails
object, specifying why the first priority was not selected. - The selected
priority
.
Trigger additional reviews
To better control money movement in your , you can trigger additional reviews for payouts. Additional reviews require a member of your team to verify a payout before Adyen processes it.
You can trigger an additional review by including the review object in the POST /transfers request. In the object, specify the following parameter:
Parameter name | Required | Description | |
---|---|---|---|
review.numberOfApprovalsRequired | ![]() |
Specifies the number of approvals required to process the payout. Possible values: 1. Currently, it is possible to request only one additional review per payout. |
The following code sample shows how to include include the review
object.
If the payout request is successful, you receive an HTTP 202 Accepted response containing payout details, including the following parameters:
Parameter name | Description |
---|---|
review.numberOfApprovalsRequired | Shows the number of approvals required to process the payout. |
After triggering the review, a member of your team must approve the payout before Adyen continues processing it.
Process a payout in a future date
When you make a payout request, you can specify a future date when you want Adyen to process the payout. You can do this by including the executionDate object in the POST /transfers request.
If your payout request is successful, the payout remains in status
received with reason
pending until the execution date. On this date, between 00:00 and 03:00, Adyen verifies that:
- The source balance account has enough funds.
- The transfer was approved by a member of your team, if you triggered an additional review.
If all previous conditions are satisfied, Adyen processes the payout request.
Adyen attempts to process the payout only one time. In case of any errors, such as having insufficient funds in the balance account, the payout request ends with status
failed. If this happens, Adyen sends a webhook with details about the failure.
To specify a future execution date, specify the following parameters:
Parameter name | Required | Description |
---|---|---|
executionDate.date | ![]() |
The date when the payout will be processed. This date must:
|
executionDate.timezone | The timezone that applies to the execution date. Use a timezone identifier from the tz database. For example: America/Los_Angeles. Default value: Europe/Amsterdam. |
The following code sample shows how to include the executionDate object in a payout request.
If the payout request is successful, you receive an HTTP 202 Accepted response with the payout details and the executionDate object.
Before the execution date, you can cancel the payout by making a POST /transfers/cancel request.
Get updates on the status of the transfer
Track the transfer request through webhooks that Adyen sends to your server. The webhooks provide the status of the request, from the time when Adyen received the request and the transfer was authorised, up to when the transfer was booked and deducted from the balance account. Additionally, you can find the estimated arrival time of the funds.
You can also view the transfer in your Customer Area.
Test the payout flow
To test the payout flow, make a POST /transfers request.
The currency and priority of the transfer request must match the values shown in the following table.