# SepaCheck (checksepa.com) > Free online validator for SEPA credit transfer files (ISO 20022 pain.001.001.03 and pain.001.001.09). Checks XML structure and a basic EPC SEPA Credit Transfer baseline and returns exact error locations. Payment files are processed in memory and not stored. Operated by Bobook Limited (Dublin, Ireland). ## What it checks - ISO 20022 pain.001 structure: required elements, types, choices, version-specific fields (e.g. ReqdExctnDt) - IBAN mod-97 and official length per country (debtor and creditor) - CtrlSum and NbOfTxs at group and payment-info level - Charge bearer must be SLEV for SEPA (DEBT/CRED/SHAR rejected) ## Supported - pain.001.001.03: yes - pain.001.001.09: yes - pain.001.001.11: not yet - pain.008 (SEPA Direct Debit): not yet (recognised, returned as valid: false) - camt: not yet (recognised, returned as valid: false) - Bank-specific Implementation Guidelines (MIG overlays, e.g. DK-TVS/GBIC): out of scope on the free check. A file that passes can still be rejected by a bank. - Max file size: 1.5 MB on the website, 2 MB on POST /v1/validate ## Privacy - Payment files are validated in memory and discarded. The XML is not written to disk. - Server logs keep message version, byte size, pass/fail, error codes, and a hash of the client IP. The XML is not logged. - XML is never rewritten by or sent to a language model. - No bank login, no EBICS, no Verification of Payee, no payment initiation. ## API - POST /v1/validate is live. No API key. - Send multipart form field "file", or a raw XML body with Content-Type: application/xml. - Free: 30 validations per IP per hour, and 200 per IP per UTC day. Above that: HTTP 429, Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-RateLimit-Limit-Day, X-RateLimit-Remaining-Day, and a link to the waitlist. - Max file size: 2 MB. Larger files: HTTP 413. Empty body: HTTP 400. - JSON report: valid, format (pain.001), version (pain.001.001.03 or pain.001.001.09), errors[{code,message,path,line}], warnings (same item shape). - GET /v1/validate returns 405. The website route POST /api/validate is a different response and is not this contract. - Higher limits and API keys: waitlist, from EUR 79/month; joining is free, charged only after confirmation - Join: https://checksepa.com/api-waitlist (or email info@bobook.club, subject "checksepa API waitlist") - Docs: https://checksepa.com/docs - OpenAPI: https://checksepa.com/openapi.json - Full text for agents: https://checksepa.com/llms-full.txt ## Key pages - [Validate a pain.001 file](https://checksepa.com/validate): upload and see errors - [CSV to pain.001 generator](https://checksepa.com/generate): builds a basic pain.001.001.03 from CSV (columns: debtor_name, debtor_iban, creditor_name, creditor_iban, amount) - [API docs](https://checksepa.com/docs) - [Sample files](https://checksepa.com/samples): valid and invalid pain.001 examples with dummy IBANs - [Changelog](https://checksepa.com/changelog) - [Privacy](https://checksepa.com/privacy) ## Contact Bobook Limited, Venture Hub, 136 Capel Street, Dublin 1, D01 T2C9, Ireland ยท info@bobook.club