--- title: "Make a payout to a third-party card" description: "Make an API request to pay out funds to a third-party card." url: "https://docs.adyen.com/payouts/payout-service/pay-out-to-cards/funds-disbursement" source_url: "https://docs.adyen.com/payouts/payout-service/pay-out-to-cards/funds-disbursement.md" canonical: "https://docs.adyen.com/payouts/payout-service/pay-out-to-cards/funds-disbursement" last_modified: "2023-11-30T12:07:00+01:00" language: "en" --- # Make a payout to a third-party card Make an API request to pay out funds to a third-party card. This page explains how to [make a payout request](#make-payout-request) to transfer funds to Mastercard or Visa cards. In the following sections, you can see examples for one-off or recurring payouts. After you make the payout request, you can [track the status of the transfer](#get-status-updates) by using webhooks. ## Requirements Before you begin, take into account the following requirements and preparations. | Requirement | Description | | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Integration type** | An Adyen [payout service integration](/payouts/payout-service/integration-checklist/) and our [Checkout API](https://docs.adyen.com/api-explorer/Checkout/latest/overview) for tokenization. | | **[API credentials](/development-resources/api-credentials/)** | Your [API credential](/payouts/payout-service/manage-access/api-credentials-web-service) for balance platform (**ws\[\_123456]@BalancePlatform.\[YourBalancePlatform]**) has the following [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). - **Bank Transfer Initiation Webservice role** - **TransferService Webservice Initiate role** | | **[Webhooks](/development-resources/webhooks)** | Make sure that:- Your server is able to [receive and accept webhooks](/development-resources/webhooks). - You have subscribed to **Transfer** and **Transaction** webhooks in your [Customer Area](https://ca-test.adyen.com/). | | **Limitations** | We recommend that you verify if the [card is eligible for payouts](/payouts/payout-service/pay-out-to-cards/manage-card-details/). If you are not fully PCI compliant or want to make recurring payouts, you must have [tokenized and saved the card details](/payouts/payout-service/pay-out-to-cards/manage-card-details/#tokenize-card-details). | | **Setup steps** | Before you begin, contact your Adyen representative to enable the feature on your account. | ## 1. Initiate a payout The following tabs show how to make one-off and recurring payments. If you are [fully PCI compliant](/get-started-with-adyen/adyen-glossary/#pci-compliance), you are allowed to make payout requests using raw card details. Otherwise, you must use [tokenized card details](/payouts/payout-service/pay-out-to-cards/manage-card-details#store-card-details) in your request. ### Tab: One-off payouts with raw card details To make a request for a one-off card payout: 1. Make a POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request for a one-off card payout, specifying the following parameters: | Parameter | 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 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 **card**. | | [counterparty.card.cardHolder](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object that contains details about the cardholder of the counterparty card. | | [counterparty.card.cardIdentification](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardIdentification) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object that contains the identification details of the counterparty card. | | [description](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-description) | | Your description for the transfer. You can use this to identify the payout in your [Customer Area](https://ca-test.adyen.com/). The description is only used within your balance platform and not sent to the recipient. | | [reference](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-reference) | | Your reference for the transfer. You can use this to identify the payout in your [Customer Area](https://ca-test.adyen.com/). The reference is only used within your balance platform and not sent to the recipient. If you do not provide this value in the request, Adyen generates a unique reference. | **Example request for a one-off payout with raw card details** #### 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": "USD" }, "balanceAccountId": "BA00000000000000000000001", "category": "card", "counterparty": { "card": { "cardHolder": { "type": "individual", "firstName": "Albert", "lastName": "Klaassen", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "number": "4000020000000000", "expiryMonth": "03", "expiryYear": "2030" } } }, "reference": "Your internal reference for the transfer", "description": "Your internal description for the transfer" }' ``` #### Java ```java // Adyen Java API Library v28.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.service.transfers.*; Client client = new Client("ADYEN_API_KEY", Environment.TEST); // Create the request object(s) Address address3 = new Address() .country("US") .stateOrProvince("CA") .city("San Francisco") .postalCode("94107") .line2("Brannan St") .line1("274"); PartyIdentification partyIdentification3 = new PartyIdentification() .firstName("Albert") .lastName("Klaassen") .address(address3) .type(PartyIdentification.TypeEnum.INDIVIDUAL); CardIdentification cardIdentification3 = new CardIdentification() .number("4321123456788765") .expiryMonth("03") .expiryYear("2030"); Card card3 = new Card() .cardHolder(partyIdentification3) .cardIdentification(cardIdentification3); Amount amount = new Amount() .currency("USD") .value(10000L); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .card(card3); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .reference("Your internal reference for the transfer") .amount(amount) .counterparty(counterpartyInfoV3) .description("Your internal description for the transfer") .category(TransferInfo.CategoryEnum.CARD); // Send the request TransfersApi service = new TransfersApi(client); Transfer response = service.transferFunds(transferInfo, null); ``` #### PHP ```php // Adyen PHP API Library v20.0.0 use Adyen\Client; use Adyen\Environment; use Adyen\Model\Transfers\Amount; use Adyen\Model\Transfers\CounterpartyInfoV3; use Adyen\Model\Transfers\Address; use Adyen\Model\Transfers\PartyIdentification; use Adyen\Model\Transfers\CardIdentification; use Adyen\Model\Transfers\TransferInfo; use Adyen\Service\Transfers\TransfersApi; $client = new Client(); $client->setXApiKey("ADYEN_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $address3 = new Address(); $address3 ->setCountry("US") ->setStateOrProvince("CA") ->setCity("San Francisco") ->setPostalCode("94107") ->setLine2("Brannan St") ->setLine1("274"); $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setFirstName("Albert") ->setLastName("Klaassen") ->setAddress($address3) ->setType("individual"); $cardIdentification3 = new CardIdentification(); $cardIdentification3 ->setNumber("4321123456788765") ->setExpiryMonth("03") ->setExpiryYear("2030"); $card3 = new Card(); $card3 ->setCardHolder($partyIdentification3) ->setCardIdentification($cardIdentification3); $amount = new Amount(); $amount ->setCurrency("USD") ->setValue(10000); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setCard($card3); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setReference("Your internal reference for the transfer") ->setAmount($amount) ->setCounterparty($counterpartyInfoV3) ->setDescription("Your internal description for the transfer") ->setCategory("card"); // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo); ``` #### C\# ```cs // Adyen .net API Library v18.0.0 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Transfers; using Adyen.Service.Transfers; var config = new Config() { XApiKey = "ADYEN_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) Address address3 = new Address { Country = "US", StateOrProvince = "CA", City = "San Francisco", PostalCode = "94107", Line2 = "Brannan St", Line1 = "274" }; PartyIdentification partyIdentification3 = new PartyIdentification { FirstName = "Albert", LastName = "Klaassen", Address = address3, Type = PartyIdentification.TypeEnum.Individual }; CardIdentification cardIdentification3 = new CardIdentification { Number = "4321123456788765", ExpiryMonth = "03", ExpiryYear = "2030" }; Card card3 = new Card { CardHolder = partyIdentification3, CardIdentification = cardIdentification3 }; Amount amount = new Amount { Currency = "USD", Value = 10000 }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { Card = card3 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Reference = "Your internal reference for the transfer", Amount = amount, Counterparty = counterpartyInfoV3, Description = "Your internal description for the transfer", Category = TransferInfo.CategoryEnum.Card }; // Send the request var service = new TransfersService(client); var response = service.TransferFunds(transferInfo); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v19.0.0 // Require the parts of the module you want to use const { Client, TransfersAPI } = require('@adyen/api-library'); // Initialize the client object const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Create the request object(s) const transferInfo = { amount: { value: 10000, currency: "USD" }, balanceAccountId: "BA00000000000000000000001", category: "card", counterparty: { card: { cardHolder: { type: "individual", firstName: "Albert", lastName: "Klaassen", address: { city: "San Francisco", country: "US", line1: "274", line2: "Brannan St", postalCode: "94107", stateOrProvince: "CA" } }, cardIdentification: { number: "4321123456788765", expiryMonth: "03", expiryYear: "2030" } } }, reference: "Your internal reference for the transfer", description: "Your internal description for the transfer" } // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo); ``` #### Go ```go // Adyen Go API Library v11.0.0 import ( "context" "github.com/adyen/adyen-go-api-library/v9/src/common" "github.com/adyen/adyen-go-api-library/v9/src/adyen" "github.com/adyen/adyen-go-api-library/v9/src/transfers" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) address3 := transfers.Address{ Country: "US", StateOrProvince: common.PtrString("CA"), City: common.PtrString("San Francisco"), PostalCode: common.PtrString("94107"), Line2: common.PtrString("Brannan St"), Line1: common.PtrString("274"), } partyIdentification3 := transfers.PartyIdentification{ FirstName: common.PtrString("Albert"), LastName: common.PtrString("Klaassen"), Address: &address3, Type: common.PtrString("individual"), } cardIdentification3 := transfers.CardIdentification{ Number: common.PtrString("4321123456788765"), ExpiryMonth: common.PtrString("03"), ExpiryYear: common.PtrString("2030"), } card3 := transfers.Card{ CardHolder: partyIdentification3, CardIdentification: cardIdentification3, } amount := transfers.Amount{ Currency: "USD", Value: 10000, } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ Card: &card3, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Reference: common.PtrString("Your internal reference for the transfer"), Amount: amount, Counterparty: counterpartyInfoV3, Description: common.PtrString("Your internal description for the transfer"), Category: "card", } // Send the request service := client.Transfers() req := service.TransfersApi.TransferFundsInput().TransferInfo(transferInfo) res, httpRes, err := service.TransfersApi.TransferFunds(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v12.6.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "amount": { "value": 10000, "currency": "USD" }, "balanceAccountId": "BA00000000000000000000001", "category": "card", "counterparty": { "card": { "cardHolder": { "type": "individual", "firstName": "Albert", "lastName": "Klaassen", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "number": "4321123456788765", "expiryMonth": "03", "expiryYear": "2030" } } }, "reference": "Your internal reference for the transfer", "description": "Your internal description for the transfer" } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request=json_request) ``` #### Ruby ```rb # Adyen Ruby API Library v9.6.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :amount => { :value => 10000, :currency => 'USD' }, :balanceAccountId => 'BA00000000000000000000001', :category => 'card', :counterparty => { :card => { :cardHolder => { :type => 'individual', :firstName => 'Albert', :lastName => 'Klaassen', :address => { :city => 'San Francisco', :country => 'US', :line1 => '274', :line2 => 'Brannan St', :postalCode => '94107', :stateOrProvince => 'CA' } }, :cardIdentification => { :number => '4321123456788765', :expiryMonth => '03', :expiryYear => '2030' } } }, :reference => 'Your internal reference for the transfer', :description => 'Your internal description for the transfer' } # Send the request result = adyen.transfers.transfers_api.transfer_funds(request_body) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v19.0.0 // Require the parts of the module you want to use import { Client, TransfersAPI, Types } from "@adyen/api-library"; // Initialize the client object const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Create the request object(s) const address3: Types.transfers.Address = { country: "US", stateOrProvince: "CA", city: "San Francisco", postalCode: "94107", line2: "Brannan St", line1: "274" }; const partyIdentification3: Types.transfers.PartyIdentification = { firstName: "Albert", lastName: "Klaassen", address: address3, type: Types.transfers.PartyIdentification.TypeEnum.Individual }; const cardIdentification3: Types.transfers.CardIdentification = { number: "4321123456788765", expiryMonth: "03", expiryYear: "2030" }; const card3: Types.transfers.Card = { cardHolder: partyIdentification3, cardIdentification: cardIdentification3 }; const amount: Types.transfers.Amount = { currency: "USD", value: 10000 }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { card: card3 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", reference: "Your internal reference for the transfer", amount: amount, counterparty: counterpartyInfoV3, description: "Your internal description for the transfer", category: Types.transfers.TransferInfo.CategoryEnum.Card }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo); ``` ** ### 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** ```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": "card", "counterparty": { "card": { "cardHolder": { "type": "individual", "firstName": "Albert", "lastName": "Klaassen", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "number": "4321123456788765", "expiryMonth": "03", "expiryYear": "2030" } } }, "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" }' ``` 2. If the payout request is successful, you receive an **HTTP 202 Accepted** response with the payout details and the [executionDate](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#responses-200-executionDate) object. ### Tab: One-off payouts with tokenized data To make a request for a one-off card payout with tokenized card details: 1. [Store the card details](/payouts/payout-service/pay-out-to-cards/manage-card-details/#store-card-details) with the `recurringProcessingModel` set to **CardOnFile**. 2. Make a POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request, specifying the following parameters: | Parameter | 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 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 **card**. | | [counterparty.card](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object that contains details about the card that you are paying out to. | | [description](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-description) | | Your description for the transfer. You can use this to identify the payout in your [Customer Area](https://ca-test.adyen.com/). The description is only used within your balance platform and not sent to the recipient. | | [reference](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-reference) | | Your reference for the transfer. You can use this to identify the payout in your [Customer Area](https://ca-test.adyen.com/). The reference is only used within your balance platform and not sent to the recipient. If you do not provide this value in the request, Adyen generates a unique reference. | In the [counterparty.card](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card) object, include the following parameters: | Parameter in `counterparty.card` | Required | Description | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [cardHolder.address](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-address) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object that contains the address information of the cardholder. | | [cardHolder.firstName](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-firstName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The first name of the cardholder. | | [cardHolder.lastName](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-lastName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The last name of the cardholder. | | [cardHolder.reference](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-reference) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | A unique reference to identify the cardholder. This value must be the `shopperReference` that you used to create the token. | | [cardHolder.type](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-type) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **individual**. | | [cardIdentification.storedPaymentMethodId](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardIdentification-storedPaymentMethodId) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The [token](/payouts/payout-service/pay-out-to-cards/manage-card-details#store-card-details) that you created for the counterparty card. Make a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request to create a token, then receive a recurring lifecycle webhook that contains the token in the `storedPaymentMethodId` field. | **Example request for a one-off payout with tokenized card data** #### 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": "USD" }, "balanceAccountId": "BA00000000000000000000001", "category": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "reference": "Your internal reference for the transfer", "description": "Your internal description for the transfer" }' ``` #### Java ```java // Adyen Java API Library v34.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("US") .stateOrProvince("CA") .city("San Francisco") .postalCode("94107") .line2("Brannan St") .line1("274"); PartyIdentification partyIdentification3 = new PartyIdentification() .reference("Your reference for the cardholder") .firstName("Albert") .lastName("Klaassen") .address(address3) .type(PartyIdentification.TypeEnum.INDIVIDUAL); CardIdentification cardIdentification3 = new CardIdentification() .storedPaymentMethodId("ZMV627QSCQVDKG66"); Card card3 = new Card() .cardHolder(partyIdentification3) .cardIdentification(cardIdentification3); Amount amount = new Amount() .currency("USD") .value(10000L); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .card(card3); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .reference("Your internal reference for the transfer") .amount(amount) .counterparty(counterpartyInfoV3) .description("Your internal description for the transfer") .category(TransferInfo.CategoryEnum.CARD); // 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("US") ->setStateOrProvince("CA") ->setCity("San Francisco") ->setPostalCode("94107") ->setLine2("Brannan St") ->setLine1("274"); $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setReference("Your reference for the cardholder") ->setFirstName("Albert") ->setLastName("Klaassen") ->setAddress($address3) ->setType("individual"); $cardIdentification3 = new CardIdentification(); $cardIdentification3 ->setStoredPaymentMethodId("ZMV627QSCQVDKG66"); $card3 = new Card(); $card3 ->setCardHolder($partyIdentification3) ->setCardIdentification($cardIdentification3); $amount = new Amount(); $amount ->setCurrency("USD") ->setValue(10000); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setCard($card3); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setReference("Your internal reference for the transfer") ->setAmount($amount) ->setCounterparty($counterpartyInfoV3) ->setDescription("Your internal description for the transfer") ->setCategory("card"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo, $requestOptions); ``` #### C\# ```cs // Adyen .net API Library v29.0.0 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 = "US", StateOrProvince = "CA", City = "San Francisco", PostalCode = "94107", Line2 = "Brannan St", Line1 = "274" }; PartyIdentification partyIdentification3 = new PartyIdentification { Reference = "Your reference for the cardholder", FirstName = "Albert", LastName = "Klaassen", Address = address3, Type = PartyIdentification.TypeEnum.Individual }; CardIdentification cardIdentification3 = new CardIdentification { StoredPaymentMethodId = "ZMV627QSCQVDKG66" }; Card card3 = new Card { CardHolder = partyIdentification3, CardIdentification = cardIdentification3 }; Amount amount = new Amount { Currency = "USD", Value = 10000 }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { Card = card3 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Reference = "Your internal reference for the transfer", Amount = amount, Counterparty = counterpartyInfoV3, Description = "Your internal description for the transfer", Category = TransferInfo.CategoryEnum.Card }; // 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 v25.0.0 const { Client, TransfersAPI } = require('@adyen/api-library'); const client = new Client({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: "TEST" }); // Create the request object(s) const transferInfo = { amount: { value: 10000, currency: "USD" }, balanceAccountId: "BA00000000000000000000001", category: "card", counterparty: { card: { cardHolder: { firstName: "Albert", lastName: "Klaassen", reference: "Your reference for the cardholder", type: "individual", address: { city: "San Francisco", country: "US", line1: "274", line2: "Brannan St", postalCode: "94107", stateOrProvince: "CA" } }, cardIdentification: { storedPaymentMethodId: "ZMV627QSCQVDKG66" } } }, reference: "Your internal reference for the transfer", description: "Your internal 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 v18.0.0 import ( "context" "github.com/adyen/adyen-go-api-library/v18/src/common" "github.com/adyen/adyen-go-api-library/v18/src/adyen" "github.com/adyen/adyen-go-api-library/v18/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: "US", StateOrProvince: common.PtrString("CA"), City: common.PtrString("San Francisco"), PostalCode: common.PtrString("94107"), Line2: common.PtrString("Brannan St"), Line1: common.PtrString("274"), } partyIdentification3 := transfers.PartyIdentification{ Reference: common.PtrString("Your reference for the cardholder"), FirstName: common.PtrString("Albert"), LastName: common.PtrString("Klaassen"), Address: &address3, Type: common.PtrString("individual"), } cardIdentification3 := transfers.CardIdentification{ StoredPaymentMethodId: common.PtrString("ZMV627QSCQVDKG66"), } card3 := transfers.Card{ CardHolder: partyIdentification3, CardIdentification: cardIdentification3, } amount := transfers.Amount{ Currency: "USD", Value: 10000, } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ Card: &card3, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Reference: common.PtrString("Your internal reference for the transfer"), Amount: amount, Counterparty: counterpartyInfoV3, Description: common.PtrString("Your internal description for the transfer"), Category: "card", } // 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 v13.4.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": "USD" }, "balanceAccountId": "BA00000000000000000000001", "category": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "reference": "Your internal reference for the transfer", "description": "Your internal 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 v10.1.2 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 => 'USD' }, :balanceAccountId => 'BA00000000000000000000001', :category => 'card', :counterparty => { :card => { :cardHolder => { :firstName => 'Albert', :lastName => 'Klaassen', :reference => 'Your reference for the cardholder', :type => 'individual', :address => { :city => 'San Francisco', :country => 'US', :line1 => '274', :line2 => 'Brannan St', :postalCode => '94107', :stateOrProvince => 'CA' } }, :cardIdentification => { :storedPaymentMethodId => 'ZMV627QSCQVDKG66' } } }, :reference => 'Your internal reference for the transfer', :description => 'Your internal 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 v25.0.0 import { Client, TransfersAPI, Types } from "@adyen/api-library"; const client = new Client({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: "TEST" }); // Create the request object(s) const address3: Types.transfers.Address = { country: "US", stateOrProvince: "CA", city: "San Francisco", postalCode: "94107", line2: "Brannan St", line1: "274" }; const partyIdentification3: Types.transfers.PartyIdentification = { reference: "Your reference for the cardholder", firstName: "Albert", lastName: "Klaassen", address: address3, type: Types.transfers.PartyIdentification.TypeEnum.Individual }; const cardIdentification3: Types.transfers.CardIdentification = { storedPaymentMethodId: "ZMV627QSCQVDKG66" }; const card3: Types.transfers.Card = { cardHolder: partyIdentification3, cardIdentification: cardIdentification3 }; const amount: Types.transfers.Amount = { currency: "USD", value: 10000 }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { card: card3 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", reference: "Your internal reference for the transfer", amount: amount, counterparty: counterpartyInfoV3, description: "Your internal description for the transfer", category: Types.transfers.TransferInfo.CategoryEnum.Card }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` ** ### 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** ```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": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "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" }' ``` 2. If the payout request is successful, you receive an **HTTP 202 Accepted** response with the payout details and the [executionDate](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#responses-200-executionDate) object. ### Tab: Recurring payouts To make a request for a recurring card payout: 1. Make sure that you have [stored the card details](/payouts/payout-service/pay-out-to-cards/manage-card-details/#store-card-details) with the `recurringProcessingModel` set to **Subscription**. 2. Make a POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request, specifying the following parameters: | Parameter | 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 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 **card**. | | [counterparty.card](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Contains details about the card that you are paying out to. | | [description](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-description) | | Your description for the transfer. You can use this to identify the payout in your [Customer Area](https://ca-test.adyen.com/). The description is only used within your balance platform and not sent to the recipient. | | [reference](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-reference) | | Your reference for the transfer. You can use this to identify the payout in your [Customer Area](https://ca-test.adyen.com/). The reference is only used within your balance platform and not sent to the recipient. If you do not provide this value in the request, Adyen generates a unique reference. | In the [counterparty.card](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card) object, include the following parameters: | Parameter in `counterparty.card` | Required | Description | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | [cardHolder.address](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-address) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object that contains the address information of the cardholder. | | [cardHolder.firstName](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-firstName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The first name of the cardholder. | | [cardHolder.lastName](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-lastName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The last name of the cardholder. | | [cardHolder.reference](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-reference) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | A unique reference to identify the cardholder. This value must be the `shopperReference` that you used to create the token. | | [cardHolder.type](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardHolder-type) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **individual**. | | [cardIdentification.storedPaymentMethodId](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-card-cardIdentification-storedPaymentMethodId) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The [token](/payouts/payout-service/pay-out-to-cards/manage-card-details#store-card-details) that you created for the counterparty card. | **Example request for a recurring 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": { "value": 10000, "currency": "USD" }, "balanceAccountId": "BA00000000000000000000001", "category": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "reference": "Your internal reference for the transfer", "description": "Your internal description for the transfer" }' ``` #### Java ```java // Adyen Java API Library v34.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("US") .stateOrProvince("CA") .city("San Francisco") .postalCode("94107") .line2("Brannan St") .line1("274"); PartyIdentification partyIdentification3 = new PartyIdentification() .reference("Your reference for the cardholder") .firstName("Albert") .lastName("Klaassen") .address(address3) .type(PartyIdentification.TypeEnum.INDIVIDUAL); CardIdentification cardIdentification3 = new CardIdentification() .storedPaymentMethodId("ZMV627QSCQVDKG66"); Card card3 = new Card() .cardHolder(partyIdentification3) .cardIdentification(cardIdentification3); Amount amount = new Amount() .currency("USD") .value(10000L); CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3() .card(card3); TransferInfo transferInfo = new TransferInfo() .balanceAccountId("BA00000000000000000000001") .reference("Your internal reference for the transfer") .amount(amount) .counterparty(counterpartyInfoV3) .description("Your internal description for the transfer") .category(TransferInfo.CategoryEnum.CARD); // 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("US") ->setStateOrProvince("CA") ->setCity("San Francisco") ->setPostalCode("94107") ->setLine2("Brannan St") ->setLine1("274"); $partyIdentification3 = new PartyIdentification(); $partyIdentification3 ->setReference("Your reference for the cardholder") ->setFirstName("Albert") ->setLastName("Klaassen") ->setAddress($address3) ->setType("individual"); $cardIdentification3 = new CardIdentification(); $cardIdentification3 ->setStoredPaymentMethodId("ZMV627QSCQVDKG66"); $card3 = new Card(); $card3 ->setCardHolder($partyIdentification3) ->setCardIdentification($cardIdentification3); $amount = new Amount(); $amount ->setCurrency("USD") ->setValue(10000); $counterpartyInfoV3 = new CounterpartyInfoV3(); $counterpartyInfoV3 ->setCard($card3); $transferInfo = new TransferInfo(); $transferInfo ->setBalanceAccountId("BA00000000000000000000001") ->setReference("Your internal reference for the transfer") ->setAmount($amount) ->setCounterparty($counterpartyInfoV3) ->setDescription("Your internal description for the transfer") ->setCategory("card"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new TransfersApi($client); $response = $service->transferFunds($transferInfo, $requestOptions); ``` #### C\# ```cs // Adyen .net API Library v29.0.0 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 = "US", StateOrProvince = "CA", City = "San Francisco", PostalCode = "94107", Line2 = "Brannan St", Line1 = "274" }; PartyIdentification partyIdentification3 = new PartyIdentification { Reference = "Your reference for the cardholder", FirstName = "Albert", LastName = "Klaassen", Address = address3, Type = PartyIdentification.TypeEnum.Individual }; CardIdentification cardIdentification3 = new CardIdentification { StoredPaymentMethodId = "ZMV627QSCQVDKG66" }; Card card3 = new Card { CardHolder = partyIdentification3, CardIdentification = cardIdentification3 }; Amount amount = new Amount { Currency = "USD", Value = 10000 }; CounterpartyInfoV3 counterpartyInfoV3 = new CounterpartyInfoV3 { Card = card3 }; TransferInfo transferInfo = new TransferInfo { BalanceAccountId = "BA00000000000000000000001", Reference = "Your internal reference for the transfer", Amount = amount, Counterparty = counterpartyInfoV3, Description = "Your internal description for the transfer", Category = TransferInfo.CategoryEnum.Card }; // 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 v25.0.0 const { Client, TransfersAPI } = require('@adyen/api-library'); const client = new Client({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: "TEST" }); // Create the request object(s) const transferInfo = { amount: { value: 10000, currency: "USD" }, balanceAccountId: "BA00000000000000000000001", category: "card", counterparty: { card: { cardHolder: { firstName: "Albert", lastName: "Klaassen", reference: "Your reference for the cardholder", type: "individual", address: { city: "San Francisco", country: "US", line1: "274", line2: "Brannan St", postalCode: "94107", stateOrProvince: "CA" } }, cardIdentification: { storedPaymentMethodId: "ZMV627QSCQVDKG66" } } }, reference: "Your internal reference for the transfer", description: "Your internal 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 v18.0.0 import ( "context" "github.com/adyen/adyen-go-api-library/v18/src/common" "github.com/adyen/adyen-go-api-library/v18/src/adyen" "github.com/adyen/adyen-go-api-library/v18/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: "US", StateOrProvince: common.PtrString("CA"), City: common.PtrString("San Francisco"), PostalCode: common.PtrString("94107"), Line2: common.PtrString("Brannan St"), Line1: common.PtrString("274"), } partyIdentification3 := transfers.PartyIdentification{ Reference: common.PtrString("Your reference for the cardholder"), FirstName: common.PtrString("Albert"), LastName: common.PtrString("Klaassen"), Address: &address3, Type: common.PtrString("individual"), } cardIdentification3 := transfers.CardIdentification{ StoredPaymentMethodId: common.PtrString("ZMV627QSCQVDKG66"), } card3 := transfers.Card{ CardHolder: partyIdentification3, CardIdentification: cardIdentification3, } amount := transfers.Amount{ Currency: "USD", Value: 10000, } counterpartyInfoV3 := transfers.CounterpartyInfoV3{ Card: &card3, } transferInfo := transfers.TransferInfo{ BalanceAccountId: common.PtrString("BA00000000000000000000001"), Reference: common.PtrString("Your internal reference for the transfer"), Amount: amount, Counterparty: counterpartyInfoV3, Description: common.PtrString("Your internal description for the transfer"), Category: "card", } // 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 v13.4.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": "USD" }, "balanceAccountId": "BA00000000000000000000001", "category": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "reference": "Your internal reference for the transfer", "description": "Your internal 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 v10.1.2 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 => 'USD' }, :balanceAccountId => 'BA00000000000000000000001', :category => 'card', :counterparty => { :card => { :cardHolder => { :firstName => 'Albert', :lastName => 'Klaassen', :reference => 'Your reference for the cardholder', :type => 'individual', :address => { :city => 'San Francisco', :country => 'US', :line1 => '274', :line2 => 'Brannan St', :postalCode => '94107', :stateOrProvince => 'CA' } }, :cardIdentification => { :storedPaymentMethodId => 'ZMV627QSCQVDKG66' } } }, :reference => 'Your internal reference for the transfer', :description => 'Your internal 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 v25.0.0 import { Client, TransfersAPI, Types } from "@adyen/api-library"; const client = new Client({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: "TEST" }); // Create the request object(s) const address3: Types.transfers.Address = { country: "US", stateOrProvince: "CA", city: "San Francisco", postalCode: "94107", line2: "Brannan St", line1: "274" }; const partyIdentification3: Types.transfers.PartyIdentification = { reference: "Your reference for the cardholder", firstName: "Albert", lastName: "Klaassen", address: address3, type: Types.transfers.PartyIdentification.TypeEnum.Individual }; const cardIdentification3: Types.transfers.CardIdentification = { storedPaymentMethodId: "ZMV627QSCQVDKG66" }; const card3: Types.transfers.Card = { cardHolder: partyIdentification3, cardIdentification: cardIdentification3 }; const amount: Types.transfers.Amount = { currency: "USD", value: 10000 }; const counterpartyInfoV3: Types.transfers.CounterpartyInfoV3 = { card: card3 }; const transferInfo: Types.transfers.TransferInfo = { balanceAccountId: "BA00000000000000000000001", reference: "Your internal reference for the transfer", amount: amount, counterparty: counterpartyInfoV3, description: "Your internal description for the transfer", category: Types.transfers.TransferInfo.CategoryEnum.Card }; // Send the request const transfersAPI = new TransfersAPI(client); const response = transfersAPI.TransfersApi.transferFunds(transferInfo, { idempotencyKey: "UUID" }); ``` ** ### 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** ```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": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "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" }' ``` 2. If the payout request is successful, you receive an **HTTP 202 Accepted** response with the payout details and the [executionDate](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#responses-200-executionDate) object. The following tabs show examples of the responses that you receive after a successful request. ### Tab: One-off payouts with raw card details **Example response for a one-off payout** ```json { "creationDate": "2023-12-28T15:26:06+01:00", "id": "48POP561F0ZWWLNW", "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001" }, "amount": { "currency": "USD", "value": 10000 }, "balanceAccount": { "description": "Your description for the balance account", "id": "BA00000000000000000000001" }, "category": "card", "counterparty": { "card": { "cardHolder": { "address": { "city": "San Francisco", "country": "US", "postalCode": "94107", "stateOrProvince": "CA", "line1": "274", "line2": "Brannan St" }, "firstName": "Albert", "lastName": "Klaassen", "type": "individual" }, "cardIdentification": { "expiryMonth": "03", "expiryYear": "2030", "number": "432112******8765" } } }, "description": "Your internal description of the transfer", "direction": "outgoing", "reason": "approved", "reference": "Your internal reference for the transfer", "status": "authorised", "type": "cardTransfer" }  ``` ### Tab: One-off payouts with tokenized data **Example response for a one-off payout** ```json { "creationDate": "2024-06-11T16:12:32+02:00", "id": "4VXLNQ638WU0IAN3", "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001" }, "amount": { "currency": "USD", "value": 10000 }, "balanceAccount": { "description": "Your description for the balance account", "id": "BA00000000000000000000001" }, "category": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "description": "Your internal description of the transfer", "direction": "outgoing", "reason": "approved", "reference": "Your internal reference for the transfer", "status": "authorised", "type": "cardTransfer" } ``` ### Tab: Recurring payouts **Example response for a recurring payout** ```json { "creationDate": "2024-06-11T16:12:32+02:00", "id": "4VXLNQ638WU0IAN3", "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001" }, "amount": { "currency": "USD", "value": 10000 }, "balanceAccount": { "description": "Your description for the balance account", "id": "BA00000000000000000000001" }, "category": "card", "counterparty": { "card": { "cardHolder": { "firstName": "Albert", "lastName": "Klaassen", "reference": "Your reference for the cardholder", "type": "individual", "address": { "city": "San Francisco", "country": "US", "line1": "274", "line2": "Brannan St", "postalCode": "94107", "stateOrProvince": "CA" } }, "cardIdentification": { "storedPaymentMethodId": "ZMV627QSCQVDKG66" } } }, "description": "Your internal description of the transfer", "direction": "outgoing", "reason": "approved", "reference": "Your internal reference for the transfer", "status": "authorised", "type": "cardTransfer" } ``` ## 2. Get updates on the status of the transfer Track the transfer request by using the [webhooks](/payouts/payout-service/pay-out-to-cards/payout-webhooks) that Adyen sends to your server. You receive a webhook each time that the status of the request changes. For example, you receive webhooks when Adyen receives the request, when the transfer is authorised, and when the funds are booked and deducted from the balance account. You can also [view the transfer details in your Customer Area](/payouts/payout-service/view-transfers-details). ## 3. Test the payout flow To test the payout flow with raw card details, make a POST [/transfers](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers) request using our [Visa test card](/development-resources/test-cards-and-credentials/test-card-numbers/#visa) and [Mastercard test card](/development-resources/test-cards-and-credentials/test-card-numbers/#mastercard) details for the `counterparty.card.cardIdentification` fields. ## See also * [Manage card details](/payouts/payout-service/pay-out-to-cards/manage-card-details/)