When your user has an Adyen business bank account, they can:
- Receive business-related payments to their Adyen business bank account.
- Send business-related fund transfers or payments to third-party bank accounts. For example, they can pay out their suppliers from their Adyen business bank account.
Receiving funds
The sender can send the funds to the Adyen business bank account number. This account number is returned in the API response when you created the business bank account number.
Your users must have the receiveFromThirdParty capability allowed and enabled before they can receive funds to their Adyen business bank account.
When Adyen receives funds, Adyen informs your server through a webhook.
Sending funds
Your user can send funds from their Adyen business bank account to external third-party bank accounts and their business bank account number will be shown in the bank statement of the recipient.
Your users must have the sendToThirdParty capability allowed and enabled before they can send funds from their Adyen business bank account to third-party accounts.
Third-party accounts are accounts not owned by your user and therefore not connected to their legal entity as a transfer instrument. Currently, Adyen only supports sending funds to third-party bank accounts. In the future, you will be able to send to third-party wallets and cards.
Before your user can send funds to third parties, reach out to your Adyen contact to:
- Add an additional role for your API credential.
- Enable transfers for the source balance account.
Send funds to third parties
When sending funds to third-party bank accounts, the required bank account details depend on the bank identification type. There are also additional required fields if you're doing a cross-border transfer. Additionally, you can validate the third-party bank account before sending funds to avoid failed transfers due to incorrect details.
To start a transfer, make a POST /transfers request specifying:
Parameter name | Required | Description |
---|---|---|
balanceAccountId | ![]() |
The ID of the balance account from which funds are deducted. |
category | ![]() |
Set to bank. |
bankAccount | ![]() |
Contains details about the bank account and its owner.
|
priority | ![]() |
The priority of the bank transfer, which affects the speed of the transfer and the fees you have to pay. |
description | Your description for the transfer. See here for allowed characters. | |
reference | Your reference for the transfer. This is only used within your platform and not sent to the recipient. If you don't provide this in the request, Adyen generates a unique reference. | |
referenceForBeneficiary | Your reference for the transfer that Adyen sends to the recipient. |
Select a tab below for examples.
Here is an example of a local funds transfer of EUR funds to an IBAN bank account. When providing the details of the bank account, set the accountIdentification.type
to iban.
For possible values for local transfers, see Bank account identification types.
curl https://balanceplatform-api-test.adyen.com/btl/v3/transfers \
-H "content-type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-X POST \
-d '{
"amount": {
"currency": "EUR",
"value": 150000
},
"category": "bank",
"priority": "regular",
"balanceAccountId": "BA00000000000000000000001",
"counterparty": {
"bankAccount": {
"accountHolder": {
"fullName": "A. Klaassen"
},
"accountIdentification": {
"type": "iban",
"iban": "NL91ABNA0417164300"
}
}
},
"referenceForBeneficiary": "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY",
"reference": "YOUR_INTERNAL_REFERENCE",
"description": "YOUR_DESCRIPTION"
}'
If the transfer request is successful, you receive an HTTP 200 OK response containing an id
of the transfer request. Adyen informs your server of the status of the transfer through webhooks.
Transfers priority
To specify how fast the funds must be sent, you can set a priority in the transfer request. A transfer with a higher priority incurs higher fees. The priorities available for bank transfers are:
- Regular: For normal, low-value transactions.
- Instant: Instant way to transfer funds in Single Euro Payments Area (SEPA) countries. Has higher fees than a regular payout.
- Fast: Faster than regular but has higher fees. Recommended for high-priority, low-value transactions.
- Wire: Fastest way but has the highest fees. Recommended for high-priority, high-value transactions.
- Cross-border: Recommended for high-value transactions to a recipient in a different country.
After requesting the transfer, find the estimated arrival time of the funds in the transfer webhooks.
Bank account identification types and supported priorities
When transferring funds to a third-party bank account, you need to provide the accountIdentification.type
in your API request. The type also determines the required bank account details.
- To determine the
accountIdentification.type
value, you must have:- The country of the recipient bank account.
- The currency of the funds you are transferring.
- Find the combination in the table below and select the
type
to see the required fields.
This combination also identifies if you are doing a local or cross-border transfer. Cross-border transfers must be sent as wire transfers, and you must include the address of the bank account owner.
The following table show the limits for the length and the characters you can use in the descriptions based on the country, currency and priority.
Europe
Country of counterparty | Currency | Supported priority | Transfer description limits | Type | |
---|---|---|---|---|---|
Single Euro Payments Area (SEPA) countries | EUR | regular, instant, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
iban | |
Czech Republic | CZK | regular | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
czLocal or iban | |
Denmark | DKK | regular, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
dkLocal or iban | |
Hungary | HUF | regular | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
huLocal or iban | |
Norway | NOK | regular, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
noLocal or iban | |
Poland | PLN | regular, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
plLocal or iban | |
Sweden | SEK | regular, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
seLocal or iban | |
Switzerland | CHF | regular, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
iban | |
United Kingdom | GBP | regular, fast, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
ukLocal or iban |
North America
Country of counterparty | Currency | Supported priority | Transfer description limits | Type | |
---|---|---|---|---|---|
Canada | CAD, USD | regular | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
caLocal or usLocal | |
United States | USD | regular, fast, wire | Allowed characters: Priority: regular and fast [a-z][A-Z][0-9]& $ % # @ ~ = + - _ ' " ! ? Priority:wire [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
usLocal |
Asia Pacific
Country of counterparty | Currency | Supported priority | Transfer description limits | Type | |
---|---|---|---|---|---|
Australia | AUD | regular, fast, wire | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9]/ - ? : ( ) . , ' + Space |
auLocal |
Cross-border
Country of counterparty | Currency | Supported priority | Transfer description limits | Type and other requirements |
---|---|---|---|---|
Countries where IBAN is required | Any | crossBorder | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9] . , – ( ) / = ' + : ? ! ” % & * < > ; Space |
- Type: iban - address of the bank account owner |
Countries where IBAN is optional (for example, Poland or Czech Republic) |
Any | crossBorder | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9] . , – ( ) / = ' + : ? ! ” % & * < > ; Space |
- Type: iban or numberAndBic - address of the bank account owner |
Other countries not listed above | Any | crossBorder | Maximum 140 characters. Allowed characters: [a-z][A-Z][0-9] . , – ( ) / = ' + : ? ! ” % & * < > ; Space |
- Type: numberAndBic - address of the bank account owner |
Bank account validation
Before sending funds to a third-party bank account, you can validate this bank account to avoid failed transfers due to incorrect details.
To validate a third-party bank account, make a POST /validateBankAccountIdentification
request specifying the following information, depending on the bank account identification type:
Parameter | Description |
---|---|
accountIdentification |
Object containing the details of the bank account to be validated. |
If the bank account details are valid, you'll get an HTTP 200 OK response. You can proceed with transferring funds to this account.
In case the bank account validation fails, you'll get the details in the response. Use this information to build your own logic for handling invalid bank account details.