Fast-payout icon

Make a payout to a third-party bank account

Make an API request to pay out funds to a third-party bank account.

This page explains how to make a payout request to transfer funds to third-party bank accounts.

After you make the payout request, you can track the status of the transfer by listening to webhooks.

Requirements

Before you begin, take into account the following requirements and preparations.

Requirement Description
API credentials Ensure your API credential has the required roles to use with the Transfers API.
Webhooks Your server must be able to receive and accept webhooks.
Setup steps Before you begin:

Initiate a payout

To send an on-demand payout:

  1. Make a POST /transfers request, specifying the following parameters. Include all the required parameters to decrease the possibility of manual review and processing delays.

    Parameter name Required Description
    amount -white_check_mark- The amount and the currency of the transfer.
    balanceAccountId -white_check_mark- The balance account from which funds are deducted.
    category -white_check_mark- Set to bank.
    counterparty.bankAccount -white_check_mark- Contains details about the destination bank account and its owner.
    priority -white_check_mark- The priority of the bank transfer, which affects the transfer speed and the fees you pay.
    priorities -white_check_mark-
    Required if priority is not included.
    The list of priorities for the bank transfer.
    description Your description for the transfer request.
    reference Your internal reference for the transfer.
    referenceForBeneficiary The reference sent to the recipient and included in all related webhooks.
    ultimateParty.address The address of the ultimate sender (ultimate debtor). Highly recommended to reduce review delays.
    type Set to bankTransfer.
  2. In the counterparty.bankAccount object, include the following parameters:

    Parameter name Required Description
    accountHolder.address -white_check_mark- The address of the bank account you pay out to.
    accountHolder.dateOfBirth -white_check_mark-
    Required for individuals.
    The owner's date of birth.
    accountHolder.fullName -white_check_mark- The full name of the owner of the bank account.
    accountIdentification -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.

If the transfer request is successful, you receive an HTTP 202 Accepted response containing the id of the transfer request.

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 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 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.

In this example, a transfer route for the priority fast was not available, so Adyen transferred the funds using the priority regular.

If the payout request is successful, you receive an HTTP 202 Accepted response containing the following:

  • The routingDetails object, specifying why the first priority was not selected.
  • The selected priority.

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 object in the POST /transfers request. In the object, specify the following parameter:

    Parameter name Required Description
    review.numberOfApprovalsRequired -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.

  2. If the payout request is successful, you receive an HTTP 202 Accepted response containing payout details, including the following parameters:

    Parameter name Description
    review.numberOfApprovalsRequired Shows the number of approvals required to process the payout.

    After triggering the review, a member of your team must approve the payout before Adyen continues processing it.

  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 object in the POST /transfers request.

    If your payout request is successful, the payout remains in status received with reason pending until the execution date. On 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 with details about the failure.

    To specify a future execution date, specify the following parameters:

    Parameter name Required Description
    executionDate.date -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 YYYY-MM-DD. For example: 2025-01-31.
    executionDate.timezone The timezone that applies to the execution date. Use a timezone identifier from the tz database.

    For example: America/Los_Angeles.
    Default value: Europe/Amsterdam.

    The following code sample shows how to include the executionDate object in a payout request.

    If the payout request is successful, you receive an HTTP 202 Accepted response with the payout details and the executionDate object.

  1. Before the execution date, you can cancel the payout by making a POST /transfers/cancel request.

Get updates on the status of the transfer

Track the transfer request through webhooks. 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.

You can also view the transfer in your Customer Area.

Test the payout flow

To test the payout flow:

1. Make a POST /transfers request.

The currency and priority of the transfer request must match the values shown in the following table.

See also