ISO 20022 reason code
DU01: Duplicate message ID
The message identification was already used. DU01 is an ISO 20022 reason code used as a status reason: you will see it in pain.002.
| Code | DU01 |
|---|---|
| Name | Duplicate message ID |
| ISO code lists | ExternalStatusReason1Code (status reason) |
| Where | StsRsnInf/Rsn/Cd |
What DU01 means
The message identification (GrpHdr/MsgId) was already used in a file the bank received. Banks keep the ids they have seen for a period they set and reject a repeat, usually for the whole file at once (GrpSts RJCT), because a repeated id is the typical sign of a file uploaded twice.
Not to be confused with: DU01 is the message id; DU02 is the payment block id, DU04 the end-to-end id, DU05 the instruction id, and DU03 or AM05 a repeated transaction whatever its ids.
A reason code always comes with a status or an action: on its own it says why, not what happened. In a status report look at the status next to it (RJCT means the payment will not be executed); on a statement the returned entry tells you the money has come back.
Where DU01 appears
DU01 belongs to one of the ISO 20022 reason code lists, so it can arrive in this place:
- Status reason (ExternalStatusReason1Code): in a payment status report (pain.002 from a bank to its customer, pacs.002 between banks) that rejects or holds a payment.
In a status report, DU01 explains a status such as RJCT, at transaction level here (the same StsRsnInf block can sit under the group or a payment block):
<OrgnlPmtInfAndSts>
<OrgnlPmtInfId>PMT-20261028-03</OrgnlPmtInfId>
<TxInfAndSts>
<OrgnlEndToEndId>INV-2026-0042</OrgnlEndToEndId>
<TxSts>RJCT</TxSts>
<StsRsnInf>
<Rsn>
<Cd>DU01</Cd>
</Rsn>
<AddtlInf>Free text from the bank, if any</AddtlInf>
</StsRsnInf>
</TxInfAndSts>
</OrgnlPmtInfAndSts>What to do about DU01
- If you sent the payment or the collection: First check, on your statement or the earlier status report, whether the first file was executed: if it was, the rejection kept you from paying twice. If not, give the file a new MsgId and send it again. Let your payment system generate MsgIds (a date, a time and a counter) rather than typing them.
Your bank’s implementation guide and the scheme’s rulebook (for SEPA, the EPC rulebooks) say exactly when it may use DU01; banks do not all apply a code the same way.
Look up DU01 from a script or an AI agent
Scripts and AI agents get this code’s name, definition, where it sits and the address of this page from GET /api/v1/explain, keyless, or from the explain_code tool of the MCP server (API and MCP docs; add it to Claude, Cursor or VS Code).
curl -s 'https://iso20022-navigator.com/api/v1/explain?code=DU01&kind=status_reason'