Guides · Updated 2026-10-20
pain.001.001.03 vs pain.001.001.09: what changed and how to migrate
pain.001.001.09 changes the namespace, renames the agent BIC element from BIC to BICFI and the party identifier BICOrBEI to AnyBIC, turns the requested execution date into a choice of date or date-time, and adds LEI, UETR and six postal address elements. Most of a .03 export maps one to one; those elements are where a migration breaks. The 2025 SEPA guidelines are written for .09.
Differences in the schema
Compared from the two official ISO 20022 schemas (CustomerCreditTransferInitiationV03 and V09). Element paths are relative to CstmrCdtTrfInitn/PmtInf.
| Area | pain.001.001.03 | pain.001.001.09 | What to change |
|---|---|---|---|
| Namespace | urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 | urn:iso:std:iso:20022:tech:xsd:pain.001.001.09 | The xmlns of Document, and the schema your tools validate against. |
| Requested execution date | ReqdExctnDt is a date | ReqdExctnDt contains Dt (date) or DtTm (date and time) | Wrap the date in Dt. |
Agent BIC (DbtrAgt, CdtrAgt, FwdgAgt, intermediary agents) | FinInstnId/BIC | FinInstnId/BICFI | Rename the element. |
| BIC format | [A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1} | [A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1} | None for normal BICs: both accept 8 or 11 characters. |
| Organisation identification of parties | Id/OrgId/BICOrBEI | Id/OrgId/AnyBIC, plus Id/OrgId/LEI | Rename BICOrBEI to AnyBIC. |
| Legal Entity Identifier | Not available | LEI for agents (FinInstnId/LEI) and organisations (OrgId/LEI), pattern [A-Z0-9]{18,18}[0-9]{2,2} | Optional. |
| UETR | Not available | CdtTrfTxInf/PmtId/UETR, a UUID version 4 | Optional. |
| Postal address | PostalAddress6: AdrTp, Dept, SubDept, StrtNm, BldgNb, PstCd, TwnNm, CtrySubDvsn, Ctry, up to 7 AdrLine | PostalAddress24 adds BldgNm, Flr, PstBx, Room, TwnLctnNm and DstrctNm; AdrTp becomes a choice of Cd or Prtry | Optional new elements; see structured addresses. |
| Service level | PmtTpInf/SvcLvl at most once | PmtTpInf/SvcLvl may repeat | None for SEPA: it still allows one occurrence (SEPA-SCT-SVCLVL-002). |
| Instruction for the debtor agent | Per transaction only | Also once per payment information block (InstrForDbtrAgt) | Optional. |
| Account proxy | Not available | Prxy in DbtrAcct, CdtrAcct and the other accounts | Optional; SEPA attaches conditions to its use. |
| Other additions | SplmtryData per transaction; TaxRmt and GrnshmtRmt in structured remittance information | Optional. | |
| Renamed or restructured | Tax/AdmstnZn; RltdRmtInf with RmtLctnMtd, RmtLctnElctrncAdr, RmtLctnPstlAdr | Tax/AdmstnZone; RltdRmtInf/RmtLctnDtls | Only if you use these elements. |
What stays the same
- The overall structure:
Document/CstmrCdtTrfInitnwithGrpHdr, one or morePmtInfand one or moreCdtTrfTxInf. - Group header elements and their multiplicity (
MsgId,CreDtTm,NbOfTxs, optionalCtrlSum,InitgPty). - Payment method codes, charge bearer codes (
DEBT,CRED,SHAR,SLEV) and the amount type (up to 18 digits, 5 decimals in the schema). - The IBAN pattern, identifier lengths (35 characters) and unstructured remittance lines (140 characters).
The same payment in both versions
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
...
<ReqdExctnDt>2026-10-20</ReqdExctnDt>
...
<DbtrAgt>
<FinInstnId>
<BIC>TESTDEFFXXX</BIC>
</FinInstnId>
</DbtrAgt><Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
...
<ReqdExctnDt>
<Dt>2026-10-20</Dt>
</ReqdExctnDt>
...
<DbtrAgt>
<FinInstnId>
<BICFI>TESTDEFFXXX</BICFI>
</FinInstnId>
</DbtrAgt>Changing only the namespace produces schema errors such as "Element 'BIC': This element is not expected" (BNK-ISO-001). See pain.001 XSD validation errors.
SEPA rules by version
The EPC SEPA Credit Transfer customer-to-PSP implementation guidelines 2025 (EPC132-08 version 1.0, effective 5 October 2025) are based on the 2019 ISO 20022 message version, pain.001.001.09. Later ISO versions (pain.001.001.10 and newer) exist, but the SEPA guidelines use .09. Which versions your bank accepts, and until when, is stated in its file specification.
BankLint validates both versions against their own schema, and applies its SEPA rules to pain.001.001.09 only.
Migration checklist
In a BankLint Flow, a file in a different message version than the Flow expects fails with BNK-MSG-002, so a version change never slips through unnoticed. Validate the .09 file in a Flow for pain.001.001.09 and promote it to the baseline when the bank accepts it. See payment-file regression testing.
- Confirm with your bank which version it expects, from which date, and whether it publishes its own variant of the EPC guidelines.
- Change the namespace and point your validation tools to the
.09schema. - Wrap
ReqdExctnDtinDt(useDtTmonly if the bank asks for a time). - Rename
BICtoBICFIin every agent andBICOrBEItoAnyBICin party identifications. - Review addresses: give at least town and country as separate elements (structured addresses).
- Validate a test file against the schema and the SEPA rules, and compare it with your last accepted
.03file: amounts, references and counts should be unchanged. - Send a test file to the bank. Once it is accepted, make it the new baseline.
- BNK-MSG-002BLOCKERMessage version differs from the configured version. The file is a supported message version, but not the version this validation context expects.
Questions
Is pain.001.001.03 still accepted?
That depends on your bank. The 2025 SEPA customer-to-PSP implementation guidelines describe pain.001.001.09 only; your bank’s file specification states which versions it accepts and until when.
Can I migrate by changing only the namespace?
No. At least the requested execution date (now wrapped in Dt or DtTm) and the agent BIC element (now BICFI) differ, so a .03 mapping with a .09 namespace fails the schema.
Does BankLint validate both versions?
Yes. Each file is validated against the ISO 20022 schema of its own version; SEPA scheme rules are applied to pain.001.001.09.
Validate a pain.001 fileFree, no account needed, files are not stored.
More guides
- How to validate a pain.001 payment file
- pain.001.001.09 XML example for a SEPA credit transfer
- pain.001 XSD validation errors and how to fix them
- Structured, hybrid and unstructured addresses in SEPA pain.001
- IBAN and BIC in a SEPA pain.001
- Remittance information in a SEPA pain.001 (Ustrd, Strd, RF)
- SEPA Credit Transfer rules for pain.001.001.09
- Why banks reject pain.001 files
- Payment-file regression testing after SAP or TMS changes
- Charge bearer SLEV in SEPA credit transfers
- Control sum (CtrlSum) and number of transactions (NbOfTxs) in pain.001
- SEPA character set, names and identifiers