BankLint

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.

Two blocks, two service levels
<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 as URGP, NURG or SDVA) 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 as SEPE) 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.