Subscription upgrade and downgrade methods
Billing
One-time purchases are optional single purchases on a subscription plan. For example, AI credit packs, storage top-ups, or feature unlocks. You configure them on the plan under One-time charges. Customers buy them after they subscribe, or you assign them from the admin.
Each one-time purchase on a plan can be:
| Setting | Options |
|---|---|
| Usage | Unmetered (access only) or Metered (track consumption against purchased units) |
| Pricing | Flat (fixed price per purchase) or Package (price per set number of units) |
| Expiry | Never expires or Expires with the billing cycle |
On the plan details page, purchased items show units granted, amount paid, expiry, and current usage for metered purchases.
Authorized customers can buy one-time purchases from the portal Plan page.
Enable the self-serve portal and plan management. See Self-serve portal for users or Self-serve portal for organizations.
For B2B organization billing, ensure the organization member has a role with the org:write:billing system permission (for B2C users, billing write access is granted automatically).
The customer opens the portal and goes to Plan.
In One-time purchases, they select Purchase or Buy more.
For package-priced purchases, they choose how many packages to buy, then confirm payment.
If no payment method is on file, the customer is prompted to add one before checkout completes.
You can grant a one-time purchase without the customer going through the portal:
Open the user or organization and select Billing.
In the One-time purchases section, select Assign or Assign more.
For package-priced purchases, enter the number of packages.
Choose:
You need permission to create billing agreements.
When a one-time purchase is metered, purchased or assigned units set the allowance. You can record consumption via the Management API after the first purchase or admin assignment (paid or complimentary) completes.
See Add metered usage for a customer via API.
One-time purchases belong to the current billing agreement.
| Event | What happens |
|---|---|
| Customer changes plan | Active one-time purchases on the old agreement are forfeited. Kinde lists them in the confirmation dialog. No refund is issued. |
| Customer or admin cancels immediately | The same forfeiture rules apply now. The cancel dialog warns when active purchases exist. |
| Customer or admin schedules a cancel for the end of a billing period | Purchases that are still active stay available until the effective cancellation date or until they expire on their own schedule, whichever comes first. Keep plan removes the cancel schedule but does not extend expiry. When the agreement ends, any purchases still on it are forfeited (separate from expiring at the end of a billing cycle). No refund is issued either way. |
| Customer buys again on a new plan | Treated as a new purchase. Prior payment is not credited. |
The screenshot shows the immediate cancel warning. A scheduled cancel does not list purchases as lost now - the confirmation says they stay available until the effective date.
Purchases configured as Expires with the billing cycle can end before a latest-period cancellation date. That normal expiry is not the same as forfeiture when the agreement ends. See One-time purchases — Expiry.
See Subscription upgrade and downgrade methods and Cancel a subscription.
API reference for these endpoints is generated from the OpenAPI spec:
| Endpoint | Purpose |
|---|---|
GET /api/v1/billing/one_time_purchases | List current paid, non-expired purchases for a customer |
GET /api/v1/billing/meter_usage | Page usage records and read the grant snapshot |
POST /api/v1/billing/meter_usage | Record usage, including metered one-time purchases after the first purchase or assignment |
Enable the read:billing_one_time_purchases, read:meter_usage, and create:meter_usage scopes on your M2M application as needed.
You cannot delete a plan while customer one-time purchase records still reference a published plan version on that plan. Remove or migrate customers first.