ISO 20022 message
camt.053 format: bank-to-customer statement
camt.053 is the ISO 20022 end-of-day account statement: for each account, the opening and closing balances and every entry booked in the period, with the details banks need for automatic reconciliation (references, counterparties, remittance information, bank transaction codes). It replaces the SWIFT MT940 (and MT950 between banks).
| Message | camt.053, root element <BkToCstmrStmt> |
|---|---|
| Name | Bank-to-customer statement |
| Sent | Bank → account owner |
| SWIFT MT counterpart | MT940 / MT950 |
| Read by | camt Statement Viewer |
Who sends it, and when
The bank that holds the account (the account servicer) sends it to the account owner, once per business day, usually early the next morning. It travels over the bank’s file channels: host-to-host (SFTP), EBICS in Germany, France, Austria and Switzerland, SWIFT, or as a download from online banking. One file can carry statements for many accounts.
The structure of a camt.053
Document
└─ BkToCstmrStmt
├─ GrpHdr MsgId, CreDtTm, MsgPgntn
└─ Stmt one per account and period
├─ Id, ElctrncSeqNb, LglSeqNb, CreDtTm, FrToDt
├─ Acct Id (IBAN or Othr), Ccy, Ownr, Svcr
├─ Bal one per type: OPBD, CLBD, CLAV, FWAV …
├─ TxsSummry number and sum of entries
└─ Ntry one per booking
├─ Amt, CdtDbtInd, RvslInd, Sts, BookgDt, ValDt, AcctSvcrRef
├─ BkTxCd Domn (Cd, Fmly/Cd, Fmly/SubFmlyCd), Prtry
└─ NtryDtls
├─ Btch a batch: MsgId, PmtInfId, NbOfTxs, TtlAmt
└─ TxDtls Refs, Amt, RltdPties, RltdAgts, RmtInf, RtrInfVersions in use
Version .001.02, the 2009 schema, is still what many European banks send. Version .001.08, from 2019, is the one SWIFT’s cross-border rules (CBPR+) use and many banks have moved to; later versions exist. Between them, elements were added and a few restructured: a bank’s BIC is <BIC> in .001.02 and <BICFI> in later versions, and an entry status is a bare code up to .001.06 and <Sts><Cd> from .001.07. The viewer reads .001.02 to .001.13.
An annotated camt.053
An excerpt of the sample the viewer opens (fictitious companies, published test account numbers):
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BkToCstmrStmt>
<GrpHdr>
<MsgId>STMT20261028NW001</MsgId>
<CreDtTm>2026-10-29T06:15:00+00:00</CreDtTm>
…
</GrpHdr>
<Stmt>
<Id>GBP-301-20261028</Id>
<ElctrncSeqNb>301</ElctrncSeqNb>
…
<Acct>
<Id>
<IBAN>GB29NWBK60161331926819</IBAN>
</Id>
<Ccy>GBP</Ccy>
…
</Acct>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>OPBD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="GBP">125430.50</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
…
</Bal>
…
<Ntry>
<Amt Ccy="GBP">12500.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
…
<AcctSvcrRef>NW261028000101</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>DMCT</SubFmlyCd>
</Fmly>
</Domn>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
…
<EndToEndId>INV-2026-1043</EndToEndId>
…“…” marks lines left out.
| In the file | What it says |
|---|---|
camt.053.001.08 | The namespace says which message and version this is. |
<ElctrncSeqNb>301 | The statement’s sequence number: a gap means a missing statement. |
<Cd>OPBD</Cd> … 125430.50 CRDT | Opening booked balance: a credit balance of 125,430.50 GBP. Amounts are never negative; CdtDbtInd gives the sign. |
12500.00 CRDT … BOOK | A booked credit of 12,500.00 GBP: it counts toward the closing balance. |
PMNT / RCDT / DMCT | Bank transaction code: a received domestic credit transfer. |
<EndToEndId>INV-2026-1043 | The payer’s reference, carried unchanged from their payment: the key for matching the invoice. |
Common validation errors
What most often goes wrong in a camt.053, and the rule that reports it in the viewer and the API:
camt.balance.roll-forward(Balances do not roll forward): The opening booked balance plus the booked entries does not give the closing booked balance: an entry is missing, duplicated or has the wrong sign.camt.summary.sum(Transaction summary sum differs): TxsSummry totals disagree with the entries.camt.balance.missing(Booked balance missing): No opening (OPBD or PRCD) or closing (CLBD) booked balance.camt.entry.booking-date(Booked entry without booking date): A booked entry without a booking date.ccy.decimals(Too many decimals for the currency): An amount with more decimals than its currency allows (JPY has none).iban.invalid(Invalid IBAN): An account or counterparty IBAN that fails its check digits.
Check a camt.053 from a script or an AI agent
Scripts and AI agents can do the same without a browser: POST /api/v1/validate or the MCP tool validate_payment_file returns every issue with its rule id, severity, line and path, and whether the file is valid. No key is needed, and the file is processed in memory and never stored (API and MCP docs).
curl -s --data-binary @camt053-v08-statement.xml https://iso20022-navigator.com/api/v1/validate{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "validate_payment_file",
"arguments": {
"content": "<the file text>"
}
}
}