--- title: "Bank Transfer for API only" description: "Add Bank Transfer to an existing API-only integration." url: "https://docs.adyen.com/payment-methods/bank-transfer/api-only" source_url: "https://docs.adyen.com/payment-methods/bank-transfer/api-only.md" canonical: "https://docs.adyen.com/payment-methods/bank-transfer/api-only" last_modified: "2026-05-24T12:54:31+02:00" language: "en" --- # Bank Transfer for API only Add Bank Transfer to an existing API-only integration. [View source](/payment-methods/bank-transfer/api-only.md) Accept Bank Transfer payments using our APIs, and build your own payment form to have full control over the look and feel of your checkout page. ## Requirements | Requirement | Description | | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | Make sure that you have built an [API only integration](/online-payments/build-your-integration/advanced-flow?platform=Web\&integration=API%20only). | | **[Webhooks](/development-resources/webhooks)** | Make sure that you have configured standard webhooks. | | **Setup steps** | Before you begin, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to add Bank Transfer in your Customer Area. Also tell them what type of value you want us to generate as the reference that shoppers need to use on their bank transfer: a short version of the transaction's PSP reference, or the `reference` from your payment request. | ## Build your payment form 1. In your POST [/paymentMethods](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) request, use: * `currency`: **EUR** and the `countryCode` for one of the [supported European countries](/payment-methods/bank-transfer). 2. When you receive the `/paymentMethods` response, note the object for Bank Transfer: * `name`: **Bank Transfer**. Use this to show the payment method in your payment form. * `type`: **bankTransfer\_IBAN**. Use this in your payment request as the `paymentMethod.type`. 3. Make sure that when shoppers select **Bank Transfer**, you obtain their email address or other contact details so that you can inform them when their transfer is completed. ## Make a payment 1. Make a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, specifying: | Parameter | Required | Description | | -------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `paymentMethod.type` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **bankTransfer\_IBAN** | | `countryCode` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's country/region. Format: the two-letter [ISO-3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code. This is used to return a virtual bank account number and other parameters required for bank transfers in the shopper's country/region. Localized virtual accounts are currently offered for Germany (DE), France (FR), and the Netherlands (NL). For all other country codes, a Netherlands (NL) virtual account will be provided by default. | | `returnUrl` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your URL, with a maximum of 1024 characters. The shopper will *not be redirected* to their bank and then back to your site. However, the Checkout API requires this parameter so you must specify it even though it is not used for Bank Transfer payments. | ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "amount":{ "currency":"EUR", "value":89600 }, "countryCode": "DE", "paymentMethod":{ "type":"bankTransfer_IBAN" }, "merchantAccount":"ADYEN_MERCHANT_ACCOUNT", "reference":"YOUR_ORDER_REFERENCE", "returnUrl":"https://your-company.example.com/checkout?shopperOrder=12xy.." }' ``` 2. In the `/payments` response, note the [action](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200-action-CheckoutBankTransferAction) object. This contains the transfer details that you need to present to the shopper, so that the shopper can copy those to their bank transfer instruction. Save the following transfer details: | Parameter | Description | | | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | | `beneficiary` | Your Doing Business As (DBA) name. This is the static part of the [transaction description](/account/transaction-description) defined in your Customer Area. Any dynamic transaction description specified in payment requests is ignored.For EUR transfers we return **Adyen NV** instead of your DBA name. | | | `iban` and `bic` | The virtual bank account details for EUR transactions, consisting of the International Bank Account Number (IBAN) and the Bank Identifier Code (BIC). | | | `totalAmount` | An object with the `currency` and `value` (amount) of the transaction. | | | `reference` | An automatically generated value, either a short version of the transaction's PSP reference, or the `reference` from the payment request. Our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) can configure your preference when you ask them to add Bank Transfer in your Customer Area, but this cannot be changed later. | | **/payments response for a EUR transaction** ```json { "pspReference":"FJM726V375BV9D82", "resultCode":"Received", "action":{ "paymentMethodType":"bankTransfer_IBAN", "totalAmount":{ "currency":"EUR", "value":89600 }, "beneficiary":"Adyen NV", "iban":"DE48499999601234567890", "bic":"ADYXDEB2", "reference":"V375B8", "type":"bankTransfer" }, "merchantReference":"YOUR_ORDER_REFERENCE" } ``` ## Present the transfer details 1. Using the [action](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200-action-CheckoutBankTransferAction) object parameters from the `/payments` response, present the details that the shopper must specify when they initiate the bank transfer in their (online or mobile) banking environment. 2. Ensure that in addition to the transfer details, you also present: * Instructions for the shopper about what to do. * An explanation of what will happen next. For example, how you are going to confirm their payment, and when you are going to fulfill their order. ## Confirm payment The bank transfer payment stays **Open** until funds arrive in the virtual bank account. When the funds arrive, the payment status is updated to **Settled** or **SettledAcquirer**. We inform you of changes in the payment status using [AUTHORISATION](https://docs.adyen.com/api-explorer/Webhooks/latest/post/AUTHORISATION) webhooks. You can also view the status of bank transfer payments in your [live Customer Area](https://ca-live.adyen.com/). To confirm payment: 1. Check that you have received an **AUTHORISATION** webhook that confirms that the funds have arrived. This webhook includes: * The `pspReference` from the `/payments` response. * `paymentMethod`: **bankTransfer\_IBAN** * `success`: **true** **Example** ```json { "live":"true", "notificationItems":[ { "NotificationRequestItem":{ "amount":{ "currency":"EUR", "value":48600 }, "eventCode":"AUTHORISATION", "eventDate":"2024-12-11T01:42:37+01:00", "merchantAccountCode":"YOUR_MERCHANT_ACCOUNT", "merchantReference":"YOUR_ORDER_REFERENCE", "paymentMethod":"bankTransfer_IBAN", "pspReference":"FJM726V375BV9D82", "success":"true" } } ] } ``` 2. Contact the shopper to inform them that the payment is complete. ## Recurring payments Bank Transfer supports tokenization of the shopper's payment details for recurring transactions. We strongly recommend that you ask explicit permission from the shopper if you intend to make future recurring payments. Being transparent about the payment schedule and the amount reduces the risk of chargebacks. To make recurring payments, refer to [Tokenization](/online-payments/tokenization) to: * Create a token through the initial payment. * Use the token in subsequent payments. * Manage tokens. Recurring transactions in EUR are processed as SEPA Direct Debit transactions. This means that in the tokenized subsequent payments you must specify: * [paymentMethod.type](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-paymentMethod-SepaDirectDebitDetails-type): **sepadirectdebit** ## Test and go live You can test Bank Transfer payments in the test environment by simulating a transfer of funds: 1. Make a test payment as described above. 2. In your [test Customer Area](https://ca-test.adyen.com/) go to **Transactions** > **Offers**. 3. Select the test payment and then select **Promote this offer to sale**.\ This converts the offer to a payment, which will then be settled. This can take a while because this simulated settlement happens once every day. 4. Check the **AUTORISATION** webhook. Before you can accept live Bank Transfer payments, you need to contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to add Bank Transfer in your live Customer Area. ## See also * [API-only integration guide](/online-payments/build-your-integration/advanced-flow?platform=Web\&integration=API%20only) * [Transaction description and DBA name](/account/transaction-description) * [Webhooks](/development-resources/webhooks) * [Tokenization for recurring payments](/online-payments/tokenization)