BankLint

Guides · By Tan Gravam · Updated 2026-10-20

pain.002 status and reason codes for pain.001 files

A pain.002 (customer payment status report) is the bank’s answer to a pain.001: a status such as ACTC (validated), ACCP (accepted) or RJCT (rejected) for the file, each payment information block or each transaction, with an ISO 20022 reason code such as FF01 (invalid file format), AC01 (invalid account number) or AM05 (duplication). Many rejection codes trace back to the file itself and can be caught before upload; others, such as a closed account or insufficient funds, cannot.

What a pain.002 tells you

Banks send a pain.002 after receiving a pain.001, often more than once as processing moves on. For pain.001.001.09 the matching version is pain.002.001.10 (CustomerPaymentStatusReportV10). It reports a status at up to three levels: the whole message (OrgnlGrpInfAndSts/GrpSts), each payment information block (OrgnlPmtInfAndSts/PmtInfSts) and each transaction (TxInfAndSts/TxSts, identified by OrgnlEndToEndId).

StatusMeaning (ISO 20022 external code set)
RCVDPayment instruction has been received.
ACTCAuthentication and syntactical and semantical validation are successful.
ACCPTechnical validation and customer profile check were successful.
ACSPAll preceding checks were successful; accepted for execution.
ACSCSettlement completed.
ACWCAccepted, but a change will be made, such as the date.
PARTGroup status: some transactions accepted, some rejected.
PDNGPending: further checks and a status update will follow.
RJCTRejected.

Which statuses a bank sends, and when, is defined in its own file specification. Meanings are quoted from the ISO 20022 External Code Sets (August 2026 v3).

Where the reason code is

A rejection carries StsRsnInf/Rsn/Cd with a four-letter reason code, and often AddtlInf with free text from the bank. The text usually names the element or value, so read both.

Synthetic pain.002 fragment: one transaction rejected
<TxInfAndSts>
  <OrgnlEndToEndId>E2E-INV-1002</OrgnlEndToEndId>
  <TxSts>RJCT</TxSts>
  <StsRsnInf>
    <Rsn>
      <Cd>AC01</Cd>
    </Rsn>
    <AddtlInf>Creditor IBAN invalid</AddtlInf>
  </StsRsnInf>
</TxInfAndSts>

Reason codes the file can cause, and the check that catches them first

These codes describe problems in the file itself. Each one has a check you can run before the upload; the last column links the BankLint rules that report the usual cause.

CodeISO meaningUsual cause in the pain.001Checked before upload
FF01File format incomplete or invalidNot well-formed XML, or the file does not match the ISO 20022 schemaBNK-XML-001, BNK-ISO-001 and the other schema errors
FF03, FF04Payment type information / service level missing or invalidNo PmtTpInf, or a service level other than SEPASEPA-SCT-PTI-001, SEPA-SCT-SVCLVL-001
AC01, AC02, AC03Account number invalid or missing (any, debtor, creditor)A typing error in an IBAN, or an account sent without IBANSEPA-SCT-IBAN-001, SEPA-SCT-IBAN-002, SEPA-SCT-DBTRACCT-001, SEPA-SCT-CDTRACCT-001
RC01, RC03, RC04Bank identifier in an incorrect format, or invalid or missingA BIC with the wrong length or characters, or the agent identified another wayBNK-ISO-003, SEPA-SCT-DBTRAGT-001, SEPA-SCT-CDTRAGT-001
AM01, AM02Amount equal to zero / greater than the allowed maximumA zero amount, or an amount above 999,999,999.99SEPA-SCT-AMT-001
AM10Sum of instructed amounts does not equal the control sumTotals calculated before payments were removed or splitSEPA-SCT-CTRLSUM-004, SEPA-SCT-CTRLSUM-005
CURRCurrency of the payment is incorrectA non-EUR amount in a SEPA blockSEPA-SCT-CCY-001
DU02Payment information block is not uniqueTwo blocks with the same PmtInfIdSEPA-SCT-ID-003
RR02, RR03, BE04Debtor or creditor name and/or address insufficient or missingA missing name, or an address without town or countrySEPA-SCT-NAME-004, SEPA-SCT-NAME-005, SEPA-SCT-ADDR-002, SEPA-SCT-ADDR-003
DT01Invalid dateA date in the wrong format, or a date and time where SEPA expects a dateBNK-ISO-006, SEPA-SCT-CORE-002
CH17Element is not allowedAn element outside the SEPA core subset, such as an equivalent amountSEPA-SCT-CORE-001, SEPA-SCT-CORE-002

Banks do not all use the same code for the same problem: one bank reports a bad IBAN as AC01, another as FF01 with the details in AddtlInf. Treat the table as the usual mapping, not a rule.

Reason codes no file check can prevent

These depend on the accounts, the banks or the timing, not on how the file is built. A perfectly valid file can still receive them.

  • AC04 account closed, AC06 account blocked, AG01 transaction forbidden on this type of account.
  • AM04 insufficient funds on the debtor account.
  • MD07 end customer deceased.
  • CNOR / DNOR creditor or debtor bank not registered under this BIC in the clearing system.
  • TM01 received after the agreed cut-off time.
  • DU01 message identification not unique: a MsgId reused from an earlier file. Within one file it cannot be checked; generate a new MsgId for every file.
  • MS02 / MS03 and NARR: reason not specified, or given as text only.

Prevent the avoidable ones

  • Validate every new or changed file before the first upload, against the schema and the SEPA rules. Try it on the validator or with the sample files.
  • Keep the file the bank accepted as the reference, and compare each new file with it after configuration changes: see payment-file regression testing.
  • When a rejection happens, record the reason code and AddtlInf with the file version; the same code after the next change points to the same mapping.

BankLint checks pain.001 files; it does not read pain.002 status reports.

Questions

What is the difference between ACTC and ACCP in a pain.002?

ACTC means the bank’s technical checks passed: authentication, syntax and content. ACCP means the customer profile check also passed. Neither means the payment has been executed; ACSP and ACSC report the later stages.

What does reason code AC01 mean?

Account number is invalid or missing. In a pain.001 it usually comes from a typing error in an IBAN or an account sent without IBAN. IBAN check digits can be verified before upload.

What does AM05 mean?

Duplication: the bank considers the payment or file a duplicate of one it already received, for example the same file uploaded twice. Banks decide what counts as a duplicate, often by message identification, amounts and dates.

Can BankLint read pain.002 files?

No. BankLint checks pain.001 files before they reach the bank. This guide maps the common reason codes to the checks that prevent them.

Sources: EPC132-08 2025 Version 1.0 (European Payments Council) and the ISO 20022 message schemas. All sources and dates: Standards and sources.

Validate a pain.001 fileFree, no account needed, files are not stored.