MT ↔ ISO 20022
Convert SWIFT MT statements and transfers to and from ISO 20022 MX: MT940 / MT942 / MT950 ↔ camt.053 / camt.052, MT103 ↔ pacs.008, and MT202 / MT205 ↔ pacs.009. MX versions auto-detected on input.
SWIFT MT ↔ ISO 20022
A stateless, API-first service that converts SWIFT MT messages to and from ISO 20022, normalizes either format to clean JSON, and validates at selectable strictness. Message bodies arenever persisted and never logged; completing a request leaves behind exactly one row of usage metadata.
Free tier: 1,000 live conversions / month · no card required.
Message contents live in request-scoped memory only. The database keeps metadata: type, size, duration, status, warning codes.
Idempotency cache (24h TTL) and the encrypted async batch store (purged on completion; TTL ≤ 24h). Nothing else touches payload content.
All processing and backups stay in the EU. Statelessness makes right-to-erasure trivial: for payloads there is nothing to erase.
Stateless by design
Capabilities
Grounded in the real product surface: every card maps to a documented endpoint or feature, not a roadmap promise.
Convert SWIFT MT statements and transfers to and from ISO 20022 MX: MT940 / MT942 / MT950 ↔ camt.053 / camt.052, MT103 ↔ pacs.008, and MT202 / MT205 ↔ pacs.009. MX versions auto-detected on input.
Parse either format into one frozen, stable canonical JSON shape built for bookkeeping and reconciliation, with amounts always as strings, never floats.
Syntax and schema validation at selectable strictness levels, including CBPR+ checks. Always returns 200 with valid + findings[]; MX output validates against vendored ISO 20022 XSDs.
IBAN / BIC / code checks against free registry data, with a bring-your-own BIC directory plug point. Licensed directory data is never bundled.
Async batch conversion with job polling and signed job.completed webhooks (retry ladder, X-Transmute-Signature).
File-drop / SFTP connectors move files between customer-owned directories (in/ → out/); nothing enters our custody.
License-mode deployment for Enterprise: unlimited within license, rate limiting preserved, your infrastructure.
Lossy or assumed conversion steps surface as deterministic, severity-graded warnings in the response; nothing is dropped silently.
Every parseable format additionally normalizes to canonical JSON. The full registry is served live by the engine at GET /v1/formats.
One call
Authenticate with a bearer key, POST the message, get back the converted document plus severity-graded warnings and metadata. Raw MT text and bare XML work too.
curl -sS -X POST https://api.transmute.403fin.io/v1/convert \
-H "Authorization: Bearer $TRANSMUTE_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"mt940","to":"camt.053","message":"..."}'const res = await fetch("https://api.transmute.403fin.io/v1/convert", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.TRANSMUTE_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ from: "mt940", to: "camt.053", message }),
});
const { result, warnings, meta } = await res.json();import os, requests
res = requests.post(
"https://api.transmute.403fin.io/v1/convert",
headers={"Authorization": f"Bearer {os.environ['TRANSMUTE_KEY']}"},
json={"from": "mt940", "to": "camt.053", "message": message},
)
data = res.json() # {"result": "...camt.053...", "warnings": [...], "meta": {...}}req, _ := http.NewRequest("POST",
"https://api.transmute.403fin.io/v1/convert",
strings.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("TRANSMUTE_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)Full request body omitted for brevity; see the message payload in the quickstart. Sample data is synthetic (published example IBAN, TEST BICs).
POST raw MT text, bare ISO 20022 XML, or a JSON envelope with from/to. Authenticate with a bearer API key.
The engine parses, maps via declarative SR-versioned tables, and renders the target, all in request-scoped memory. Nothing is stored.
Receive the converted document (or canonical JSON) plus deterministic, severity-graded warnings. One row of usage metadata is all that remains.
Free tier: 1,000 live conversions a month, no card required.