Moved your app’s subscriptions to Stripe? Declined cards are your problem now.

Web paywalls and link-out checkouts let you keep the 15–30% Apple and Google take. But inside the App Store, Apple chased failed renewals for you with its own retries and grace period. On Stripe, a subscriber whose card expires just churns, and you only notice when MRR dips.

Which app setups this is for

DeclineKit works when your subscriptions live in Stripe Billing, in your own Stripe account:

It does not apply to:

Not sure which you have? If your subscriptions appear under Billing → Subscriptions in the Stripe Dashboard, you’re on Stripe Billing.

What DeclineKit does

  1. Connects to your Stripe account with a restricted key. No SDK, nothing to ship in the app.
  2. Emails the subscriber in your app’s name when a renewal is declined: up to four short notes over 12 days. Replies come to you.
  3. Links to a Stripe-hosted card form that works on a phone. The moment they save a new card, we retry the invoice and the subscription carries on.
  4. Warns subscribers before their card expires, so many renewals never fail at all.

Consumer apps tend to see more declines than B2B software: more debit cards, more insufficient funds, more expired cards. Keep Stripe’s Smart Retries on for the temporary ones. DeclineKit goes after the ones retries can’t fix. How the two fit together.

Setup takes about five minutes

  1. Create a restricted key in the Stripe account your web checkout uses, with the permissions DeclineKit lists.
  2. Paste it in, set your app’s name and reply-to address, and preview the emails.
  3. Switch recovery on, and turn off Stripe’s own failed-payment emails so subscribers don’t get two.