SEPA Direct Debit: Why a "Successful" European Payment Can Still Unwind 8 Weeks Later
SEPA Direct Debit rarely fails outright — it gets reversed weeks later instead. Reason codes, the 8-week refund right, and what card dunning misses.
Every dunning playbook we've written, including our own guide to ACH bank transfer failures, treats a successful charge as the end of the story. The money clears, the invoice closes, you move on to the next renewal. SEPA Direct Debit breaks that assumption in a way neither cards nor ACH do: a fully successful, correctly authorised SEPA collection can still be unwound by the customer, with no reason given, up to eight weeks after it clears. Your dunning stack was never built to watch for that, because nothing else in Stripe billing works this way.
SEPA Direct Debit isn't a card charge with a different name
A card payment is authorised per transaction. A SEPA Direct Debit collection runs against a standing mandate — a signed authorisation the customer gives once, which then lets you pull funds from their account on a recurring basis without asking again. That mandate model is why SEPA Direct Debit reaches 34 countries and more than 520 million people through a single integration, according to Stripe, and why it's become the default rail for a lot of European B2B SaaS billing: lower processing fees than cards, and a mandate that doesn't expire the way a card number does.
The tradeoff is that a mandate-based rail has failure modes a card simply can't have. A card can be declined at the moment of charge and nothing else happens. A SEPA Direct Debit mandate can be revoked after the money has already moved, and the scheme's own rules give the customer's bank the authority to claw it back regardless of what your system thinks the payment status is.
The first-collection failure rate is genuinely low — and that's not the risk
It's worth being clear that SEPA Direct Debit doesn't fail more than cards at the point of collection. It fails less. Industry benchmarks compiled by GoCardless put the average return rate for SEPA Direct Debit recurring collections at 2–4%, well below what card networks see on recurring billing.
Sources: Recurly payment data (card, ACH); GoCardless industry benchmarks, SEPA Direct Debit R-rate (2–4% range, midpoint shown)
That's the number teams look at when they decide to push European customers onto SEPA Direct Debit, and it's not wrong — it's just incomplete. It tells you how often a collection fails outright. It says nothing about how often a collection that succeeded gets reversed afterward, which is a separate failure mode that doesn't show up in a return-rate benchmark at all because, at the moment it's measured, the payment looks fine.
The 8-week right that doesn't exist for cards or ACH
Under the SEPA Core scheme — the version every euro-area consumer bank must support — a customer can request a refund of a Direct Debit collection with no reason given, within 8 weeks of the debit date. Their bank has to pay it within 10 working days, and it applies even if the customer received full value from whatever the payment was for. This isn't a dispute mechanism you get to weigh in on. It's a standing consumer right built into the scheme itself.
For unauthorised collections — cases where no valid mandate existed — that window extends to 13 months. The distinction matters because it changes what you're defending against: within 8 weeks, a customer doesn't need to prove anything went wrong; after 8 weeks and up to 13 months, they specifically need to show the mandate wasn't valid, which is a much narrower claim.
| Mechanism | Who can trigger it | Time window | Justification required |
|---|---|---|---|
| Card chargeback | Cardholder, via issuing bank | Typically 120 days | Yes — specific dispute reason code |
| ACH unauthorized return (R05/R07/R10) | Receiver, via their bank | Up to 60 calendar days | Yes — must claim the debit was unauthorized |
| SEPA Direct Debit refund (Core, authorised) | Debtor, via their bank | 8 weeks from debit date | No — no reason required |
| SEPA Direct Debit refund (unauthorised) | Debtor, via their bank | 13 months from debit date | Yes — mandate must be shown invalid |
The row that should change how you think about SEPA Direct Debit is the third one. A card dispute needs a reason code. Even an ACH unauthorized return needs the customer to tell their bank the debit wasn't approved — a claim that isn't always true and that we've flagged before, in our ACH dunning guide, as often standing in for "I found this easier than finding your cancel button." SEPA's 8-week window needs none of that. A customer who was correctly billed, for a service they used, on a mandate they genuinely signed, can still get every euro back with a phone call to their bank. Nothing in your invoice.paid webhook tells you that risk exists.
What the reason codes actually tell you
When a collection fails outright rather than reversing after the fact, the debtor's bank returns one of the European Payments Council's standard R-transaction codes. A handful account for nearly everything a SaaS business bills against:
| Code | Meaning | Retryable? |
|---|---|---|
| AM04 | Insufficient funds | Yes — most processors retry this once funds are likely available |
| MD01 | No valid mandate | No — needs a new mandate, not a retry |
| MD02 | Missing or incorrect mandate information | No — mandate data needs correcting first |
| MD07 | Debtor deceased | No — permanent, cancel the mandate |
| AC01 | Incorrect account number (IBAN) | No — needs a corrected account |
| AC04 | Account closed | No — needs a new payment method entirely |
| AC06 | Account blocked | No — customer must resolve with their bank first |
| MS02 | Refusal by debtor (customer rejected the specific collection) | No — a customer signal worth investigating, not retrying |
AM04 is the only code on that list where resubmitting the same collection makes sense, and it's the closest SEPA equivalent to a card's insufficient-funds soft decline. Everything else needs a corrected mandate, a corrected IBAN, or a new payment method — and unlike Nacha's rules for ACH, the SEPA rulebook doesn't impose a hard retry cap on any of them. Stripe and other processors set their own retry policy on top of the scheme, which is worth checking explicitly rather than assuming it matches whatever your card dunning logic already does.
Pre-notification: the step that happens before you ever see a failure
SEPA Direct Debit also asks something of you before a collection runs at all. The scheme requires a pre-notification — advance notice of the amount and date of an upcoming collection — sent at least 14 calendar days before the debit date, unless you and the customer have bilaterally agreed to a shorter period. A single annual pre-notification can cover a full year of identical recurring charges as long as the dates and amounts are stated up front, which is how most subscription billing satisfies the requirement without emailing customers monthly.
This inverts the usual dunning sequence. Card and ACH dunning is reactive — something fails, then you notify. SEPA pre-notification is a compliance step that has to happen before a first failure is even possible, and skipping it doesn't just create a support headache, it undermines your position if a customer later disputes a collection they say they were never warned about.
Core vs. B2B: the scheme choice that changes your risk profile
SEPA has two separate schemes, and which one you're on determines whether the 8-week right applies to you at all.
- SEPA Core — mandatory for every euro-area bank to support. Carries the full 8-week no-questions-asked refund right for the debtor. This is what you're on by default, and what almost all consumer and SMB SaaS billing runs through.
- SEPA B2B — optional, and both the merchant's and the customer's banks have to support it for a collection to work. It drops the no-questions-asked refund right entirely. In exchange, the debtor's bank is required to validate the mandate against the merchant's mandate reference before ever executing the collection, shifting the verification burden earlier instead of leaving it as a post-hoc refund risk.
For B2B SaaS billing genuinely commercial European customers, moving eligible accounts onto the B2B scheme trades the 8-week reversal risk for upfront mandate validation — worth doing if your customer's bank supports it, since not every bank does. For anything selling to individuals or sole traders, Core is the only realistic option, and the 8-week window is simply a fact of billing that way.
What Stripe does and doesn't handle for you
Stripe supports SEPA Direct Debit as a payment method, but it doesn't erase the scheme's timelines. It can take up to 14 business days for Stripe to receive confirmation of whether a SEPA Direct Debit charge succeeded or failed — the average is closer to 5 — which is already slower than the up-to-4-business-day lag we've flagged for ACH. Automatic retries aren't enabled by default; you have to turn them on explicitly for invoices, and even then Stripe only retries collections that failed due to insufficient funds. Every other rejection code needs a payment-method update from the customer, the same way a hard card decline does.
None of that covers the 8-week refund right, because it isn't a failure Stripe can predict or retry against — it's a standing consumer entitlement that exists entirely outside your payment infrastructure, exercised through the customer's own bank.
Building a SEPA-aware billing process
The pieces that a card- or ACH-tuned dunning stack won't give you automatically:
- Treat "paid" as provisional for 8 weeks, not final. For revenue recognition and churn reporting, a SEPA Direct Debit collection that's inside its refund window is a different risk category than one that's cleared it. Don't count MRR from a fresh SEPA subscriber the same way you count MRR from a card renewal that's been running for a year.
- Automate pre-notification on your billing calendar, not as an afterthought. The 14-day advance notice is a scheme requirement, not a nice-to-have email. Build it into your invoice generation timeline so it's sent before the collection date by default, every time.
- Route reason codes, don't just log them. AM04 goes to a retry queue. Everything else goes straight to a payment-method-update flow, the same branching logic we recommend for ACH — the difference is the specific codes and the absence of a Nacha-style retry ceiling.
- Watch reversal clusters as a signal, the same way we treat ACH's unauthorized-return rate. A spike in no-questions-asked refunds inside the 8-week window often means the same thing a spike in card disputes means: customers finding a bank-side workaround easier than your cancellation flow. It's not fraud, and treating it as fraud misses the actual fix.
- Decide your Core vs. B2B policy per segment, not per market. If you sell to both consumers and businesses in the euro area, don't default every account to the same scheme. Route confirmed B2B customers to the B2B scheme where their bank supports it, and leave Core as the fallback.
Most of what we've written about involuntary churn assumes the failure shows up as a failure — a decline, a return, a bounced charge you can see and react to. SEPA Direct Debit's biggest risk doesn't look like that at all; it looks like a clean, successful payment that quietly stops being final for eight weeks. If a meaningful share of your book runs through European bank debit, that's a gap worth closing in your billing logic before it shows up as an unexplained gap in recovered revenue. And separately from any of this — a customer who wants to leave on purpose, rather than reverse a charge after the fact, is still better served by a proper cancellation flow than by a call to their bank. You can model what involuntary churn is costing you across payment rails with our churn calculator, keeping SEPA reversals as their own line rather than folding them into a generic "failed payment" bucket that hides exactly the risk this one carries.
Frequently asked questions
What is a SEPA Direct Debit reason code?+
A SEPA Direct Debit reason code (also called an R-transaction code) is a two-letter, two-digit code the debtor's bank attaches to a rejected, refused, or returned collection — for example AM04 for insufficient funds or MD01 for no valid mandate. The European Payments Council publishes the full list in its Guidance on Reason Codes for SDD R-transactions. Unlike a generic "payment failed" message, the code tells you whether the collection can be resubmitted or needs a corrected mandate.
How long can a customer reverse a SEPA Direct Debit payment?+
Under the SEPA Core scheme, a consumer can request a refund of an authorised collection with no reason given for 8 weeks from the debit date, and their bank must pay it within 10 working days. For an unauthorised collection — one with no valid mandate — the refund right extends to 13 months. Neither window requires the merchant's agreement; the debtor's bank processes the refund and debits the merchant's account.
Does Stripe automatically retry failed SEPA Direct Debit payments?+
Not by default. Stripe only automatically retries a failed SEPA Direct Debit collection if you've explicitly turned retries on for invoices, and even then it only retries failures caused by insufficient funds. Every other rejection reason — a closed account, a missing mandate, a blocked account — needs a corrected payment method rather than a scheduled retry, since resubmitting the same mandate against the same problem doesn't change the outcome.
What's the difference between SEPA Core and SEPA B2B Direct Debit?+
SEPA Core is the mandatory scheme every euro-area bank must support, and it carries the 8-week no-questions-asked refund right for consumers. SEPA B2B is an optional scheme that both banks in the transaction must support, and it drops that refund right entirely — the debtor's bank must instead validate the mandate against the merchant's claim before ever executing the collection. B2B SaaS billing European business customers can use either, but only Core is broadly guaranteed to work on the other side.
Stop losing subscribers today
One script tag. One function call. A live cancellation flow in under 10 minutes.
Start free trial →