pain.001 customer initiation
A single fictional customer credit-transfer instruction.
Illustrative, non-production example. Values are fictional and the message is not validated for any specific network, scheme, or implementation guide.
<?xml version="1.0" encoding="UTF-8"?> <!-- Illustrative non-production data --> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09"> <CstmrCdtTrfInitn> <GrpHdr> <CtrlSum>1250.00</CtrlSum> </GrpHdr> <PmtInf> <PmtTpInf> <InstrPrty>NORM</InstrPrty> <SvcLvl><Cd>SEPA</Cd></SvcLvl> <CtgyPurp><Cd>SUPP</Cd></CtgyPurp> </PmtTpInf> <CdtTrfTxInf> <Amt><InstdAmt Ccy="EUR">1250.00</InstdAmt></Amt> <CdtrAgt><FinInstnId><BICFI>DEMOGB2LXXX</BICFI></FinInstnId></CdtrAgt> <Purp><Cd>SUPP</Cd></Purp> <RmtInf> <Ustrd>DEMO INVOICE 1001</Ustrd> <Strd> <CdtrRefInf> <Tp><CdOrPrtry><Cd>SCOR</Cd></CdOrPrtry></Tp> <Ref>RF18000000000000001001</Ref> </CdtrRefInf> </Strd> </RmtInf> </CdtTrfTxInf> </PmtInf> </CstmrCdtTrfInitn> </Document>
EVERY ANNOTATED FIELD
GrpHdr/MsgIdMessage identification — mandatoryA unique reference for this message, assigned by the initiating party. It identifies the file or message itself, not the individual payments inside it.
Banks use MsgId as a first line of duplicate-file detection, so uniqueness matters across the sender's history, not just within a day.
⚠ Reusing a MsgId — for example after a resend of a corrected file — is a common cause of duplicate rejections or, worse, silently ignored files.
GrpHdr/CreDtTmCreation date and time — mandatoryWhen the message was created. This is a timestamp for the instruction, separate from when the customer wants the payment executed.
Useful in investigations to reconstruct the order of events when several versions of a file were exchanged.
GrpHdr/NbOfTxsNumber of transactions — mandatoryA control count of how many individual payment transactions the message contains.
Together with the optional control sum (CtrlSum), this lets the receiving bank check the file arrived intact before processing anything.
⚠ A mismatch between NbOfTxs and the actual transaction count usually rejects the whole file, not just one payment.
GrpHdr/InitgPtyInitiating party — mandatoryWho created and sent the instruction. This can differ from the debtor — for example, a corporate treasury centre instructing payments from a subsidiary's account.
The distinction between initiating party and debtor matters for entitlement checks: the bank must verify the initiating party is authorised over the debtor's account.
PmtInf/PmtInfIdPayment information identification — mandatoryThe sender's reference for this batch of payments (the PmtInf block). It identifies the group, not the individual payment; a pain.002 status report quotes it back so you can locate which batch a status refers to.
One pain.001 can carry several PmtInf blocks with different debit accounts or execution dates; each needs its own PmtInfId.
PmtInf/PmtMtdPayment method — mandatoryHow the payment should be made. For credit transfers this is the code TRF; the base standard also defines other methods such as cheques.
Rails that only support credit transfers, such as the SEPA schemes, restrict this to TRF in their implementation guidelines.
PmtInf/PmtTpInf/SvcLvl/CdService level code — optionalThe rulebook or agreed service the payment runs under, as a 4-letter code — e.g. SEPA for a SEPA scheme payment. It tells every bank which rulebook's obligations and timings apply.
Service level answers 'under which scheme'; local instrument narrows 'which variant'; category purpose says 'what kind of payment'. See the code reference for the full list.
⚠ Omitting or mis-stating the service level on a scheme rail can misroute the payment or fail scheme validation.
PmtInf/PmtTpInf/CtgyPurp/CdCategory purpose code — optionalThe high-level kind of payment, as a 4-letter code (e.g. SUPP supplier, SALA salary), used by the banks to apply special handling or routing.
Category purpose is for the banks in the chain; the separate Purpose (Purp) code is for the creditor. Some scheme values (e.g. SALA) trigger specific processing.
⚠ Do not confuse category purpose (bank-facing) with purpose (customer-facing) — they are different elements with overlapping code lists.
PmtInf/ReqdExctnDtRequested execution date — mandatoryThe date the debtor asks the bank to execute the payment — in practice, the day the debit should happen. Newer message versions allow either a date or a full date-time.
Banks typically warehouse instructions with a future execution date and validate the date against currency and scheme calendars.
⚠ A past date or a non-business day is handled differently by different banks — some roll forward, some reject. Do not assume one behaviour.
PmtInf/DbtrDebtor — mandatoryThe party whose account is debited — the payer.
Debtor name and address quality directly affects sanctions screening downstream, because this data is copied into the interbank pacs.008.
PmtInf/DbtrAcctDebtor account — mandatoryThe account to debit. In SEPA this is an IBAN (International Bank Account Number); other markets may use domestic account formats.
⚠ An account the initiating party is not entitled to instruct on is a common rejection reason that looks like a data error but is really an authorisation problem.
PmtInf/DbtrAgtDebtor agent — mandatoryThe debtor's PSP — the bank being instructed. Usually identified by a BIC (Business Identifier Code).
In multi-bank files routed through a forwarding agent, DbtrAgt tells the relay where each payment block must ultimately go.
CdtTrfTxInf/PmtId/EndToEndIdEnd-to-end identification — mandatoryThe reference the debtor assigns to this payment. It is meant to travel unchanged through every leg of the chain, all the way to the creditor.
This is the reference the beneficiary can use to reconcile the credit against an invoice, and the reference operations teams use to correlate status reports and returns.
⚠ Filling this with 'NOTPROVIDED' or an internal sequence number wastes the single best reconciliation field in the whole chain.
CdtTrfTxInf/Amt/InstdAmtInstructed amount — conditionalThe amount and currency the customer instructs, before any charges or currency conversion. The alternative, equivalent amount (EqvtAmt), instructs 'whatever amount in the target currency equals this amount in my currency'.
In SEPA the instructed amount is in euro. In cross-border use, InstdAmt can differ from the interbank settlement amount that later appears in pacs.008.
CdtTrfTxInf/CdtrCreditor — mandatoryThe party being paid — the beneficiary.
The base standard leaves more of the creditor side optional than any real rail does; the implementation guideline in force decides what you must supply.
⚠ A creditor name that does not match the account holder can trigger verification-of-payee warnings or beneficiary-side rejections.
CdtTrfTxInf/CdtrAcctCreditor account — mandatoryThe account to credit — in SEPA, the beneficiary's IBAN.
⚠ A syntactically valid IBAN can still belong to a closed or wrong account; syntax validation is not delivery assurance.
CdtTrfTxInf/Purp/CdPurpose code — optionalThe reason for the payment as stated by the debtor (e.g. SUPP for a supplier payment), carried unchanged to the creditor. It is informational — the creditor's ERP can auto-post on it — and is not used by the banks to route.
Purpose (customer-to-customer) is distinct from category purpose (customer/bank-to-bank), even though both draw on similar 4-letter code lists.
CdtTrfTxInf/RmtInf/UstrdUnstructured remittance information — optionalFree-text detail about what the payment is for (e.g. an invoice note). Readable by a human but not reliably machine-parseable.
SEPA carries one unstructured occurrence of up to 140 characters.
⚠ Remittance text is screened. Careless free text ('payment for Iran project') creates sanctions alerts that stop otherwise clean payments.
CdtTrfTxInf/RmtInf/StrdStructured remittance information — optionalMachine-readable references — most commonly a structured creditor reference (e.g. an ISO 11649 RF reference) — that let the creditor's system auto-match the payment to an invoice.
Structured references survive automated reconciliation far better than free text; many corporates mandate them.
⚠ Mixing a structured reference into the unstructured field defeats auto-reconciliation — put it in Strd, not Ustrd.