Skip to content
Bankautomation

ISO 20022 explained, for people who have to operate it

Published 19 August 2026

9 min read

iso 20022

camt.053 · NOSTRO USD · value date 03 sep 2026

Nostro cash break, sample data

Match rate

75.0%

Breaks

4

At risk

$533.9k

Oldest

4d

Date ±1d
Amount

This console matches the first rows a side. It left out statement and ledger , so anything in them is not counted below. To run a full file, .

BRK-001

Aged 0d

$219,105.40

2026-09-03 · both sides

REF//FX/SPOT/7741 · INTERBANK FX DESK

Amount differs by 164.80 USD (0.075%)

Re-price the ledger leg on the correspondent rate source for the value date and post 164.80 USD to FX variance.

FX RATE SOURCE

→ Treasury Ops

BRK-002

Aged 4d

$187,650.00

2026-08-30 · ledger

PAY/90012/R · KESTREL LOGISTICS

Second ledger entry for 187,650.00 USD against REF//PAY/90012

Confirm the original entry REF//PAY/90012 cleared, then reverse this posting under maker-checker and note the reversal on the original item.

DUPLICATE POSTING

→ Finance

BRK-003

Aged 0d

$123,760.00

2026-09-03 · both sides

REF//TRF/554121 · HALCYON TRADING

Statement 61,880.00 vs ledger 123,760.00 (50% short)

Split the ledger posting and match the settled leg; leave the residual 61,880.00 USD open against the same reference.

PARTIAL SETTLEMENT

→ Payments Ops

BRK-004

Aged 0d

$3,410.00

2026-09-03 · statement

REF//CHG/Q3FEES · CORRESPONDENT CHARGES

On the statement, nothing in the ledger

Post 3,410.00 USD to the charges account for the period and add it to the standing accrual so it stops surfacing as a break.

FEE NOT ACCRUED

→ Finance

Everything matched under these tolerances.

Tighten the date or amount tolerance to see the breaks it was absorbing.

Correspondent statement

camt.053 · NOSTRO USD

Value date Reference Amount
2026-09-02 REF//NONREF/2026090301 1,284,500.00
2026-09-02 REF//INV/88231 96,400.00
2026-09-03 REF//TRF/554120 452,180.25
2026-09-03 REF//FX/SPOT/7741 218,940.60
2026-09-01 REF//SEPA/33421 74,220.00
2026-09-03 REF//CHG/Q3FEES 3,410.00
2026-09-03 REF//TRF/554121 61,880.00
2026-09-02 REF//PAY/90012 187,650.00
2026-09-02 REF//INV/88245 242,015.00
2026-09-03 REF//TRF/554133 18,905.50
2026-09-01 REF//PAY/90044 505,300.00
2026-09-03 REF//INV/88260 132,640.75

Internal nostro ledger

Core banking export

Value date Reference Amount
2026-09-02 NONREF/2026090301 1,284,500.00
2026-09-02 INV/88231 96,400.00
2026-09-03 TRF/554120 452,180.25
2026-09-03 FX/SPOT/7741 219,105.40
2026-08-31 SEPA/33421 74,220.00
2026-09-02 PAY/90012 187,650.00
2026-09-03 TRF/554121 123,760.00
2026-08-30 PAY/90012/R 187,650.00
2026-09-02 INV/88245 242,015.00
2026-09-03 TRF/554133 18,905.50
2026-09-01 PAY/90044 505,300.00
2026-09-03 INV/88260 132,640.75
Matched pairs are tinted on both sides. Breaks carry the brass left rule and appear in the worklist.

Sample data only. Matching runs in your browser; classification is written by the model when you press Run. Matching done in your browser. Writing classifications… Classifications written by the model on this run. Decision support, not a compliance determination. The classification model was unavailable, so the built-in rule classifier wrote these. Same matching, same numbers. This console classifies up to 12 runs a minute and this run went over, so the built-in rule classifier wrote these. Same matching, same numbers. Wait a minute for the model, or . The model wrote the first 8 classifications; the rule classifier wrote the remaining .

Open the full resolver

ISO 20022 is described as a messaging standard, which is true and unhelpful. Operationally it is a change in what a payment message is allowed to say about itself, and that change is what decides whether your reconciliation matches automatically or lands in a queue.

What ISO 20022 actually is

ISO 20022 is a standard for building financial messages. It defines a shared data dictionary, a modelling method and an XML syntax, and market infrastructures then publish usage guidelines that say which of those fields are mandatory in their world. That last part matters more than the standard itself: the same message type looks different under CBPR+ than under a domestic scheme, because the usage guideline constrains it differently.

The practical contrast is with SWIFT MT, where a payment carried a limited set of tagged fields and a narrative field that people used for everything the tags could not express. Anyone who has parsed field 86 to find an invoice number knows the cost of that design.

The message names, decoded

Message identifiers look opaque and are not. The first four letters are the business area, the four digits are the message, and the two pairs after that are variant and version.

FamilyMeaningExamples you will meet
pain Payment initiation, customer to bank pain.001 credit transfer initiation, pain.002 status report
pacs Payments clearing and settlement, bank to bank pacs.008 credit transfer, pacs.009 financial institution transfer, pacs.004 return, pacs.002 status
camt Cash management and reporting camt.052 intraday report, camt.053 statement, camt.054 notification, camt.056 cancellation request
acmt Account management Account opening and maintenance messages
seev / sese Securities events and settlement Outside the payments scope of this post

Swipe the table sideways to read every column.

For reconciliation, three of these carry the weight: pacs.008 is the instruction between banks, camt.053 is the end of day statement, and camt.054 is the intraday notification. Everything else is context around those three, and reading them natively is what ISO 20022 reconciliation automation means in practice.

The three changes that matter operationally

1. Structured parties

Debtor and creditor are structured objects with name, postal address components and identification, rather than four lines of free text. This is the field that drives repair rates: a name and address jammed into one line is a repair waiting to happen when it crosses a border or hits a screening system that expects components.

2. Structured remittance information

Remittance data can carry referenced document types, numbers, amounts and dates as fields. That is what lets a corporate customer's invoice reference arrive intact and lets your matching engine treat it as a key instead of hunting for it inside a string.

3. An end to end identifier that survives

The end to end id is set by the originator and is intended to travel the whole chain unchanged. When it does, matching an instruction to a statement entry is an exact key match. When an intermediary drops or rewrites it, you are back to matching on amount, date and party, which is where tolerance rules and manual investigation begin.

Why structure changes reconciliation, concretely

Input

The same payment, two eras

  • MT: :20:REF554120 :32A:260903USD452180,25 :70:/INV/88231 PAYMENT ACME
  • MX: EndToEndId 2026090301, RmtInf Structured, CdtrNm ACME MANUFACTURING

Output

What the matcher can do

  • MT: parse the narrative, guess which token is the reference, match on amount and date, tolerate the rest.
  • MX: match on the end to end id as an exact key, use the structured invoice reference to confirm, and treat a mismatch as a real exception.
  • The difference is not elegance. It is how many items a human has to look at.

Where the value leaks away

  1. 01Flattening on ingestion. A downstream system reads the XML and writes a flat record with a concatenated narrative, because that is what it always read. All the structure paid for is gone at the first hop inside your own bank.
  2. 02Truncation on a leg. One intermediary on an MT leg during coexistence, and fields are lost for everyone downstream. Structure only survives if every hop preserves it.
  3. 03Unused fields. Purpose codes, category purpose and structured remittance arrive populated and nothing in the process uses them, so routing and classification stay manual.
  4. 04Local overrides. A usage guideline permits something the sending bank fills differently, and the receiving process treats the variation as a data quality problem rather than configuring for it.

The coexistence hangover

SWIFT ran MT and MX in parallel for cross border payments from March 2023, and the coexistence window for those categories closed in November 2025. That does not mean MT disappeared from your operation. Domestic schemes, older correspondents, internal interfaces and archived data all keep MT alive for years, and a bank that built its reconciliation to read only MX will find gaps exactly where the reconciliation matters most. Read both. Reconcile across both. Treat the format as an attribute of the source, not as a project phase.

A short checklist for operations teams

  • Can your reconciliation read camt.053 as XML, or does something flatten it first?
  • Does the end to end id survive from instruction to statement in your own systems?
  • Are repairs measured by which field caused them?
  • Is structured remittance used by matching, or only stored?
  • Can you still read MT for the correspondents and schemes that still send it?

What a pacs.008 actually contains

A credit transfer between banks is not a long message, and reading one once removes most of the mystery. There is a group header with a message identifier, a creation timestamp, the number of transactions and the settlement method. Then, per transaction, a payment identification block carrying the instruction id, the end to end id and the transaction id, an interbank settlement amount with its currency and value date, a charge bearer code, the agents in the chain, the debtor and creditor as structured parties with their accounts, and remittance information that may be unstructured text or a structured object.

Three of those decide whether your reconciliation is automatic. The end to end id is the key that should survive from instruction to statement. The interbank settlement amount and date are what a tolerance is measured against. The charge bearer code tells you in advance whether the amount that arrives will be the amount that was sent, which is the difference between a fee break you predicted and a fee break you investigated.

ElementWhat it is forWhat goes wrong
EndToEndId The originator reference intended to travel unchanged Rewritten or replaced by an intermediary, so the exact match is lost
TxId The sending bank reference for the transaction Reused across a replayed batch, which looks like a duplicate
IntrBkSttlmAmt and Dt The settled amount and value date Deducted charges make the arriving amount smaller than the instructed one
ChrgBr Who pays the charges: debtor, creditor or shared Ignored on ingestion, so fee differences arrive as surprises
RmtInf Invoice or contract references Sent as free text when a structured block was available
Dbtr and Cdtr Structured party name, address, identification Flattened into one line, which is where repairs come from

Swipe the table sideways to read every column.

Field names follow the ISO 20022 message definitions. Check the usage guideline for your corridor for what is mandatory in your case.

Reading a camt.053 without becoming a parser expert

A statement message has a shape that mirrors what a statement is. At the top there is a statement identifier, the account, the reporting period and opening and closing balances. Underneath there are entries, and an entry is one line on the account: an amount, a credit or debit indicator, a booking date, a value date and a status of booked or pending. Inside each entry there are entry details, and inside those, transaction details that carry the references, the parties and any charges.

That nesting is the part that catches people out. A single entry can contain several transactions, which is what a batched posting looks like. If your ingestion reads only the entry level, a batch of forty payments arrives as one amount and forty of your ledger items have nothing to match against. Reading down to the transaction level is not an optimisation, it is the difference between a reconciliation that works and one that generates its own break population.

A quick test on your own data: take one camt.053 with a batched entry and count how many items your reconciliation sees. If the answer is one, the ingestion is reading the summary and not the detail.

Repair rate is the number that justifies the work

A repair is a payment that stops because a field is missing, malformed or ambiguous, and a person fixes it before it can continue. Repairs are expensive in the obvious way, and expensive in a second way that rarely gets counted: a repaired payment usually arrives with a rewritten reference, which means it also becomes a reconciliation break on the far side.

Structured data reduces repairs when it is used. A creditor name and address arriving as components does not need a human to decide where the street ends and the city begins. A purpose code arriving populated lets routing happen without reading a narrative. The measurement that makes this actionable is simple and almost never done: record which field caused each repair, and count by field for a month. The list is always shorter than expected, and it is usually dominated by two or three causes that are cheap to fix once identified.

The traps are inside your own bank

Most of the disappointment with ISO 20022 comes from internal architecture rather than from correspondents. The message arrives correct at the gateway and then travels through systems that were built when a payment was a flat record.

  1. 01The canonical internal format. Many banks translate everything to one internal representation on arrival. If that representation predates ISO 20022, it is the ceiling on every downstream benefit, no matter what the network delivers.
  2. 02The archive question. Investigations reach back months. If the structured original is discarded after translation, the investigation works from the flattened copy and the structure was never really there.
  3. 03The reconciliation feed. Reconciliation is often fed from a downstream system rather than from the message, which means it sees the flattened version even when everything upstream was correct.
  4. 04Reference rewriting. Internal systems that generate their own references and overwrite the originator identifier destroy the exact match that the standard was supposed to provide.

What good looks like, concretely

  • The reconciliation reads the statement message itself, down to transaction level, rather than a flattened extract of it.
  • The end to end id is carried unchanged through your own systems and is present on both sides of the match.
  • Charge bearer is used to predict fee differences instead of discovering them.
  • Repairs are counted by causing field, and the top causes have named owners.
  • MT parsing is still supported for the sources that still send it, without anybody calling that a failure.

A vocabulary note that saves arguments

People use MX and ISO 20022 interchangeably, and it is worth being precise once. ISO 20022 is the standard. MX is the SWIFT term for messages built from it, as opposed to MT for the older FIN messages. CBPR+ is a usage guideline that constrains ISO 20022 for cross border payments and reporting between banks. A domestic scheme has its own guideline. So a message can be valid ISO 20022 and still be wrong for your corridor, which is why a reconciliation should hold rules per source rather than one global assumption.

If the answer to the first question is no, everything below it is theoretical. That is the practical starting point, and it is why ISO 20022 payment automation and payment reconciliation are usually the same project.

Get started

Put your first reconciliation on rails

Create an account, and we will email you how onboarding works and what a first source connection looks like. The Reconciliation Break Resolver is open to try right now, on sample data, without an account.

Run the demo

No card required to create an account. Sample data only in the demo. Bankautomation is operations software, not a regulated service.