BankLint

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.

Areapain.001.001.03pain.001.001.09What to change
Namespaceurn:iso:std:iso:20022:tech:xsd:pain.001.001.03urn:iso:std:iso:20022:tech:xsd:pain.001.001.09The xmlns of Document, and the schema your tools validate against.
Requested execution dateReqdExctnDt is a dateReqdExctnDt contains Dt (date) or DtTm (date and time)Wrap the date in Dt.
Agent BIC (DbtrAgt, CdtrAgt, FwdgAgt, intermediary agents)FinInstnId/BICFinInstnId/BICFIRename 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 partiesId/OrgId/BICOrBEIId/OrgId/AnyBIC, plus Id/OrgId/LEIRename BICOrBEI to AnyBIC.
Legal Entity IdentifierNot availableLEI for agents (FinInstnId/LEI) and organisations (OrgId/LEI), pattern [A-Z0-9]{18,18}[0-9]{2,2}Optional.
UETRNot availableCdtTrfTxInf/PmtId/UETR, a UUID version 4Optional.
Postal addressPostalAddress6: AdrTp, Dept, SubDept, StrtNm, BldgNb, PstCd, TwnNm, CtrySubDvsn, Ctry, up to 7 AdrLinePostalAddress24 adds BldgNm, Flr, PstBx, Room, TwnLctnNm and DstrctNm; AdrTp becomes a choice of Cd or PrtryOptional new elements; see structured addresses.
Service levelPmtTpInf/SvcLvl at most oncePmtTpInf/SvcLvl may repeatNone for SEPA: it still allows one occurrence (SEPA-SCT-SVCLVL-002).
Instruction for the debtor agentPer transaction onlyAlso once per payment information block (InstrForDbtrAgt)Optional.
Account proxyNot availablePrxy in DbtrAcct, CdtrAcct and the other accountsOptional; SEPA attaches conditions to its use.
Other additionsSplmtryData per transaction; TaxRmt and GrnshmtRmt in structured remittance informationOptional.
Renamed or restructuredTax/AdmstnZn; RltdRmtInf with RmtLctnMtd, RmtLctnElctrncAdr, RmtLctnPstlAdrTax/AdmstnZone; RltdRmtInf/RmtLctnDtlsOnly if you use these elements.

What stays the same

  • The overall structure: Document/CstmrCdtTrfInitn with GrpHdr, one or more PmtInf and one or more CdtTrfTxInf.
  • Group header elements and their multiplicity (MsgId, CreDtTm, NbOfTxs, optional CtrlSum, 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

pain.001.001.03
<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>
pain.001.001.09
<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 .09 schema.
  • Wrap ReqdExctnDt in Dt (use DtTm only if the bank asks for a time).
  • Rename BIC to BICFI in every agent and BICOrBEI to AnyBIC in 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 .03 file: 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.