Developers · REST API

One bearer token. The whole ISO 20022 surface.

A headless HTTP API at api.iso-compliant.com. Generate pain.001 / pain.008, parse camt.053 / pain.002, render Swiss QR-bills, validate IBANs. Deterministic XML emission — no LLM in the request path — under a zero-retention contract.

Quickstart

Key → call → XSD-valid pain.001.

Get a key, POST a payment payload, receive a structured-address compliant pain.001.001.09 back. The same call in curl, TypeScript, and Python.

Authentication

Bearer tokens. Optional HTTP signatures.

Bearer token

Every gated call carries Authorization: Bearer iso_live_…. Live keys are prefixed iso_live_; sandbox keys are prefixed iso_test_ and never touch a real bank rail. Free local-compute endpoints (IBAN validation) work without a key.

Authorization: Bearer iso_live_9f3c…
Content-Type: application/json

RFC-9421 HTTP signatures

For high-assurance integrations, sign requests with an Ed25519 key per RFC 9421 (HTTP Message Signatures). Add a Signature-Input and Signature header over the method, path, and a content digest; the API rejects any request whose body does not match the signed digest.

Signature-Input: sig1=("@method" "@path"
  "content-digest");keyid="ed25519:…";alg="ed25519"
Signature: sig1=:MEUCIQ…:

Zero retention: request and response payloads — IBANs, names, amounts — are processed in memory and never persisted. Audit metadata is counter-only.

Endpoint reference

Six endpoints. One contract.

Each route, with the request body shape and the response shape. Full field-level reference at the API documentation.

Gated · key

Statement parser

POST /v1/iso20022/camt.053/parse

Request

multipart camt.053 / camt.054 XML + expected invoice keys

Response

{ "entries": [{ "amount", "end_to_end_id", "remittance", "matched_invoice_id" }] }
camt.053camt.054reconciliation
Gated · key

Credit transfer

POST /v1/iso20022/pain.001

Request

{ "debtor", "creditor": { "postal_address": {…} }, "amount", "currency", "end_to_end_id" }

Response

XSD-valid pain.001.001.09 XML  ·  ?profile=ch.03 | cgi-mp
SEPA SCTCGI-MP v3ch.03 profile
Gated · key

Rejection classifier

POST /v1/iso20022/pain.002/parse

Request

pain.002 XML

Response

{ "rejections": [{ "code": "AC01", "disposition": "retry" | "hitl" }] }
AC0xXT* extendedHITL queue
Gated · key

Swiss QR-bill

POST /v1/qr-bill

Request

{ "creditor", "iban", "amount", "currency", "reference", "format": "pdf|svg|png|payload" }

Response

SPC v0200 — PDF / SVG / PNG bytes or the 31-line payload string
SPC 0200QRRSCOR
Free · no key

IBAN validator

POST /v1/iban/validate

Request

{ "iban": "CH9300762011623852957" }

Response

{ "valid": true, "bank_name", "bic", "qr_iban": false }
ISO 13616SIX BCEBA
Gated · key

Direct debit

POST /v1/iso20022/pain.008

Request

{ "creditor", "mandates": [{ "debtor", "seq_tp": "FRST|RCUR|OOFF|FNAL" }] }

Response

XSD-valid pain.008.001.02 XML — CORE / B2B
COREB2Bmandate

Free vs gated

What needs a key, and what doesn't.

Pure local-compute checks (IBAN mod-97, QRR / SCOR checksums) run without a key. Anything that emits an ISO 20022 document or parses a bank statement is gated behind a bearer token.

Free — no key

  • POST /v1/iban/validate

    ISO 13616 mod-97 + BIC lookup + QR-IBAN flag.

Gated — Bearer iso_live_…

  • POST /v1/iso20022/pain.001
  • POST /v1/iso20022/pain.008
  • POST /v1/iso20022/camt.053/parse
  • POST /v1/iso20022/pain.002/parse
  • POST /v1/qr-bill

No key? You hit the funnel.

A gated call without a key returns a 401 that points to /signup.

Both the REST API and the MCP server route an unkeyed developer to the same place: the sign-up page. The error is explicit, machine-readable, and carries the URL so an agent can surface it inline.

401 UnauthorizedPOST /v1/iso20022/pain.001
{
  "error": "INVALID_API_KEY",
  "message": "Missing or invalid bearer token. Gated endpoints require an iso_live_ or iso_test_ key.",
  "signup_url": "https://iso-compliant.com/signup",
  "docs_url": "https://iso-compliant.com/docs"
}

Same funnel in the IDE

When a developer in Cursor or Claude Desktop invokes a gated MCP tool with no ISOCOMPLIANT_API_KEY, the server returns an isError response with the same /signup prompt — the conversion moment lands right where the developer is working.

Get one free

Free tier — no card

Get a key. Point your SDK at api.iso-compliant.com.

100 documents/month free. Sandbox iso_test_ keys for CI, live iso_live_ keys for production.