Skip to content

ISO 20022 reason code

AG02: Invalid bank operation code

The bank operation or payment type code is not valid. AG02 is an ISO 20022 reason code used as a status reason and a return reason: you will see it in pain.002, pacs.004 and camt.053.

AG02 at a glance
CodeAG02
NameInvalid bank operation code
ISO code listsExternalStatusReason1Code (status reason); ExternalReturnReason1Code (return reason)
WhereStsRsnInf/Rsn/Cd; RtrRsnInf/Rsn/Cd (pacs.004), TxDtls/RtrInf/Rsn/Cd (camt)

What AG02 means

A code that tells the banks what kind of operation this is (the payment type, local instrument, sequence type or a bank operation code) is missing, invalid or not allowed for the service used.

Not to be confused with: AG02 is a code in the instruction that is wrong (payment type, local instrument, sequence type); AG01 is a valid instruction the account does not allow, and FF01 a file the bank cannot read at all.

A reason code always comes with a status or an action: on its own it says why, not what happened. In a status report look at the status next to it (RJCT means the payment will not be executed); on a statement the returned entry tells you the money has come back.

Where AG02 appears

AG02 belongs to two of the ISO 20022 reason code lists, so it can arrive in these places:

  • Status reason (ExternalStatusReason1Code): in a payment status report (pain.002 from a bank to its customer, pacs.002 between banks) that rejects or holds a payment.
  • Return reason (ExternalReturnReason1Code): in a payment return (pacs.004) after the money has moved, and the returned entry on the account statement (camt.053) or notification (camt.054).

In a status report, AG02 explains a status such as RJCT, at transaction level here (the same StsRsnInf block can sit under the group or a payment block):

pain.002.001.10 · a rejected transaction
<OrgnlPmtInfAndSts>
  <OrgnlPmtInfId>PMT-20261028-03</OrgnlPmtInfId>
  <TxInfAndSts>
    <OrgnlEndToEndId>INV-2026-0042</OrgnlEndToEndId>
    <TxSts>RJCT</TxSts>
    <StsRsnInf>
      <Rsn>
        <Cd>AG02</Cd>
      </Rsn>
      <AddtlInf>Free text from the bank, if any</AddtlInf>
    </StsRsnInf>
  </TxInfAndSts>
</OrgnlPmtInfAndSts>

What to do about AG02

  • If you sent the payment or the collection: Compare the codes in PmtTpInf (service level, local instrument, category purpose) and, for direct debits, the sequence type (FRST, RCUR, OOFF, FNAL) with your bank’s implementation guide.

Your bank’s implementation guide and the scheme’s rulebook (for SEPA, the EPC rulebooks) say exactly when it may use AG02; banks do not all apply a code the same way.

Look up AG02 from a script or an AI agent

Scripts and AI agents get this code’s name, definition, where it sits and the address of this page from GET /api/v1/explain, keyless, or from the explain_code tool of the MCP server (API and MCP docs; add it to Claude, Cursor or VS Code).

REST · curl
curl -s 'https://iso20022-navigator.com/api/v1/explain?code=AG02&kind=status_reason'