Which camt versions does SepaCheck validate?
camt.053.001.02, camt.053.001.08, camt.054.001.02, and camt.054.001.08, checked against the official ISO 20022 XML Schemas. Other camt versions are identified and returned with valid: false.
Bank statements
Check a bank-to-customer statement or debit/credit notification against the official ISO 20022 schema, or turn it into JSON or CSV. No API key. Deutsch
camt.053.001.02 and camt.053.001.08 (BankToCustomerStatement)camt.054.001.02 and camt.054.001.08 (BankToCustomerDebitCreditNotification)Validation uses those four official XML Schemas. POST /v1/validate is still the pain.001 check. A camt file sent there is recognised and returned with valid: false. Send statements to the endpoints on this page.
POST /v1/validate.Retry-After, and X-RateLimit-* headers.Join the waitlist for higher limits · pain.001 API docs
POST /v1/camt/validate. Multipart form field file, or a raw XML body. HTTP 200 is the report. valid is true only when the official schema accepts the file. GET returns 405.
curl -F "file=@camt053.xml" https://checksepa.com/v1/camt/validateFindings use code, message, path, and line. Schema codes are XSD-REQUIRED, XSD-TYPE, XSD-UNEXPECTED, and XSD. An unsupported version is XSD-VERSION. A file that is not well-formed XML is XSD-PARSE. The example below is the first error from the invalid camt.053.001.08 sample. The full report also flags the IBAN and the negative amount.
{
"valid": false,
"format": "camt.053",
"version": "camt.053.001.08",
"errors": [
{
"code": "XSD-REQUIRED",
"message": "Element '{urn:iso:std:iso:20022:tech:xsd:camt.053.001.08}GrpHdr': Missing child element(s). Expected is ( {urn:iso:std:iso:20022:tech:xsd:camt.053.001.08}CreDtTm ).",
"path": "/Document/BkToCstmrStmt/GrpHdr",
"line": 4
}
],
"warnings": []
}POST /v1/camt/convert?format=json or format=csv. json is the default. A credit (CRDT) uses the debtor as the counterparty. A debit (DBIT) uses the creditor. camt.054 notifications in these versions have entries and no statement balances, so balances is empty.
curl -F "file=@camt053.xml" "https://checksepa.com/v1/camt/convert?format=json"curl -F "file=@camt053.xml" "https://checksepa.com/v1/camt/convert?format=csv"One statement from the valid camt.053.001.08 sample, shortened to the first balance and the first entry:
{
"format": "camt.053",
"version": "camt.053.001.08",
"statements": [
{
"id": "STMT-1",
"accountIban": "DE89370400440532013000",
"accountCurrency": "EUR",
"balances": [
{ "type": "OPBD", "amount": "1000.00", "currency": "EUR", "creditDebit": "CRDT", "date": "2026-10-01" }
],
"entries": [
{
"amount": "125.00",
"currency": "EUR",
"creditDebit": "CRDT",
"bookingDate": "2026-10-02",
"valueDate": "2026-10-02",
"counterpartyName": "Nordlicht GmbH",
"counterpartyIban": "DE44500105175407324931",
"remittanceInfo": "Invoice 100",
"endToEndId": "E2E-IN-1"
}
]
}
]
}CSV has one header and one row per balance or entry: statement_id, account_iban, account_currency, row_type (balance or entry), balance_type, amount, currency, credit_debit, balance_date, booking_date, value_date, counterparty_name, counterparty_iban, remittance_info, end_to_end_id.
Convert reads a supported camt document even when the schema check would fail, and returns the fields it can see. pain.001 and other messages get HTTP 400 with unsupported_message. An empty body is 400. A file over 2 MB is 413. GET is 405.
camt.053.001.02, camt.053.001.08, camt.054.001.02, and camt.054.001.08, checked against the official ISO 20022 XML Schemas. Other camt versions are identified and returned with valid: false.
POST /v1/camt/convert?format=json returns statements with the account IBAN, balances, and entries. Each entry has amount, currency, credit or debit, booking date, value date, counterparty name, counterparty IBAN, remittance information, and end-to-end id. format=csv returns the same rows as CSV. A credit uses the debtor as the counterparty. A debit uses the creditor.
No. Validation and conversion run in memory for that request and the XML is discarded. Logs keep version, size, and error codes, not the statement.
No. valid means the file matches the official schema. It does not reconcile the account, and it is not a bank Implementation Guideline check.
No. POST /v1/validate, POST /v1/camt/validate, and POST /v1/camt/convert share one free limit: 30 requests per IP per hour and 200 per UTC day, 2 MB maximum, no API key.
Sample files use published dummy IBANs, not live accounts. · OpenAPI · llms.txt · Deutsche Fassung