← Back to blog

Fix SEPA Return Codes Fast: 15 Codes Payment Ops See

September 3, 2026
Fix SEPA Return Codes Fast: 15 Codes Payment Ops See

A SEPA return code is a short ISO 20022 reason value, usually four characters like AC01 or MS03, attached to a payment message when a bank cannot complete a SEPA transfer or direct debit. It is not a dead end. It is an actionable ticket: identify the scheme, match the code to its family, and follow the recovery path that family requires, from a same-day retry to formal compliance escalation.


TL;DR:

  • Most common return codes like AC01, AC03, and AC04 are preventable through real-time IBAN and account holder verification before sending payments.
  • Schemes such as SCT Inst impose a strict 10-second window, with timeout codes indicating timing issues rather than rejections.
  • MS03 often masks more specific causes like account or regulatory issues, requiring careful cross-checks with original transaction data.
  • Recovery methods differ by code family, with fix-and-resend for account and mandate issues, but compliance escalation needed for regulatory holds or unrecognized parties.
  • Focusing on accurate data entry and verification can significantly reduce return volume, saving time on manual resolution and escalation.

Table of Contents

Understanding SEPA Return Codes and Where They Come From

Every SEPA return code traces back to what the scheme calls an R-transaction: a reject, return, refund, recall, or request-for-recall (RFRO). A reject happens before settlement, usually within hours. A return happens after settlement, when a receiving bank sends the money back. A refund applies specifically to direct debits where the payer disputes a collection. A recall is the sending bank asking for money back, often due to fraud or duplicate processing, while an RFRO is the same request initiated by the originating customer rather than the bank.

These reasons travel inside specific ISO 20022 messages. A pacs.002 carries a payment status report, a pacs.004 carries the actual return of funds, and a camt.056 carries a recall request. Recognizing which message type arrived tells you as much as the code itself.

Codes cluster into families by their first two letters, and each family points to a different root cause:

  • AC codes flag account problems (wrong IBAN, closed account, blocked account).
  • AM codes flag amount problems (insufficient funds, amount exceeds limits).
  • AG codes flag agent or bank-level issues.
  • BE codes flag beneficiary or regulatory-compliance issues.
  • FF codes flag file or field format errors.
  • MD codes flag mandate problems, mostly on direct debits.
  • MS codes cover miscellaneous or unspecified reasons, including masked codes.
  • RC, RR, and TM cover routing errors, regulatory reporting gaps, and timing/cutoff issues.

The European Payments Council's guidance on SEPA Credit Transfer R-transactions remains the canonical rulebook for definitions and usage notes, including recent clarifications to RR02 and RR03. When in doubt about what a code officially means, that document outranks any third-party glossary.

The SEPA Codes Ops Teams See Most, and What to Do About Each

Most return queues are dominated by a small set of repeat offenders. Here's what each one means in plain terms, why it tends to happen, and the fastest path to resolution.

  1. AC01, incorrect account number. The IBAN fails its own checksum or doesn't exist at that bank. Don't retry as-is; go back to the source data and re-verify the IBAN before resubmitting.
  2. AC03, invalid creditor account number for a credit transfer. Similar to AC01 but scheme-specific to SCT. Check for typos, transposed digits, or an outdated IBAN after a bank migration.
  3. AC04, account closed. The account existed but no longer accepts funds. Contact the beneficiary directly. This one cannot be fixed by retrying; you need new account details.
  4. AC06, account blocked. Often triggered by a fraud hold or a compliance freeze on the receiving end. Hold the payment and ask the beneficiary to clear the block with their own bank before you resend.
  5. AM04, insufficient funds. Relevant mostly to direct debits. Wait for the standard represent cycle or contact the payer directly rather than resending immediately.
  6. AM05, duplicate collection. The same direct debit hit twice. Check your batch file for accidental duplication before you touch anything else.
  7. AM09, amount is invalid or exceeds an agreed limit. Common when a mandate caps the collectible amount. Verify the mandate's ceiling against what you're actually charging.
  8. MD01, no mandate found. The direct debit references a mandate the debtor bank can't locate. Confirm the mandate reference and creation date exactly match what was registered.
  9. MD02, missing mandatory information in the mandate. Usually a data-entry gap on your end. Rebuild the mandate record with complete fields before resubmitting.
  10. MD06, refund requested by the end customer. This is a disputed collection, not a data error. Route it to customer service, not technical ops.
  11. MS02, not specified reason by agent. Genuinely vague. Request clarification from the sending or receiving bank rather than guessing.
  12. MS03, not specified reason customer. Frequently a masked substitute for a more specific code. Covered in detail below.
  13. RR04, regulatory reason. Usually a compliance or sanctions-screening hold. Do not retry until compliance clears it.
  14. BE05, unrecognized initiating party. Often a KYC mismatch. Confirm the sender is properly registered with the receiving institution.
  15. BE08, beneficiary bank not registered under SEPA scheme. The receiving bank isn't a SEPA participant for this transaction type. Verify BIC and scheme eligibility before trying again.

Pro Tip: When a bank returns a code with no supporting detail, ask them for the original pacs.002 or pacs.004 message ID and timestamp. That single reference number usually gets you a faster, more specific answer than a generic phone inquiry.

For direct debit-specific scenarios, Stripe's rundown of rejected SEPA Direct Debit reason codes offers merchant-facing examples that pair well with the mandate-related codes above.

Scheme Timing: SCT, SCT Inst, SDD Core, and SDD B2B Behave Differently

The scheme you're using changes both the deadline for a return and the mechanism available to fix it. A SEPA Credit Transfer (SCT) return typically arrives within a few banking days of the original transfer. If the money has already settled and you need it back, a recall request stays open for 10 days under interbank rules, while an RFRO initiated by the originating customer can be pursued for up to 13 months, though the beneficiary can refuse it.

Direct debits split further. SDD Core lets the payer dispute an authorized collection for up to 8 weeks and an unauthorized one for up to 13 months, which is why AM04 and MD06 disputes can resurface long after you thought a collection was final. SDD B2B removes that consumer protection: once authorized, a B2B mandate is largely irrevocable, so refund windows are much shorter and disputes get formal fast.

SCT Inst runs on a different clock entirely. The scheme enforces a 10 second execution window end to end, and if either agent can't respond in time, the transaction times out with codes like AB06, AB07, or AB08 rather than a standard rejection. PaymentBrief's code lookup documents these timeout codes directly against that 10 second constraint.

SchemeTypical return windowRecovery mechanismGoverning message
SCTUp to 3 banking daysRecall (10 days) or RFRO (13 months)camt.056
SCT Inst10 second execution windowTimeout codes AB06/AB07/AB08pacs.002
SDD Core8 weeks (authorized), 13 months (unauthorized)Refund requestcamt.056
SDD B2BShorter, largely irrevocable post-authorizationFormal dispute onlycamt.056

Recall and RFRO are not interchangeable. A recall is initiated by the sending bank itself, often for fraud or duplicate-processing reasons, and tends to carry stronger recovery expectations from the receiving bank. An RFRO comes from the originating customer, and the beneficiary retains the right to refuse it, so success depends heavily on the beneficiary's cooperation.

Why MS03 Shows Up and How to Handle It

MS03 translates literally to "not specified reason, customer," and it's one of the most frustrating codes in any return queue because it tells you almost nothing on its own. Some banks substitute MS03 for a more specific code due to data-protection rules in certain jurisdictions that restrict how much detail can travel in a payment message. In practice, that means MS03 can be masking AC04, AM04, or RR04 without saying so directly.

Treat every MS03 as a placeholder until proven otherwise. A short checklist keeps this from becoming a guessing game:

  • Request the original trace or transaction reference number from the sending bank.
  • Cross-check related fields, the amount, the beneficiary name, and the mandate reference, for anything that hints at the real cause.
  • Default to assuming it could be an account issue (AC04), a funds issue (AM04), or a regulatory hold (RR04) until you get clarification.
  • Escalate to a compliance ticket, rather than routine ops handling, if the payment also shows any sanctions-screening flag or unusually large amount.

Most MS03 cases resolve as ordinary account or funding problems once you get a bank on the phone. The ones that don't resolve quickly are usually the ones worth flagging to compliance early, before a customer complaint forces the issue.

A Step-by-Step Playbook for Resolving Returned Payments

Closing a returned-payment ticket fast comes down to sequence, not luck. Follow the same five steps every time and your mean time to resolution shrinks considerably.

  1. Capture the full payload immediately. Save the pacs.002 or pacs.004 message, the exact code, the scheme, and the timestamp before anything else happens to the ticket.
  2. Classify the code by family. AC and MD codes usually mean fix-and-resend. AM codes usually mean wait-or-contact. RR and BE codes usually mean stop-and-escalate to compliance.
  3. Decide the recovery path. Choose between a straightforward retry, a formal recall or RFRO, direct beneficiary contact, or a compliance review, based on the code family from step two.
  4. Contact the PSP with the right evidence. Include the mandate reference, the original message ID, and any reconciliation proof. Banks respond faster to a complete request than a vague one.
  5. Reconcile and close. Match the returned funds against your ledger, confirm the customer or vendor record is corrected, and log the code for pattern tracking.

Pro Tip: Track return codes by frequency over a rolling 30-day window. If AC01 keeps spiking from one supplier or one integration, the fix isn't better dispute handling, it's better data at the point of entry.

Set a realistic SLA around each family rather than a single blanket target. AC and MD fixes can often close within a day or two once corrected data is resubmitted. RR and BE escalations tied to compliance reviews routinely take longer, and setting the same deadline for both just creates false urgency on the harder cases.

Stopping Returns Before They Start

The cheapest return to resolve is the one that never happens, and most AC01, AC03, and AC04 codes trace back to bad data entered once and reused for months. Verifying that an IBAN and account holder name actually match before you send a payment closes off that entire category of failure at the source.

IBAN and account name verification flow

Vopify checks the provided name against the live account holder on file in near real time, with response times consistently under two seconds across more than 10,000 verifications and coverage spanning 20 Eurozone countries. That speed matters most for SCT Inst payments, where the 10 second execution window leaves no room to catch a mismatch after submission.

A few habits reduce return volume beyond IBAN checks alone:

  • Run batch validation across your full supplier file before month-end payment runs, not just on new vendors.
  • Capture and store the mandate reference and creation date at setup, so MD01 and MD02 never surface downstream.
  • Check message format compliance before submission to catch FF-family errors early.

Finance teams that build verification into the AP workflow tend to see fewer recall requests and faster ticket closure across the board.

What Payment Ops Teams Should Prioritize Going Into 2026

The conventional advice on SEPA returns treats every code as an equally urgent fire. It isn't. The codes worth automating a response to are the small, predictable set, AC01, AC03, MD01, that show up by the dozen and follow the same fix every time. Building a strict code-to-action map for those, then measuring resolution time against it, does more for your queue than any amount of manual triage.

The harder codes, RR04, BE05, masked MS03, deserve human judgment, not automation. Save your team's attention for those, and let pre-send verification quietly shrink the easy pile before it ever reaches a queue.

— David

Fewer Returns Start With One Check Before You Send

Most of the return codes covered above, AC01, AC03, AC04, and the duplicate-driven AM05, trace back to one root problem: the account details on file were wrong, outdated, or never verified in the first place. Vopify closes that gap by matching the payee name against the live account holder in near real time, whether you're checking a single supplier or running a bulk CSV upload across your vendor file.

Vopify

Unlike a lengthy account-opening verification process or a bank-by-bank manual check, Vopify returns a result in under two seconds, with coverage across 20 Eurozone countries plus additional markets outside SEPA. That means the check happens before the payment file goes out, not after a return code lands in your queue. If your team wants to see how much of your return volume is preventable, check Vopify's IBAN and bank account verification coverage against your own supplier list and run a sample batch today.

Where to Look Up Codes and Official Guidance

Sources