Statements
The statement family: MT940, MT950, MT942, MT900 and MT910 to and from camt.053, camt.052 and camt.054, plus BAI2 and accounting file targets.
Formats
| Format | What it is | Versions accepted | Emitted by default |
|---|---|---|---|
mt940 | Customer statement | n/a | n/a |
mt950 | Statement (MT940 without :86: narrative) | n/a | n/a |
mt942 | Interim transaction report | n/a | n/a |
mt900 / mt910 | Confirmation of debit / credit | n/a | n/a |
camt.053 | Bank-to-customer statement | .001.02, .001.08 – .001.12 | .001.08 |
camt.052 | Bank-to-customer account report | .001.02, .001.08 – .001.12 | .001.08 |
camt.054 | Debit/credit notification | .001.02, .001.08 – .001.12 | .001.08 |
bai2 | BAI2 cash management balance report | n/a | n/a |
The camt formats also render as .001.02 when you ask for it with targetVersion (for example camt.053.001.02). Versions after .001.08 are read, never written.
The family also renders to accounting files: csv-xero, csv-generic, csv-quickbooks, csv-sage, ofx, qfx, qbo, bai2 and accounting-transaction. Those targets and their options are described in Formats.
Pairs
| From | To |
|---|---|
mt940, mt950 | camt.053, camt.052, camt.054, every file target |
mt942, mt900, mt910 | camt.052, camt.054, every file target |
camt.053, camt.052, camt.054 | mt940, mt950, mt942, mt900, mt910, every file target |
camt.052 | camt.053, camt.052 |
camt.053 | camt.053 |
bai2 | every MT, camt and file target above (not bai2 itself) |
canonical | every MT, camt and file target above |
MT-to-MT pairs (mt940 → mt950) are not registered. mt942, mt900 and mt910 do not convert to camt.053: an interim report or a debit/credit advice carries no closing balance, and transmute never invents one, so a statement cannot be built from them. Such a request is a 422 unsupported-conversion whose detail points you to camt.052 or camt.054. The camt-to-camt pairs re-render a document at the default version, or report-to-statement for camt.052 → camt.053.
How fields map
MT to camt.
:20:becomes both the message id and the statement id.:25:becomes the account. A value shaped like an IBAN is written as an IBAN, anything else as a proprietary id; aBIC/accountvalue is split into the servicing bank and the account.:28C:becomes the electronic sequence number (statement number) and the legal sequence number (page).- Balances map by type:
:60F:to opening booked,:62F:to closing booked,:64:to closing available, each:65:to forward available. - Each
:61:line becomes one entry: value date, booking date (the year is inferred from the value date), credit or debit, amount, transaction type code (translated to an ISO bank transaction code when a table row exists, and always kept as the proprietary code), customer reference as the end-to-end id, bank reference as the account servicer reference. :86:becomes remittance information. German-style?nnsubfields are recognised:SVWZ+text goes to remittance,EREF+to the end-to-end id,?32/?33to the counterparty name,?31to its account.- MT942
:13D:becomes the report creation time;:90D:/:90C:entry counts and sums are copied as stated, never recomputed.
camt to MT.
- The opening and closing balances become
:60F:and:62F:; entries become:61:+:86:pairs. - A missing or
NOTPROVIDEDend-to-end id becomesNONREF. :86:is plain free text by default. Setfield86Profile=germanto compose?nnsubfields instead.- Statements longer than an MT message can hold are split into pages (see Conventions).
Where information is lost
| Situation | Warning |
|---|---|
| MT940, MT950, MT900 and MT910 carry no creation time, so the camt creation times are set to the conversion time | MISSING_REQUIRED_DEFAULTED |
:86: text longer than six lines of 65 characters | TRUNC_REMITTANCE |
A camt bank reference longer than 16 characters going into :61: | TRUNC_REFERENCE |
A bank transaction code with no MT equivalent; :61: gets NTRF | CODE_UNMAPPED_PROPRIETARY, plus DROP_FIELD for the code |
Remittance going to MT950, which has no :86: | DROP_FIELD |
A camt entry with several transaction details: only the first is kept unless you set debulk=true | DROP_FIELD (or ENTRY_DEBULKED with debulk) |
A :61: booking date whose year was inferred across a year boundary | DATE_YEAR_INFERRED |
:25: carried a trailing currency after the IBAN (a known bank dialect) | ACCOUNT_CCY_SUFFIX |
camt.052 → camt.053 with no closing booked balance, or no legal sequence number | STATEMENT_BALANCE_ABSENT, LEGAL_SEQUENCE_ABSENT |
| A sequence number longer than 18 digits going into camt | FIELD_OVERSIZED |
Writing a .001.02 camt document that cannot hold a newer element | DROP_FIELD |
MT942 target: no floor limit in the source, so a zero :34F: is written; balances have no MT942 slot | MISSING_REQUIRED_DEFAULTED, DROP_FIELD |
Conventions
- Paging. An MT940 or MT950 message holds at most 2,000 characters. A longer statement is split into pages: page 1 opens with
:60F:, every page but the last closes with:62M:, every page after the first opens with:60M:, the last closes with:62F:, and:28C:counts the pages (00042/001,00042/002, …). A:61:line never separates from its:86:. The responseresultbecomes an array and carriesPAGED_OUTPUT. MT942 is never paged: an oversize report is written whole with the warningmt.page_overflow. - Consolidation. Several MT940/MT950 pages in one request become one statement when they repeat the account and statement number and their
:28C:page numbers follow on. A gap or duplicate starts a new statement and is flaggedmt.28c_chain_gap. NONREF. The MT placeholder for "no customer reference" is dropped on the way into camt; it is never written as an end-to-end id.- Debulking. By default one camt entry becomes one transaction. With
debulk=true, an entry with several transaction details becomes one transaction per detail, each amount copied from the detail, and only if the copied amounts add up to the entry amount.
Example
The quickstart MT940 to a Xero bank statement CSV:
curl -sS -X POST "https://api.transmute.403fin.io/v1/convert?to=csv-xero" \
-H "Authorization: Bearer $TRANSMUTE_KEY" \
-H "Content-Type: text/plain" \
--data-binary @- <<'MT'
{1:F01AAAADEFFXXXX0000000000}{2:I940BBBBDEFFXXXXN}{4:
:20:STMT0001
:25:DE89370400440532013000
:28C:00042/001
:60F:C260601EUR1000,00
:61:2606020602C250,00NTRFNONREF//BANKREF1
:86:INVOICE 4711
:62F:C260602EUR1250,00
-}
MT
{
"result": "Date,Description,Debit,Credit
02/06/2026,INVOICE 4711,,250.00
",
"warnings": [],
"meta": { "detectedType": "mt940", "targetType": "csv-xero", "...": "..." }
}
With to=camt.053 the same message produces one Stmt with an OPBD balance of 1000.00, a CLBD balance of 1250.00 and one Ntry whose bank transaction code is PMNT/RCDT/ESCT with the proprietary code NTRF kept beside it.