About plans
Billing
While we would rather customers didn’t cancel their subscription to your services, they do need to be able to. There are three ways to do this.
When the cancellation takes effect is set on the plan. You can also choose a different timing when you cancel from the admin or the API.
There is not currently a Cancel plan action on a user (B2C) Billing page in the Kinde admin. For user plans, cancel from the self-serve portal or the Management API.
Each plan has a Cancellation takes effect setting in Plan settings. See Create billing plans.
| Setting | What happens |
|---|---|
| Immediately (default) | The subscription ends as soon as it is cancelled. The customer loses access to the plan’s features and entitlements. |
| At the end of the earliest billing period | The subscription stays active until the first charge on the plan renews. The customer keeps access until that date. |
| At the end of the latest billing period | The subscription stays active until the last charge on the plan renews — for example the end of an annual charge on a mixed-interval plan. |
The setting is stored on the published plan version the customer agreed to. To change timing for new subscribers, edit the plan draft and publish a new version. Existing subscribers keep the timing on the version they joined. See About plans — How versioning protects existing subscribers.
Plans created before this setting existed cancel immediately.
If Kinde cannot find a future period end (for example there is no Stripe subscription and no billing cycle yet), or that date is about to pass, the cancellation happens immediately instead.
On a plan with more than one billing interval (for example monthly plus annual), earliest and latest period-end dates are often different. Access runs until the effective date of the cancellation - not until every charge on the plan would have renewed.
If cancellation is at the earliest period end, a longer-interval charge (such as annual) can be cut short while prepaid time remains on that charge. Proration may apply on the final invoice at the effective date. Refunds or credits for unused prepaid time follow your billing policies and Stripe - not as a separate refund when the customer schedules the cancel.
Use At the end of the latest billing period (in plan settings, or when you cancel from admin or the API) when you want access to continue through the longest charge on the subscription.
Until the effective date:
On that date, Kinde ends the agreement. One-time purchases still on the agreement are then forfeited (they are not refunded). Purchases that already expired with the billing cycle ended on their own schedule before that date.
Dates in the portal and admin are shown in your business time zone (from Business details), or UTC if none is set — for example 27 Oct 2026, 14:00 (Sydney).
Customers can only do this if you have enabled billing in the self-serve portal and the B2B customer has a billing role with org:read:billing to view billing and org:write:billing to make changes.
The customer does not pick a date. The plan version decides when the cancel takes effect.
This information is synced to Stripe.
If the customer scheduled the cancellation themselves, the Plan page shows a Cancellation scheduled section: “Your plan will be cancelled on [date]. You can keep it until then.”
If you scheduled the cancellation (from admin or the API), the customer still sees the date but they cannot keep the plan from the portal.
After the date, the section explains that the plan is being cancelled and that this can take a few minutes.
You can cancel an organization’s subscription from that organization’s Billing page.
Go to Organizations, open the organization, and select Billing.
Scroll to Cancel plan and select Cancel plan.
Choose when the cancellation takes effect. The radios are preselected to the plan’s Cancellation takes effect value:
Select Cancel.
While a cancellation is scheduled, the Billing page heading becomes Cancellation scheduled: “This organization’s plan will be cancelled on [date]. It keeps access until then.”
Keep plan — removes the schedule. You can do this whether the customer, an admin, or the API scheduled it.
Cancel now — ends the plan immediately. The dialog only offers Immediately.
The organization keeps access until the scheduled date unless you cancel now. If you keep the plan, access continues as usual.
If the customer has active one-time purchases:
Immediate cancel — the confirmation includes an extra warning that those purchases will be lost and are not refunded.
Scheduled cancel - active purchases stay available until the effective cancellation date or until they expire on their own schedule (Expires with the billing cycle), whichever comes first. Keep plan removes the schedule but does not extend expiry. Purchases still on the agreement when it ends are forfeited, not when the cancel is first requested.
This applies in the self-serve portal, on the organization Billing page, and when you cancel via the Management API. When the cancellation takes effect, the billing agreement ends; any one-time purchases still on that agreement are forfeited (this is separate from a purchase expiring at the end of a billing cycle).
See One-time purchases.
Required scopes for your M2M app:
delete:billing_agreements — to cancel immediatelyupdate:billing_agreements — to schedule a cancellationGet the customer’s Agreement ID. This is the unique ID associated with their subscription. You can find it in their Kinde record under Billing.
Send a DELETE request to /api/v1/billing/agreements/{agreement_id}.
Optionally pass cancel_at as a query parameter set to immediately, min_period_end, or max_period_end. If you omit it, Kinde uses the cancellation timing on the plan version the customer agreed to.
An immediate cancel still returns AGREEMENT_DELETED. A scheduled cancel returns AGREEMENT_CANCELLATION_SCHEDULED and cancels_on. The agreement stays active until that time.
To take a scheduled cancellation back (the same action as Keep plan), send DELETE /api/v1/billing/agreements/{agreement_id}/cancellation. You need update:billing_agreements.
A further deferred cancel on an agreement that is already scheduled is ignored: Kinde returns the existing cancels_on and does not run the cancellation workflow again. Pass cancel_at=immediately if you want to end a scheduled agreement now.
See the Management API for the generated reference.
You can set up a workflow that enables you to check and approve cancellations. You might want to do this, for example, to be alerted when high value customers cancel.
The workflow also runs when you cancel from the organization Billing page or the Management API. It does not run when someone keeps a plan, or when a scheduled cancel is requested again.
For details, refer to the Plan cancellation request workflow.