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).
| Status | Meaning (ISO 20022 external code set) |
|---|---|
RCVD | Payment instruction has been received. |
ACTC | Authentication and syntactical and semantical validation are successful. |
ACCP | Technical validation and customer profile check were successful. |
ACSP | All preceding checks were successful; accepted for execution. |
ACSC | Settlement completed. |
ACWC | Accepted, but a change will be made, such as the date. |
PART | Group status: some transactions accepted, some rejected. |
PDNG | Pending: further checks and a status update will follow. |
RJCT | Rejected. |
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.
<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.
| Code | ISO meaning | Usual cause in the pain.001 | Checked before upload |
|---|---|---|---|
FF01 | File format incomplete or invalid | Not well-formed XML, or the file does not match the ISO 20022 schema | BNK-XML-001, BNK-ISO-001 and the other schema errors |
FF03, FF04 | Payment type information / service level missing or invalid | No PmtTpInf, or a service level other than SEPA | SEPA-SCT-PTI-001, SEPA-SCT-SVCLVL-001 |
AC01, AC02, AC03 | Account number invalid or missing (any, debtor, creditor) | A typing error in an IBAN, or an account sent without IBAN | SEPA-SCT-IBAN-001, SEPA-SCT-IBAN-002, SEPA-SCT-DBTRACCT-001, SEPA-SCT-CDTRACCT-001 |
RC01, RC03, RC04 | Bank identifier in an incorrect format, or invalid or missing | A BIC with the wrong length or characters, or the agent identified another way | BNK-ISO-003, SEPA-SCT-DBTRAGT-001, SEPA-SCT-CDTRAGT-001 |
AM01, AM02 | Amount equal to zero / greater than the allowed maximum | A zero amount, or an amount above 999,999,999.99 | SEPA-SCT-AMT-001 |
AM10 | Sum of instructed amounts does not equal the control sum | Totals calculated before payments were removed or split | SEPA-SCT-CTRLSUM-004, SEPA-SCT-CTRLSUM-005 |
CURR | Currency of the payment is incorrect | A non-EUR amount in a SEPA block | SEPA-SCT-CCY-001 |
DU02 | Payment information block is not unique | Two blocks with the same PmtInfId | SEPA-SCT-ID-003 |
RR02, RR03, BE04 | Debtor or creditor name and/or address insufficient or missing | A missing name, or an address without town or country | SEPA-SCT-NAME-004, SEPA-SCT-NAME-005, SEPA-SCT-ADDR-002, SEPA-SCT-ADDR-003 |
DT01 | Invalid date | A date in the wrong format, or a date and time where SEPA expects a date | BNK-ISO-006, SEPA-SCT-CORE-002 |
CH17 | Element is not allowed | An element outside the SEPA core subset, such as an equivalent amount | SEPA-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.
AC04account closed,AC06account blocked,AG01transaction forbidden on this type of account.AM04insufficient funds on the debtor account.MD07end customer deceased.CNOR/DNORcreditor or debtor bank not registered under this BIC in the clearing system.TM01received after the agreed cut-off time.DU01message identification not unique: aMsgIdreused from an earlier file. Within one file it cannot be checked; generate a newMsgIdfor every file.MS02/MS03andNARR: 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
AddtlInfwith 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.
More guides
- How to validate a pain.001 payment file
- pain.001.001.09 XML example for a SEPA credit transfer
- pain.001 XSD validation errors and how to fix them
- pain.001.001.03 vs pain.001.001.09: what changed and how to migrate
- Structured, hybrid and unstructured addresses in SEPA pain.001
- IBAN and BIC in a SEPA pain.001
- Remittance information in a SEPA pain.001 (Ustrd, Strd, RF)
- SEPA Credit Transfer rules for pain.001.001.09
- Why banks reject pain.001 files
- Testing payment files before going live with a bank
- Payment-file regression testing after SAP or TMS changes
- Charge bearer SLEV in SEPA credit transfers
- Control sum (CtrlSum) and number of transactions (NbOfTxs) in pain.001
- SEPA character set, names and identifiers