Message FamiliesStatements

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

FormatWhat it isVersions acceptedEmitted by default
mt940Customer statementn/an/a
mt950Statement (MT940 without :86: narrative)n/an/a
mt942Interim transaction reportn/an/a
mt900 / mt910Confirmation of debit / creditn/an/a
camt.053Bank-to-customer statement.001.02, .001.08 – .001.12.001.08
camt.052Bank-to-customer account report.001.02, .001.08 – .001.12.001.08
camt.054Debit/credit notification.001.02, .001.08 – .001.12.001.08
bai2BAI2 cash management balance reportn/an/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

FromTo
mt940, mt950camt.053, camt.052, camt.054, every file target
mt942, mt900, mt910camt.052, camt.054, every file target
camt.053, camt.052, camt.054mt940, mt950, mt942, mt900, mt910, every file target
camt.052camt.053, camt.052
camt.053camt.053
bai2every MT, camt and file target above (not bai2 itself)
canonicalevery 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; a BIC/account value 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 ?nn subfields are recognised: SVWZ+ text goes to remittance, EREF+ to the end-to-end id, ?32/?33 to the counterparty name, ?31 to 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 NOTPROVIDED end-to-end id becomes NONREF.
  • :86: is plain free text by default. Set field86Profile=german to compose ?nn subfields instead.
  • Statements longer than an MT message can hold are split into pages (see Conventions).

Where information is lost

SituationWarning
MT940, MT950, MT900 and MT910 carry no creation time, so the camt creation times are set to the conversion timeMISSING_REQUIRED_DEFAULTED
:86: text longer than six lines of 65 charactersTRUNC_REMITTANCE
A camt bank reference longer than 16 characters going into :61:TRUNC_REFERENCE
A bank transaction code with no MT equivalent; :61: gets NTRFCODE_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=trueDROP_FIELD (or ENTRY_DEBULKED with debulk)
A :61: booking date whose year was inferred across a year boundaryDATE_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 numberSTATEMENT_BALANCE_ABSENT, LEGAL_SEQUENCE_ABSENT
A sequence number longer than 18 digits going into camtFIELD_OVERSIZED
Writing a .001.02 camt document that cannot hold a newer elementDROP_FIELD
MT942 target: no floor limit in the source, so a zero :34F: is written; balances have no MT942 slotMISSING_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 response result becomes an array and carries PAGED_OUTPUT. MT942 is never paged: an oversize report is written whole with the warning mt.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 flagged mt.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.