ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

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 datetime CreDtTm, total transaction count NbOfTxs, control sum CtrlSum, initiating party InitgPty (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 of CdtTrfTxInf. Repeatable.
  • CdtTrfTxInf (Credit Transfer Transaction Information) — one transaction per beneficiary. Carries PmtId (EndToEndId mandatory, UETR optional per version), Amt, Cdtr, CdtrAcct, CdtrAgt optional 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/NbOfTxs and CtrlSum — control totals that must exactly match the sum of child transactions. A mismatch rejects the entire file.
  • PmtInf/PmtMtd — fixed to TRF for pain.001 (Credit Transfer). The DD counterpart belongs to pain.008 (Direct Debit).
  • PmtInf/PmtTpInf/SvcLvl/Cd — service level. SEPA for SCT, INST for SCT Inst, SDVA for Same Day Value, URGP for urgent. Empty in plain CBPR+.
  • PmtInf/ReqdExctnDt — requested execution date. ISO date or DtTm depending on the version. Banks may shift to j+1 per cut-off.
  • PmtInf/ChrgBr — charge bearer. SLEV for 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/Ustrd vs Strd — unstructured remittance (max 140 characters under SEPA) or structured (ISO 11649 creditor reference, format RF + 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 pain-001-sepa-sct.xml
<?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.

VersionPublishedUsage
pain.001.001.032009Historical version, still accepted by some European banks for SEPA SCT (EPC Rulebook 2009-2023).
pain.001.001.092019CBPR+ version and harmonised profile. Introduces UETR, integrates SEPA SCT Inst rules, aligns with pacs.008 v10.
pain.001.001.112023Latest 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/NbOfTxs must equal the sum of PmtInf/NbOfTxs, themselves equal to the count of CdtTrfTxInf per PmtInf. CtrlSum is the arithmetic sum of InstdAmt, 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 20022 BICFI accepts 8 or 11 characters but must not add an arbitrary XXX — 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 RgltryRptg block with a code (BOP — Balance of Payments) is mandatory. Missing it triggers a rejection from the Banque de France.
  • 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.