Rejects and Status Reports
The reject family: MT103 and MT202 rejects (the /REJT/ codeword in :72:) to and from pacs.002, and generating pacs.002 or pain.002 status reports from canonical JSON.
Formats
| Format | What it is | Versions accepted | Emitted by default |
|---|---|---|---|
mt103-rejt | MT103 carrying /REJT/ in :72: (customer transfer rejected) | n/a | n/a |
mt202-rejt | MT202 carrying /REJT/ in :72: (bank transfer rejected) | n/a | n/a |
pacs.002 | FI-to-FI payment status report | .001.10 – .001.14 | .001.10 |
pain.002 | Customer payment status report (target only) | .001.10 – .001.14 | .001.10 |
Pairs
| From | To |
|---|---|
mt103-rejt, mt202-rejt | pacs.002 |
pacs.002 | mt103-rejt, mt202-rejt |
canonical | pacs.002, pain.002 |
A reject is never a return: mt103-rejt → pacs.004 and mt103-retn → pacs.002 do not exist. pain.002 can be generated but not converted from; as a source it is normalize-only.
How fields map
The canonical model is a status document: a message id, the original message it reports on, and one entry per transaction with its status, reason and original references.
MT reject to pacs.002.
:20:becomes the status report's message id. The format decides the original message name (MT103orMT202).- Every transaction gets status
RJCT. - The block 3 UETR
{121:}becomes the original UETR. :32A:becomes the original settlement date and amount (OrgnlTxRef), copied exactly.- MT202
:21:becomes the original end-to-end id. :72:is read through the codeword table below.
:72: line | Becomes |
|---|---|
/REJT/ | The reject marker. A reason-code suffix (/REJT/AC01) is the reason; a field-tag suffix (/REJT/59) is dropped |
/AC01/ (any 4-character code) | The reason code; trailing text becomes additional information |
/MREF/<ref> | The original message id and original instruction id |
/TREF/<ref> | The original end-to-end id (wins over MT202 :21:) |
/CHGS/... | Dropped (see below) |
/TEXT/<text> and anything else | Additional information |
pacs.002 to MT reject. One MT message per rejected transaction (PAGED_OUTPUT when there is more than one). :72: is written as /REJT/<code>, /MREF/, /TREF/ (MT103) and /TEXT/ lines.
Where information is lost
| Situation | Warning |
|---|---|
Customer parties, remittance, :33B:, :77B: and other payment fields of the rejected message | DROP_FIELD |
The agents :52a: to :58a: of the rejected message | DROP_AGENT |
/CHGS/ in :72:: a status report carries no charges | DROP_FIELD (lossy) |
| A reason code outside the recognised set: written as a proprietary reason | CODE_UNMAPPED_PROPRIETARY |
An unknown :72: codeword | RETURN_REASON_UNMAPPED |
| Additional information over 105 characters per line | TRUNC_NARRATIVE |
Creation time; MT reject fields MT103/MT202 require (:23B:CRED, :71A:SHA, NOTPROVIDED parties, :58D:NOTPROVIDED) | MISSING_REQUIRED_DEFAULTED |
| Group status, acceptance time and original payment information id going to MT | DROP_FIELD |
Conventions
/REJT/detection. A:72:line starting with/REJT/routes an MT103 tomt103-rejtand an MT202 tomt202-rejt. Sendingfrom=mt103for a message that carries/REJT/(orfrom=mt103-rejtfor one that does not) isinvalid-input400; omitfromand let detection decide.- Only
RJCThas an MT twin.pacs.002→mt103-rejtrequires every transaction to have statusRJCTand to carry its original amount and date (OrgnlTxRef/IntrBkSttlmAmtandIntrBkSttlmDt), because:32A:is mandatory and is never invented. An accepted status such asACSP, or a report about the other side (a pacs.009 original going tomt103-rejt), returns 422unsupported-conversion. :58D:NOTPROVIDED. An MT202 reject requires a beneficiary institution, which a status report does not carry. transmute writes the placeholder:58D:NOTPROVIDEDand flags it.- Files of rejects. Several MT reject messages in one request fold into one pacs.002 with one transaction each. Every message must carry
/REJT/. - Generating status reports. Send a canonical
statusdocument (the shape/v1/normalizereturns for a pacs.002) withto=pacs.002orto=pain.002. Forpain.002, transactions are grouped by their original payment information id. - Recognised reason codes (written as
Cd, others asPrtry):AC01,AC03,AC04,AC06,AG01,AG02,AM01,AM02,AM04,AM05,AM09,BE01,BE04,CNOR,CURR,CUST,DNOR,DUPL,FF01,FOCR,FRAD,MD07,MS02,MS03,NARR,RC01,RR01,RR02,RR03,RR04,TECH.
Example
curl -sS -X POST "https://api.transmute.403fin.io/v1/convert?to=pacs.002" \
-H "Authorization: Bearer $TRANSMUTE_KEY" \
-H "Content-Type: text/plain" \
--data-binary @- <<'MT'
:20:REJ-103-0001
:23B:CRED
:32A:260610EUR1000,00
:50K:JANE EXAMPLE
:59:ACME TOOLS LTD
:71A:SHA
:72:/REJT/
/AC01/
/MREF/INSTR-0001
MT
The result document, formatted:
<GrpHdr><MsgId>REJ-103-0001</MsgId>...</GrpHdr>
<OrgnlGrpInfAndSts>
<OrgnlMsgId>INSTR-0001</OrgnlMsgId>
<OrgnlMsgNmId>MT103</OrgnlMsgNmId>
</OrgnlGrpInfAndSts>
<TxInfAndSts>
<OrgnlInstrId>INSTR-0001</OrgnlInstrId>
<TxSts>RJCT</TxSts>
<StsRsnInf><Rsn><Cd>AC01</Cd></Rsn></StsRsnInf>
<OrgnlTxRef>
<IntrBkSttlmAmt Ccy="EUR">1000.00</IntrBkSttlmAmt>
<IntrBkSttlmDt>2026-06-10</IntrBkSttlmDt>
</OrgnlTxRef>
</TxInfAndSts>
"warnings": [
{ "code": "DROP_FIELD", "severity": "info", "sourceField": ":23B:", "detail": "..." },
{ "code": "DROP_FIELD", "severity": "lossy", "sourceField": ":50a:", "detail": "..." },
{ "code": "DROP_FIELD", "severity": "lossy", "sourceField": ":59a:", "detail": "..." },
{ "code": "DROP_FIELD", "severity": "info", "sourceField": ":71A:", "detail": "..." },
{ "code": "MISSING_REQUIRED_DEFAULTED", "severity": "info", "sourceField": "createdAt", "targetField": "GrpHdr/CreDtTm", "detail": "..." }
],
"meta": { "detectedType": "mt103-rejt", "targetType": "pacs.002.001.10", "...": "..." }