Skip to main content
Install the Commet Skill so your coding agent can implement the current subscription lifecycle and verify the result.
Subscriptions connect a customer to a plan and drive checkout, invoices, feature access, usage, and renewals.

Lifecycle

The persisted statuses are:

Create

For a paid plan, redirect the customer to checkoutUrl. Free plans can activate without checkout and return checkoutUrl: null. The normal path needs only customerId and either planCode or planId. Optional selection fields are: Omitting priceId preserves default price and Market resolution. Omitting offerId preserves automatic Introductory Offer selection. To charge several billing periods in the first payment, see Pay in Advance. To sell a period that doesn’t renew, see One-Time Payments. A compatible pending_payment checkout may be reused. An incompatible pending selection can be replaced without duplicating a paid subscription. Omitting a promoCode or offerId that the pending checkout carries, including an Offer assigned through PUT /subscriptions/{id}/offer, replaces it with a new subscription and checkout without that benefit. Redirect to the returned checkoutUrl; the previous link stops working. To keep the Offer, send it again or assign it to the returned subscription ID.

Retrieve current or historical state

getActive returns the customer’s current subscription relationship or null.
Use get with a public subscription ID to retrieve any persisted status, including pending_payment, past_due, and canceled.

Pause and resume

A pause temporarily stops subscription access and renewals without canceling the subscription. You can pause a paid recurring subscription in active or trialing status. Free, one-time, pending-payment, past-due, and canceled subscriptions are not eligible. Resolve any scheduled cancellation, scheduled plan change, or pending plan-change checkout before creating a pause.

Choose when to pause

For example, an immediate pause with 10 paid days remaining preserves those 10 days. Resuming after a week still leaves 10 days before renewal. While paused, the subscription does not generate renewal invoices. A period-end pause may still produce a final invoice for pending usage, overage, or seat/quota adjustments from the period that ended. It does not charge advance capacity for the next period.

Set the duration

Set durationDays to a positive integer for an automatic resume attempt, or null for an indefinite pause that requires manual resume. The duration starts when the pause becomes effective, not when a future pause is scheduled. In the Dashboard, open the subscription detail and choose Pause. Choose when the pause starts, then select a suggested duration or enter a number of days, weeks, or calendar months. Leave the duration empty for an indefinite pause. The dialog shows the effective date and the automatic resume attempt date before you confirm. Customers can edit an existing pause, cancel a scheduled pause, and resume a paused subscription in the Customer Portal, but cannot create pauses; Commet Admin exposes them in the subscription detail. Dashboard mutations require permission to edit subscriptions. Editing a pause derives an equivalent duration from its stored dates: weekly subscriptions prefer whole weeks; other subscriptions prefer whole calendar months, then weeks or days. Durations are always measured from the original effective date; a month ending on a shorter month uses its last day. The current pause shows its effective date and resume date. Use its actions to edit the duration, revoke a scheduled pause, or resume an effective pause.

Create a pause

This request schedules a seven-day pause at period end:
Use "mode":"immediate" to pause now, or "durationDays":null to leave the resume date open. Creation returns the updated subscription. A future pause has pause.status: "scheduled" while the subscription remains active or trialing. Once effective, the subscription is paused and pause.status is "active". The pause object includes mode, effectiveAt, and resumeAt; it is null when there is no current or scheduled pause.

Edit or revoke a pause

Change the duration of a scheduled or effective pause:
This sets the total duration to 14 days from the original effective date; it does not add 14 days from today. Send null to make the pause indefinite. This operation does not change its mode. Revoke a pause before it becomes effective:
The subscription keeps its current period and access. An effective pause must be resumed instead.

Resume and handle payment outcomes

Use resume for a paused subscription; reactivate is a separate operation for canceled or past-due subscriptions.
The response includes subscriptionId, invoiceId, and status. An immediate resume has no new invoice, so invoiceId is null. A declined resume keeps its invoice outstanding. Automatic payment retries follow days 1, 3, 5, and 7 from the original failure and reuse that invoice. The subscription stays paused during retries. If all retries fail, it is canceled and the resume invoice becomes uncollectible. Manual resume attempts do not consume automatic retry slots. A period-end resume uses the current base price when its new invoice is created. An outstanding resume invoice keeps its original amounts and included credits or balance on retry, even if the catalog changes again. Accepted Introductory Offers and discounts preserve their unconsumed terms; resume does not grant a new Introductory Offer or redeem a promo code again. See the Pause API reference and Resume API reference for the complete schemas.

Keep access in sync

Use Feature Access to authorize requests against the current subscription state. Subscribe to these webhooks for asynchronous updates in your application:

Cancel

A normal paid active subscription schedules cancellation at period end unless immediate: true is sent. Free, pending-payment, and past-due relationships cancel immediately. Cancellation does not erase the stored subscription balance. Canceling a paused subscription is immediate and discards its preserved time. Pending usage, overage, or seat adjustments may still produce a final invoice. To cancel while a future pause is scheduled, revoke that pause first.

Reverse a scheduled cancellation

uncancel works only before an end-of-period cancellation takes effect. It keeps the same subscription and current period.

Recover a past-due subscription

Reactivate retries the outstanding renewal charge and keeps the original billing relationship:
If the customer must update their payment method, create a hosted recovery link:
Automatic dunning retries are anchored to the original decline on days 1, 3, 5, and 7. A successful retry returns the subscription to active.

Reactivate a canceled subscription

The same reactivate operation charges the saved payment method, reuses the subscription record, and starts a fresh period anchored to the reactivation date. You may pass an offerId; accepted phases are persisted as an immutable Offer Application. The selected price is not snapshotted. Future renewals use its current catalog value. Archiving that price prevents new selection but does not break the existing subscription.