Account Funding Transactions (AFT)
Overview
An Account Funding Transaction (AFT) is an operation that allows transferring funds from a card to a bank account or to another person. This type of transaction is available for Visa and Mastercard cards, and its availability depends on the MCC (Merchant Category Code) of the merchant and the card brand.
In Paylands, the logic that determines whether an AFT is applied and its type depends on the presence of the aft field and the user data provided in extra_data when generating the payment order, as well as the merchant configuration.
AFT Types
| Type | Description | Requires receiver data |
|---|---|---|
NONE | Forces AFT not to be used. | No |
ACCOUNT_TO_ACCOUNT | Transfer of funds from a card to the same user's account. | No |
PERSON_TO_PERSON | Transfer of funds to another person (receiver data required). | Yes |
If the aft field is not provided, Paylands may automatically apply an ACCOUNT_TO_ACCOUNT AFT, as long as:
- The merchant is configured for it (based on its MCC).
- Sender information is correctly provided in the
profileandbilling_addressfields.
Structure of extra_data.aft
The aft field is included inside extra_data. Its structure depends on the AFT type:
"aft": {
"type": "PERSON_TO_PERSON",
"receiver": {
"first_name": "John",
"last_name": "Doe",
"country": "ESP",
"account_number": "4111111111111111",
"account_type": "CARD_NUMBER"
}
}
Fields of the aft object
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | AFT type: NONE, ACCOUNT_TO_ACCOUNT, PERSON_TO_PERSON |
receiver | object | Only if type = PERSON_TO_PERSON | Receiver’s transfer details |
Fields of the receiver object
| Field | Type | Required | Description |
|---|---|---|---|
first_name | string | Yes | Receiver’s first name |
last_name | string | Yes | Receiver’s last name |
country | string | Yes | Receiver’s country (ISO 3-letter format, e.g., ESP) |
account_number | string | Yes | Receiver’s card, account, or phone number |
account_type | string | No | Account type: CARD_NUMBER (default), ACCOUNT_NUMBER, MOBILE_PHONE_NUMBER |
Required sender data
To execute an AFT correctly (explicit or implicit), the following fields must be provided in extra_data:
profile
| Field | Required | Description |
|---|---|---|
first_name | Yes | User’s first name |
last_name | Yes | User’s last name |
birthdate | Yes | Date of birth (YYYY-MM-DD) |
email | No | User’s email (recommended) |
billing_address
| Field | Required | Description |
|---|---|---|
country | Yes | User’s country |
address1 | Yes | Address line |
city | Yes | City |
zip_code | Yes | Postal code |
state_code | Only if country is USA or CAN | State code |
AFT compatibility by brand and MCC
The following tables show which AFT types are supported depending on the card brand and the merchant’s MCC:
Visa
| AFT Type | Supported MCCs |
|---|---|
ACCOUNT_TO_ACCOUNT | 4829, 6012, 6051, 6211, 6540 |
PERSON_TO_PERSON | 4829 |
Mastercard
| AFT Type | Supported MCCs |
|---|---|
ACCOUNT_TO_ACCOUNT | 6012, 6051, 6211, 6536, 6537, 6540 |
PERSON_TO_PERSON | 4829, 6536, 6537, 6538, 6540 |
Integration examples
AFT type ACCOUNT_TO_ACCOUNT (explicit)
"extra_data": {
"profile": {
"first_name": "Joy",
"last_name": "Cardholder",
"email": "joy@carholder.com",
"birthdate": "1996-06-04"
},
"billing_address": {
"country": "ESP",
"address1": "Avda. del Mar",
"city": "Castellon",
"state_code": "CT",
"zip_code": "12006"
},
"aft": {
"type": "ACCOUNT_TO_ACCOUNT"
}
}
AFT type ACCOUNT_TO_ACCOUNT (implicit)
"extra_data": {
"profile": {
"first_name": "Joy",
"last_name": "Cardholder",
"email": "joy@carholder.com",
"birthdate": "1996-06-04"
},
"billing_address": {
"country": "ESP",
"address1": "Avda. del Mar",
"city": "Castellon",
"state_code": "CT",
"zip_code": "12006"
}
}
AFT type PERSON_TO_PERSON
"extra_data": {
"profile": {
"first_name": "Joy",
"last_name": "Cardholder",
"email": "joy@carholder.com",
"birthdate": "1996-06-04"
},
"billing_address": {
"country": "ESP",
"address1": "Avda. del Mar",
"city": "Castellon",
"state_code": "CT",
"zip_code": "12006"
},
"aft": {
"type": "PERSON_TO_PERSON",
"receiver": {
"first_name": "John",
"last_name": "Doe",
"country": "ESP",
"account_number": "4111111111111111",
"account_type": "CARD_NUMBER"
}
}
}
Force no AFT (NONE)
"extra_data": {
"aft": {
"type": "NONE"
}
}
AFT supported services
The following services support AFT functionality in Paylands:
- Cecabank
- Paynopain
- Trustpayments
- Nuvei
- Finaro (Credorax)
- Worldpay