ISO 20022 reason code
DU02: Duplicate payment information ID
The payment information identification was already used. DU02 is an ISO 20022 reason code used as a status reason: you will see it in pain.002.
| Code | DU02 |
|---|---|
| Name | Duplicate payment information ID |
| ISO code lists | ExternalStatusReason1Code (status reason) |
| Where | StsRsnInf/Rsn/Cd |
What DU02 means
The payment information identification (PmtInfId) of a payment block was already used. A pain.001 or pain.008 can carry several blocks, each with its own debit account and date; banks that check PmtInfId reject a block whose id they have already processed, even in a file with a new MsgId. The usual cause is a corrected file whose blocks kept their old ids.
Not to be confused with: DU02 is the payment block id and DU01 the message id. A whole file uploaded twice usually comes back with DU01 first.
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 DU02 appears
DU02 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, DU02 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>DU02</Cd>
</Rsn>
<AddtlInf>Free text from the bank, if any</AddtlInf>
</StsRsnInf>
</TxInfAndSts>
</OrgnlPmtInfAndSts>What to do about DU02
- If you sent the payment or the collection: Give each payment block a new PmtInfId, also in a corrected file. The Payment File Viewer reports repeats within one file under pain.duplicate.pmtinf; repeats across files only your bank sees, so check whether the first block was executed before you send it again.
Your bank’s implementation guide and the scheme’s rulebook (for SEPA, the EPC rulebooks) say exactly when it may use DU02; banks do not all apply a code the same way.
Look up DU02 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=DU02&kind=status_reason'