Skip to main content
Commet sells a one-time purchase in two ways: A one-time price charges the customer once at checkout and never bills again for the plan base. Use it for lifetime deals or any plan where recurring billing doesn’t apply.
This page covers one-time charges billed as a plan. To charge a customer once with no subscription or plan — a standalone invoice with tax and receipt — use Accept One-Time Payments instead.
One-time plans behave like any other plan — they support add-ons and all consumption models. One-time prices can’t have a trial or an intro offer. The other differences are:

Configure in the dashboard

In the dashboard, go to Plans, edit a plan, and add a price with interval One-time (lifetime). You can combine one-time prices with recurring intervals on the same plan — each price has its own interval.

Create a one-time subscription

The billingInterval must be one_time and the plan must have a one-time price configured. If the plan’s default price is already one-time, you can omit the billingInterval parameter.

Invoicing

The initial invoice includes the plan base price as a one-time charge. After that, subsequent billing cycles only generate invoices for overage — the plan base is never charged again. If there’s no overage or additional charges at a billing cycle, no invoice is generated.

Customer portal

In the Customer Portal, one-time subscriptions display the interval as Lifetime. The cancel button is hidden since cancellation is not allowed. Customers can still change plans if the plan belongs to a Plan Group.

Sell a period without renewal

To sell a month, a year, or any period of access that ends on its own, create the subscription on a recurring price with cancelAtPeriodEnd: true. The customer pays once at checkout, and the subscription ends after the paid period without renewing with any payment method.
To cover several periods in that payment, such as 6 months, add prepaidPeriods. Pay in Advance explains how each period is priced.
  • The cancellation is scheduled from creation: the response already shows cancelAtPeriodEnd: true and cancellation before the customer pays.
  • The purchase keeps ending even if the customer saves a card through a payment method update link, and the Customer Portal doesn’t offer Keep subscription for it.
  • Free trials don’t combine with it: customTrialDays above 0 returns 400 and the price’s trial is skipped.
  • When the purchase ends, Commet emits subscription.canceled.
To make it renew, reverse the scheduled cancellation through the API with POST /v1/subscriptions/{id}/uncancel. If the customer paid with a method Commet can’t charge again, such as OXXO, and has no saved card, the request returns 409 subscription_uncancel_failed.