XML format
ISO 20022 pain.001
The payment initiation message banks now require: a credit transfer instruction whose namespace URI pins the exact message version.
ISO 20022 replaced a generation of proprietary bank file formats, and pain.001 — customer credit transfer initiation — is the one most businesses meet first, because it is how a payment run leaves an ERP. The message nests three levels that are easy to confuse: the group header covers the file, each PmtInf is a debit from one account on one date, and each CdtTrfTxInf is one payment to one beneficiary.
The namespace URI is the version, and this is the detail that breaks integrations. pain.001.001.03 and pain.001.001.09 are different namespaces with different content models, and a bank that has migrated will reject the older one outright. Nothing in the document names the version except the URI.
- The namespace URI carries the exact message version. Treating pain.001.001.03 and .09 as interchangeable fails at the bank, not at the parser.
- Banks publish their own usage guidelines on top of the ISO schema, narrowing cardinalities and code lists. Schema-valid is necessary and not sufficient — the extra rules are usually Schematron.
- MsgId and EndToEndId must be unique per sender; duplicates are treated as resubmissions and may be silently dropped.
- CtrlSum and NbOfTxs must agree with the transactions actually present, and are checked before anything else.
- Amounts carry the currency as an attribute (Ccy) rather than as an element, and the decimal precision allowed depends on that currency.
- Root element
<Document>- Media type
application/xml- Extensions
.xml- Namespaces
urn:iso:std:iso:20022:tech:xsd:pain.001.001.09
- XMLDir label
- —
Specification: ISO 20022 message catalogue
A minimal valid document
Every example on this site is checked against the same parser the workspace uses, so what you see below is known to be well-formed.
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>MSG-2026-0001</MsgId>
<CreDtTm>2026-01-15T09:30:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>1250.00</CtrlSum>
<InitgPty><Nm>Example Ltd</Nm></InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>PMT-0001</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<ReqdExctnDt><Dt>2026-01-16</Dt></ReqdExctnDt>
<Dbtr><Nm>Example Ltd</Nm></Dbtr>
<DbtrAcct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id></DbtrAcct>
<CdtTrfTxInf>
<PmtId><EndToEndId>E2E-0001</EndToEndId></PmtId>
<Amt><InstdAmt Ccy="EUR">1250.00</InstdAmt></Amt>
<Cdtr><Nm>Supplier BV</Nm></Cdtr>
<CdtrAcct><Id><IBAN>NL91ABNA0417164300</IBAN></Id></CdtrAcct>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>Other formats
- XML sitemap
- Sitemap index
- RSS 2.0
- Atom 1.0
- SOAP envelope
- XML Schema (XSD)
- WSDL
- XSLT stylesheet
- SVG
- OPML
- RDF/XML
- GPX
- KML
- XLIFF
- UBL Invoice
- JUnit XML
- Maven POM
- SAML 2.0
- Property list
- DocBook 5
- JATS article
- MusicXML 4.0
- MathML
- XSL-FO
- OOXML document
- Android manifest
- Android strings
- MSBuild project
- Log4j 2 config
- JaCoCo report
- Checkstyle report
- EPUB package
- XMP metadata
- TEI document
- HL7 CDA
- TTML captions
- OpenStreetMap XML
Get started
Bring order to the XML your team can't afford to ignore.
Create a free account and get a private workspace to search, validate, diff, and monitor your XML feeds, sitemaps, schemas, and vendor integrations.