Guides · By Tan Gravam · Updated 2026-10-20
SEPA and non-SEPA payments in one pain.001 file
One pain.001 can carry SEPA and non-SEPA payments in separate payment information blocks, each marked by its service level code (SvcLvl/Cd): SEPA for SEPA credit transfers, another ISO 20022 code such as URGP or NURG for the rest. BankLint applies the SEPA rules only to the SEPA blocks of such a mixed file and notes each other block as information (BNK-SCH-001). A misspelt service level is not a different scheme: that block is checked and fails.
How a mixed file is built
SEPA credit transfers are in euro, with charge bearer SLEV, IBANs and 70-character names. A USD payment to the United States meets none of these rules, so source systems put such payments in their own payment information block with their own payment type information. Whether your bank accepts SEPA and other payments in one file is stated in its file specification; some banks expect separate files.
<PmtInf>
<PmtInfId>PMTINF-EUR</PmtInfId>
…
<PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl></PmtTpInf>
…
</PmtInf>
<PmtInf>
<PmtInfId>PMTINF-USD</PmtInfId>
…
<PmtTpInf><SvcLvl><Cd>URGP</Cd></SvcLvl></PmtTpInf>
…
</PmtInf>Try the synthetic mixed file: a SEPA block and a USD block with service level URGP.
How BankLint decides which blocks are SEPA
- A block whose service level codes, at block level and in its transactions, are all ISO 20022 codes other than
SEPA(such asURGP,NURGorSDVA) is not checked against SEPA rules. BankLint reports it once, as information. - A block with
SEPA, without a service level, or with a code that is not in the ISO 20022 list (a typo such asSEPE) is checked against every SEPA rule. The typo fails as a service level other than SEPA. - This only applies to mixed files. When no block is SEPA in a Flow set up for SEPA, every block is checked against the SEPA rules.
- It works the same with and without a Flow. The XML and ISO 20022 schema checks always cover every block.
- BNK-SCH-001INFOPayment information block not checked against SEPA rules. This payment information block names a service level other than SEPA, so the SEPA Credit Transfer rules were not applied to it. The XML and ISO 20022 schema checks still cover it.
- SEPA-SCT-SVCLVL-001BLOCKERService level code must be SEPA. When a service level code is given for a SEPA credit transfer, only the code SEPA is allowed.
Questions
Can a SEPA pain.001 contain USD payments?
Not in a SEPA block: SEPA credit transfers are in euro only. A separate payment information block with another service level can carry them, if your bank accepts mixed files.
Why does BankLint still check my non-SEPA block against SEPA rules?
Its service level is missing or is not an ISO 20022 code, so it cannot be told apart from a SEPA block with an error. Give the block the service level code your bank expects, such as URGP.
Sources: EPC132-08 2025 Version 1.0 (European Payments Council) and the ISO 20022 message schemas, ISO 20022 External Code Sets. All sources and dates: Standards and sources.
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
- pain.001.001.03 vs pain.001.001.09: what changed and how to migrate
- 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
- pain.002 status and reason codes for pain.001 files
- Testing payment files before going live with a bank
- 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
- pain.001 references: MsgId, PmtInfId, InstrId, EndToEndId and UETR
- Verification of Payee and bulk payment files
- Batch booking in pain.001: one debit or one per payment