# 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)