---
title: "Transfer funds"
method: POST
path: "/transfers"
tags: ["Transfers"]
---

# Transfer funds

`POST /transfers`

>Versions 1 and 2 of the Transfers API are deprecated. If you are just starting your implementation, use the latest version.

Starts a request to transfer funds to:
- [Balance accounts](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/balanceAccounts)
- [Transfer instruments](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments)
- [Third-party bank accounts](https://docs.adyen.com/payouts/payout-service/pay-out-to-bank-accounts)
- [Third-party cards](https://docs.adyen.com/payouts/payout-service/pay-out-to-cards)

Adyen sends the outcome of the transfer request through webhooks.

To use this endpoint:
- Your API credential must have the **TransferService Webservice Initiate** [role](https://docs.adyen.com/platforms/manage-access/webservice-roles/?tab=transfers_3).
- The account holder must have the required [capabilities](https://docs.adyen.com/platforms/verification-overview/capabilities).

Reach out to your Adyen contact to set up these permissions.

## Headers

- `WWW-Authenticate` string

## Request body

- TransferInfo
  - `amount` Amount, required
    - `currency` string, required — The three-character [ISO currency code](https://docs.adyen.com/development-resources/currency-codes).
    - `value` integer, required — The amount of the transaction, in [minor units](https://docs.adyen.com/development-resources/currency-codes).
  - `balanceAccountId` string — The unique identifier of the source [balance account](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/balanceAccounts#responses-200-id). If you want to make a transfer using a **virtual** **bankAccount** assigned to the balance account, you must specify the [payment instrument ID](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#responses-200-id) of the **virtual** **bankAccount**. If you only specify a balance account ID, Adyen uses the default **physical** **bankAccount** payment instrument assigned to the balance account.
  - `bank` Bank
    - `priority` 'crossBorder' | 'fast' | 'instant' | 'internal' | 'regular' | 'wire' — The priority for the bank transfer. This sets the speed at which the transfer is sent and the fees that you have to pay. If you don't provide this in the request, Adyen sets the optimal priority. Possible values: * **regular**: for normal, low-value transactions. * **fast**: a faster way to transfer funds, but the fees are higher. Recommended for high-priority, low-value transactions. * **wire**: the fastest way to transfer funds, but this has the highest fees. Recommended for high-priority, high-value transactions. * **instant**: for instant funds transfers in [SEPA countries](https://www.ecb.europa.eu/paym/integration/retail/sepa/html/index.en.html). * **crossBorder**: for high-value transfers to a recipient in a different country. * **internal**: for transfers to an Adyen-issued business bank account (by bank account number/IBAN).
  - `counterparty` CounterpartyInfo, required
    - `balanceAccountId` string — The unique identifier of the [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/balanceAccounts__resParam_id).
    - `bankAccount` BankAccountInfo
      - `address` Address
        - `city` string, required — The name of the city. Maximum length: 3000 characters.
        - `country` string, required — The two-character ISO-3166-1 alpha-2 country code. For example, **US**. > If you don't know the country or are not collecting the country from the shopper, provide `country` as `ZZ`.
        - `houseNumberOrName` string, required — The number or name of the house. Maximum length: 3000 characters.
        - `postalCode` string, required — A maximum of five digits for an address in the US, or a maximum of ten characters for an address in all other countries.
        - `stateOrProvince` string — The two-character ISO 3166-2 state or province code. For example, **CA** in the US or **ON** in Canada. > Required for the US and Canada.
        - `street` string, required — The name of the street. Maximum length: 3000 characters. > The house number should not be included in this field; it should be separately provided via `houseNumberOrName`.
      - `iban` string — The international bank account number as defined in the [ISO-13616](https://www.iso.org/standard/81090.html) standard.
      - `ownerName` Name
        - `firstName` string — The first name.
        - `fullName` string — The full name.
        - `infix` string — The infix in the name, if any.
        - `lastName` string — The last name.
    - `transferInstrumentId` string — The unique identifier of the [transfer instrument](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/transferInstruments__resParam_id).
  - `description` string — Your description for the transfer. It is used by most banks as the transfer description. We recommend sending a maximum of 140 characters, otherwise the description may be truncated. Supported characters: **[a-z] [A-Z] [0-9] / - ?** **: ( ) . , ' + Space** Supported characters for **regular** and **fast** transfers to a US counterparty: **[a-z] [A-Z] [0-9] & $ % # @** **~ = + - _ ' " ! ?**
  - `paymentInstrumentId` string — The unique identifier of the source [payment instrument](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#responses-200-id). If you want to make a transfer using a **virtual** **bankAccount**, you must specify the payment instrument ID of the **virtual** **bankAccount**. If you only specify a balance account ID, Adyen uses the default **physical** **bankAccount** payment instrument assigned to the balance account.
  - `reference` string — Your reference for the transfer, used internally within your platform. If you don't provide this in the request, Adyen generates a unique reference.
  - `referenceForBeneficiary` string — A reference that is sent to the recipient. This reference is also sent in all webhooks related to the transfer, so you can use it to track statuses for both parties involved in the funds movement. Supported characters: **a-z**, **A-Z**, **0-9**.

## Response `202`

Accepted - the request has been accepted for processing, but the processing has not been completed.

- Transfer
  - `amount` Amount, required
    - `currency` string, required — The three-character [ISO currency code](https://docs.adyen.com/development-resources/currency-codes).
    - `value` integer, required — The amount of the transaction, in [minor units](https://docs.adyen.com/development-resources/currency-codes).
  - `balanceAccountId` string — The unique identifier of the source [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/balanceAccounts__resParam_id).
  - `bank` Bank
    - `priority` 'crossBorder' | 'fast' | 'instant' | 'internal' | 'regular' | 'wire' — The priority for the bank transfer. This sets the speed at which the transfer is sent and the fees that you have to pay. If you don't provide this in the request, Adyen sets the optimal priority. Possible values: * **regular**: for normal, low-value transactions. * **fast**: a faster way to transfer funds, but the fees are higher. Recommended for high-priority, low-value transactions. * **wire**: the fastest way to transfer funds, but this has the highest fees. Recommended for high-priority, high-value transactions. * **instant**: for instant funds transfers in [SEPA countries](https://www.ecb.europa.eu/paym/integration/retail/sepa/html/index.en.html). * **crossBorder**: for high-value transfers to a recipient in a different country. * **internal**: for transfers to an Adyen-issued business bank account (by bank account number/IBAN).
  - `counterparty` Counterparty, required
    - `balanceAccountId` string — The unique identifier of the [balance account](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/balanceAccounts__resParam_id).
    - `bankAccount` BankAccountInfo
      - `address` Address
        - `city` string, required — The name of the city. Maximum length: 3000 characters.
        - `country` string, required — The two-character ISO-3166-1 alpha-2 country code. For example, **US**. > If you don't know the country or are not collecting the country from the shopper, provide `country` as `ZZ`.
        - `houseNumberOrName` string, required — The number or name of the house. Maximum length: 3000 characters.
        - `postalCode` string, required — A maximum of five digits for an address in the US, or a maximum of ten characters for an address in all other countries.
        - `stateOrProvince` string — The two-character ISO 3166-2 state or province code. For example, **CA** in the US or **ON** in Canada. > Required for the US and Canada.
        - `street` string, required — The name of the street. Maximum length: 3000 characters. > The house number should not be included in this field; it should be separately provided via `houseNumberOrName`.
      - `iban` string — The international bank account number as defined in the [ISO-13616](https://www.iso.org/standard/81090.html) standard.
      - `ownerName` Name
        - `firstName` string — The first name.
        - `fullName` string — The full name.
        - `infix` string — The infix in the name, if any.
        - `lastName` string — The last name.
    - `merchant` MerchantData
      - `acquirerId` string — The unique identifier of the merchant's acquirer.
      - `mcc` string — The merchant category code.
      - `merchantId` string — The merchant identifier.
      - `nameLocation` NameLocation
        - `city` string — The city where the merchant is located.
        - `country` string — The country where the merchant is located in [three-letter country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) format.
        - `countryOfOrigin` string — The home country in [three-digit country code](https://en.wikipedia.org/wiki/ISO_3166-1_numeric) format, used for government-controlled merchants such as embassies.
        - `name` string — The name of the merchant's shop or service.
        - `rawData` string — The raw data.
        - `state` string — The state where the merchant is located.
      - `postalCode` string — The merchant postal code.
    - `transferInstrumentId` string — The unique identifier of the [transfer instrument](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/transferInstruments__resParam_id).
  - `description` string — Your description for the transfer. It is used by most banks as the transfer description. We recommend sending a maximum of 140 characters, otherwise the description may be truncated. Supported characters: **[a-z] [A-Z] [0-9] / - ?** **: ( ) . , ' + Space** Supported characters for **regular** and **fast** transfers to a US counterparty: **[a-z] [A-Z] [0-9] & $ % # @** **~ = + - _ ' " ! ?**
  - `direction` 'incoming' | 'outgoing' — The direction of the transfer. Possible values: **incoming**, **outgoing**.
  - `id` string — The ID of the resource.
  - `paymentInstrumentId` string — The unique identifier of the [payment instrument](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/post/balanceAccounts__resParam_id) used in the transfer.
  - `reason` 'accountHierarchyNotActive' | 'amountLimitExceeded' | 'approved' | 'balanceAccountTemporarilyBlockedByTransactionRule' | 'counterpartyAccountBlocked' | 'counterpartyAccountClosed' | 'counterpartyAccountNotFound' | 'counterpartyAddressRequired' | 'counterpartyBankTimedOut' | 'counterpartyBankUnavailable' | 'declined' | 'declinedByTransactionRule' | 'directDebitNotSupported' | 'error' | 'notEnoughBalance' | 'pendingApproval' | 'pendingExecution' | 'refusedByCounterpartyBank' | 'routeNotFound' | 'scaFailed' | 'transferInstrumentDoesNotExist' | 'unknown' — Additional information about the status of the transfer.
  - `reference` string — Your reference for the transfer, used internally within your platform. If you don't provide this in the request, Adyen generates a unique reference.
  - `referenceForBeneficiary` string — A reference that is sent to the recipient. This reference is also sent in all webhooks related to the transfer, so you can use it to track statuses for both parties involved in the funds movement. Supported characters: **a-z**, **A-Z**, **0-9**.
  - `status` 'approvalPending' | 'atmWithdrawal' | 'atmWithdrawalReversalPending' | 'atmWithdrawalReversed' | 'authAdjustmentAuthorised' | 'authAdjustmentError' | 'authAdjustmentRefused' | 'authorised' | 'bankTransfer' | 'bankTransferPending' | 'booked' | 'bookingPending' | 'cancelled' | 'capturePending' | 'captureReversalPending' | 'captureReversed' | 'captured' | 'capturedExternally' | 'chargeback' | 'chargebackExternally' | 'chargebackPending' | 'chargebackReversalPending' | 'chargebackReversed' | 'credited' | 'depositCorrection' | 'depositCorrectionPending' | 'dispute' | 'disputeClosed' | 'disputeExpired' | 'disputeNeedsReview' | 'error' | 'expired' | 'failed' | 'fee' | 'feePending' | 'internalTransfer' | 'internalTransferPending' | 'invoiceDeduction' | 'invoiceDeductionPending' | 'manualCorrectionPending' | 'manuallyCorrected' | 'matchedStatement' | 'matchedStatementPending' | 'merchantPayin' | 'merchantPayinPending' | 'merchantPayinReversed' | 'merchantPayinReversedPending' | 'miscCost' | 'miscCostPending' | 'paymentCost' | 'paymentCostPending' | 'pendingApproval' | 'pendingExecution' | 'received' | 'refundPending' | 'refundReversalPending' | 'refundReversed' | 'refunded' | 'refundedExternally' | 'refused' | 'rejected' | 'reserveAdjustment' | 'reserveAdjustmentPending' | 'returned' | 'secondChargeback' | 'secondChargebackPending' | 'undefined', required — The result of the transfer. For example, **authorised**, **refused**, or **error**.

## Other responses

- `401` — Unauthorized - authentication required.
- `403` — Forbidden - insufficient permissions to process the request.
- `422` — Unprocessable Entity - a request validation error.
- `500` — Internal Server Error - the server could not process the request.

## Changes

- **2024-10-10** (v2) `d9364a3149c9` — 5 warning
  - added the new `accountHierarchyNotActive` enum value to the `reason` response property for the response status `202`
  - added the new `directDebitNotSupported` enum value to the `reason` response property for the response status `202`
  - added the new `pendingExecution` enum value to the `reason` response property for the response status `202`
  - added the new `pendingExecution` enum value to the `status` response property for the response status `202`
  - …1 more
- **2024-07-17** (v2) `6d4be7f5895e` — 1 warning
  - added the new `pendingApproval` enum value to the `status` response property for the response status `202`
- **2024-06-20** (v2) `f19348883c38` — 1 warning
  - added the new `declined` enum value to the `reason` response property for the response status `202`
- **2024-06-05** (v2) `6f33a585ca21` — 3 info
  - added the optional property `routingDetails` to the response with the `403` status
  - added the optional property `routingDetails` to the response with the `422` status
  - added the optional property `routingDetails` to the response with the `500` status
- **2024-05-02** (v2) `c75d1099ffad` — 1 warning
  - added the new `pendingApproval` enum value to the `reason` response property for the response status `202`

[Full history](https://skmtc.dev/adyen/apis/transferservice/changes/transfers/post.md)

---

[API](https://skmtc.dev/adyen/apis/transferservice.md) · [All operations](https://skmtc.dev/adyen/apis/transferservice/llms.txt) · [OpenAPI document](https://skmtc.dev/adyen/apis/transferservice/revisions/d9364a3149c9?raw)
