Skip to content

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.

camt.054 at a glance
Messagecamt.054, root element <BkToCstmrDbtCdtNtfctn>
NameBank-to-customer debit/credit notification
SentBank → account owner
SWIFT MT counterpartMT900 / MT910
Read bycamt 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

camt.054 · structure
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, RtrInf

Versions 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):

camt054-direct-debits.xml
<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.

camt.054 sample, explained
In the fileWhat it says
359.70 CRDTThe collection as booked: one credit for the whole batch.
<Btch> … <PmtInfId>Links the batch to the pain.008 payment block that started it.
<NbOfTxs>3Three direct debits in the batch; the viewer checks the count and the total.
<EndToEndId> … <MndtId>Each debit’s own reference and its mandate.

Open this sample in the camt Statement Viewer

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).

REST · curl
curl -s --data-binary @camt054-direct-debits.xml https://iso20022-navigator.com/api/v1/validate
MCP · tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "validate_payment_file",
    "arguments": {
      "content": "<the file text>"
    }
  }
}