Guides · Updated 2026-10-18
Why banks reject pain.001 files
Most rejected pain.001 files fail for a small set of reasons: the XML is broken, the file does not match the ISO 20022 schema, or it breaks a SEPA rule such as charge bearer SLEV, EUR only, two decimals, IBAN-only accounts or 70-character names. Almost all of them come from the payment-generation configuration, not from the individual payments.
The file cannot be read
A truncated export, an encoding problem or a manual edit produces a file that is not well-formed XML (BNK-XML-001). Banks reject these files completely.
The file does not match the ISO 20022 schema
Schema violations usually reject the whole file. The most frequent ones are a missing mandatory element, an element in the wrong place, a value that is too long, and a value in the wrong format.
- BNK-ISO-001BLOCKERElement not expected at this position. The ISO 20022 schema does not allow this element here: an element is missing, misplaced or not permitted.
- BNK-ISO-002BLOCKERRequired element missing. A mandatory child element required by the ISO 20022 schema is missing.
- BNK-ISO-003BLOCKERValue does not match the required format. The value does not match the format pattern defined by the ISO 20022 schema.
- BNK-ISO-004BLOCKERValue too long / Value too short / Value length not allowed. The value is longer than the maximum length allowed by the ISO 20022 schema.
- BNK-ISO-005BLOCKERValue is not an allowed code. The value is not one of the codes allowed by the ISO 20022 schema.
The file breaks a SEPA rule
| Symptom | Rule | Where to look |
|---|---|---|
| Charge bearer SHAR, DEBT or CRED | SEPA-SCT-CHRGBR-001 | Payment method configuration |
| Service level other than SEPA | SEPA-SCT-SVCLVL-001 | Payment method configuration |
| Non-EUR amount in a SEPA file | SEPA-SCT-CCY-001 | Payment method selection for foreign-currency payments |
| Three decimals or a zero amount | SEPA-SCT-AMT-002, SEPA-SCT-AMT-001 | Amount rounding and formatting in the export |
| Account without IBAN | SEPA-SCT-CDTRACCT-001 | Vendor bank master data |
| Creditor agent without BIC | SEPA-SCT-CDTRAGT-001 | Omit the creditor agent when no BIC is known |
| Name longer than 70 characters | SEPA-SCT-NAME-003 | Vendor master data or name truncation in the export |
| Identifier with "/" at the start or end, or "//" | SEPA-SCT-ID-002 | How end-to-end references are generated |
It worked last month
When a file the bank accepted before is suddenly rejected, something in the generation changed: a transport, a support package, a DMEE or format-tree change, new master data. Comparing the new file with the last accepted one shows the configuration change directly. See payment-file regression testing.
Questions
Does BankLint know my bank’s rejection codes?
No. BankLint checks the ISO 20022 schema and the published SEPA guidelines. It does not claim to reproduce bank-specific checks or rejection codes.
Can I test a file without sending it to the bank?
Yes. Upload it on the BankLint homepage; it is checked in memory and not stored. Use test files while BankLint is in beta.
Validate a pain.001 fileFree, no account needed, files are not stored.