Message FamiliesRejects & Status Reports

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

FormatWhat it isVersions acceptedEmitted by default
mt103-rejtMT103 carrying /REJT/ in :72: (customer transfer rejected)n/an/a
mt202-rejtMT202 carrying /REJT/ in :72: (bank transfer rejected)n/an/a
pacs.002FI-to-FI payment status report.001.10 – .001.14.001.10
pain.002Customer payment status report (target only).001.10 – .001.14.001.10

Pairs

FromTo
mt103-rejt, mt202-rejtpacs.002
pacs.002mt103-rejt, mt202-rejt
canonicalpacs.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 (MT103 or MT202).
  • 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: lineBecomes
/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 elseAdditional 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

SituationWarning
Customer parties, remittance, :33B:, :77B: and other payment fields of the rejected messageDROP_FIELD
The agents :52a: to :58a: of the rejected messageDROP_AGENT
/CHGS/ in :72:: a status report carries no chargesDROP_FIELD (lossy)
A reason code outside the recognised set: written as a proprietary reasonCODE_UNMAPPED_PROPRIETARY
An unknown :72: codewordRETURN_REASON_UNMAPPED
Additional information over 105 characters per lineTRUNC_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 MTDROP_FIELD

Conventions

  • /REJT/ detection. A :72: line starting with /REJT/ routes an MT103 to mt103-rejt and an MT202 to mt202-rejt. Sending from=mt103 for a message that carries /REJT/ (or from=mt103-rejt for one that does not) is invalid-input 400; omit from and let detection decide.
  • Only RJCT has an MT twin. pacs.002 → mt103-rejt requires every transaction to have status RJCT and to carry its original amount and date (OrgnlTxRef/IntrBkSttlmAmt and IntrBkSttlmDt), because :32A: is mandatory and is never invented. An accepted status such as ACSP, or a report about the other side (a pacs.009 original going to mt103-rejt), returns 422 unsupported-conversion.
  • :58D:NOTPROVIDED. An MT202 reject requires a beneficiary institution, which a status report does not carry. transmute writes the placeholder :58D:NOTPROVIDED and 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 status document (the shape /v1/normalize returns for a pacs.002) with to=pacs.002 or to=pain.002. For pain.002, transactions are grouped by their original payment information id.
  • Recognised reason codes (written as Cd, others as Prtry): 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", "...": "..." }