--- title: "Make a payout to a third-party bank account" description: "Make an API request to pay out funds to a third-party bank account." url: "https://docs.adyen.com/payouts/payout-service/pay-out-to-bank-accounts/bank-payout-request" source_url: "https://docs.adyen.com/payouts/payout-service/pay-out-to-bank-accounts/bank-payout-request.md" canonical: "https://docs.adyen.com/payouts/payout-service/pay-out-to-bank-accounts/bank-payout-request" last_modified: "2023-11-30T12:07:00+01:00" language: "en" --- # Make a payout to a third-party bank account Make an API request to pay out funds to a third-party bank account. [View source](/payouts/payout-service/pay-out-to-bank-accounts/bank-payout-request.md) This page explains how to [make a payout request](#make-payout-request) to transfer funds to third-party bank accounts. After you make the payout request, you can [track the status of the transfer](#get-updates) by listening to webhooks. ## Requirements Before you begin, take into account the following requirements and preparations. | Requirement | Description | | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **[API credentials](/payouts/payout-service/manage-access/webservice-roles?tab=transfers_2)** | Ensure your API credential has the required [roles](/payouts/payout-service/manage-access/webservice-roles?tab=transfers_2) to use with the [Transfers API](https://docs.adyen.com/api-explorer/transfers/latest/overview). | | **[Webhooks](/development-resources/webhooks/configure-and-manage)** | Your server must be able to receive and accept webhooks. | | **Setup steps** | Before you begin:- Contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to enable transfers for the source balance account. - Optionally configure a [default transfer description](/payouts/payout-service/pay-out-to-bank-accounts#transfer-statement-description) for your platform. | ## Initiate a payout To send an on-demand payout: 1. Make a POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request, specifying the following parameters. Include all the required parameters to decrease the possibility of [manual review and processing delays](/payouts/payout-service/pay-out-to-bank-accounts/payout-webhooks#payout-pending). | Parameter name | Required | Description | | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [amount](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-amount) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The amount and the currency of the transfer. | | [balanceAccountId](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-balanceAccountId) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The balance account from which funds are deducted. | | [category](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-category) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **bank**. | | [counterparty.bankAccount](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-bankAccount) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Contains details about the destination bank account and its owner. | | [priority](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-priority) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The [priority of the bank transfer](/payouts/payout-service/pay-out-to-bank-accounts#transfer-priority), which affects the transfer speed and the fees you pay. | | [priorities](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-priorities) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Required if `priority` is not included. | The list of priorities for the bank transfer. | | [description](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-description) | | Your description for the transfer request. | | [reference](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-reference) | | Your internal reference for the transfer. | | [referenceForBeneficiary](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-referenceForBeneficiary) | | The reference sent to the recipient and included in all related webhooks. | | [ultimateParty.address](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-ultimateParty-address) | | The address of the ultimate sender (ultimate debtor). Highly recommended to reduce review delays. | | [type](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-type) | | Set to **bankTransfer**. | 2. In the `counterparty.bankAccount` object, include the following parameters: | Parameter name | Required | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | | [accountHolder.address](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-bankAccount-accountHolder-address) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The address of the bank account you pay out to. | | [accountHolder.dateOfBirth](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-bankAccount-accountHolder-dateOfBirth) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Required for individuals. | The owner's date of birth. | | [accountHolder.fullName](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-bankAccount-accountHolder-fullName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The full name of the owner of the bank account. | | [accountHolder.reference](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-bankAccount-accountHolder-reference) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The full name of the owner of the bank account. | | [accountIdentification](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-bankAccount-accountIdentification) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Bank account details. Fields depend on country and currency. | You can make a transfer request for a one-off payout or a payout with a token. ### Tab: One-off payout **Transfer request for a one-off payout** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/btl/v4/transfers \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "amount": { "currency": "EUR", "value": 10000 }, "counterparty": { "bankAccount": { "accountHolder": { "fullName": "Adyen N.V.", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1011DJ", "stateOrProvince": "NH", "line1": "Simon Carmiggeltstraat 6-50" } }, "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" } } }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "priority": "instant", "reference": "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", "referenceForBeneficiary": "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER" }' ``` #### Java ```java // Adyen Java API Library v40.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.transfers.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.transfers.*; Client client = new Client("ADYEN_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Create the request object(s) Address address3 = new Address() .country("NL") .stateOrProvince("NH") .city("Amsterdam") .postalCode("1011DJ") .line1("Simon Carmiggeltstraat 6-50"); PartyIdentification partyIdentification3 = new PartyIdentification() .address(address3) .fullName("Adyen N.V."); IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification() .iban("NL33ADYX1000001544") .type(IbanAccountIdentification.TypeEnum.IBAN); BankAccountV3 bankAccountV33 = new BankAccountV3() .accountHolder(partyIdentification3) .accountIdentification(new TransferInfoAccountIdentification(ibanAccountIdentification)); Amount amount = new Amount() .currency("EUR") .value(10000L); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .bankAccount(bankAccountV33); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .reference("YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER") .amount(amount) .referenceForBeneficiary("YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY") .counterparty(counterpartyInfoV3) .description("YOUR_DESCRIPTION_FOR_THE_TRANSFER") .category(TransferInfo.CategoryEnum.BANK) .priority(TransferInfo.PriorityEnum.INSTANT); // Send the request TransfersApi service = new TransfersApi(client); Transfer response = service.transferFunds(transferInfo, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("ADYEN_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $address3 = new Address(); $address3 ->setCountry("NL") ->setStateOrProvince("NH") ->setCity("Amsterdam") ->setPostalCode("1011DJ") ->setLine1("Simon Carmiggeltstraat 6-50"); $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setAddress($address3) ->setFullName("Adyen N.V."); $transferInfoAccountIdentification = new TransferInfoAccountIdentification(); $transferInfoAccountIdentification ->setIban("NL33ADYX1000001544") ->setType("iban"); $bankAccountV33 = new BankAccountV3(); $bankAccountV33 ->setAccountHolder($partyIdentification3) ->setAccountIdentification($transferInfoAccountIdentification); $amount = new Amount(); $amount ->setCurrency("EUR") ->setValue(10000); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setBankAccount($bankAccountV33); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setReference("YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER") ->setAmount($amount) ->setReferenceForBeneficiary("YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY") ->setCounterparty($counterpartyInfoV3) ->setDescription("YOUR_DESCRIPTION_FOR_THE_TRANSFER") ->setCategory("bank") ->setPriority("instant"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v32.2.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Transfers; using Adyen.Service.Transfers; var config = new Config() { XApiKey = "ADYEN_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) Address address3 = new Address { Country = "NL", StateOrProvince = "NH", City = "Amsterdam", PostalCode = "1011DJ", Line1 = "Simon Carmiggeltstraat 6-50" }; PartyIdentification partyIdentification3 = new PartyIdentification { Address = address3, FullName = "Adyen N.V." }; IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification { Iban = "NL33ADYX1000001544", Type = IbanAccountIdentification.TypeEnum.Iban }; BankAccountV3 bankAccountV33 = new BankAccountV3 { AccountHolder = partyIdentification3, AccountIdentification = new TransferInfoAccountIdentification(ibanAccountIdentification) }; Amount amount = new Amount { Currency = "EUR", Value = 10000 }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { BankAccount = bankAccountV33 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Reference = "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", Amount = amount, ReferenceForBeneficiary = "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", Counterparty = counterpartyInfoV3, Description = "YOUR_DESCRIPTION_FOR_THE_TRANSFER", Category = TransferInfo.CategoryEnum.Bank, Priority = TransferInfo.PriorityEnum.Instant }; // Send the request var service = new TransfersService(client); var response = service.TransferFunds(transferInfo, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.1 const { Client, TransfersAPI } = require('@adyen/api-library'); const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const transferInfo = { amount: { currency: "EUR", value: 10000 }, counterparty: { bankAccount: { accountHolder: { fullName: "Adyen N.V.", address: { city: "Amsterdam", country: "NL", postalCode: "1011DJ", stateOrProvince: "NH", line1: "Simon Carmiggeltstraat 6-50" } }, accountIdentification: { type: "iban", iban: "NL33ADYX1000001544" } } }, balanceAccountId: "BA00000000000000000000001", category: "bank", priority: "instant", reference: "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", referenceForBeneficiary: "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", description: "YOUR_DESCRIPTION_FOR_THE_TRANSFER" } // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/transfers" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) address3 := transfers.Address{ Country: "NL", StateOrProvince: common.PtrString("NH"), City: common.PtrString("Amsterdam"), PostalCode: common.PtrString("1011DJ"), Line1: common.PtrString("Simon Carmiggeltstraat 6-50"), } partyIdentification3 := transfers.PartyIdentification{ Address: &address3, FullName: common.PtrString("Adyen N.V."), } ibanAccountIdentification := transfers.IbanAccountIdentification{ Iban: "NL33ADYX1000001544", Type: "iban", } bankAccountV33 := transfers.BankAccountV3{ AccountHolder: partyIdentification3, AccountIdentification: transfers.IbanAccountIdentificationAsTransferInfoAccountIdentification(&ibanAccountIdentification), } amount := transfers.Amount{ Currency: "EUR", Value: 10000, } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ BankAccount: &bankAccountV33, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Reference: common.PtrString("YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER"), Amount: amount, ReferenceForBeneficiary: common.PtrString("YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY"), Counterparty: counterpartyInfoV3, Description: common.PtrString("YOUR_DESCRIPTION_FOR_THE_TRANSFER"), Category: "bank", Priority: common.PtrString("instant"), } // Send the request service := client.Transfers() req := service.TransfersApi.TransferFundsInput().IdempotencyKey("UUID").TransferInfo(transferInfo) res, httpRes, err := service.TransfersApi.TransferFunds(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "amount": { "currency": "EUR", "value": 10000 }, "counterparty": { "bankAccount": { "accountHolder": { "fullName": "Adyen N.V.", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1011DJ", "stateOrProvince": "NH", "line1": "Simon Carmiggeltstraat 6-50" } }, "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" } } }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "priority": "instant", "reference": "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", "referenceForBeneficiary": "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER" } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :amount => { :currency => 'EUR', :value => 10000 }, :counterparty => { :bankAccount => { :accountHolder => { :fullName => 'Adyen N.V.', :address => { :city => 'Amsterdam', :country => 'NL', :postalCode => '1011DJ', :stateOrProvince => 'NH', :line1 => 'Simon Carmiggeltstraat 6-50' } }, :accountIdentification => { :type => 'iban', :iban => 'NL33ADYX1000001544' } } }, :balanceAccountId => 'BA00000000000000000000001', :category => 'bank', :priority => 'instant', :reference => 'YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER', :referenceForBeneficiary => 'YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY', :description => 'YOUR_DESCRIPTION_FOR_THE_TRANSFER' } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.1 import { Client, TransfersAPI, Types } from "@adyen/api-library"; const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const address3: Types.transfers.Address = { country: "NL", stateOrProvince: "NH", city: "Amsterdam", postalCode: "1011DJ", line1: "Simon Carmiggeltstraat 6-50" }; const partyIdentification3: Types.transfers.PartyIdentification = { address: address3, fullName: "Adyen N.V." }; const ibanAccountIdentification: Types.transfers.IbanAccountIdentification = { iban: "NL33ADYX1000001544", type: Types.transfers.IbanAccountIdentification.TypeEnum.Iban }; const bankAccountV33: Types.transfers.BankAccountV3 = { accountHolder: partyIdentification3, accountIdentification: ibanAccountIdentification }; const amount: Types.transfers.Amount = { currency: "EUR", value: 10000 }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { bankAccount: bankAccountV33 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", reference: "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", amount: amount, referenceForBeneficiary: "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", counterparty: counterpartyInfoV3, description: "YOUR_DESCRIPTION_FOR_THE_TRANSFER", category: Types.transfers.TransferInfo.CategoryEnum.Bank, priority: Types.transfers.TransferInfo.PriorityEnum.Instant }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` ### Tab: Payout using a token **Transfer request for a payout using a token** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/btl/v4/transfers \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "amount": { "value": 10000, "currency": "EUR" }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "counterparty": { "bankAccount": { "accountHolder": { "reference": "YOUR_shopperReference", "fullName": "Adyen", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1014KK", "line1": "Rokin 49" } }, "storedPaymentMethodId": "8315535507322518" } }, "reference": "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", "referenceForBeneficiary": "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER" }' ``` #### Java ```java // Adyen Java API Library v40.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.transfers.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.transfers.*; Client client = new Client("ADYEN_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Create the request object(s) Address address3 = new Address() .country("NL") .city("Amsterdam") .postalCode("1014KK") .line1("Rokin 49"); PartyIdentification partyIdentification3 = new PartyIdentification() .reference("YOUR_shopperReference") .address(address3) .fullName("Adyen"); BankAccountV3 bankAccountV33 = new BankAccountV3() .accountHolder(partyIdentification3) .storedPaymentMethodId("8315535507322518"); Amount amount = new Amount() .currency("EUR") .value(10000L); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .bankAccount(bankAccountV33); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .reference("YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER") .amount(amount) .referenceForBeneficiary("YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY") .counterparty(counterpartyInfoV3) .description("YOUR_DESCRIPTION_FOR_THE_TRANSFER") .category(TransferInfo.CategoryEnum.BANK); // Send the request TransfersApi service = new TransfersApi(client); Transfer response = service.transferFunds(transferInfo, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("ADYEN_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $address3 = new Address(); $address3 ->setCountry("NL") ->setCity("Amsterdam") ->setPostalCode("1014KK") ->setLine1("Rokin 49"); $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setReference("YOUR_shopperReference") ->setAddress($address3) ->setFullName("Adyen"); $bankAccountV33 = new BankAccountV3(); $bankAccountV33 ->setAccountHolder($partyIdentification3) ->setStoredPaymentMethodId("8315535507322518"); $amount = new Amount(); $amount ->setCurrency("EUR") ->setValue(10000); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setBankAccount($bankAccountV33); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setReference("YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER") ->setAmount($amount) ->setReferenceForBeneficiary("YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY") ->setCounterparty($counterpartyInfoV3) ->setDescription("YOUR_DESCRIPTION_FOR_THE_TRANSFER") ->setCategory("bank"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v32.2.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Transfers; using Adyen.Service.Transfers; var config = new Config() { XApiKey = "ADYEN_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) Address address3 = new Address { Country = "NL", City = "Amsterdam", PostalCode = "1014KK", Line1 = "Rokin 49" }; PartyIdentification partyIdentification3 = new PartyIdentification { Reference = "YOUR_shopperReference", Address = address3, FullName = "Adyen" }; BankAccountV3 bankAccountV33 = new BankAccountV3 { AccountHolder = partyIdentification3, StoredPaymentMethodId = "8315535507322518" }; Amount amount = new Amount { Currency = "EUR", Value = 10000 }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { BankAccount = bankAccountV33 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Reference = "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", Amount = amount, ReferenceForBeneficiary = "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", Counterparty = counterpartyInfoV3, Description = "YOUR_DESCRIPTION_FOR_THE_TRANSFER", Category = TransferInfo.CategoryEnum.Bank }; // Send the request var service = new TransfersService(client); var response = service.TransferFunds(transferInfo, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.1 const { Client, TransfersAPI } = require('@adyen/api-library'); const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const transferInfo = { amount: { value: 10000, currency: "EUR" }, balanceAccountId: "BA00000000000000000000001", category: "bank", counterparty: { bankAccount: { accountHolder: { reference: "YOUR_shopperReference", fullName: "Adyen", address: { city: "Amsterdam", country: "NL", postalCode: "1014KK", line1: "Rokin 49" } }, storedPaymentMethodId: "8315535507322518" } }, reference: "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", referenceForBeneficiary: "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", description: "YOUR_DESCRIPTION_FOR_THE_TRANSFER" } // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/transfers" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) address3 := transfers.Address{ Country: "NL", City: common.PtrString("Amsterdam"), PostalCode: common.PtrString("1014KK"), Line1: common.PtrString("Rokin 49"), } partyIdentification3 := transfers.PartyIdentification{ Reference: common.PtrString("YOUR_shopperReference"), Address: &address3, FullName: common.PtrString("Adyen"), } bankAccountV33 := transfers.BankAccountV3{ AccountHolder: partyIdentification3, StoredPaymentMethodId: common.PtrString("8315535507322518"), } amount := transfers.Amount{ Currency: "EUR", Value: 10000, } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ BankAccount: &bankAccountV33, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Reference: common.PtrString("YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER"), Amount: amount, ReferenceForBeneficiary: common.PtrString("YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY"), Counterparty: counterpartyInfoV3, Description: common.PtrString("YOUR_DESCRIPTION_FOR_THE_TRANSFER"), Category: "bank", } // Send the request service := client.Transfers() req := service.TransfersApi.TransferFundsInput().IdempotencyKey("UUID").TransferInfo(transferInfo) res, httpRes, err := service.TransfersApi.TransferFunds(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "amount": { "value": 10000, "currency": "EUR" }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "counterparty": { "bankAccount": { "accountHolder": { "reference": "YOUR_shopperReference", "fullName": "Adyen", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1014KK", "line1": "Rokin 49" } }, "storedPaymentMethodId": "8315535507322518" } }, "reference": "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", "referenceForBeneficiary": "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER" } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :amount => { :value => 10000, :currency => 'EUR' }, :balanceAccountId => 'BA00000000000000000000001', :category => 'bank', :counterparty => { :bankAccount => { :accountHolder => { :reference => 'YOUR_shopperReference', :fullName => 'Adyen', :address => { :city => 'Amsterdam', :country => 'NL', :postalCode => '1014KK', :line1 => 'Rokin 49' } }, :storedPaymentMethodId => '8315535507322518' } }, :reference => 'YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER', :referenceForBeneficiary => 'YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY', :description => 'YOUR_DESCRIPTION_FOR_THE_TRANSFER' } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.1 import { Client, TransfersAPI, Types } from "@adyen/api-library"; const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const address3: Types.transfers.Address = { country: "NL", city: "Amsterdam", postalCode: "1014KK", line1: "Rokin 49" }; const partyIdentification3: Types.transfers.PartyIdentification = { reference: "YOUR_shopperReference", address: address3, fullName: "Adyen" }; const bankAccountV33: Types.transfers.BankAccountV3 = { accountHolder: partyIdentification3, storedPaymentMethodId: "8315535507322518" }; const amount: Types.transfers.Amount = { currency: "EUR", value: 10000 }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { bankAccount: bankAccountV33 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", reference: "YOUR_INTERNAL_REFERENCE_FOR_THE_TRANSFER", amount: amount, referenceForBeneficiary: "YOUR_REFERENCE_SENT_TO_THE_BENEFICIARY", counterparty: counterpartyInfoV3, description: "YOUR_DESCRIPTION_FOR_THE_TRANSFER", category: Types.transfers.TransferInfo.CategoryEnum.Bank }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` If the transfer request is successful, you receive an **HTTP 2XX** response containing the `id` of the transfer request. ** ### Fallback priorities Depending on the payout location, currency, and counterparty, a payout may be subject to additional requirements or limitations. These limitations can affect the [transfer route](/payouts/payout-service/pay-out-to-bank-accounts/transfer-routes) for certain priorities. For example, while most banks can process **regular** transfers, some do not support **instant** transfers. To prevent transfer requests from being rejected because the counterparty bank is not reachable through the selected priority, you can specify a list of [priorities](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-priorities) for your payout. When you specify multiple priorities, Adyen first attempts the transfer using the first option in the list. If that route is unavailable, Adyen automatically retries the transfer using the next available priority. The following code sample shows how to include a list of `priorities`. **Payout request with multiple priorities** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/btl/v4/transfers \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "balanceAccountId": "BA00000000000000000000001", "counterparty": { "bankAccount": { "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" }, "accountHolder": { "fullName": "Adyen N.V." } } }, "amount": { "value": 100000, "currency": "EUR" }, "category": "bank", "priorities": [ "fast", "regular", "instant", "wire" ], "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER" }' ``` #### Java ```java // Adyen Java API Library v40.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.transfers.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.transfers.*; Client client = new Client("ADYEN_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Create the request object(s) PartyIdentification partyIdentification3 = new PartyIdentification() .fullName("Adyen N.V."); IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification() .iban("NL33ADYX1000001544") .type(IbanAccountIdentification.TypeEnum.IBAN); BankAccountV3 bankAccountV33 = new BankAccountV3() .accountHolder(partyIdentification3) .accountIdentification(new TransferInfoAccountIdentification(ibanAccountIdentification)); Amount amount = new Amount() .currency("EUR") .value(100000L); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .bankAccount(bankAccountV33); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .amount(amount) .priorities(Arrays.asList(Amount.PrioritiesEnum.FAST, Amount.PrioritiesEnum.REGULAR, Amount.PrioritiesEnum.INSTANT, Amount.PrioritiesEnum.WIRE)) .counterparty(counterpartyInfoV3) .description("YOUR_DESCRIPTION_FOR_THE_TRANSFER") .category(TransferInfo.CategoryEnum.BANK); // Send the request TransfersApi service = new TransfersApi(client); Transfer response = service.transferFunds(transferInfo, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("ADYEN_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setFullName("Adyen N.V."); $transferInfoAccountIdentification = new TransferInfoAccountIdentification(); $transferInfoAccountIdentification ->setIban("NL33ADYX1000001544") ->setType("iban"); $bankAccountV33 = new BankAccountV3(); $bankAccountV33 ->setAccountHolder($partyIdentification3) ->setAccountIdentification($transferInfoAccountIdentification); $amount = new Amount(); $amount ->setCurrency("EUR") ->setValue(100000); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setBankAccount($bankAccountV33); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setAmount($amount) ->setPriorities(array("fast", "regular", "instant", "wire")) ->setCounterparty($counterpartyInfoV3) ->setDescription("YOUR_DESCRIPTION_FOR_THE_TRANSFER") ->setCategory("bank"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v32.2.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Transfers; using Adyen.Service.Transfers; var config = new Config() { XApiKey = "ADYEN_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) PartyIdentification partyIdentification3 = new PartyIdentification { FullName = "Adyen N.V." }; IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification { Iban = "NL33ADYX1000001544", Type = IbanAccountIdentification.TypeEnum.Iban }; BankAccountV3 bankAccountV33 = new BankAccountV3 { AccountHolder = partyIdentification3, AccountIdentification = new TransferInfoAccountIdentification(ibanAccountIdentification) }; Amount amount = new Amount { Currency = "EUR", Value = 100000 }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { BankAccount = bankAccountV33 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Amount = amount, Priorities = { TransferInfo.PrioritiesEnum.Fast, TransferInfo.PrioritiesEnum.Regular, TransferInfo.PrioritiesEnum.Instant, TransferInfo.PrioritiesEnum.Wire }, Counterparty = counterpartyInfoV3, Description = "YOUR_DESCRIPTION_FOR_THE_TRANSFER", Category = TransferInfo.CategoryEnum.Bank }; // Send the request var service = new TransfersService(client); var response = service.TransferFunds(transferInfo, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.1 const { Client, TransfersAPI } = require('@adyen/api-library'); const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const transferInfo = { balanceAccountId: "BA00000000000000000000001", counterparty: { bankAccount: { accountIdentification: { type: "iban", iban: "NL33ADYX1000001544" }, accountHolder: { fullName: "Adyen N.V." } } }, amount: { value: 100000, currency: "EUR" }, category: "bank", priorities: [ "fast", "regular", "instant", "wire" ], description: "YOUR_DESCRIPTION_FOR_THE_TRANSFER" } // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/transfers" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) partyIdentification3 := transfers.PartyIdentification{ FullName: common.PtrString("Adyen N.V."), } ibanAccountIdentification := transfers.IbanAccountIdentification{ Iban: "NL33ADYX1000001544", Type: "iban", } bankAccountV33 := transfers.BankAccountV3{ AccountHolder: partyIdentification3, AccountIdentification: transfers.IbanAccountIdentificationAsTransferInfoAccountIdentification(&ibanAccountIdentification), } amount := transfers.Amount{ Currency: "EUR", Value: 100000, } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ BankAccount: &bankAccountV33, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Amount: amount, Priorities: []string{ "fast", "regular", "instant", "wire", }, Counterparty: counterpartyInfoV3, Description: common.PtrString("YOUR_DESCRIPTION_FOR_THE_TRANSFER"), Category: "bank", } // Send the request service := client.Transfers() req := service.TransfersApi.TransferFundsInput().IdempotencyKey("UUID").TransferInfo(transferInfo) res, httpRes, err := service.TransfersApi.TransferFunds(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "balanceAccountId": "BA00000000000000000000001", "counterparty": { "bankAccount": { "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" }, "accountHolder": { "fullName": "Adyen N.V." } } }, "amount": { "value": 100000, "currency": "EUR" }, "category": "bank", "priorities": [ "fast", "regular", "instant", "wire" ], "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER" } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :balanceAccountId => 'BA00000000000000000000001', :counterparty => { :bankAccount => { :accountIdentification => { :type => 'iban', :iban => 'NL33ADYX1000001544' }, :accountHolder => { :fullName => 'Adyen N.V.' } } }, :amount => { :value => 100000, :currency => 'EUR' }, :category => 'bank', :priorities => [ 'fast', 'regular', 'instant', 'wire' ], :description => 'YOUR_DESCRIPTION_FOR_THE_TRANSFER' } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.1 import { Client, TransfersAPI, Types } from "@adyen/api-library"; const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const partyIdentification3: Types.transfers.PartyIdentification = { fullName: "Adyen N.V." }; const ibanAccountIdentification: Types.transfers.IbanAccountIdentification = { iban: "NL33ADYX1000001544", type: Types.transfers.IbanAccountIdentification.TypeEnum.Iban }; const bankAccountV33: Types.transfers.BankAccountV3 = { accountHolder: partyIdentification3, accountIdentification: ibanAccountIdentification }; const amount: Types.transfers.Amount = { currency: "EUR", value: 100000 }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { bankAccount: bankAccountV33 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", amount: amount, priorities: [ Types.transfers.TransferInfo.PrioritiesEnum.Fast, Types.transfers.TransferInfo.PrioritiesEnum.Regular, Types.transfers.TransferInfo.PrioritiesEnum.Instant, Types.transfers.TransferInfo.PrioritiesEnum.Wire ], counterparty: counterpartyInfoV3, description: "YOUR_DESCRIPTION_FOR_THE_TRANSFER", category: Types.transfers.TransferInfo.CategoryEnum.Bank }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` 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 2XX** response containing the following: * The `routingDetails` object, specifying why the first priority was not selected. * The selected `priority`. **Response** ```json { "creationDate": "2024-07-30T11:34:30+02:00", "id": "4VXLOJ63SA8GCUWR", "accountHolder": { "description": "YOUR_DESCRIPTION_FOR_THE_ACCOUNT_HOLDER", "id": "AH00000000000000000000001" }, "amount": { "currency": "EUR", "value": 100000 }, "balanceAccount": { "description": "YOUR_DESCRIPTION_FOR_THE_BALANCE_ACCOUNT", "id": "BA00000000000000000000001" }, "category": "bank", "categoryData": { "priority": "regular", "routingDetails": [ { "detail": "No routes available for given counterparty, currency and priority.", "errorCode": "30_081", "priority": "fast", "title": "Invalid transfer information provided" }, { "detail": "Transfer was routed using this priority.", "priority": "regular" } ], "type": "bank" }, "counterparty": { "bankAccount": { "accountHolder": { "fullName": "Adyen N.V.", "type": "unknown" }, "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" } } }, "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER", "direction": "outgoing", "reason": "pending", "reference": "THE_INTERNAL_REFERENCE_FOR_THE_TRANSFER", "status": "received", "type": "bankTransfer" } ``` ** ### 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. 1. You can trigger an additional review by including the [review](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-review) object in the POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request. In the object, specify the following parameter: | Parameter name | Required | Description | | | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | | [review.numberOfApprovalsRequired](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-review-numberOfApprovalsRequired) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | 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 the `review` object. **Trigger an additional review** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/btl/v4/transfers \ -H 'x-api-key: YOUR_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "amount": { "value": 60000, "currency": "EUR" }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "counterparty": { "bankAccount": { "accountHolder": { "fullName": "Adyen N.V.", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1011DJ", "stateOrProvince": "NH", "line1": "Simon Carmiggeltstraat 6-50" } }, "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" } } }, "description": "Your-description-for-the-transfer", "priority": "fast", "reference": "YOUR_INTERNAL_REFERENCE", "referenceForBeneficiary": "Your-reference-for-the-beneficiary", "review": { "numberOfApprovalsRequired": 1 } }' ``` #### Java ```java // Adyen Java API Library v40.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.transfers.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.transfers.*; Client client = new Client("YOUR_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Create the request object(s) Address address3 = new Address() .country("NL") .stateOrProvince("NH") .city("Amsterdam") .postalCode("1011DJ") .line1("Simon Carmiggeltstraat 6-50"); PartyIdentification partyIdentification3 = new PartyIdentification() .address(address3) .fullName("Adyen N.V."); IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification() .iban("NL33ADYX1000001544") .type(IbanAccountIdentification.TypeEnum.IBAN); BankAccountV3 bankAccountV33 = new BankAccountV3() .accountHolder(partyIdentification3) .accountIdentification(new TransferInfoAccountIdentification(ibanAccountIdentification)); Amount amount = new Amount() .currency("EUR") .value(60000L); TransferRequestReview transferRequestReview = new TransferRequestReview() .numberOfApprovalsRequired(1); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .bankAccount(bankAccountV33); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .reference("YOUR_INTERNAL_REFERENCE") .amount(amount) .referenceForBeneficiary("Your-reference-for-the-beneficiary") .review(transferRequestReview) .counterparty(counterpartyInfoV3) .description("Your-description-for-the-transfer") .category(TransferInfo.CategoryEnum.BANK) .priority(TransferInfo.PriorityEnum.FAST); // Send the request TransfersApi service = new TransfersApi(client); Transfer response = service.transferFunds(transferInfo, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("YOUR_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $address3 = new Address(); $address3 ->setCountry("NL") ->setStateOrProvince("NH") ->setCity("Amsterdam") ->setPostalCode("1011DJ") ->setLine1("Simon Carmiggeltstraat 6-50"); $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setAddress($address3) ->setFullName("Adyen N.V."); $transferInfoAccountIdentification = new TransferInfoAccountIdentification(); $transferInfoAccountIdentification ->setIban("NL33ADYX1000001544") ->setType("iban"); $bankAccountV33 = new BankAccountV3(); $bankAccountV33 ->setAccountHolder($partyIdentification3) ->setAccountIdentification($transferInfoAccountIdentification); $amount = new Amount(); $amount ->setCurrency("EUR") ->setValue(60000); $transferRequestReview = new TransferRequestReview(); $transferRequestReview ->setNumberOfApprovalsRequired(1); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setBankAccount($bankAccountV33); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setReference("YOUR_INTERNAL_REFERENCE") ->setAmount($amount) ->setReferenceForBeneficiary("Your-reference-for-the-beneficiary") ->setReview($transferRequestReview) ->setCounterparty($counterpartyInfoV3) ->setDescription("Your-description-for-the-transfer") ->setCategory("bank") ->setPriority("fast"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v32.2.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Transfers; using Adyen.Service.Transfers; var config = new Config() { XApiKey = "YOUR_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) Address address3 = new Address { Country = "NL", StateOrProvince = "NH", City = "Amsterdam", PostalCode = "1011DJ", Line1 = "Simon Carmiggeltstraat 6-50" }; PartyIdentification partyIdentification3 = new PartyIdentification { Address = address3, FullName = "Adyen N.V." }; IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification { Iban = "NL33ADYX1000001544", Type = IbanAccountIdentification.TypeEnum.Iban }; BankAccountV3 bankAccountV33 = new BankAccountV3 { AccountHolder = partyIdentification3, AccountIdentification = new TransferInfoAccountIdentification(ibanAccountIdentification) }; Amount amount = new Amount { Currency = "EUR", Value = 60000 }; TransferRequestReview transferRequestReview = new TransferRequestReview { NumberOfApprovalsRequired = 1 }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { BankAccount = bankAccountV33 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Reference = "YOUR_INTERNAL_REFERENCE", Amount = amount, ReferenceForBeneficiary = "Your-reference-for-the-beneficiary", Review = transferRequestReview, Counterparty = counterpartyInfoV3, Description = "Your-description-for-the-transfer", Category = TransferInfo.CategoryEnum.Bank, Priority = TransferInfo.PriorityEnum.Fast }; // Send the request var service = new TransfersService(client); var response = service.TransferFunds(transferInfo, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.1 const { Client, TransfersAPI } = require('@adyen/api-library'); const config = new Config({ apiKey: "YOUR_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const transferInfo = { amount: { value: 60000, currency: "EUR" }, balanceAccountId: "BA00000000000000000000001", category: "bank", counterparty: { bankAccount: { accountHolder: { fullName: "Adyen N.V.", address: { city: "Amsterdam", country: "NL", postalCode: "1011DJ", stateOrProvince: "NH", line1: "Simon Carmiggeltstraat 6-50" } }, accountIdentification: { type: "iban", iban: "NL33ADYX1000001544" } } }, description: "Your-description-for-the-transfer", priority: "fast", reference: "YOUR_INTERNAL_REFERENCE", referenceForBeneficiary: "Your-reference-for-the-beneficiary", review: { numberOfApprovalsRequired: 1 } } // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/transfers" ) client := adyen.NewClient(&common.Config{ ApiKey: "YOUR_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) address3 := transfers.Address{ Country: "NL", StateOrProvince: common.PtrString("NH"), City: common.PtrString("Amsterdam"), PostalCode: common.PtrString("1011DJ"), Line1: common.PtrString("Simon Carmiggeltstraat 6-50"), } partyIdentification3 := transfers.PartyIdentification{ Address: &address3, FullName: common.PtrString("Adyen N.V."), } ibanAccountIdentification := transfers.IbanAccountIdentification{ Iban: "NL33ADYX1000001544", Type: "iban", } bankAccountV33 := transfers.BankAccountV3{ AccountHolder: partyIdentification3, AccountIdentification: transfers.IbanAccountIdentificationAsTransferInfoAccountIdentification(&ibanAccountIdentification), } amount := transfers.Amount{ Currency: "EUR", Value: 60000, } transferRequestReview := transfers.TransferRequestReview{ NumberOfApprovalsRequired: common.PtrInt32(1), } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ BankAccount: &bankAccountV33, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Reference: common.PtrString("YOUR_INTERNAL_REFERENCE"), Amount: amount, ReferenceForBeneficiary: common.PtrString("Your-reference-for-the-beneficiary"), Review: &transferRequestReview, Counterparty: counterpartyInfoV3, Description: common.PtrString("Your-description-for-the-transfer"), Category: "bank", Priority: common.PtrString("fast"), } // Send the request service := client.Transfers() req := service.TransfersApi.TransferFundsInput().IdempotencyKey("UUID").TransferInfo(transferInfo) res, httpRes, err := service.TransfersApi.TransferFunds(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "YOUR_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "amount": { "value": 60000, "currency": "EUR" }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "counterparty": { "bankAccount": { "accountHolder": { "fullName": "Adyen N.V.", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1011DJ", "stateOrProvince": "NH", "line1": "Simon Carmiggeltstraat 6-50" } }, "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" } } }, "description": "Your-description-for-the-transfer", "priority": "fast", "reference": "YOUR_INTERNAL_REFERENCE", "referenceForBeneficiary": "Your-reference-for-the-beneficiary", "review": { "numberOfApprovalsRequired": 1 } } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'YOUR_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :amount => { :value => 60000, :currency => 'EUR' }, :balanceAccountId => 'BA00000000000000000000001', :category => 'bank', :counterparty => { :bankAccount => { :accountHolder => { :fullName => 'Adyen N.V.', :address => { :city => 'Amsterdam', :country => 'NL', :postalCode => '1011DJ', :stateOrProvince => 'NH', :line1 => 'Simon Carmiggeltstraat 6-50' } }, :accountIdentification => { :type => 'iban', :iban => 'NL33ADYX1000001544' } } }, :description => 'Your-description-for-the-transfer', :priority => 'fast', :reference => 'YOUR_INTERNAL_REFERENCE', :referenceForBeneficiary => 'Your-reference-for-the-beneficiary', :review => { :numberOfApprovalsRequired => 1 } } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.1 import { Client, TransfersAPI, Types } from "@adyen/api-library"; const config = new Config({ apiKey: "YOUR_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const address3: Types.transfers.Address = { country: "NL", stateOrProvince: "NH", city: "Amsterdam", postalCode: "1011DJ", line1: "Simon Carmiggeltstraat 6-50" }; const partyIdentification3: Types.transfers.PartyIdentification = { address: address3, fullName: "Adyen N.V." }; const ibanAccountIdentification: Types.transfers.IbanAccountIdentification = { iban: "NL33ADYX1000001544", type: Types.transfers.IbanAccountIdentification.TypeEnum.Iban }; const bankAccountV33: Types.transfers.BankAccountV3 = { accountHolder: partyIdentification3, accountIdentification: ibanAccountIdentification }; const amount: Types.transfers.Amount = { currency: "EUR", value: 60000 }; const transferRequestReview: Types.transfers.TransferRequestReview = { numberOfApprovalsRequired: 1 }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { bankAccount: bankAccountV33 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", reference: "YOUR_INTERNAL_REFERENCE", amount: amount, referenceForBeneficiary: "Your-reference-for-the-beneficiary", review: transferRequestReview, counterparty: counterpartyInfoV3, description: "Your-description-for-the-transfer", category: Types.transfers.TransferInfo.CategoryEnum.Bank, priority: Types.transfers.TransferInfo.PriorityEnum.Fast }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` 2. If the payout request is successful, you receive an **HTTP 2XX** response containing payout details, including the following parameters: | Parameter name | Description | | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | | [review.numberOfApprovalsRequired](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#responses-202-review-numberOfApprovalsRequired) | Shows the number of approvals required to process the payout. | After triggering the review, a member of your team must [approve](/payouts/payout-service/pay-out-to-bank-accounts/approve-cancel-payouts) the payout before Adyen continues processing it. ** ### Process a payout in a future date 1. 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](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-executionDate) object in the POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request. If your payout request is successful, the payout remains in `status` **received** with `reason` **pending** until the execution date. On the execution date, between 00:00 and 03:00 - based on the time zone configured on the Balance Platform by default - 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](#get-status-updates) with details about the failure. To specify a future execution date, specify the following parameters: | Parameter name | Required | Description | | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [executionDate.date](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-executionDate-date) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The date when the payout will be processed. This date must:- Be within 30 days of the current date. - Be in the [ISO 8601 format](https://www.iso.org/iso-8601-date-and-time-format.html) **YYYY-MM-DD**. For example: 2025-01-31. | | [executionDate.timezone](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-executionDate-timezone) | | The timezone that applies to the execution date. Use a timezone identifier from the [tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). For example: **America/Los\_Angeles**. Default value: **Europe/Amsterdam**. | The following code sample shows how to include the [executionDate](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-executionDate) object in a payout request. **Specify an execution date in the future** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/btl/v4/transfers \ -H 'x-api-key: YOUR_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "amount": { "value": 80000, "currency": "EUR" }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "counterparty": { "bankAccount": { "accountHolder": { "fullName": "Adyen N.V.", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1011DJ", "stateOrProvince": "NH", "line1": "Simon Carmiggeltstraat 6-50" } }, "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" } } }, "executionDate": { "date": "2025-04-18", "timezone": "America/Los_Angeles" }, "priority": "regular", "referenceForBeneficiary": "Your-reference-sent-to-the-beneficiary", "reference": "Your internal reference for the transfer", "description": "Your description for the transfer" }' ``` #### Java ```java // Adyen Java API Library v40.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.transfers.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.transfers.*; Client client = new Client("YOUR_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Create the request object(s) Address address3 = new Address() .country("NL") .stateOrProvince("NH") .city("Amsterdam") .postalCode("1011DJ") .line1("Simon Carmiggeltstraat 6-50"); PartyIdentification partyIdentification3 = new PartyIdentification() .address(address3) .fullName("Adyen N.V."); IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification() .iban("NL33ADYX1000001544") .type(IbanAccountIdentification.TypeEnum.IBAN); BankAccountV3 bankAccountV33 = new BankAccountV3() .accountHolder(partyIdentification3) .accountIdentification(new TransferInfoAccountIdentification(ibanAccountIdentification)); Amount amount = new Amount() .currency("EUR") .value(80000L); ExecutionDate executionDate = new ExecutionDate() .timezone("America/Los_Angeles"); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .bankAccount(bankAccountV33); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .reference("Your internal reference for the transfer") .amount(amount) .referenceForBeneficiary("Your-reference-sent-to-the-beneficiary") .executionDate(executionDate) .counterparty(counterpartyInfoV3) .description("Your description for the transfer") .category(TransferInfo.CategoryEnum.BANK) .priority(TransferInfo.PriorityEnum.REGULAR); // Send the request TransfersApi service = new TransfersApi(client); Transfer response = service.transferFunds(transferInfo, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("YOUR_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $address3 = new Address(); $address3 ->setCountry("NL") ->setStateOrProvince("NH") ->setCity("Amsterdam") ->setPostalCode("1011DJ") ->setLine1("Simon Carmiggeltstraat 6-50"); $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setAddress($address3) ->setFullName("Adyen N.V."); $transferInfoAccountIdentification = new TransferInfoAccountIdentification(); $transferInfoAccountIdentification ->setIban("NL33ADYX1000001544") ->setType("iban"); $bankAccountV33 = new BankAccountV3(); $bankAccountV33 ->setAccountHolder($partyIdentification3) ->setAccountIdentification($transferInfoAccountIdentification); $amount = new Amount(); $amount ->setCurrency("EUR") ->setValue(80000); $executionDate = new ExecutionDate(); $executionDate ->setTimezone("America/Los_Angeles"); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setBankAccount($bankAccountV33); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setReference("Your internal reference for the transfer") ->setAmount($amount) ->setReferenceForBeneficiary("Your-reference-sent-to-the-beneficiary") ->setExecutionDate($executionDate) ->setCounterparty($counterpartyInfoV3) ->setDescription("Your description for the transfer") ->setCategory("bank") ->setPriority("regular"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v32.2.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Transfers; using Adyen.Service.Transfers; var config = new Config() { XApiKey = "YOUR_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) Address address3 = new Address { Country = "NL", StateOrProvince = "NH", City = "Amsterdam", PostalCode = "1011DJ", Line1 = "Simon Carmiggeltstraat 6-50" }; PartyIdentification partyIdentification3 = new PartyIdentification { Address = address3, FullName = "Adyen N.V." }; IbanAccountIdentification ibanAccountIdentification = new IbanAccountIdentification { Iban = "NL33ADYX1000001544", Type = IbanAccountIdentification.TypeEnum.Iban }; BankAccountV3 bankAccountV33 = new BankAccountV3 { AccountHolder = partyIdentification3, AccountIdentification = new TransferInfoAccountIdentification(ibanAccountIdentification) }; Amount amount = new Amount { Currency = "EUR", Value = 80000 }; ExecutionDate executionDate = new ExecutionDate { Timezone = "America/Los_Angeles" }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { BankAccount = bankAccountV33 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Reference = "Your internal reference for the transfer", Amount = amount, ReferenceForBeneficiary = "Your-reference-sent-to-the-beneficiary", ExecutionDate = executionDate, Counterparty = counterpartyInfoV3, Description = "Your description for the transfer", Category = TransferInfo.CategoryEnum.Bank, Priority = TransferInfo.PriorityEnum.Regular }; // Send the request var service = new TransfersService(client); var response = service.TransferFunds(transferInfo, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.1 const { Client, TransfersAPI } = require('@adyen/api-library'); const config = new Config({ apiKey: "YOUR_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const transferInfo = { amount: { value: 80000, currency: "EUR" }, balanceAccountId: "BA00000000000000000000001", category: "bank", counterparty: { bankAccount: { accountHolder: { fullName: "Adyen N.V.", address: { city: "Amsterdam", country: "NL", postalCode: "1011DJ", stateOrProvince: "NH", line1: "Simon Carmiggeltstraat 6-50" } }, accountIdentification: { type: "iban", iban: "NL33ADYX1000001544" } } }, executionDate: { date: new Date("2025-04-18"), timezone: "America/Los_Angeles" }, priority: "regular", referenceForBeneficiary: "Your-reference-sent-to-the-beneficiary", reference: "Your internal reference for the transfer", description: "Your description for the transfer" } // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/transfers" ) client := adyen.NewClient(&common.Config{ ApiKey: "YOUR_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) address3 := transfers.Address{ Country: "NL", StateOrProvince: common.PtrString("NH"), City: common.PtrString("Amsterdam"), PostalCode: common.PtrString("1011DJ"), Line1: common.PtrString("Simon Carmiggeltstraat 6-50"), } partyIdentification3 := transfers.PartyIdentification{ Address: &address3, FullName: common.PtrString("Adyen N.V."), } ibanAccountIdentification := transfers.IbanAccountIdentification{ Iban: "NL33ADYX1000001544", Type: "iban", } bankAccountV33 := transfers.BankAccountV3{ AccountHolder: partyIdentification3, AccountIdentification: transfers.IbanAccountIdentificationAsTransferInfoAccountIdentification(&ibanAccountIdentification), } amount := transfers.Amount{ Currency: "EUR", Value: 80000, } executionDate := transfers.ExecutionDate{ Timezone: common.PtrString("America/Los_Angeles"), } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ BankAccount: &bankAccountV33, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Reference: common.PtrString("Your internal reference for the transfer"), Amount: amount, ReferenceForBeneficiary: common.PtrString("Your-reference-sent-to-the-beneficiary"), ExecutionDate: &executionDate, Counterparty: counterpartyInfoV3, Description: common.PtrString("Your description for the transfer"), Category: "bank", Priority: common.PtrString("regular"), } // Send the request service := client.Transfers() req := service.TransfersApi.TransferFundsInput().IdempotencyKey("UUID").TransferInfo(transferInfo) res, httpRes, err := service.TransfersApi.TransferFunds(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "YOUR_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "amount": { "value": 80000, "currency": "EUR" }, "balanceAccountId": "BA00000000000000000000001", "category": "bank", "counterparty": { "bankAccount": { "accountHolder": { "fullName": "Adyen N.V.", "address": { "city": "Amsterdam", "country": "NL", "postalCode": "1011DJ", "stateOrProvince": "NH", "line1": "Simon Carmiggeltstraat 6-50" } }, "accountIdentification": { "type": "iban", "iban": "NL33ADYX1000001544" } } }, "executionDate": { "date": "2025-04-18", "timezone": "America/Los_Angeles" }, "priority": "regular", "referenceForBeneficiary": "Your-reference-sent-to-the-beneficiary", "reference": "Your internal reference for the transfer", "description": "Your description for the transfer" } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'YOUR_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :amount => { :value => 80000, :currency => 'EUR' }, :balanceAccountId => 'BA00000000000000000000001', :category => 'bank', :counterparty => { :bankAccount => { :accountHolder => { :fullName => 'Adyen N.V.', :address => { :city => 'Amsterdam', :country => 'NL', :postalCode => '1011DJ', :stateOrProvince => 'NH', :line1 => 'Simon Carmiggeltstraat 6-50' } }, :accountIdentification => { :type => 'iban', :iban => 'NL33ADYX1000001544' } } }, :executionDate => { :date => '2025-04-18', :timezone => 'America/Los_Angeles' }, :priority => 'regular', :referenceForBeneficiary => 'Your-reference-sent-to-the-beneficiary', :reference => 'Your internal reference for the transfer', :description => 'Your description for the transfer' } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.1 import { Client, TransfersAPI, Types } from "@adyen/api-library"; const config = new Config({ apiKey: "YOUR_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const address3: Types.transfers.Address = { country: "NL", stateOrProvince: "NH", city: "Amsterdam", postalCode: "1011DJ", line1: "Simon Carmiggeltstraat 6-50" }; const partyIdentification3: Types.transfers.PartyIdentification = { address: address3, fullName: "Adyen N.V." }; const ibanAccountIdentification: Types.transfers.IbanAccountIdentification = { iban: "NL33ADYX1000001544", type: Types.transfers.IbanAccountIdentification.TypeEnum.Iban }; const bankAccountV33: Types.transfers.BankAccountV3 = { accountHolder: partyIdentification3, accountIdentification: ibanAccountIdentification }; const amount: Types.transfers.Amount = { currency: "EUR", value: 80000 }; const executionDate: Types.transfers.ExecutionDate = { timezone: "America/Los_Angeles" }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { bankAccount: bankAccountV33 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", reference: "Your internal reference for the transfer", amount: amount, referenceForBeneficiary: "Your-reference-sent-to-the-beneficiary", executionDate: executionDate, counterparty: counterpartyInfoV3, description: "Your description for the transfer", category: Types.transfers.TransferInfo.CategoryEnum.Bank, priority: Types.transfers.TransferInfo.PriorityEnum.Regular }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` 2. If the payout request is successful, you receive an **HTTP 2XX** response with the payout details and the [executionDate](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#responses-200-executionDate) object. 3. Before the execution date, you can [cancel the payout](/payouts/payout-service/pay-out-to-bank-accounts/approve-cancel-payouts) by making a POST [/transfers/cancel](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers/cancel) request. ## Get updates on the status of the transfer Track the transfer request through [webhooks](/payouts/payout-service/pay-out-to-bank-accounts/payout-webhooks). The webhooks provide updates from when the request is received and authorized up to when the transfer is booked and deducted from the balance account. You can also find the [estimated arrival time of the funds](/payouts/payout-service/pay-out-to-bank-accounts/payout-webhooks#payout-tracking). You can also [view the transfer in your Customer Area](/payouts/payout-service/view-transfers-details). ## Test the payout flow To test the payout flow, make a POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request, where the currency and priority of the transfer request matches the values shown in the following tables. ### Tab: Successful flow To test a successful payout, use the following counterparty bank account details for the country/region. Only use these bank account details in your TEST environment. | Country/region | Counterparty bank account details | Currency | Priority | | -------------- | ------------------------------------------------------------------------ | -------- | -------- | | AU | Account #: 102201111, BSB #: 012951 | AUD | regular | | | Account #: 102201111, BSB #: 012951 | AUD | wire | | | Account #: 102201111, BSB #: 012951 | AUD | fast | | | Account #: 102201111, BSB #: 012951 | AUD | cashout | | CA | Account #: 10220001111, INST #: 004, TRN #: 00012 | CAD | regular | | | Account #: 10220001111, INST #: 004, TRN #: 00012 | CAD | wire | | DE | IBAN: DE14100100109876543210 | EUR | regular | | | IBAN: DE14100100109876543210 | EUR | instant | | | IBAN: DE14100100109876543210 | EUR | wire | | | IBAN: DE14100100109876543210 | EUR | cashout | | ES | IBAN: ES2100490000000000000000 | EUR | regular | | | IBAN: ES9021034677010000000000 | EUR | instant | | | IBAN: ES9021034677010000000000 | EUR | wire | | | IBAN: ES9021034677010000000000 | EUR | cashout | | FR | IBAN: FR6410096000403534259742Y90 | EUR | regular | | | IBAN: FR6410096000403534259742Y90 | EUR | instant | | | IBAN: FR6410096000403534259742Y90 | EUR | wire | | | IBAN: FR6410096000403534259742Y90 | EUR | cashout | | GB | Account #: 50000000, Sort code: 202678 IBAN: GB66BUKB20267850000000 | GBP | regular | | | Account #: 50000000, Sort code: 202678 IBAN: GB66BUKB20267850000000 | GBP | wire | | | Account #: 50000000, Sort code: 202678 IBAN: GB66BUKB20267850000000 | GBP | fast | | HK | Account #: 790000000, ClearingCode #: 250 | HKD | regular | | | Account #: 790000000, ClearingCode #: 250 | HKD | wire | | IT | IBAN: IT58A0300203280198574967934 | EUR | regular | | | IBAN: IT58A0300203280198574967934 | EUR | instant | | | IBAN: IT58A0300203280198574967934 | EUR | wire | | | IBAN: IT58A0300203280198574967934 | EUR | cashout | | IR | Account #: 12345678, Sort code: 931152 IBAN: IE29AIBK93115212345678 | EUR | regular | | | Account #: 12345678, Sort code: 931152 IBAN: IE29AIBK93115212345678 | EUR | instant | | | Account #: 12345678, Sort code: 931152 IBAN: IE29AIBK93115212345678 | EUR | wire | | | Account #: 12345678, Sort code: 931152 IBAN: IE29AIBK93115212345678 | EUR | cashout | | NL | IBAN: NL57INGB4654188101 | EUR | regular | | | IBAN: NL57INGB4654188101 | EUR | instant | | | IBAN: NL57INGB4654188101 | EUR | wire | | | IBAN: NL57INGB4654188101 | EUR | cashout | | NZ | Account #: 010001011111601 | NZD | regular | | | Account #: 010001011111601 | NZD | wire | | PL | Account #: 61109010140000071219812874 | PLN | regular | | | Account #: 61109010140000071219812874 IBAN: PL61109010140000071219812874 | PLN | wire | | SG | Account #: 9999, BIC #: CITISGSG | SGD | regular | | | Account #: 9999, BIC #: CITISGSG | SGD | wire | | | Account #: 9999, BIC #: CITISGSG | SGD | fast | | US | Account #: 10220001111, Routing #: 121000248 | USD | regular | | | Account #: 10220001111, Routing #: 121000248 | USD | instant | | | Account #: 10220001111, Routing #: 121000248 | USD | wire | | | Account #: 10220001111, Routing #: 121000248 | USD | cashout | ### Tab: Unsuccessful flow To test a unsuccessful payout, use the following counterparty bank account details. The reason code shows why the payout was unsuccessful. | Country/region | Counterparty bank account details | Currency | Priority | Scenario | Reason code | | -------------- | ------------------------------------------------------------------------ | -------- | -------- | -------- | ----------------------------- | | AU | Account #: 102202222, BSB #: 012951 | AUD | regular | return | `counterpartyAccountNotFound` | | | Account #: 102203333, BSB #: 012951 | AUD | regular | return | `counterpartyAccountClosed` | | | Account #: 102204444, BSB #: 012951 | AUD | regular | return | `refusedByCounterpartyBank` | | | Account #: 102202222, BSB #: 012951 | AUD | fast | return | `counterpartyAccountNotFound` | | | Account #: 102203333, BSB #: 012951 | AUD | fast | return | `counterpartyAccountClosed` | | | Account #: 102204444, BSB #: 012951 | AUD | fast | return | `refusedByCounterpartyBank` | | | Account #: 102204444, BSB #: 012951 | AUD | wire | return | `refusedByCounterpartyBank` | | CA | Account #: 10220002222, INST #: 004, TRN #: 00012 | CAD | regular | return | `counterpartyAccountNotFound` | | | Account #: 10220003333, INST #: 004, TRN #: 00012 | CAD | regular | return | `counterpartyAccountClosed` | | | Account #: 10220004444, INST #: 004, TRN #: 00012 | CAD | regular | return | `refusedByCounterpartyBank` | | | Account #: 10220004444, INST #: 004, TRN #: 00012 | CAD | wire | return | `refusedByCounterpartyBank` | | DE | IBAN: DE40500105176741865359 | EUR | regular | return | `counterpartyAccountNotFound` | | | IBAN: DE40500105176741865359 | EUR | wire | return | `counterpartyAccountNotFound` | | GB | Account #: 10100007, SC: 401199 | GBP | regular | return | `refusedByCounterpartyBank` | | | Account #: 50000044, SC: 202678 IBAN: GB42BUKB20267850000044 | GBP | fast | return | `refusedByCounterpartyBank` | | | Account #: 10100007, SC: 401199 IBAN: GB47HBUK40119910100007 | GBP | wire | return | `refusedByCounterpartyBank` | | | Account #: 50000044, SC: 202678 IBAN: GB42BUKB20267850000044 | GBP | instant | return | `refusedByCounterpartyBank` | | HK | Account #: 060000000, ClearingCode #: 004 | HKD | regular | return | `counterpartyBankUnavailable` | | NL | IBAN: NL45INGB7537071676 | EUR | regular | return | `counterpartyAccountNotFound` | | | IBAN: NL22INGB9001520569 | EUR | regular | return | `counterpartyAccountClosed` | | | IBAN: NL39INGB6686633402 | EUR | regular | return | `refusedByCounterpartyBank` | | | IBAN: NL28INGB3746414123 | EUR | instant | failure | `counterpartyAccountNotFound` | | | IBAN: NL56INGB8944467855 | EUR | instant | failure | `counterpartyAccountClosed` | | | IBAN: NL30INGB0170253298 | EUR | instant | failure | `refusedByCounterpartyBank` | | | IBAN: NL06INGB5632579034 | EUR | instant | failure | `counterpartyBankTimedOut` | | PL | Account #: 61109024025846267128455822 | PLN | regular | return | `counterpartyAccountNotFound` | | | Account #: 93109024027867369726277837 | PLN | regular | return | `counterpartyAccountClosed` | | | Account #: 31109024025674778915235831 | PLN | regular | return | `refusedByCounterpartyBank` | | | Account #: 31109024025674778915235831 IBAN: PL31109024025674778915235831 | PLN | wire | return | `refusedByCounterpartyBank` | | SG | Account #: 1111, BIC #: CITISGSG | SGD | regular | return | `counterpartyBankUnavailable` | | | Account #: 2222, BIC #: CITISGSG | SGD | regular | return | `counterpartyAccountNotFound` | | | Account #: 3333, BIC #: CITISGSG | SGD | regular | return | `counterpartyAccountClosed` | | | Account #: 4444, BIC #: CITISGSG | SGD | regular | return | `refusedByCounterpartyBank` | | | Account #: 1111, BIC #: CITISGSG | SGD | wire | return | `counterpartyBankUnavailable` | | | Account #: 2222, BIC #: CITISGSG | SGD | wire | return | `counterpartyAccountNotFound` | | | Account #: 3333, BIC #: CITISGSG | SGD | wire | return | `counterpartyAccountClosed` | | | Account #: 4444, BIC #: CITISGSG | SGD | wire | return | `refusedByCounterpartyBank` | | | Account #: 1111, BIC #: CITISGSG | SGD | fast | return | `counterpartyBankUnavailable` | | | Account #: 2222, BIC #: CITISGSG | SGD | fast | return | `counterpartyAccountNotFound` | | | Account #: 3333, BIC #: CITISGSG | SGD | fast | return | `counterpartyAccountClosed` | | | Account #: 4444, BIC #: CITISGSG | SGD | fast | return | `refusedByCounterpartyBank` | | US | Account #: 10220002222, Routing #: 107005432 | USD | regular | return | `counterpartyAccountNotFound` | | | Account #: 10220003333, Routing #: 107005432 | USD | regular | return | `counterpartyAccountClosed` | | | Account #: 10220004444, Routing #: 107005432 | USD | regular | return | `refusedByCounterpartyBank` | | | Account #: 10220004444, Routing #: 121000248 | USD | wire | return | `refusedByCounterpartyBank` | | | Account #: 10220002222, Routing #: 121000248 | USD | instant | failure | `counterpartyAccountNotFound` | | | Account #: 10220003333, Routing #: 121000248 | USD | instant | failure | `counterpartyAccountClosed` | | | Account #: 10220004444, Routing #: 121000248 | USD | instant | failure | `counterpartyBankTimedOut` | | | Account #: 10220005555, Routing #: 121000248 | USD | instant | failure | `refusedByCounterpartyBank` | ## See also * [Listen to webhooks to know about funds movements.](/payouts/payout-service/pay-out-to-bank-accounts/payout-webhooks) * [Transfer routes](/payouts/payout-service/pay-out-to-bank-accounts/transfer-routes) * [Approve or cancel transfers](/payouts/payout-service/pay-out-to-bank-accounts/approve-cancel-payouts) * [Payouts to third-party cards](/payouts/payout-service/pay-out-to-cards)