Skip to content
RefillKit
DemoRecoveryMigratePricingCalculatorPreflightDocs
Start free trial

Dunning setup

Last updated: July 10, 2026

How RefillKit’s failed-payment recovery works and how to tune it: the +1/+3/+5/+7 retry ladder, the morning fire window, card-update emails, hard-decline handling, the final action, and the recovered-revenue report. It works out of the box — configuration is optional.

On this page

  1. How dunning works
  2. The default schedule
  3. What you can configure
  4. Card-update emails
  5. The final action
  6. Recovered-revenue reporting
  7. Safety properties
  8. Getting help

01How dunning works

When a subscription charge fails, RefillKit opens a recovery case for it and walks a fixed ladder: retry the charge on a schedule, email the customer a secure card-update link partway through, and — if nothing collects — apply the final action you configured. Charges that succeed at any rung are booked to the recovered-revenue report.

Dunning runs on every plan, including Free, and needs no setup to start: install the app and the defaults below are live.

02The default schedule

Default ladder for one failed charge
OffsetWhat happens
Day 0Charge fails. Recovery case opens. No customer contact.
+1 dayFirst retry, silent.
+3 daysSecond retry, plus the card-update email if it fails again.
+5 daysThird retry.
+7 daysFinal retry. If it fails, your configured final action runs.

Retries fire in your shop’s morning window — 9–11am shop time by default — because a retry that fails at 3am generates a confused support email at 8am.

03What you can configure

  • Retry offsets — move any rung, add or remove rungs.
  • Fire window — the local-time window in which retries run.
  • Email timing — which rung triggers the card-update email.
  • Final action — pause, cancel, or flag for manual review.

Settings live in RefillKit under Settings → Payment recovery. The defaults are deliberately conservative; if you are unsure, leave them.

04Card-update emails

The email tells the customer their payment didn’t go through and gives them one link. The link opens Shopify’s hosted payment-update page, so the new card number goes to Shopify — RefillKit never sees, stores, or logs it.

  • You can edit the subject, body text, and sender name.
  • Hard declines (closed account, stolen-card flag) send the email immediately instead of waiting for the +3 rung — retrying those charges cannot succeed.
  • The same email flow handles customers whose payment methods could not carry over during a migration.

05The final action

If the last retry fails, the contract does exactly one of three things — your choice:

  • Pause — billing stops, the subscription is kept, and it resumes if the customer updates their card later. The default.
  • Cancel — the subscription ends. Cleanest books, least forgiving.
  • Flag for review — nothing changes automatically; the case lands in a list for you to decide per customer.

06Recovered-revenue reporting

Every recovered charge is booked with its amount, the rung that collected it, and the contract it belongs to. The dashboard shows recovered revenue next to MRR, churn, skip rate, and save rate; everything exports to CSV so you can reconcile against payouts.

RefillKit does not publish or promise recovery rates. Your rate depends on why your customers’ cards fail — the report exists so you can measure your own.

07Safety properties

  • Idempotent — a replayed webhook or double-fired job can never double-charge a customer.
  • Bounded — the ladder always terminates in your final action; no charge is retried forever.
  • No raw card data — payment methods are Shopify references only, and card updates happen on Shopify’s hosted page.

08Getting help

Email support@refillkit.website with your shop domain and, if it concerns a specific charge, the order or contract ID. Support is async and there are no sales calls; you get an answer in writing you can act on.

RefillKit

Subscriptions that pay you back. Built on Shopify’s subscription APIs.

Product

Payment recoveryCustomer portalReportingPricingSavings calculator

Switch

Recharge alternativeMigrate from RechargeMigrate from BoldPreflight check

Docs

Migration guideDunning setupFAQ

Company

Install on ShopifySupport

Legal

PrivacyTermsData processing
© 2026 RefillKitbilling heartbeat green