Draft & validate SWIFT and ISO 20022 messages

Last reviewed: · Curated by Ohmyfin Organisation editorial.

Build a structurally-valid SWIFT FIN or ISO 20022 XML message in the browser, validate it against the SWIFT User Handbook and CBPR+, and (optionally) translate between MT and MX. Every drafter has a free public REST API (100 requests / IP / day, no signup, CORS-open) and ships in the open-source @ohmyfin/swift-draft npm package so you can self-host.

SWIFT MT (FIN) drafters

Block-structured legacy FIN messages. Validated against the SWIFT User Handbook character sets and field lengths; output is a real 4-block message you can paste into Alliance Access.

SWIFT MT (FIN) MT103 drafter Draft a fully-formed SWIFT MT103 single customer credit transfer in the browser. Live field validation, 4-block output, free public REST API. No signup. Open MT103 → SWIFT MT (FIN) MT202 drafter Draft a SWIFT MT202 general financial-institution transfer in the browser. Live BIC and amount validation, 4-block FIN output, free public REST API. Open MT202 → SWIFT MT (FIN) MT202COV drafter Draft a SWIFT MT202COV cover payment in the browser. Includes mandatory sequence B (underlying customer info). Live validation, 4-block output, free REST API. Open MT202COV → SWIFT MT (FIN) MT199 drafter Draft a SWIFT MT199 free-format message in the browser. Validates references, narrative length and SWIFT character set. Free REST API, no signup. Open MT199 →

ISO 20022 (MX) drafters

XML messages under CBPR+ — the format every cross-border SWIFT participant must send and receive from November 2025. Validated against the published XSDs and the CBPR+ usage guidelines.

ISO 20022 (MX) pacs.008.001.08 drafter Draft a CBPR+ pacs.008.001.08 FI-to-FI customer credit transfer in the browser. Live validation, AppHdr + BizMsgEnvlp output, free public REST API. No signup. Open pacs.008.001.08 → ISO 20022 (MX) pacs.009.001.08 drafter Draft a CBPR+ pacs.009.001.08 financial-institution credit transfer in the browser, with optional COV cover sequence. Free REST API, no signup. Open pacs.009.001.08 → ISO 20022 (MX) pacs.002.001.10 drafter Draft a CBPR+ pacs.002.001.10 Payment Status Report in the browser. Emit ACSP, ACSC, ACWP, RJCT and other ISO 20022 statuses. Free REST API. Open pacs.002.001.10 → ISO 20022 (MX) camt.053.001.08 drafter Draft a CBPR+ camt.053.001.08 end-of-day Bank-to-Customer Statement in the browser. Multi-entry support, free REST API, no signup. Open camt.053.001.08 → ISO 20022 (MX) camt.054.001.08 drafter Draft a CBPR+ camt.054.001.08 Bank-to-Customer Debit/Credit Notification in the browser. Real-time cash advice, free REST API, no signup. Open camt.054.001.08 →

MT ↔ MX translator (CBPR+)

Convert between SWIFT MT and ISO 20022 in either direction. Surfaces structured warnings whenever the translation is lossy (uetr-missing, valuedate-default, structured-address-dropped, best-effort) so you can decide whether to ship.

CBPR+ translator MT → MX translator Convert SWIFT MT103, MT202, MT202COV or MT199 to ISO 20022 pacs.008 / pacs.009 (CBPR+). In-browser, with structured warnings (uetr-missing, valuedate-default, best-effort). Open MT → MX translator → CBPR+ translator MX → MT translator Convert ISO 20022 pacs.008, pacs.009 or pacs.002 back to a structurally-valid SWIFT MT103, MT202 or MT202COV. Useful for back-office sanity checks during CBPR+ coexistence. Open MX → MT translator →

Open-source library

The same validators, serialisers and translator that power every drafter on this page — MIT-licensed, zero-dependency TypeScript, runs in Node and the browser. Self-host for unlimited throughput.

Open source @ohmyfin/swift-draft — open-source npm package The same validators, serialisers and MT↔MX translator that power every drafter on this page, packaged as a zero-dependency TypeScript library. MIT-licensed, runs in Node and the browser. Open @ohmyfin/swift-draft — open-source npm package → Open source @ohmyfin/swift-draft-react — React bindings React hooks and form components for embedding any MT or MX drafter inside your own app. Tree-shakeable, server-component friendly. Open @ohmyfin/swift-draft-react — React bindings →

Frequently asked questions

Can I really draft a real MT103 here for free?

Yes. The drafter validates every field against the SWIFT User Handbook (character sets, BIC and IBAN rules, ISO 4217 currencies, SWIFT date format) and emits a real 4-block FIN message. To actually send it through SWIFT you still need Alliance Access (or a service-bureau equivalent) and a BIC connected to FIN — Ohmyfin does not transmit messages.

Do you log the data I put into the drafters?

No. The forms run client-side; the optional REST API validates and returns the formatted message without persisting any payload. The Share button puts the payload in the URL # fragment, which never reaches our server.

What is the rate limit on the public API?

100 requests per IP per day, shared across every /api/draft/* endpoint (drafters, validators, MT↔MX translator). For higher throughput, self-host the open-source @ohmyfin/swift-draft npm package — it has no rate limit because it runs entirely on your machine.

How is this different from the SWIFT payment tracker on the homepage?

The tracker is read-only: paste a UETR and we look up the latest available status across the SWIFT network. The drafters are write-only: build a message before you hand it to your bank, or to sanity-check a message a counterparty sent you. The two surfaces never share data.

Which MT and MX message types do you cover?

MT103, MT202, MT202COV and MT199 on the FIN side; pacs.008, pacs.009 (core + COV), pacs.002, camt.053 and camt.054 on the ISO 20022 side. The translator covers MT103↔pacs.008, MT202↔pacs.009, MT202COV↔pacs.009.COV and MT199→pacs.009 (best-effort).

Is the open-source library production-ready?

It is production-ready for validation, serialisation and translation. It is not a SWIFT transmission engine — you still need Alliance Access / SAG / Alliance Lite2 (or a service bureau) to put a message on FIN. Use the library to build, validate and translate; use SWIFT itself to send.