Illustrative, non-production example. Values are fictional and the message is not validated for any specific network, scheme, or implementation guide.
EVIDENCE AT ARM'S REACH
DOWNLOAD AND GOVERNING SOURCES
Download the canonical fictional sample, then open the exact official definition and profile needed for implementation testing.
An XSD checks XML structure. A usage guideline adds profile rules, conditional fields, code restrictions, and business controls. XSD-valid does not mean scheme-compliant.
XSD + definitionBase ISO 20022current
ISO 20022 message definitions and XSDs
Choose the exact message definition in the official catalogue. The base XSD checks XML structure; it does not prove compliance with a scheme profile.
Owner
ISO 20022 Registration Authority
Checked
2026-07-12
Access
Official page · Public official catalogue; select the required message version before downloading.
SEPA Instant Credit Transfer implementation guidelines and XSDs
Customer-to-PSP and Inter-PSP profiles for SCT Inst. EPC XSDs are technical validation subsets, not production artefacts or proof of full scheme compliance.
Owner
European Payments Council
Version
2025 version 1.0
Checked
2026-07-19
Access
Official page · Public EPC scheme page with owner-hosted guideline and XSD downloads.
A unique reference for this status report itself, assigned by the bank sending it.
Distinct from the original message's identification — a single pain.001 can generate several pain.002 messages over its life as statuses evolve.
GrpHdr/CreDtTm Creation date and time — mandatory
When this status report was created. Ordering matters when several reports about the same file arrive.
⚠ Processing status reports out of order can overwrite a final status with an earlier interim one.
OrgnlGrpInfAndSts/OrgnlMsgId Original message identification — mandatory
The MsgId of the pain.001 this report is about — the pointer back to what is being answered.
⚠ If your systems do not store outbound MsgIds, incoming status reports cannot be matched automatically and end up in manual queues.
OrgnlGrpInfAndSts/OrgnlMsgNmId Original message name identification — mandatory
The message type being answered, for example pain.001, including its version — so the receiver knows exactly which definition the original followed.
OrgnlGrpInfAndSts/GrpSts Group status — optional
A status for the original message as a whole — for example accepted, rejected, or partially accepted — before drilling into individual transactions.
A partial status at group level means you must read the transaction level to know which payments survived.
⚠ Treating a group-level acceptance as final for every transaction. Individual payments can still fail later in processing.
OrgnlPmtInfAndSts/OrgnlPmtInfId Original payment information identification — conditional
Identifies which payment block (PmtInf) of the original pain.001 this part of the report refers to.
Rejections at this level typically mean a block-wide problem — a bad debtor account or an invalid requested execution date — rather than a single bad payment.
OrgnlPmtInfAndSts/TxInfAndSts/OrgnlEndToEndId Original end-to-end identification — conditional
The EndToEndId of the specific payment being reported on, so the initiating party knows exactly which payment a status belongs to.
⚠ If the original EndToEndIds were not unique within the file, a transaction-level status may be ambiguous.
OrgnlPmtInfAndSts/TxInfAndSts/TxSts Transaction status — conditional
The status code for one payment. Common values from the ISO external code set include ACCP (accepted after profile checks), ACSP (accepted, settlement in process), ACSC (accepted, settlement completed), PDNG (pending), and RJCT (rejected).
Which statuses a bank actually sends varies a lot: some report only rejections, others report the full positive lifecycle. Confirm the bank's reporting policy rather than inferring from silence.
⚠ Treating ACSP as 'done'. Settlement in process is not settlement completed.
OrgnlPmtInfAndSts/TxInfAndSts/StsRsnInf/Rsn/Cd Status reason code — conditional
A coded reason from the ISO external code sets explaining a rejection or pending status — for example an account problem or a regulatory hold.
Reason codes drive automated repair routing. A payment engine that reads only the status and ignores the reason forces every reject into one manual queue.
⚠ Some banks put the substance in a narrative element with a generic code. Capture both code and narrative in your workflow.