What happens if…: connecting and subscriptions

After paying, comped plans, connecting Stripe and subscriptions: each case, what Gemmein does and what you do.

The cases you are most likely to meet, by part of this page. Credits have their own table on Credits.

After paying, and comped plans

If…What happensWhat you do
A product went on sale before your domain was verifiedGemmein points its Payment Link back to your domain the moment it is verified. After paying, the buyer lands on your return path (/ unless you set one on the Payments page).Nothing.
Your verified domain is removedBuyers see Stripe's own confirmation page after paying.Verify the domain again.
You remove a productIts file stays while any buyer holds it and is deleted once nobody does (a full refund ends a hold; a part refund keeps it). A file uploaded in the last 24 hours is never touched, and a Live copy replaced at go-live goes the same way. Logs records each deletion.Nothing.
You comp a plan with an end dateIt ends on its own at that date (checked every 10 minutes): back to the default plan, its access goes, and Logs records it. Credits already granted stay.Nothing.
You switch or cancel a comped planIts access moves at once: the old plan's comp access goes, the new plan's comes.Nothing.
A comped person later paysThe paid plan takes over and the comp's own access goes, so nothing outlives the paid plan.Nothing.

Connecting Stripe

If…What happensWhat you do
You paste a secret key, a publishable key, a signing secret or a Payment LinkRefused in one sentence. A live-mode key in Development, or a test-mode key in Live, is refused tooMake a restricted key with the permissions above: five, plus two if you sell plans
The key is missing a permissionRefused, naming each missing row (stripe_key_permissions)Turn that row on in Stripe's key editor and paste the key again
The key can read money or customer dataRefused (stripe_key_too_broad), with what the key can readChoose None on every section heading, then turn on only the five (plus two if you sell plans)
Your app sells only products and adds its first plan, on a key made with the fiveThe plan is refused before anything is made in Stripe (stripe_key_plan_rows), naming the two rows to add. A sync, the Payments page and a promote into Live are refused the same way, so you see it before promoting. Nothing else changesAdd Customer portal and Subscriptions (Write) to the key in Stripe, then save again
A key made with only the five, on an app that sells plansSelling keeps working. Payments shows the missing rows, g.subscriptions.manage() answers portal_unavailable, and deleting a member's account can't end their subscription in Stripe, so you are told to cancel it thereEdit the key in Stripe and add the two rows
The last plan is removed while members still payThe app still counts as selling plans: the key still needs the two rows, those members still open their portal, and deleting one still ends their subscription. Another business's subscriptions on the same Stripe account never countNothing
Gemmein can't read the environment's payments for a momentConnecting the key answers payments_unreadable and saves nothing; the daily check concludes nothingTry again
The Stripe account is already connected to another Gemmein accountRefused (stripe_account_in_use). Your own apps may share one Stripe accountConnect a Stripe account that only you use
You paste a key from a different Stripe accountRefused while what Gemmein made in the first account existsIn Development, Start over once nothing can still pay
You replace the key with a new one from the same Stripe accountThe webhook, its signing secret, your Payment Links and the account's claim carry overNothing
The key is revoked or rolled in StripePayment Links already out keep selling and payments keep landing. Making or changing anything in Stripe is refused (stripe_key_broken). The Payments page, Overview and Errors show it, and you get one emailConnect a new key
The key is given more permissions laterGemmein stops using it (stripe_key_too_broad) and resumes on its own once it is back to the rows it needsRemove the extra permissions in Stripe
Gemmein's webhook is deleted or disabled in StripeThe Payments page, Overview and Errors show it, and you get one emailChoose Repair webhook. A deleted one is made again with a new signing secret, and the old one keeps verifying for 72 hours
Stripe refuses part of a save, such as a permission the key lostNothing is saved. What Gemmein made in Stripe during that save is turned off again, and the message names what to fixFix what the message names and save again
Two people save the Payments page at onceThe later save is refused with a reload messageReload and save again
A payment lands on a Payment Link Gemmein did not make, or on a removed item's old linkNothing is granted, even to an item added again under the same name. Errors names the paymentRefund it in Stripe, or grant it by hand
You disconnect the keyThe webhook, its signing secret and every Payment Link keep working. Only making or changing things in Stripe stopsNothing
Live has no key yetNothing sold through Stripe can be bought in Live; its checkout answers payments_not_configuredConnect a live-mode key on Live's Payments page

Subscriptions

If…What happensWhat you do
A renewal payment failsThe customer keeps the plan while Stripe retries the card, and g.subscriptions.mine() still answers active. Your Stripe retry schedule is the grace periodNothing. Set the retries in your Stripe subscription settings
Stripe stops retrying a failed renewalWhen Stripe cancels the subscription or marks it unpaid, the customer moves to your default plan and the plan's access closes. A subscription Stripe leaves past due keeps the planIn your Stripe subscription settings, cancel the subscription or mark it unpaid after the last retry
A customer cancels at period endThey keep the plan until the period ends, then move to your default planNothing
A subscriber calls g.subscriptions.checkout againNo second subscription is started. It answers already_subscribed with a customer portal link for them, where they change planSend them to the url it returns
The price on a subscription is changed in Stripe to another plan's priceThe customer moves to that plan, and Logs records the change. A price Gemmein did not make leaves the plan as it isNothing
A subscription is paused in StripeThe customer is on your default plan while it is paused. When it resumes, the plan comes backNothing
A renewal is paidThe plan's credits for the new period are granted once. A renewal never changes the planNothing
A subscription payment is refunded in fullThat period's credits are taken back and the payment reads refunded. The plan and its access stayTo end access too, cancel the subscription in Stripe (see Refunds)
Stripe sends events late, out of order or twiceEach applies once and the newest state wins. A late payment never reopens a cancelled planNothing
A customer pays by bank debitThe plan opens when the payment clears. A payment that never clears is closed after 30 days, and opens the plan if it still arrivesNothing
You rename a planIts subscribers move with it and keep their accessNothing
Was this page helpful?

Last updated