Build on iso-compliant.
A headless ISO 20022 compliance engine you reach two ways: a bearer-token REST API at api.iso-compliant.com, and an MIT-licensed MCP server that drops ISO 20022 straight into Cursor and Claude Desktop. Per-document pricing, never a percentage of the wire.
30-second quickstart
Key → call → XSD-valid pain.001.
Get an API key
Sign up free — 100 documents/month, no card. Keys are prefixed iso_live_… and iso_test_… for the sandbox.
Call the API
POST your payment payload to api.iso-compliant.com under a Bearer token. The same SDK shape works on free and paid tiers.
Ship XSD-valid XML
Get a structured-address-compliant pain.001.001.09 back, ready for your bank UAT channel — no LLM in the request path.
# 1. Get a key at https://iso-compliant.com/signup (iso_live_… / iso_test_…)
# 2. Emit a structured-address-compliant pain.001:
curl -X POST https://api.iso-compliant.com/v1/iso20022/pain.001 \
-H "Authorization: Bearer iso_live_..." \
-H "Content-Type: application/json" \
-d '{
"debtor": { "name": "Acme AG", "iban": "CH9300762011623852957" },
"creditor":{ "name": "Globex SA", "iban": "DE89370400440532013000",
"postal_address": {
"street_name": "Bahnhofstrasse", "building_number": "45",
"post_code": "8001", "town_name": "Zurich", "country": "CH"
}
},
"amount": "1480.00", "currency": "EUR", "end_to_end_id": "INV-2026-0042"
}'
# → 200 OK: an XSD-valid pain.001.001.09 document.// 1. Get a key at https://iso-compliant.com/signup (iso_live_… / iso_test_…)
// 2. Emit a structured-address-compliant pain.001:
const res = await fetch(
"https://api.iso-compliant.com/v1/iso20022/pain.001",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ISOCOMPLIANT_API_KEY}`, // iso_live_…
"Content-Type": "application/json",
},
body: JSON.stringify({
debtor: { name: "Acme AG", iban: "CH9300762011623852957" },
creditor: {
name: "Globex SA", iban: "DE89370400440532013000",
postal_address: {
street_name: "Bahnhofstrasse", building_number: "45",
post_code: "8001", town_name: "Zurich", country: "CH",
},
},
amount: "1480.00", currency: "EUR", end_to_end_id: "INV-2026-0042",
}),
},
);
const xml = await res.text(); // XSD-valid pain.001.001.09# 1. Get a key at https://iso-compliant.com/signup (iso_live_… / iso_test_…)
# 2. Emit a structured-address-compliant pain.001:
import os, requests
res = requests.post(
"https://api.iso-compliant.com/v1/iso20022/pain.001",
headers={
"Authorization": f"Bearer {os.environ['ISOCOMPLIANT_API_KEY']}", # iso_live_…
"Content-Type": "application/json",
},
json={
"debtor": {"name": "Acme AG", "iban": "CH9300762011623852957"},
"creditor": {
"name": "Globex SA", "iban": "DE89370400440532013000",
"postal_address": {
"street_name": "Bahnhofstrasse", "building_number": "45",
"post_code": "8001", "town_name": "Zurich", "country": "CH",
},
},
"amount": "1480.00", "currency": "EUR", "end_to_end_id": "INV-2026-0042",
},
)
xml = res.text # XSD-valid pain.001.001.09Where to go next
Two surfaces, one engine.
REST API
Bearer-token / RFC-9421-signed HTTP API at api.iso-compliant.com. Generate pain.001 / pain.008, parse camt.053 / pain.002, render Swiss QR-bills. Deterministic XML, zero-retention.
API reference →MCP server
MIT-licensed @iso-compliant/mcp-server — ISO 20022 inside Cursor & Claude Desktop. Five free pure-local tools (no key), eight gated tools proxying under a bearer token.
Install the MCP server →Full reference
The complete endpoint, schema, and rule-pack documentation — every field, every profile (.ch.03, CGI-MP), every error code.
Read the docs →Free tier — no card
Get an API key. Ship your first pain.001 today.
100 documents/month free, full validation, identical SDK shape to the paid tier. Point your existing SDK at api.iso-compliant.com and go.