pain.001 — Customer Credit Transfer Initiation
The message an ERP, a TMS or a bank-portal module sends to the bank to instruct a batch of credit transfers. One envelope, one payment order, child transactions — the universal standard for transfer initiation since SEPA and CBPR+.
Purpose and place in the flow
pain.001 is the corporate-to-bank entry point in the ISO 20022 payments family. A corporate (or its ERP/TMS) builds an XML file that contains: a group header, one (or several) payment instruction blocks PmtInf, and inside each instruction, as many CdtTrfTxInf as beneficiaries to pay. The bank receives the file, validates it (schema + business rules + SEPA/CBPR+ rules), executes the transfers, and returns a pain.002 (Customer Payment Status Report) that details acceptance or rejection per transaction.
Downstream, every transfer is routed as a pacs.008 (FI to FI Customer Credit Transfer) between the ordering bank and the beneficiary's bank. On the corporate side, the movement reappears in the bank statement camt.053 (or MT940 in legacy mode).
XML structure
pain.001 is wrapped in <Document> with the version namespace.
Three levels structure the content:
- GrpHdr (Group Header) — message identifier
MsgId, creation datetimeCreDtTm, total transaction countNbOfTxs, control sumCtrlSum, initiating partyInitgPty(can differ from the Debtor). - PmtInf (Payment Information) — one payment order per debtor account, per currency, per execution date. Carries
PmtMtd(TRF for Credit Transfer),ReqdExctnDt,Dbtr,DbtrAcct,DbtrAgt, and the list ofCdtTrfTxInf. Repeatable. - CdtTrfTxInf (Credit Transfer Transaction Information) — one transaction per beneficiary. Carries
PmtId(EndToEndIdmandatory,UETRoptional per version),Amt,Cdtr,CdtrAcct,CdtrAgtoptional under SEPA SCT,RmtInf. Repeatable.
Key fields
GrpHdr/MsgId— unique identifier of the message on the sender side. Banks reject duplicates within a sliding window (typically 90 days).GrpHdr/NbOfTxsandCtrlSum— control totals that must exactly match the sum of child transactions. A mismatch rejects the entire file.PmtInf/PmtMtd— fixed toTRFfor pain.001 (Credit Transfer). TheDDcounterpart belongs to pain.008 (Direct Debit).PmtInf/PmtTpInf/SvcLvl/Cd— service level.SEPAfor SCT,INSTfor SCT Inst,SDVAfor Same Day Value,URGPfor urgent. Empty in plain CBPR+.PmtInf/ReqdExctnDt— requested execution date. ISO date orDtTmdepending on the version. Banks may shift to j+1 per cut-off.PmtInf/ChrgBr— charge bearer.SLEVfor SEPA,DEBT(= MT OUR),SHAR(= SHA),CRED(= BEN).CdtTrfTxInf/PmtId/EndToEndId— business reference carried end-to-end. Appears in the pacs.008 and then in the beneficiary's camt.053: this is the identifier to use for accounting reconciliation.CdtTrfTxInf/RmtInf/UstrdvsStrd— unstructured remittance (max 140 characters under SEPA) or structured (ISO 11649 creditor reference, formatRF+ 2 check digits + 21 characters).
SEPA SCT example
A pain.001.001.09 file emitted by ACME SARL on 14 May 2026 containing two transfers: an invoice to Hans Mueller GmbH (EUR 12,500, structured RF reference) and a salary to Maria Acosta in Spain (EUR 750, unstructured wording).
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>ACME-20260514-001</MsgId>
<CreDtTm>2026-05-14T09:15:00+02:00</CreDtTm>
<NbOfTxs>2</NbOfTxs>
<CtrlSum>13250.00</CtrlSum>
<InitgPty>
<Nm>ACME SARL</Nm>
<Id>
<OrgId>
<Othr><Id>SIRET12345678901234</Id></Othr>
</OrgId>
</Id>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>ACME-PMT-2026001</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<BtchBookg>true</BtchBookg>
<NbOfTxs>2</NbOfTxs>
<CtrlSum>13250.00</CtrlSum>
<PmtTpInf>
<SvcLvl><Cd>SEPA</Cd></SvcLvl>
</PmtTpInf>
<ReqdExctnDt>
<Dt>2026-05-15</Dt>
</ReqdExctnDt>
<Dbtr>
<Nm>ACME SARL</Nm>
</Dbtr>
<DbtrAcct>
<Id><IBAN>FR7630006000011234567890189</IBAN></Id>
</DbtrAcct>
<DbtrAgt>
<FinInstnId><BICFI>BNPAFRPPXXX</BICFI></FinInstnId>
</DbtrAgt>
<ChrgBr>SLEV</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>INV2026-187</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">12500.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId><BICFI>DEUTDEFFXXX</BICFI></FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>Hans Mueller GmbH</Nm>
</Cdtr>
<CdtrAcct>
<Id><IBAN>DE89370400440532013000</IBAN></Id>
</CdtrAcct>
<RmtInf>
<Strd>
<CdtrRefInf>
<Tp><CdOrPrtry><Cd>SCOR</Cd></CdOrPrtry></Tp>
<Ref>RF18INV2026187</Ref>
</CdtrRefInf>
</Strd>
</RmtInf>
</CdtTrfTxInf>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>SAL2026-05-ACOSTA</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">750.00</InstdAmt>
</Amt>
<Cdtr>
<Nm>Maria Acosta</Nm>
</Cdtr>
<CdtrAcct>
<Id><IBAN>ES9121000418450200051332</IBAN></Id>
</CdtrAcct>
<RmtInf>
<Ustrd>SALARY MAY 2026</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document> Versions
Multiple pain.001 versions coexist in 2026. The choice depends on the profile.
| Version | Published | Usage |
|---|---|---|
pain.001.001.03 | 2009 | Historical version, still accepted by some European banks for SEPA SCT (EPC Rulebook 2009-2023). |
pain.001.001.09 | 2019 | CBPR+ version and harmonised profile. Introduces UETR, integrates SEPA SCT Inst rules, aligns with pacs.008 v10. |
pain.001.001.11 | 2023 | Latest CGI-MP. Strengthens structured remittance, aligns with HVPS+. |
European banks typically accept v3 and v9 in parallel during the SEPA migration window 2023-2025, then v9 or v11 from 2026.
Common pitfalls
- NbOfTxs / CtrlSum mismatch — the leading cause of file rejection.
GrpHdr/NbOfTxsmust equal the sum ofPmtInf/NbOfTxs, themselves equal to the count ofCdtTrfTxInfper PmtInf.CtrlSumis the arithmetic sum ofInstdAmt, two decimals, no symbol. - MsgId too long — 35-character limit. A truncated timestamp or a counter without prefix explodes quickly across multiple banks.
- EndToEndId mandatory — must be present on every transaction. If the ERP cannot generate one, use
NOTPROVIDED(the standard-defined sentinel). - BICFI without branch code — an 11-character SWIFT BIC ends with a branch code (often
XXX). The ISO 20022BICFIaccepts 8 or 11 characters but must not add an arbitraryXXX— a classic Schematron violation in CBPR+. - UTF-8 and Latin Extended characters — pain.001 v9 and v11 accept UTF-8, but the SEPA profile restricts the allowed set to the SEPA character set (RFC 3986 + a few punctuation characters). An out-of-range character triggers a rejection at the first bank gateway.
- Missing RgltryRptg — for non-EU transfers above the reporting threshold (EUR 12,500 in France, for instance), the
RgltryRptgblock with a code (BOP — Balance of Payments) is mandatory. Missing it triggers a rejection from the Banque de France.
Related messages
- pain.002 — Customer Payment Status Report. The bank's response to pain.001, with per-transaction status (
ACCP,RJCT,PDNG,ACSC…). - pain.008 — Customer Direct Debit Initiation. The direct-debit mirror of pain.001.
- pain.007 — Customer Payment Reversal. Debtor-side reversal.
- pacs.008 — bank-to-bank message generated from pain.001 for interbank routing.
- camt.053 — EOD statement where the movement will reappear on the debtor side. See MT940 for the legacy equivalent.