ISO 20022 reason code
AC01: Incorrect account number
The account number is wrong (missing, invalid or does not exist). AC01 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.
| Code | AC01 |
|---|---|
| Name | Incorrect account number |
| ISO code lists | ExternalStatusReason1Code (status reason); ExternalReturnReason1Code (return reason) |
| Where | StsRsnInf/Rsn/Cd; RtrRsnInf/Rsn/Cd (pacs.004), TxDtls/RtrInf/Rsn/Cd (camt) |
What AC01 means
The account number in the payment does not exist at the receiving bank or fails its format checks: a typo, digits swapped, an old account number, or a number placed in the wrong field.
Not to be confused with: AC01 says the account number itself is wrong or unknown. A number that exists but belongs to a closed account comes back as AC04, a blocked one as AC06, and a number that does not match the name as BE01, where banks check names.
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 AC01 appears
AC01 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, AC01 explains a status such as RJCT, at transaction level here (the same StsRsnInf block can sit under the group or a payment block):
<OrgnlPmtInfAndSts>
<OrgnlPmtInfId>PMT-20261028-03</OrgnlPmtInfId>
<TxInfAndSts>
<OrgnlEndToEndId>INV-2026-0042</OrgnlEndToEndId>
<TxSts>RJCT</TxSts>
<StsRsnInf>
<Rsn>
<Cd>AC01</Cd>
</Rsn>
<AddtlInf>Free text from the bank, if any</AddtlInf>
</StsRsnInf>
</TxInfAndSts>
</OrgnlPmtInfAndSts>What to do about AC01
- If you sent the payment or the collection: Check the account against the payee’s current bank details (confirmed through a channel you trust), correct it and send a new payment with a new end-to-end id. Resending the same file unchanged will fail the same way.
- On the other side: If you were expecting the money, send the payer your account details again, as an IBAN where IBANs are used.
An IBAN can pass its mod-97 check digits and still not exist: the check only catches typos. Only the receiving bank knows whether the account is real.
Your bank’s implementation guide and the scheme’s rulebook (for SEPA, the EPC rulebooks) say exactly when it may use AC01; banks do not all apply a code the same way.
Look up AC01 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).
curl -s 'https://iso20022-navigator.com/api/v1/explain?code=AC01&kind=status_reason'