Changing your offer without changing your customers
Say you raise the Pro tier’s limit from 200 to 500, and add a feature to it. Two things could happen:- everyone already on Pro is quietly moved to the new terms, or
- they keep what they signed up for, and only new customers see the change.
Each time you change what a plan includes, you publish a new version of that offer — a pack in
the dashboard. A subscription is attached to the version that was current when it started, and stays
there.
allows(), check() and entitlements() resolve through whichever one the customer is on.
Moving someone to a newer version
Two things do it, both deliberate:- They change plan. Switching plans re-attaches the subscription to the target plan’s current version.
- You migrate them. From the dashboard, on purpose, when you’ve decided the old terms should end.
What happens when a payment fails, or they cancel
Two moments need a decision from you, because the obvious answer isn’t obvious. Both are set per product in the dashboard.They cancel
They cancel
End of period by default — access continues through what’s already been paid for, and stops
when that period ends. An explicit
immediately flag on cancel() cuts access right away
instead. That’s a per-call choice, not a stored setting.Their payment fails
Their payment fails
Nothing happens by default — Kerne never automatically cuts access over a failed payment. The
subscription sits at
PAST_DUE until the provider resolves it.Or: block after a grace period — the customer keeps access for a number of days you set, then
a background sweep moves them to UNPAID, which does cut access, if nothing was paid by then.PAST_DUE and UNPAID are subscription statuses — see the subscription shape for the full list.
A downgrade to a cheaper plan applies immediately today; there’s no end-of-period option yet.
Next
Entitlements
What an offer actually grants.
Pricing models and meters
Flat, metered, and what a meter measures.

