🚧

Coming soon

📘

This feature is only available in Middle East region and limited to certain acquirers.

This feature can only be used if your account has been enabled with the respective service.

Below flow describes the required steps and nexo message layouts for an AANI QR code payment.
For more information about AANI please refer to the official web page of AANI.

Sale / preauthorisation

Terminal (host) sends Acceptor Authorisation Request to IPG to request QR code.

FieldPresenceValue
MsgFctnMFAUQ
Envt/Card/CardBrndMAANI
Envt/POI/GrpIdMGateway Store ID
Envt/POI/Id/IdMTerminal ID
Tx/TxCaptrM'false' for preauthorisation | 'true' for sale
Tx/TxTpM'RESA' for preauthorisation | 'CRDP' for sale
Tx/SvcAttrCIRES (only present for preauthorisation)
Tx/TxDtls/AmtQlfrM'RESD' for preauthorisation | 'ACTL' for sale
Tx/TxDtls/TtlAmtM
Tx/TxDtls/CcyM Only AED is supported.
Cntxt/PmtCntxt/CardPresMfalse
Cntxt/PmtCntxt/CardhldrPresMtrue
Cntxt/PmtCntxt/CardDataNtryMdMPHYS
TxIdMTransaction identifier assigned by terminal (TxDtTm + TxRef)
CstmrDvc/TpM'qr_code_based' for QR code payment
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:caaa.001.001.06">
    <AccptrAuthstnReq>
        <Hdr>
            <MsgFctn>FAUQ</MsgFctn>
            <PrtcolVrsn>5.0</PrtcolVrsn>
            <XchgId>002</XchgId>
            <CreDtTm>2025-03-07T09:31:12+01:00</CreDtTm>
            <InitgPty>
                <Id>66000001</Id>
                <Tp>ACCP</Tp>
            </InitgPty>
            <RcptPty>
                <Id>FDEL</Id>
                <Tp>ACQR</Tp>
            </RcptPty>
            <Tracblt>
                <RlayId>
                    <Id>TracePoint-1</Id>
                    <Tp>ACCP</Tp>
                </RlayId>
                <TracDtTmIn>2016-07-08T09:01:01.01+02:00</TracDtTmIn>
                <TracDtTmOut>2016-07-08T09:01:01.02+02:00</TracDtTmOut>
            </Tracblt>
        </Hdr>
        <AuthstnReq>
            <Envt>
                <Acqrr>
                    <Id>
                        <Id>FDEL</Id>
                        <Tp>ACQR</Tp>
                    </Id>
                    <ParamsVrsn>2016-05-07 08:00:00</ParamsVrsn>
                </Acqrr>
                <Mrchnt>
                    <Id>
                        <Id>12345678</Id>
                        <ShrtNm>12345678</ShrtNm>
                    </Id>
                    <CmonNm>Merchant Name 1</CmonNm>
                    <LctnAndCtct>
                        <PstlAdr>
                            <AdrLine>,Place de l'EtoileäöüßÄÖÜ 1,Paris,12345</AdrLine>
                            <TwnNm>Paris</TwnNm>
                            <Ctry>FR</Ctry>
                        </PstlAdr>
                        <AddtlCtctInf>11111111</AddtlCtctInf>
                    </LctnAndCtct>
                </Mrchnt>
                <POI>
                    <Id>
                        <Id>xxxxxx</Id>
                    </Id>
                    <GrpId>xxxxx</GrpId>
                    <Cpblties>
                        <CardRdngCpblties>CICC</CardRdngCpblties>
                        <CardRdngCpblties>MGST</CardRdngCpblties>
                        <CardRdngCpblties>PHYS</CardRdngCpblties>
                        <CrdhldrVrfctnCpblties>MNSG</CrdhldrVrfctnCpblties>
                        <CrdhldrVrfctnCpblties>FCPN</CrdhldrVrfctnCpblties>
                        <CrdhldrVrfctnCpblties>FEPN</CrdhldrVrfctnCpblties>
                        <CrdhldrVrfctnCpblties>NPIN</CrdhldrVrfctnCpblties>
                        <CrdhldrVrfctnCpblties>OTHR</CrdhldrVrfctnCpblties>
                        <PINLngthCpblties>12</PINLngthCpblties>
                        <ApprvlCdLngth>6</ApprvlCdLngth>
                        <MxScrptLngth>20</MxScrptLngth>
                        <CardCaptrCpbl>false</CardCaptrCpbl>
                        <OnLineCpblties>SMON</OnLineCpblties>
                        <MsgCpblties>
                            <Dstn>CDSP</Dstn>
                            <AvlblFrmt>TEXT</AvlblFrmt>
                            <NbOfLines>2</NbOfLines>
                            <LineWidth>20</LineWidth>
                        </MsgCpblties>
                    </Cpblties>
                    <Cmpnt>
                        <Tp>TERM</Tp>
                        <Id>
                            <ItmNb>1</ItmNb>
                            <PrvdrId>xxxxx</PrvdrId>
                            <Id>xxxx</Id>
                            <SrlNb>xxxx</SrlNb>
                        </Id>
                        <StdCmplc>
                            <Id>1234567</Id>
                            <Vrsn>1</Vrsn>
                            <Issr>GBIC</Issr>
                        </StdCmplc>
                    </Cmpnt>
                    <Cmpnt>
                        <Tp>APLI</Tp>
                        <Id>
                            <ItmNb>54712001</ItmNb>
                            <PrvdrId>xxx</PrvdrId>
                        </Id>
                        <Sts>
                            <VrsnNb>1.0</VrsnNb>
                        </Sts>
                        <StdCmplc>
                            <Id>SEPA-FAST</Id>
                            <Vrsn>3.0</Vrsn>
                            <Issr>CIR</Issr>
                        </StdCmplc>
                    </Cmpnt>
                </POI>
                <Card>
                    <CardBrnd>AANI</CardBrnd>
                </Card>
                <CstmrDvc>
                    <Tp>qr_code_based</Tp>
                </CstmrDvc>
                <Crdhldr>
                    <Lang>en</Lang>
                </Crdhldr>
            </Envt>
            <Cntxt>
                <PmtCntxt>
                    <CardPres>false</CardPres>
                    <CrdhldrPres>true</CrdhldrPres>
                    <AttndncCntxt>ATTD</AttndncCntxt>
                    <CardDataNtryMd>PHYS</CardDataNtryMd>
                    <FllbckInd>NFLB</FllbckInd>
                </PmtCntxt>
            </Cntxt>
            <Tx>
                <TxCaptr>true</TxCaptr>
                <TxTp>CRDP</TxTp>
                <MrchntCtgyCd>5541</MrchntCtgyCd>
                <TxId>
                    <TxDtTm>2025-03-07T09:31:12+01:00</TxDtTm>
                    <TxRef>000043</TxRef>
                </TxId>
                <InitrTxId>250307093112004</InitrTxId>
                <RcncltnId>250307</RcncltnId>
                <TxDtls>
                    <Ccy>AED</Ccy>
                    <TtlAmt>200.20</TtlAmt>
                    <AmtQlfr>ACTL</AmtQlfr>
                    <OnLineRsn>ICCF</OnLineRsn>
                </TxDtls>
            </Tx>
        </AuthstnReq>
    </AccptrAuthstnReq>
</Document>
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:caaa.002.001.06">
    <AccptrAuthstnRspn>
        <Hdr>
            <MsgFctn>FAUP</MsgFctn>
            <PrtcolVrsn>6.0</PrtcolVrsn>
            <XchgId>41</XchgId>
            <CreDtTm>2025-05-05T18:14:35.821+02:00</CreDtTm>
            <InitgPty>
                <Id>xxxxx</Id>
            </InitgPty>
            <Tracblt>
                <RlayId>
                    <Id>xxxxx</Id>
                    <Tp>ACCP</Tp>
                </RlayId>
                <TracDtTmIn>2025-05-05T20:14:33.662+04:00</TracDtTmIn>
                <TracDtTmOut>2025-05-05T20:14:33.662+04:00</TracDtTmOut>
            </Tracblt>
            <Tracblt>
                <RlayId>
                    <Id>xxxx</Id>
                    <Tp>ITAG</Tp>
                </RlayId>
                <TracDtTmIn>2025-05-05T18:14:35.108+02:00</TracDtTmIn>
                <TracDtTmOut>2025-05-05T18:14:35.821+02:00</TracDtTmOut>
            </Tracblt>
        </Hdr>
        <AuthstnRspn>
            <Envt>
                <AcqrrId>
                    <Id>FDEL</Id>
                </AcqrrId>
                <MrchntId>
                    <Id>xxxx</Id>
                </MrchntId>
                <POIId>
                    <Id>xxxxx</Id>
                </POIId>
            </Envt>
            <Tx>
                <TxId>
                    <TxDtTm>2025-05-05T20:14:33.662+04:00</TxDtTm>
                    <TxRef>xxxxxx</TxRef>
                </TxId>
                <RcptTxId>xxxxxx</RcptTxId>
                <RcncltnId>1</RcncltnId>
                <TxDtls>
                    <Ccy>AED</Ccy>
                    <TtlAmt>3.21</TtlAmt>
                </TxDtls>
            </Tx>
            <TxRspn>
                <AuthstnRslt>
                    <AuthstnNtty>
                        <Tp>CISS</Tp>
                    </AuthstnNtty>
                    <RspnToAuthstn>
                        <Rspn>APPR</Rspn>
                        <RspnRsn>200:SUCCESS</RspnRsn>
                    </RspnToAuthstn>
                    <AuthstnCd>000000</AuthstnCd>
                    <CmpltnReqrd>true</CmpltnReqrd>
                </AuthstnRslt>
                <TxVrfctnRslt>
                    <Mtd>MANU</Mtd>
             <AddtlRslt>IPG:QR/DEFAULT/00020101021226110007IFxxxxxxx047011530378454043.215802AE5913AANI xxxx xxxxxxxxxxxx62310121IF265MQ#POJKh##10001#0802036304AA89</AddtlRslt>
                </TxVrfctnRslt>
                <Bal>
                    <Amt Ccy="AED">3.21</Amt>
                </Bal>
                <Actn>
                    <ActnTp>RQDT</ActnTp>
                </Actn>
            </TxRspn>
        </AuthstnRspn>
    </AccptrAuthstnRspn>
</Document>

IPG sends nexo Acceptor Authorisation Response incl. QR code string details to terminal (host)

FieldPresenceValue
MsgFctnMFAUP
TxRspn/AuthstnRslt/AuthstnNtty/TpMITAG
TxRspn/AuthstnRslt/RspnToAuthstn/RspnMResponse code + text
TxRspn/AuthstnCdM000000
TxRspn/CmpltnReqrdMfalse
TxRspn/TxVrfctnRslt/MtdMMANU
TxRspn/TxVrfctnRslt/AddtlRsltM"IPG:QR/$TYPE$/$QR-code-payload$" with $TYPE$=DEFAULT
&$QR-code-payload$=TLV string based on EMV standard following structure of UAEIPP Overlay service specification
TxRspn/BalCpresent for preauthorisations
TxRspn/Actn/ActnTpMRQDT
Tx/RcptTxIdMGateway Order ID

Terminal builds the QR from NEXO response and displays it on the terminal screen


Customer scans QR code and completes the AANI payment on his mobile device


Once the terminal has displayed the QR code on the terminal screen, the terminal (host) starts pulling the status via Acceptor Authorisation Request (balance inquiry) from IPG.

The terminal should pull the status from IPG every 6 seconds, not earlier. The terminal (host) can decide for how long it pulls the status. Fiserv recommends a maximum period of 5 minutes.

FieldPresenceValue
MsgFctnMAUTQ
Envt/POI/GrpIdMGateway Store ID
Envt/POI/Id/IdMTerminal ID
Cntxt/PmtCntxt/CardPresMfalse
Cntxt/PmtCntxt/CardhldrPresMfalse
CardDataNtryMdMPHYS
Tx/TxTpMBALC
TxCaptrMfalse
TxDtls/TtlAmtM0
TxDtls/CcyMAED
TxDtls/AmtQlfrM'RESD' for preauthorization | 'ACTL' for sale
TxIdMTransaction identifier assigned by terminal (TxDtTm + TxRef)
Tx/RcptTxIdCReference to original transaction. Alternatively, terminal can send SaleRefId

IPG sends the status to terminal via nexo Acceptor Authorisation Response.

FieldPresenceValue
MsgFctnMAUTP
CmpltnReqrdMfalse
RspnToAuthstn/RspnMDepending on the payment status:

- Rspn='APPR' if payment has been successfully completed
- Rspn='DECL' && ActnTp='RQDT' if payment is still in waiting status. In this case it is expected that terminal continues to pull status from IPG.
- Rspn='DECL' if payment failed (e.g. customer has not completed the payment in app or merchant has deleted the QR code)

OPTIONAL: If transaction type is preauthorization, then terminal (host) needs to complete the payment by sending a nexo Acceptor Completion Advice to the Gateway.

FieldPresenceValue
MsgFctnMFCMV
Tx/TxCaptrMtrue
Tx/SvcAttrMPRES
Tx/TxTpMRESA
Tx/TxDtls/TtlAmtMCompleted amount - lower or equal to reserved amount
Tx/TxDtls/CcyM Only AED is supported.
Tx/OrgnlTx/RcptTxIdCReference to original transaction. Alternatively, terminal can send SaleRefId
TxSucssMtrue

OPTIONAL: If the terminal (host) doesn't receive a successful response within the defined period, the customer cancels the payment, the customer hasn't scanned the QR code in time or there's any kind of malfunction on the terminal, then the terminal (host) should send an auto-void to IPG by using negative Acceptor Completion Advice with Tx/FailrRsn.

FieldPresenceValue
Tx/OrgnlTx/RcptTxIdCReference to original transaction. Alternatively, terminal can send SaleRefId
Tx/TxCaptrMtrue
Tx/TxSucssMfalse
Tx/TxTpM'RESA' for preauthorization | 'CRDP' for sale
Tx/FailrRsnMDepending on the scenario:
FailrRsn='TIMO' (timeout)
FailrRsn='CUCL' (customer cancellation)
FailrRsn='MALF' (malfunction)

Reversal (void)

A reversal can be started similar to a standard reversal of credit card transaction by referencing to the original transaction. For the deletion of QR code as well as for the cancelation of a payment the request to the gateway is identical

🚧

Pre-requisite to perform a reversal

You must have given your consent within the AANI app by performing a special authentication. The gateway is not involved in this activity. For the deletion of a QR code, this pre-requisite is not applicable.

Example for technical reversal:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:AcceptorCompletionAdvice="urn:iso:std:iso:20022:tech:xsd:caaa.003.001.06" xmlns="urn:iso:std:iso:20022:tech:xsd:caaa.003.001.06" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <AccptrCmpltnAdvc>
        <Hdr>
            <MsgFctn>RVRA</MsgFctn>
            <PrtcolVrsn>6.0</PrtcolVrsn>
            <XchgId>xxxxxx</XchgId>
            <CreDtTm>2025-04-18T10:33:12.751+04:00</CreDtTm>
            <InitgPty>
                <Id>xxxxx</Id>
            </InitgPty>
        </Hdr>
        <CmpltnAdvc>
            <Envt>
                <Acqrr>
                    <Id>
                        <Id>1</Id>
                    </Id>
                </Acqrr>
                <Mrchnt>
                    <Id>
                        <Id>xxxx</Id>
                    </Id>
                    <CmonNm>xxxxx</CmonNm>
                </Mrchnt>
                <POI>
                    <Id>
                        <Id>xxxxxxx</Id>
                    </Id>
                    <GrpId>xxxxxxxxx</GrpId>
                    <Cpblties>
                        <CardRdngCpblties>PHYS</CardRdngCpblties>
                        <CardRdngCpblties>MGST</CardRdngCpblties>
                        <CardRdngCpblties>CICC</CardRdngCpblties>
                        <CardRdngCpblties>CTLS</CardRdngCpblties>
                        <CardRdngCpblties>ECTL</CardRdngCpblties>
                        <CrdhldrVrfctnCpblties>FCPN</CrdhldrVrfctnCpblties>
                        <CrdhldrVrfctnCpblties>NPIN</CrdhldrVrfctnCpblties>
                        <CrdhldrVrfctnCpblties>OTHR</CrdhldrVrfctnCpblties>
                        <CrdhldrVrfctnCpblties>FEPN</CrdhldrVrfctnCpblties>
                        <ApprvlCdLngth>6</ApprvlCdLngth>
                        <OnLineCpblties>SMON</OnLineCpblties>
                        <MsgCpblties>
                            <Dstn>MDSP</Dstn>
                            <AvlblFrmt>TEXT</AvlblFrmt>
                            <NbOfLines>4</NbOfLines>
                            <LineWidth>32</LineWidth>
                            <AvlblLang>en</AvlblLang>
                            <AvlblLang>fr</AvlblLang>
                            <AvlblLang>nl</AvlblLang>
                            <AvlblLang>de</AvlblLang>
                            <AvlblLang>sv</AvlblLang>
                            <AvlblLang>pl</AvlblLang>
                            <AvlblLang>cs</AvlblLang>
                        </MsgCpblties>
                        <MsgCpblties>
                            <Dstn>MRCP</Dstn>
                            <AvlblFrmt>TEXT</AvlblFrmt>
                            <NbOfLines>4</NbOfLines>
                            <LineWidth>32</LineWidth>
                            <AvlblLang>en</AvlblLang>
                            <AvlblLang>fr</AvlblLang>
                            <AvlblLang>nl</AvlblLang>
                            <AvlblLang>de</AvlblLang>
                            <AvlblLang>sv</AvlblLang>
                            <AvlblLang>pl</AvlblLang>
                            <AvlblLang>cs</AvlblLang>
                        </MsgCpblties>
                    </Cpblties>
                </POI>
            </Envt>
            <Cntxt>
                <PmtCntxt>
                    <CardPres>false</CardPres>
                    <CrdhldrPres>false</CrdhldrPres>
                    <CardDataNtryMd>PHYS</CardDataNtryMd>
                </PmtCntxt>
            </Cntxt>
            <Tx>
                <TxCaptr>true</TxCaptr>
                <TxTp>CRDP</TxTp>
                <MrchntCtgyCd>7011</MrchntCtgyCd>
                <CstmrCnsnt>false</CstmrCnsnt>
                <TxId>
                    <TxDtTm>2025-04-18T10:33:12.751+04:00</TxDtTm>
                    <TxRef>xxxxx</TxRef>
                </TxId>
                <OrgnlTx>
                    <SaleRefId>xxxxxxxxx</SaleRefId>
                    <TxId>
                        <TxDtTm>2025-04-18T10:33:12.751+04:00</TxDtTm>
                        <TxRef>xxxxx</TxRef>
                    </TxId>
                    <RcptTxId>xxxxxxx</RcptTxId>
                </OrgnlTx>
                <TxSucss>false</TxSucss>
                <FailrRsn>CUCL</FailrRsn>
                <TxDtls>
                    <Ccy>AED</Ccy>
                    <TtlAmt>0</TtlAmt>
                    <AmtQlfr>ACTL</AmtQlfr>
                </TxDtls>
            </Tx>
        </CmpltnAdvc>
        <SctyTrlr>
            <CnttTp>AUTH</CnttTp>
            <AuthntcdData>
                <Rcpt>
                    <KEK>
                        <KEKId>
                            <KeyId>xxxxxx</KeyId>
                            <KeyVrsn>xxxxxx</KeyVrsn>
                            <DerivtnId>xxxxx=</DerivtnId>
                        </KEKId>
                        <KeyNcrptnAlgo>
                            <Algo>DKP9</Algo>
                        </KeyNcrptnAlgo>
                        <NcrptdKey>xxxxxx=</NcrptdKey>
                    </KEK>
                </Rcpt>
                <MACAlgo>
                    <Algo>MCCS</Algo>
                </MACAlgo>
                <NcpsltdCntt>
                    <CnttTp>DATA</CnttTp>
                </NcpsltdCntt>
                <MAC>xxxxxxx=</MAC>
            </AuthntcdData>
        </SctyTrlr>
    </AccptrCmpltnAdvc>
</Document>

Return / credit

A reversal can be started similar to a standard return of a credit card transaction by referencing to the original transaction. No credit card is needed. Instead, for a return (linked refund) as well as for a credit (naked refund) the terminal will need to capture the mobile phone number of the customer as it is needed to identify the customer on AANI side.
For this purpose please send the following fields to the gateway.

FieldPresenceValue
Crdhldr/Id/Othr/IdM in format +9711743xxxx88 (starting with '+' symbol, no hyphens, no spaces)
Crdhldr/Id/Othr/IdTpMUse value 'customerPhoneNumber'

🚧

Pre-requisite to perform a linked refund

You must have given your consent within the AANI app by performing a special authentication. The gateway is not involved in this activity.


Want a quick overview?