ISO 20022 message
camt.054 format: bank-to-customer debit/credit notification
camt.054 notifies the account owner of individual debits or credits. Its most common use is the detail behind a batch: the statement shows one entry for a direct debit collection or a payroll run, and the camt.054 lists every transaction in it, with returns and their reason codes. It corresponds to the SWIFT MT900 (debit) and MT910 (credit) confirmations.
| Message | camt.054, root element <BkToCstmrDbtCdtNtfctn> |
|---|---|
| Name | Bank-to-customer debit/credit notification |
| Sent | Bank → account owner |
| SWIFT MT counterpart | MT900 / MT910 |
| Read by | camt Statement Viewer |
Who sends it, and when
The account-holding bank sends it to the account owner when entries are booked: per batch, per day, or in real time for incoming payments, depending on what was agreed. It usually carries no balances.
The structure of a camt.054
Document
└─ BkToCstmrDbtCdtNtfctn
├─ GrpHdr MsgId, CreDtTm
└─ Ntfctn one per account
├─ Id, ElctrncSeqNb, CreDtTm
├─ Acct Id, Ccy, Ownr, Svcr
└─ Ntry the booked batch or payment
└─ NtryDtls
├─ Btch MsgId, PmtInfId, NbOfTxs, TtlAmt
└─ TxDtls one per transaction: Refs, Amt, RltdPties, RtrInfVersions in use
The same versions as camt.053: .001.02 (2009) and .001.08 (2019) are the most common. The viewer reads .001.02 to .001.13.
An annotated camt.054
An excerpt of the sample the viewer opens (fictitious companies, published test account numbers):
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
<BkToCstmrDbtCdtNtfctn>
…
<Ntfctn>
…
<Ntry>
<NtryRef>DD-COLL-1029</NtryRef>
<Amt Ccy="EUR">359.70</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
…
<NtryDtls>
<Btch>
<MsgId>NWT-DD-20261029</MsgId>
<PmtInfId>DD-RCUR-20261029</PmtInfId>
<NbOfTxs>3</NbOfTxs>
<TtlAmt Ccy="EUR">359.70</TtlAmt>
<CdtDbtInd>CRDT</CdtDbtInd>
</Btch>
<TxDtls>
<Refs>
<EndToEndId>NW-SUB-1001-2610</EndToEndId>
<MndtId>NW-M-1001</MndtId>
</Refs>
<Amt Ccy="EUR">119.90</Amt>
…“…” marks lines left out.
| In the file | What it says |
|---|---|
359.70 CRDT | The collection as booked: one credit for the whole batch. |
<Btch> … <PmtInfId> | Links the batch to the pain.008 payment block that started it. |
<NbOfTxs>3 | Three direct debits in the batch; the viewer checks the count and the total. |
<EndToEndId> … <MndtId> | Each debit’s own reference and its mandate. |
Common validation errors
What most often goes wrong in a camt.054, and the rule that reports it in the viewer and the API:
camt.batch.count(Batch count differs): The batch says a different number of transactions than the TxDtls listed.camt.batch.sum(Batch amount differs): The transactions do not add up to the batch total or the entry amount.field.required(Required element missing): A mandatory element (account, amount, indicator) is missing.iban.invalid(Invalid IBAN): A counterparty IBAN that fails its check digits.
Check a camt.054 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 @camt054-direct-debits.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>"
}
}
}