Core APIConvert

Convert

POST /v1/convert — SWIFT MT ↔ ISO 20022 conversion. Request forms, from/to precedence, options, response envelope, XML/plain output, and paging.

Three ways to send a message

POST /v1/convert accepts exactly three request content types:

Content-TypeBodyTypical use
application/jsonEnvelope {"from", "to", "message", "options"}Programmatic clients, SDKs
text/plain or application/x-swift-mtRaw MT textcurl, file pipelines — no JSON escaping
application/xmlRaw ISO 20022 documentMX sources

Anything else is a invalid-input 400 (never a 415). Bodies are capped at 2 MiB (message-too-large 413); for larger volumes use Batch.

Telling us from and to

For raw (non-envelope) bodies, from/to come from — in precedence order:

  1. The JSON envelope fields (when using application/json)
  2. Query parameters: ?from=mt940&to=camt.053&toVersion=...
  3. Headers: X-Transmute-From, X-Transmute-To, X-Transmute-To-Version

from is optional everywhere — omit it and the engine auto-detects the source format, reported back as meta.detectedType. to is required. The supported pairs are the live registry at GET /v1/formats.

Options

OptionValuesWhat it does
translitProfilebase (default), germanTransliteration profile for characters outside the SWIFT X charset
field86Profileplain (default), germanHow MT :86: remittance info is structured
stricttrue/falseFail instead of warn on lossy steps
targetVersione.g. camt.053.001.08Pin the target message version
dateFormatdmy, mdy, ymdDate rendering in file targets (CSV)
ofxVersion102, 220OFX target version
intuBiddigitsIntuit bank id for QBO/OFX targets

In the JSON envelope these ride under options; in raw form they are query parameters of the same names.

The response

With the default Accept: application/json:

{
  "result": "<?xml version="1.0" ... camt.053.001.08 ...",
  "warnings": [ { "code": "...", "severity": "...", "...": "..." } ],
  "meta": {
    "detectedType": "mt940",
    "detectedVersion": "",
    "targetType": "camt.053.001.08",
    "durationMs": 4,
    "pages": 1
  }
}

result is a string — or an array of strings when MT paging split the output (MT messages cap at 2,000 characters; a long statement becomes multiple pages, flagged with a PAGED_OUTPUT warning).

Bare-document output

Send Accept: application/xml (MX target) or Accept: text/plain (MT target) to get the converted document itself, no envelope. Warnings can't ride in the body then, so they surface as headers:

X-Transmute-Warnings: 2
X-Transmute-Warnings-Link: https://docs.transmute.403fin.io/warnings
X-Transmute-Pages: 3        # when MT paging occurred (pages concatenated)

Warnings are not stored server-side — to see the full entries, re-issue the request with Accept: application/json.

Read the warnings

Every lossy or assumed step is a structured entry — see the warning registry for all codes and severities. Reconciliation pipelines should treat lossy entries as review items; strict: true turns them into failures instead.