ISO 20022 reason code
AM10: Invalid control sum
The control sum does not add up to the individual amounts. AM10 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 | AM10 |
|---|---|
| Name | Invalid control sum |
| ISO code lists | ExternalStatusReason1Code (status reason); ExternalReturnReason1Code (return reason) |
| Where | StsRsnInf/Rsn/Cd; RtrRsnInf/Rsn/Cd (pacs.004), TxDtls/RtrInf/Rsn/Cd (camt) |
What AM10 means
The control sum (CtrlSum) in the group header or a payment information block does not equal the sum of the amounts it covers.
Not to be confused with: AM10 is about the totals in the file (CtrlSum); one wrong amount is AM09, and a file the bank cannot parse at all FF01.
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 AM10 appears
AM10 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, AM10 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>AM10</Cd>
</Rsn>
<AddtlInf>Free text from the bank, if any</AddtlInf>
</StsRsnInf>
</TxInfAndSts>
</OrgnlPmtInfAndSts>What to do about AM10
- If you sent the payment or the collection: Recompute CtrlSum from the instructed amounts and resend. The Payment File Viewer checks both levels (pain.sum.group and pain.sum.payment) before the file reaches the bank.
Your bank’s implementation guide and the scheme’s rulebook (for SEPA, the EPC rulebooks) say exactly when it may use AM10; banks do not all apply a code the same way.
Look up AM10 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=AM10&kind=status_reason'