Common SEPA XML rejection errors and how to prevent them
A rejected SEPA file rarely fails for exotic reasons. In practice, the same handful of input problems cause most rejections — and almost all of them can be caught before the file reaches the bank.
This guide covers the most common causes, how to recognize them, and how to prevent them. One important distinction first:
- Input validation checks your payment data against format rules (IBAN checksums, amount formats, required fields). Tools can do this locally.
- Bank acceptance is the bank’s own decision, applied per upload channel and account. Banks can enforce additional rules beyond the standard, so no tool can guarantee a file will be accepted.
Good validation removes the avoidable rejections. The rest is between you and your bank’s documentation.
1. Invalid IBAN
The single most common problem. Typical causes:
- a mistyped or truncated IBAN (often one digit lost during manual entry);
- spaces or formatting characters left in the value;
- an IBAN that looks plausible but fails its checksum — every IBAN contains two check digits, so most typos are mathematically detectable.
Prevention: validate IBAN checksums before generating the file. A checksum failure means the IBAN is definitely wrong; fix it at the source (your spreadsheet or system export), not in the XML.
2. Invalid or malformed BIC
BICs must follow the ISO 9362 pattern: 8 or 11 characters (bank code, country code, location code, optional branch). Common issues:
- wrong length (9 or 10 characters usually means a typo);
- lowercase letters or stray whitespace;
- a BIC that does not match the IBAN’s country.
Prevention: check the BIC format before generation. Format checks catch length and character problems; whether a BIC matches the IBAN’s bank is something only your own records (or your bank) can confirm.
Note that for most SEPA payments a BIC is optional nowadays, but if you provide one, it must be well-formed.
3. Incorrect amount format
pain.001 amounts are decimal values with a dot separator and at most two decimal places for EUR. Files get rejected because of:
- comma decimal separators (
1234,56) surviving from European locale spreadsheets; - thousands separators (
1.234,56or1,234.56); - currency symbols in the value;
- amounts of zero or negative amounts;
- more than two decimal places.
Prevention: be especially careful with Excel and CSV exports, where locale settings silently change number formats. Validate amount format per row before generation.
4. Missing required fields
pain.001 requires a minimum set of data per file and per transaction: debtor name and IBAN, creditor name and IBAN, amount, and identifiers such as the end-to-end ID. An empty cell in one row of a 500-row export can invalidate the whole file.
Prevention: check required fields row by row. This is exactly the kind of error that is painful to find in raw XML but trivial to catch in the input data.
5. Invalid execution date
The requested execution date must be a valid date in the expected format, and banks typically reject or adjust dates in the past. Some channels also constrain how far in the future an execution date may be.
Prevention: validate the date format and plausibility before generation, and check your bank’s cut-off rules for same-day processing.
6. Remittance information too long
Unstructured remittance information in SEPA credit transfers is limited to 140 characters. Exports from invoicing systems often concatenate invoice numbers and descriptions past that limit.
Prevention: check remittance length per transaction and shorten at the source. Truncation by hand in XML is error-prone.
7. Wrong pain.001 version for the channel
Banks accept specific pain.001 versions per upload channel. A structurally
perfect pain.001.001.09 file will still be rejected by a channel that
only accepts pain.001.001.02 — and vice versa. The XML namespace must
also match the actual message structure.
Prevention: confirm the expected version with your bank before your first upload, and generate that version. See pain.001.001.02 vs pain.001.001.09 for how the versions differ and how to choose.
8. Incomplete structured addresses
Workflows that use structured addresses (notably with pain.001.001.09)
need address elements to be consistent: if you provide a structured
address, elements like town and country must be present and coherent.
Half-filled address structures are a growing source of rejections as banks
tighten address-quality requirements.
Prevention: either provide complete structured address data or follow your bank’s guidance on which address elements are required for your payment types.
9. Bank-specific rules beyond the standard
Even a fully standards-conformant file can be rejected by rules the standard does not define: channel-specific limits on batch size or amount, account configuration, required identifiers, country-specific conventions, or stricter field usage. These rules vary by bank and are documented (if at all) in each bank’s format specifications.
Prevention: read your bank’s pain.001 implementation guide if one exists, and always test a small file through the target channel before a production run. There is no substitute for this test.
Catching these errors before upload
Most of the input-level problems above are detectable locally, before any XML is uploaded.
SEPA Generator automatically checks IBAN format and checksums, BIC format, required fields, amount format, execution-date rules, end-to-end identifier length, remittance-information length, and structured-address completeness every time it generates a file from your CSV, XLS, or XLSX input, and reports clear errors when something needs fixing — see what the validation covers. Checks that depend on outside knowledge — such as whether a well-formed BIC really belongs to the creditor’s bank, or your bank’s channel-specific rules — are not something any local tool can verify for you.
For teams that want more than pass/fail, SEPA Generator Pro produces a professional diagnostics report with row and field level findings, severities, and suggested corrections, exportable as HTML.
Neither edition can guarantee bank acceptance — but removing the avoidable errors above eliminates the most common reasons files bounce.
SEPA Generator is a free local desktop app that generates pain.001.001.02 and pain.001.001.09 SEPA Credit Transfer XML from CSV, XLS, and XLSX files — your payment data stays on your computer.