Skip to content

Visa Direct

The use of a AFT (Account Funding Transaction) is not required to conduct a OCT (Original Credit Transaction) and the use of a OCT is not required to conduct a AFT.

When implementing AFTs for VISA you must populate data tag 12 in AdditionalData.

Transaction Type

For AFT use the appropriate transaction type. See Transaction types.

AFT (Account Funding Transaction/Pull Funds)

AFT is a transaction used to "pull" funds from a card account.

MCC codes

There are 6 MCC codes that are supported to AFT.

MCC Description
4829 Non-Financial Institution Wire Transfer Money Orders
6211 Brokerage
6012 Financial Institutions – Merchandise and Services
6540 Non-Financial Institutions – Stored Value Card Purchase/Load
6051 Non-Financial Institutions – Foreign Currency, Non-Fiat Currency (example, Crypto-currency), Money Orders (not Money Transfer), Account Funding (not Stored Value Load), Travelers Cheques, and Debt Repayment
8931 Accounting, Auditing, and Bookkeeping services including Payroll
7995 Gambling and online casinos

Business Application Identifier (BAI)

The BAI will be added to additional data tag 12 subfield 02.

Allowed BAI's for MCC's in AFT

Type BAI 4829 6211 6012 6540 6051 8931 7995
Account-to-Account AA X X X
Financial Institution-offered Bank-Initiated P2P Money Transfer BI X
Funds Transfer FT X X X X X X
Person-to-person PP X X
Funds Disbursement FD X X X X X
Merchant Payment MP X
Payroll Disbursement PD X X
Prepaid card load or top-up TU X X X
Liquid assets LA X X X

Extra information about BAI and MCC

For Funds Disbursement, BAI = FD, any MCC associated to the merchant can be used.

Fields

For Visa Direct AFT there are 2 subelements which all have subfields. These subelements will be added to additional data tag 12. Then there is the information of the Account Owner which is added to tag 13.

Subelement Description
01 Recipient/Sender Data
02 BAI/IsCrossBorder/Purpose of Payment

All subelements and subfields are TLV (Tag-Length-Value) parameters.

Tag (subelement or subfield) defined as alphanumerical, two characters long.

Length is defined as a three numerical characters, i.e possible values 001-999.

Value is defined as the format is given in the tables for subfields (Mandatory subfields, Conditional subfields, Optional subfields).

Subfields

X = Mandatory

C = Conditional

O = Optional

Parameter Tag Subelement Subfield Domestic CrossBorder
Sender Reference Number
Format: ans...16
12 01 01 C C
Sender Account Number
Format: ans...34
12 01 02 C C
Sender Name
Format: ans...30
12 01 03 X X
Sender Address
Format: ans...35
12 01 04 O X
Sender City
Format: ans...25
12 01 05 O X
Sender State
Format: an 2
12 01 06 O O
Sender Country
Format: an 3
12 01 07 O X
Sender Postal Code
Format: an...10
12 01 10 O O
Recipient Name
Format: an...30
12 01 0A X X
Recipient City
Format: an...25
12 01 0C O O
Recipient Country
Format: an...25
12 01 0D O O
Business Application Identifier (BAI)
Format: an...25
12 02 01 X X
Cross-Border Transaction
Format: n 1
12 02 02 X X
Purpose of Payment
Format: an 6
12 02 03 C C
Source of Funds
Format: an 2
12 02 08 O O
Account Reference Code
Format: n 2
13 80 - O O
Account Owner City Name
Format: ans...25
13 8B - O O
Account Owner Country Code
Format: a 3
13 8E - O O
Account Owner Address
Format: ans...50
13 86 - O O
Account Owner Postal Code
Format: ans...16
13 8A - O O
Account Owner Country Subdivision Code Major
Format: ans...3
13 8D - O O
Account Owner Nationality
Format: a 3
13 8F - O O
Account Owner Country of Birth
Format: a 3
13 90 - O O
Account Owner Occupation
Format: ans...35
13 91 - O O
Account Owner Date of Birth
Format: n 8
13 92 - X X
Account Owner email address personal
Format: ans...99
13 97 - O O

Additional Information for Subfields

When identifying a country (Sender Country, Recipient Country) use the numeric Country Code as seen from VISA ISO Country Codes

Subfield 02 in Subelement 02 is number that tells if the transaction will be cross-border or not.

  • 0 = that the transaction is not a Cross-Border Transaction, meaning a Domestic transaction.
  • 1 = that the transaction is a Cross-Border Transaction.

Sender Reference Number (subelement 01 - subfield 01)

The Sender Reference Number inclusion is conditional if the sender’s account number is not available or not applicable to the transaction. Otherwise it is optional for Domestic and Cross-Border Money and Non-money Transfer AFTs.

Sender Account Number (sublelement 01 - subfield 02)

The Sender Account Number is Mandatory for Europe intra-EEA cross-border. Else it is conditional if their is no sender reference number.

Account Reference Code (Tag 80) and sender or recipient name

When Field 56, Dataset 05 (Account Owner data) is present on a Visa AFT, Tag 80 (Account Reference Code) is required so Visa can identify whether the data refers to the sender or the recipient.

Additional local rules may apply:

  • South Africa: Required for cross-border AFT transactions.
  • Colombia: Mandatory for domestic AFT transactions.

Purpose of Payment (subelement 02 - subfield 03)

This field contains a code that describes the purpose of payment to classify and report the nature and purpose of the transaction.

The following countries must send the Purpose of Payment: Argentina, Bangladesh, Chile, Colombia, Egypt, India and Saudi Arabia. Other countries have the option to send the code.

Purpose of Payment Standardized Codes List

Code Description Code to be Used
Account management ISACCT
Transaction is the payment of allowance ISALLW
Settlement of annuity ISANNI
Unemployment disability benefit ISBENE
Business expenses ISBEXP
Bonus payment ISBONU
Bus transport related business ISBUSB
Cash management transfer ISCASH
Payment of cable TV bill ISCBTV
Government institute issued related to cash compensation, helplessness, and disability ISCCHD
Credit card payment ISCCRD
Payment of credit card bill ISCDBL
Payment for charity reasons ISCHAR
Collection payment ISCOLL
Commercial payment ISCOMC
Commission ISCOMM
Compensation relating to interest loss/value date adjustment and can include fees ISCOMP
Payment of copyright ISCPYR
Related to a debit card payment ISDCRD
Payment of a deposit ISDEPT
Payment of dividend ISDIVD
Payment of study/tuition fees ISEDUC
Payment of electricity bill ISELEC
Energies ISENRG
General fees ISFEES
Payment for ferry related business ISFERB
Foreign exchange ISFREX
Payment of gas bill ISGASB
Compensation to unemployed persons during insolvency procedures ISGFRP
Government payment ISGOVT
Health insurance ISHLTI
Reimbursement of credit card payment ISICCP
Reimbursement of debit card payment ISIDCP
Payment of car insurance premium ISINPC
Transaction is related to the payment of an insurance claim ISINSC
Installment ISINSM
Insurance premium ISINSU
Payment of mutual funds, investment products and shares ISINVS
Intra company payment ISINTC
Interest ISINTE
Income tax ISINTX
Investment ISINVS
Labor insurance ISLBRI
License fee ISLICF
Life insurance ISLIFI
Loan ISLOAN
Medical services ISMDCS
Mobile P2B payment ISMP2B
Mobile P2P payment ISMP2P
Mobile top up ISMTUP
Transaction is related to a payment of other telecom related bill ISOTLC
Payroll ISPAYR
Contribution to pension fund ISPEFC
Pension payment ISPENS
Payment of telephone bill ISPHON
Property insurance ISPPTI
Transaction is for general rental/lease ISRELG
The payment of rent ISRENT
Payment for railway transport related business ISRLWY
Royalties ISROYA
Salary payment ISSALA
Payment to savings/retirement account ISSAVG
Securities ISSECU
Social security benefit ISSSBE
Study ISSTDY
Subscription ISSUBS
Supplier payment ISSUPP
Refund of a tax payment or obligation ISTAXR
Tax payment ISTAXS
Transaction is related to a payment of telecommunications related bill ISTBIL
Trade services operation ISTRAD
Treasury payment ISTREA
Payment for travel ISTRPT
Utility bill payment ISUBIL
Value added tax payment ISVATX
With holding ISWHLD
Payment of water bill ISWTER
Not otherwise specified ISNOWS
Other ISOTHR

Payment facilitator address fields

The following parameters should be provided when doing cross-border AFT's. PaymentFacilitatorStreetAddress
PaymentFacilitatorCityName
PaymentFacilitatorStateProvinceCode
PaymentFacilitatorPostalCode
PaymentFacilitatorCountryCode

Cross-border AFT/OCT regional data requirements

Visa enforces AML data requirements on cross-border AFT and OCT transactions destined for specific countries. When a mandatory field is missing, Visa returns decline code 64 (Transaction does not fulfill AML requirement).

Destined for New Zealand

MerchantStreet (Acceptor Street Address, ISO 34.02.CO) is mandatory.

Destined for Saudi Arabia

Purpose of Payment (additional data tag 12, subelement 02, subfield 03) is mandatory. Send one of the standardized codes listed above.

Destined for Australia or New Zealand

When Account Owner data (additional data tag 13) is present and Tag 80 (Account Reference Code) = 06, the Account Owner Address (tag 86) is mandatory.

North America specification

When implementing AFTs for VISA to and from North America you must populate data tag 13 in AdditionalData.

This is information of the Account Owner for the AFT.

Description Subfield Format
Account Owner City Name 8B ans ...25
Account Owner Country Code 8E a 3
Account Owner Address 86 ans ...50
Account Owner Postal Code 8A ans ...16
Account Owner Country Subdivision Code Major 8D ans ...3

For all transactions to and from Canada the following must be populated: Account Owner City Name, Account Owner Country Code, Account Owner Address, Account Owner Postal Code.

List of all subdivison codes

If the Account Owner Country Code is CAN or USA the Account Owner Country Subdivision Code Major must be populated as well.

An example of Country Subdivision Code Major.

In Canada for Ontario the subdivision code is ON.

In USA for Florida the subdivision code is FL.

Example of legal Tag 13.

Canada : 8B007Toronto8E003CAN86012MainStreet 18A0031058D002ON.

USA : 8E003USA8D002FL.

Account Identifier

When implementing AFTs for VISA for extra information, you can populate data tag 14 in AdditionalData.

This is information of the Account Identifier for the AFT.

Description Subfield Format
Account Identifier Value 83 ans ...34
Account Identifier Type Code 84 an 2

The Account Identifier Value contains the account identifier value of the recipient. And will be sent recipient issuer.

The Account Identifier Type Code contains the account identifier type. The following are the 9 options possible to send in:

  • 00 (Other)
  • 01 (RTN + Bank Account)
  • 02 (IBAN)
  • 03 (Card Account)
  • 04 (Email)
  • 05 (Phone Number)
  • 06 (Bank account number (BAN) + Bank Identification Сode (BIC))
  • 07 (Wallet ID)
  • 08 (Social Network ID)

Examples

This is a correct string for additional data tag 12 for a AFT transaction

121350110102016411111111111111103011Jon Jonsson04013Laugarvegur 105009Reykjavik070033520A019Gunna Gunnarsdottir0202401002FD02001103006ISACCT

Lets break it down to understand it better.

additionalDataTag12 = 121350110102016411111111111111103011Jon Jonsson04013Laugarvegur 105009Reykjavik070033520A019Gunna Gunnarsdottir0202401002FD02001103006ISACCT

12 135 
    01 101
        02 016 4111111111111111
        03 011 Jon Jonsson
        04 013 Laugarvegur 1
        05 009 Reykjavik
        07 003 352
        0A 019 Gunna Gunnarsdottir
    02 024 
        01 002 FD
        02 001 1
        03 006 ISACCT

Code Example

// Subelement 01

var senderAccountNumber = "4111111111111111";
var senderName = "Jon Jonsson";
var senderAddress = "Laugarvegur 1";
var senderCity = "Reykjavik";
var senderCountry = "352";
var recipientName = "Gunna Gunnarsdottir";

var subelement01 = "02" + senderAccountNumber.Length.ToString("000") + senderAccountNumber 
                           + "03" + senderName.Length.ToString("000") + senderName
                           + "04" + senderAddress.Length.ToString("000") + senderAddress 
                           + "05" + senderCity.Length.ToString("000") + senderCity 
                           + "07" + senderCountry.Length.ToString("000") + senderCountry
                           + "0A" + recipientName.Length.ToString("000") + recipientName;


//Subelement 02

var bai = "FD";
var isDomestic = "1";
var pop = "ISACCT";
var subelement02 = "01" + bai.Length.ToString("000") + bai
                   + "02" + isDomestic.Length.ToString("000") + isDomestic
                   + "03" + pop.Length.ToString("000") + pop;
//Additional data tag 12

var additonalDataTag12 = "01" + subelement01.Length.ToString("000") + subelement01 +"02" + subelement02.Length.ToString("000") + subelement02;

additonalDataTag12 = "12" + additonalDataTag12.Length.ToString("000") + additonalDataTag12;