Statement Requests
The request family: MT920 requests for a statement or interim report to and from camt.060 account reporting requests.
Formats
| Format | What it is | Versions accepted | Emitted by default |
|---|---|---|---|
mt920 | Request message (asks for an MT940, MT941, MT942 or MT950) | n/a | n/a |
camt.060 | Account reporting request | .001.05 | .001.05 |
Pairs
| From | To |
|---|---|
mt920 | camt.060 |
camt.060 | mt920 |
canonical | mt920, camt.060 |
/v1/normalize returns both formats as a request document.
How fields map
The canonical model is a statement request holding one or more report requests, each naming the report wanted, the account and optional floor limits.
MT920 to camt.060.
:20:becomes the message id.- Each
:12:/:25:/:34F:sequence becomes one reporting request. :12:names the report:940and950ask for acamt.053.001.08,942and941for acamt.052.001.08. Any other number is carried as written.:25:becomes the account (an IBAN when it looks like one).:34F:floor limits are copied exactly:Dmeans debit entries (DEBT),Ccredit entries (CRED), no mark both (BOTH).
camt.060 to MT920. The requested message name is turned back into :12: (camt.053… → 940, camt.052… → 942); the account and floor limits are written per sequence.
Where information is lost
| Situation | Warning |
|---|---|
| camt.060 needs an account owner, an entry status and a credit/debit indicator that MT920 does not carry (see Conventions) | MISSING_REQUIRED_DEFAULTED |
| camt.060 creation time | MISSING_REQUIRED_DEFAULTED |
| The 940/950 or 941/942 distinction (both map to the same camt report) | DROP_FIELD |
A :12: message type with no camt equivalent | CODE_UNMAPPED_PROPRIETARY |
| Going to MT920: reporting period (MT920 cannot ask for one) | DROP_FIELD (lossy) |
| Going to MT920: entry status, credit/debit indicator, balance types, request id, account owner and servicer | DROP_FIELD |
Going to MT920: a request for a report with no MT920 twin, such as a camt.054 | DROP_FIELD (lossy) |
Going to MT920: floor limits that do not fit one BOTH limit or one debit plus one credit limit | DROP_FIELD (lossy) |
| A camt.060 message id over 16 characters | TRUNC_REFERENCE |
camt.060 elements with no canonical slot (MsgSndr, account name, time range, sequence range) | DROP_FIELD |
Conventions
- Credit/debit indicator defaulting. camt.060 requires a credit/debit indicator whenever it describes the requested transactions. When the source does not state one, transmute writes
CRDT, orDBITif every floor limit is a debit limit, and flags it. The entry status defaults toBOOKthe same way. - When
ReqdTxTpappears. The requested-transaction block is written only when the request has floor limits, an entry status or a credit/debit indicator. An MT920 without:34F:produces none of these defaults. - Account owner placeholder. MT920 has no account owner, so camt.060 gets the party name
NOTPROVIDED. - No requests left. If every request of a camt.060 drops on the way to MT920 (for example, only
camt.054reports were requested), the conversion returns 422unsupported-conversion.
Example
curl -sS -X POST "https://api.transmute.403fin.io/v1/convert?to=camt.060" \
-H "Authorization: Bearer $TRANSMUTE_KEY" \
-H "Content-Type: text/plain" \
--data-binary @- <<'MT'
:20:REQ-2026-0001
:12:942
:25:DE89370400440532013000
:34F:EURD1000,
:34F:EURC2500,50
MT
The result document, formatted:
<GrpHdr><MsgId>REQ-2026-0001</MsgId>...</GrpHdr>
<RptgReq>
<ReqdMsgNmId>camt.052.001.08</ReqdMsgNmId>
<Acct><Id><IBAN>DE89370400440532013000</IBAN></Id></Acct>
<AcctOwnr><Pty><Nm>NOTPROVIDED</Nm></Pty></AcctOwnr>
<ReqdTxTp>
<Sts><Cd>BOOK</Cd></Sts>
<CdtDbtInd>CRDT</CdtDbtInd>
<FlrLmt><Amt Ccy="EUR">1000</Amt><CdtDbtInd>DEBT</CdtDbtInd></FlrLmt>
<FlrLmt><Amt Ccy="EUR">2500.50</Amt><CdtDbtInd>CRED</CdtDbtInd></FlrLmt>
</ReqdTxTp>
</RptgReq>
"warnings": [
{ "code": "MISSING_REQUIRED_DEFAULTED", "severity": "info", "sourceField": "createdAt", "targetField": "GrpHdr/CreDtTm", "detail": "..." },
{ "code": "MISSING_REQUIRED_DEFAULTED", "severity": "info", "sourceField": "requests[].account.owner", "targetField": "RptgReq/AcctOwnr", "detail": "..." },
{ "code": "MISSING_REQUIRED_DEFAULTED", "severity": "info", "sourceField": "requests[].entryStatus|creditDebit|floorLimits[]", "targetField": "RptgReq/ReqdTxTp", "detail": "..." },
{ "code": "MISSING_REQUIRED_DEFAULTED", "severity": "info", "sourceField": "requests[].entryStatus|creditDebit|floorLimits[]", "targetField": "RptgReq/ReqdTxTp", "detail": "..." }
],
"meta": { "detectedType": "mt920", "targetType": "camt.060.001.05", "...": "..." }
The floor limits are a debit and a credit limit, so the indicator defaults to CRDT. With only :34F:EURD1000, it would default to DBIT.