# Perform an Account Funding Transaction In an Account Funding Transaction (AFT) funds are pulled from one account to fund a non-merchant account. For example, to load a prepaid card, add funds to a wallet, or fund a person-to-person (P2P) money transfer. > **Information** > > To enable AFTs, contact your account manager or [request support](https://dashboard.checkout.com/support/new?topic=case_account_management_and_access&issue=issue_account_changes). > **Warning** > > Checkout.com enforces data integrity checks on all AFT requests. Payments that fail these checks are declined with a `422` status code. Review the [field validation requirements](#Field_validation_requirements) and update your integration accordingly. --- ## How it works Card schemes may require different information about the recipient and the sender depending on the following: - Operating region – Where the transaction is made - Transaction category – Whether it's a domestic or cross-border transaction --- ## Field validation requirements To comply with card scheme regulations, Checkout.com validates sender and recipient fields on all AFT requests. Payments that fail these checks are declined with a `422` status code. ### Sender and recipient names The following rules apply to `sender.first_name`, `sender.last_name`, `recipient.first_name`, and `recipient.last_name`: | Rule | Requirement | | --- | --- | | Alphabet | Must use the Latin alphabet. Standard accents are permitted (for example, é, ö, ø, ç). | | Characters | Must not include special characters or numeric characters, including Chinese and Arabic numerals. | | Spacing | Must not include double spaces, tabs, or other whitespace. | | Emoji | Must not contain emoji characters. | | Titles | Must not contain honorific titles (not case-sensitive), for example, MR, MRS, or MISS. | | Disallowed values | Must not contain the following values (not case-sensitive):

- `CARD`
- `TECHNOBANK`
- `INSTANT`
- `VIRTUAL`
- `MY`
- `KDV`
- `GOLD`
- `VISA`
- `MONO`
- `VIZA`
- `PRIVATE`
- `Tester`
- `Unknown`
- `NA`
- `Test` | ### Sender and recipient address lines The following rules apply to `sender.address.address_line1`, `sender.address.address_line2`, `recipient.address.address_line1`, and `recipient.address.address_line2`: | Rule | Requirement | | --- | --- | | Alphabet | Must use the Latin alphabet. Standard accents are permitted (for example, é, ö, ø, ç). | | Characters | Must not include special characters or Chinese and Arabic numerals. Western numeric characters (0–9) are permitted. | | Spacing | Must not include double spaces, tabs, or other whitespace. | ### Sender and recipient city and state The following rules apply to `sender.address.city`, `recipient.address.city`, `sender.address.state`, and `recipient.address.state`: | Rule | Requirement | | --- | --- | | Alphabet | Must use the Latin alphabet. Standard accents are permitted (for example, é, ö, ø, ç). | | Characters | Must not include special characters or numeric characters, including Chinese and Arabic numerals. | | Spacing | Must not include double spaces, tabs, or other whitespace. | ### Prohibited countries Payments are declined if `sender.address.country` or `recipient.address.country` contains any of the following country codes: - `AF` – Afghanistan - `BY` – Belarus - `CU` – Cuba - `IQ` – Iraq - `IR` – Iran - `KP` – North Korea - `LY` – Libya - `RU` – Russia - `SD` – Sudan - `SY` – Syria - `VE` – Venezuela --- ## Perform a Visa AFT To perform a Visa AFT, call the [Request a payment or payout](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout) endpoint. > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `POST` `https://{prefix}.api.checkout.com/payments` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/payments` In the request body, provide the following: | Field name | Description | | --- | --- | | `processing.aft`

`boolean` | Set to `true`. | | `instruction.purpose`

`string` | The purpose of the payment.

This field is required if the card's `issuer_country` field is one of:

- `AR` – Argentina
- `BD` – Bangladesh
- `CL` – Chile
- `CO` – Colombia
- `EG` – Egypt
- `IN` – India
- `MX` – Mexico
- `SA` – Saudi Arabia

You must [retrieve the card metadata](https://www.checkout.com/docs/payments/manage-payments/retrieve-card-metadata.md) to view the `issuer_country`. | Depending on the operating region, you must provide certain required data in the `recipient` and `sender` objects. Checkout.com supports the following regions and transaction categories for Visa: - Europe – Domestic - Europe – Cross-border and intra-Europe - APAC – Domestic - APAC – Cross-border - Canada – Domestic - UAE – Domestic - UAE – Cross-border - USA – Domestic > **Note** > > USA cross-border transactions for Visa are not supported. ### Europe – Domestic | Sender data | Recipient data | | --- | --- | | The sender data is optional. | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- International bank account number (IBAN)
- Phone number
- The first six digits and last four digits of the primary account number (PAN)

#### Card

If you're funding a card, provide the PAN. | ### Europe – Cross-border and intra-Europe | Sender data | Recipient data | | --- | --- | | The following fields are required:

- `type`
- `first_name`
- `last_name`
- `address.address_line1`
- `address.city`
- `address.state` – Only if the sender is in the United States (US) or Canada
- `address.country`
- `date_of_birth` | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the PAN.

#### Australia, New Zealand, or the South Pacific

If the recipient card was issued in Australia, New Zealand, or the South Pacific, you must provide `address.address_line1`.

You can omit this field if the recipient is an account, such as a digital wallet.

#### Canada

For recipients in Canada and funding cards issued in Canada, the following `address` fields are required:

- `address.address_line1`
- `address.city`
- `address.state`
- `address.zip`
- `address.country` | ### APAC – Domestic The recipient and the sender data is optional. ### APAC – Cross-border | Sender data | Recipient data | | --- | --- | | The following fields are required:

- `type`
- `first_name`
- `last_name`
- `address.address_line1`
- `address.city`
- `address.state` – Only if the sender is in the US or Canada
- `address.country`
- `date_of_birth` | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the PAN.

#### Australia, New Zealand, or the South Pacific

If the recipient card was issued in Australia, New Zealand, or the South Pacific, you must provide `address.address_line1`.

You can omit this field if the recipient is an account, such as a digital wallet.

#### Canada

For recipients in Canada and funding cards issued in Canada, the following `address` fields are required:

- `address.address_line1`
- `address.city`
- `address.state`
- `address.zip`
- `address.country` | ### Canada – Domestic The recipient and the sender data is optional. ### UAE – Domestic Recipient and the sender data is optional. ### UAE – Cross-border | Sender data | Recipient data | | --- | --- | | The following fields are required:

- `type`
- `first_name`
- `last_name`
- `address.address_line1`
- `address.city`
- `address.state` – Only if the sender is in the US or Canada
- `address.country`
- `date_of_birth` | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the PAN.

#### Australia, New Zealand, or the South Pacific

If the recipient card was issued in Australia, New Zealand, or the South Pacific, you must provide `address.address_line1`.

You can omit this field if the recipient is an account, such as a digital wallet.

#### Canada

For recipients in Canada and funding cards issued in Canada, the following `address` fields are required:

- `address.address_line1`
- `address.city`
- `address.state`
- `address.zip`
- `address.country` | ### USA – Domestic | Sender data | Recipient data | | --- | --- | | The following fields are required:

- `type`
- `first_name`
- `last_name`
- `address.address_line1`
- `address.city`
- `address.state`
- `address.zip`
- `address.country` | The following fields are required:

- `first_name`
- `last_name`
- `address.address_line1`
- `address.city`
- `address.state`
- `address.zip`
- `address.country` | ### Merchant-initiated transactions You can use Visa AFTs to perform merchant-initiated transactions (MITs). For example, to enable your customers to add funds to their wallets on a recurring basis, or automatically based on pre-agreed balance thresholds. **Recurring payments** You can perform recurring payments as AFTs. For example, to enable customers to add funds to their wallets: 1. Perform an initial AFT to store the customer's card details. For requirements, see [Store card details during an initial recurring transaction](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/recurring-payments-with-stored-card-details.md#Store_the_card_details_during_the_initial_transaction).
Ensure you provide `"payment_type": "Recurring"`. 2. Process any subsequent payments as AFTs. For requirements, see: - [Request a payment in a subsequent MIT](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/recurring-payments-with-stored-card-details.md#Request_a_payment_in_a_subsequent_MIT) - [Visa transaction ID requirements](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/recurring-payments-with-stored-card-details.md#Scheme_transaction_ID_requirements) ### Initial request example ```json { "source": { "type": "token", "token": "tok_4gzeau5o2uqubbk6fufs3m7p54" }, "amount": 6500, "currency": "GBP", "payment_type": "Recurring", "merchant_initiated": false, "3ds": { "enabled": true, "challenge_indicator": "challenge_requested_mandate" }, "processing": { "aft": true }, "recipient": { "first_name": "Ali", "last_name": "Farid", "account_number": "5555554444", "address": { "country": "GB" } }, "sender": { "type": "individual", "first_name": "Jia", "last_name": "Tsang", "date_of_birth": "1990-01-01", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" } } } ``` ### Subsequent request example ```json { "source": { "type": "card", "number": 4242424242424242, "expiry_month": 10, "expiry_year": 2026, "stored": true }, "amount": 5000, "currency": "USD", "payment_type": "Recurring", "merchant_initiated": true, "previous_payment_id": "pay_paymentid", "processing": { "aft": true }, "recipient": { "first_name": "Ali", "last_name": "Farid", "account_number": "5555554444", "address": { "country": "GB" } }, "sender": { "type": "individual", "first_name": "Jia", "last_name": "Tsang", "date_of_birth": "1990-01-01", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" } } } ``` **Unscheduled payments** You can process unscheduled payments as AFTs. For example, to enable your customers to reload their wallets when their available balance falls below a certain threshold. 1. Perform an initial AFT to store the customer's card details. For requirements, see [Unscheduled payments with stored card details](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/unscheduled-payments-with-stored-card-details.md). 2. Process any subsequent payments as AFTs. For requirements see [Request an unscheduled payment](https://www.checkout.com/docs/payments/accept-payments/pay-with-stored-card-details/unscheduled-payments-with-stored-card-details.md#Request_an_unscheduled_payment). ### Initial request example ```json { "source": { "type": "card", "number": 4242424242424242, "expiry_month": 10, "expiry_year": 2026 }, "amount": 0, "currency": "USD", "payment_type": "Unscheduled", "merchant_initiated": false, "3ds": { "enabled": true, "challenge_indicator": "challenge_requested_mandate" }, "processing": { "aft": true }, "recipient": { "first_name": "Ali", "last_name": "Farid", "account_number": "5555554444", "address": { "country": "GB" } }, "sender": { "type": "individual", "first_name": "Jia", "last_name": "Tsang", "date_of_birth": "1990-01-01", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" } } } ``` ### Subsequent request example ```json { "source": { "type": "card", "number": 4242424242424242, "expiry_month": 10, "expiry_year": 2026, "stored": true }, "amount": 5000, "currency": "USD", "payment_type": "Unscheduled", "merchant_initiated": true, "previous_payment_id": "pay_paymentid", "processing": { "merchant_initiated_reason": "delayed_charge", "aft": true }, "recipient": { "first_name": "Ali", "last_name": "Farid", "account_number": "5555554444", "address": { "country": "GB" } }, "sender": { "type": "individual", "first_name": "Jia", "last_name": "Tsang", "date_of_birth": "1990-01-01", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" } } } ``` --- ## Perform a Mastercard AFT To perform a Mastercard AFT, call the [Request a payment or payout](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout) endpoint. > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `POST` `https://{prefix}.api.checkout.com/payments` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/payments` In the request body, set the `processing.aft` boolean to `true`. Depending on the operating region, you must provide certain required data in the `recipient` and `sender` objects. Checkout.com supports the following regions and transaction categories for Mastercard: - Europe and APAC – Domestic - Europe and APAC – Cross-border - Canada – Domestic - UAE – Domestic - UAE – Cross-border - USA – Domestic > **Note** > > UAE and USA cross-border transactions for Mastercard are not supported. ### Europe and APAC – Domestic | Sender data | Recipient data | | --- | --- | | The sender data is optional. | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the following:

- PAN
- `address.country` | ### Europe and APAC – Cross-border | Sender data | Recipient data | | --- | --- | | The sender data is optional. | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the following:

- PAN
- `address.country` | ### Canada – Domestic | Sender data | Recipient data | | --- | --- | | The sender data is optional. | The following fields are required:

- `first_name`
- `last_name`
- `account_number`
- `address.country`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN | ### UAE – Domestic | Sender data | Recipient data | | --- | --- | | The sender data is optional. | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the following:

- PAN
- `address.country` | ### UAE – Cross-border | Sender data | Recipient data | | --- | --- | | The sender data is optional. | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the following:

- PAN
- `address.country` | ### USA – Domestic | Sender data | Recipient data | | --- | --- | | The following fields are required:

- `type`
- `first_name`
- `last_name`
- `address.address_line1`
- `address.city`
- `address.state`
- `address.zip`
- `address.country` | The following fields are required:

- `first_name`
- `last_name`
- `account_number`

#### Account

If you're funding an account, provide the recipient's account number. This can be one of:

- IBAN
- Phone number
- The first six digits and last four digits of the PAN

#### Card

If you're funding a card, provide the following:

- PAN
- `address.address_line1`
- `address.city`
- `address.state`
- `address.zip`
- `address.country` | ### Request example ```json { "source": { "type": "token", "token": "tok_4gzeau5o2uqubbk6fufs3m7p54" }, "amount": 6500, "currency": "GBP", "processing": { "aft": true }, "recipient": { "first_name": "Ali", "last_name": "Farid", "account_number": "5555554444", "address": { "country": "GB" } }, "sender": { "type": "individual", "first_name": "Jia", "last_name": "Tsang", "date_of_birth": "1990-01-01", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" } } } ``` ### Response example ```json { "id": "pay_mbabizu24mvu3mela5njyhpit4", "action_id": "act_mbabizu24mvu3mela5njyhpit4", "amount": 6500, "currency": "GBP", "approved": true, "status": "Authorized", "auth_code": "770687", "eci": "05", "scheme_id": "638284745624527", "response_code": "10000", "response_summary": "Approved", "risk": { "flagged": false }, "source": { "id": "src_nwd3m4in3hkuddfpjsaevunhdy", "type": "card", "expiry_month": 9, "expiry_year": 2022, "scheme": "Visa", "last4": "4242", "fingerprint": "F31828E2BDABAE63EB694903825CDD36041CC6ED461440B81415895855502832", "bin": "424242", "card_type": "CREDIT", "card_category": "CONSUMER", "issuer": "Test Bank", "issuer_country": "GB", "product_id": "A", "product_type": "Visa Traditional", "avs_check": "S", "cvv_check": "" }, "customer": { "id": "cus_udst2tfldj6upmye2reztkmm4i" }, "processing": { "acquirer_transaction_id": "708183248720806995996", "retrieval_reference_number": "471056794828", "merchant_category_code": "0742", "scheme_merchant_id": "502177", "aft": true }, "processed_on": "2024-01-25T11:03:36Z", "reference": "ORD-5023-4E89", "_links": { "self": { "href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4" }, "actions": { "href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4/actions" }, "capture": { "href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4/captures" }, "void": { "href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4/voids" } } } ``` The `approved` boolean indicates if authorization was successful. A value of `true` indicates success. If authorization failed, it may be because the payment used: - An invalid card - An expired card - A valid card with an insufficient balance If you receive a `202` response, the payment requires a redirect. For example, to perform [3D Secure (3DS)](https://www.checkout.com/docs/payments/authenticate-payments/3d-secure.md) authentication. Potentially fraudulent authorization requests return `risk.flagged: true` to show that the payment has been flagged. The possible values for the `status` field include: - `Authorized` - `Captured` - `Card Verified` - `Declined` - `Pending` – For 3DS payments only > **Information** > > For more information about the response, see: > > - [CVV codes and descriptions](https://www.checkout.com/docs/resources/codes/cvv-response-codes.md) > - [AVS codes](https://www.checkout.com/docs/resources/codes/avs-codes.md) > - [API response codes](https://www.checkout.com/docs/resources/codes/api-response-codes.md) (if the authorization failed)