Charges Requests
The charges family: MT191 and MT291 requests for payment of charges to and from camt.106, with the :71B: charge codewords.
Formats
| Format | What it is | Versions accepted | Emitted by default |
|---|---|---|---|
mt191 | Request for payment of charges, interest and other expenses (customer side) | n/a | n/a |
mt291 | The same request between financial institutions | n/a | n/a |
camt.106 | Charges payment request | .001.02 | .001.02 |
Pairs
| From | To |
|---|---|
mt191, mt291 | camt.106 |
camt.106 | mt191, mt291 |
A charges request is its own family: it never converts to a payment, a statement, a notice or an investigation, and mt191 → mt291 is not a pair. There is no canonical source.
How fields map
The canonical model is one charges request: the claimed total, the individual charges, the institutions involved and a reference to the payment the charges relate to.
MT191/MT291 to camt.106.
:20:becomes the message id;:21:(the reference of the original payment) becomes the underlying transaction's message id.:32B:becomes the requested amount.:52a:becomes the charges requester;:57a:the charges account agent.:71B:is read line by line. A coded line with a currency and amount (/COMM/EUR30,00) becomes one charge of that type. Other lines are narrative and become additional information.:72:becomes the instruction for the instructed agent.
camt.106 to MT191/MT291. :71B: is rebuilt with the coded charges first, then the narrative, at most six lines. The target id (mt191 or mt291) decides the message type.
Document shape. A request with zero or one charge is written as a single record (Sngl). With two or more charges it is grouped by charge type (PerTp), and the group header states the record count and the requested total.
Recognised charge codewords
:71B: codeword | Meaning |
|---|---|
BRKF | Brokerage fee |
CHGS | Charges, also used for a charge with no type |
COMM | Commission |
POST | Postage |
STMP | Stamp duty |
TELE | Teletransmission charges |
A codeword outside this list, or a coded line without a clean currency and amount, is kept as narrative and flagged.
Where information is lost
| Situation | Warning |
|---|---|
A :71B: codeword or camt.106 charge type with no table row | CHARGES_DETAIL_UNMAPPED |
| camt.106 creation time (MT carries none) | MISSING_REQUIRED_DEFAULTED |
A charge with no type going to MT; written as /CHGS/ | MISSING_REQUIRED_DEFAULTED |
| The charges or the stated total do not agree with the requested amount | AMOUNT_MISMATCH |
| Several camt.106 records aggregated: only the first record's references are kept | DROP_FIELD |
| camt.106 elements with no canonical slot (record ids, value date, debtor agent, …) | DROP_FIELD |
| UETR going to MT (no field) | DROP_FIELD |
:71B: or :72: beyond six lines; camt.106 text beyond 140 characters | TRUNC_REMITTANCE |
Conventions
- Amounts are never invented. When camt.106 states no total, the requested amount is the exact sum of the charges, and only when they share one currency.
- Narrative is not loss. A
:71B:line that is plain text is carried as narrative without a warning. - Sibling detection. A bare MT291 detects as
mt191; send the FIN envelope orfrom=mt291to keep the type.
Example
curl -sS -X POST "https://api.transmute.403fin.io/v1/convert?to=camt.106" \
-H "Authorization: Bearer $TRANSMUTE_KEY" \
-H "Content-Type: text/plain" \
--data-binary @- <<'MT'
:20:CHG-2026-0001
:21:PAY-2026-0001
:32B:EUR45,50
:52A:AAAADEFF
:57A:BBBBDEFF
:71B:/COMM/EUR30,00
/POST/EUR15,50
:72:/ACC/CHARGES FOR PAY-2026-0001
MT
The result document, formatted:
<GrpHdr>
<MsgId>CHG-2026-0001</MsgId>
<ChrgsRqstr><FinInstnId><BICFI>AAAADEFF</BICFI></FinInstnId></ChrgsRqstr>
<TtlChrgs><NbOfChrgsRcrds>2</NbOfChrgsRcrds><TtlChrgsAmt Ccy="EUR">45.50</TtlChrgsAmt></TtlChrgs>
<ChrgsAcctAgt><FinInstnId><BICFI>BBBBDEFF</BICFI></FinInstnId></ChrgsAcctAgt>
</GrpHdr>
<Chrgs>
<PerTp>
<Tp><Cd>COMM</Cd></Tp>
<Rcrd>
<UndrlygTx><MsgId>PAY-2026-0001</MsgId></UndrlygTx>
<Amt Ccy="EUR">30.00</Amt>
<InstrForInstdAgt><InstrInf>/ACC/CHARGES FOR PAY-2026-0001</InstrInf></InstrForInstdAgt>
</Rcrd>
</PerTp>
<PerTp>
<Tp><Cd>POST</Cd></Tp>
<Rcrd><UndrlygTx><MsgId>PAY-2026-0001</MsgId></UndrlygTx><Amt Ccy="EUR">15.50</Amt></Rcrd>
</PerTp>
</Chrgs>
The only warning is MISSING_REQUIRED_DEFAULTED (info) for GrpHdr/CreDtTm; meta.targetType is camt.106.001.02.