Why it matters
The lifecycle determines:- When customers are billed — invoices follow the status and the billing schedule
- What customers can access — entitlements are only returned for active subscriptions
- How changes apply — upgrades, downgrades and cancellations each have their own timing rules
- What your revenue looks like — MRR, churn and expansion all derive from status transitions
Lifecycle states
1. Create
A subscription is created indraft, from a plan or with custom items, via the dashboard or POST /subscriptions. Nothing is billed while it is a draft, and it can be deleted with DELETE /subscriptions/{id}. Step-by-step: Create your first subscription.
2. Activate
Activation starts the contract: click Activate Subscription in the dashboard, callPOST /subscriptions/{id}/activate, or pass auto_activate: true on create. For sales-led deals, Request Customer Signature sends the subscription as a quote; it becomes accepted on signature and active on the start date. In both cases subscription.activated fires, the billing cycle begins, and the first invoice is generated per the schedule.
3. Change
Once active, two kinds of change exist:- Metadata (name, discount, thresholds, renewal and invoice flags) changes immediately via
PATCH /subscriptions/{id}and emitssubscription.updated. - Pricing (add, remove, re-price, swap plan) creates a new version via
POST /subscriptions/{id}/changeswith aneffectivetiming, and emitssubscription.version.updated. See Amendments.
Upgrades and downgrades
Choose when the change lands:
Example, upgrading 199/month on day 15 of a 30-day cycle with
immediate:
Seats
For a fixed per-seat price, changeunits:
Preview any of these first with
POST /subscriptions/{id}/changes/preview.
4. Renew
Renewal is governed by the subscription’srenewal block: auto_renew, period_type (fixed or monthly_rolling) and duration_months. These default from the plan and can be changed at any time with PATCH /subscriptions/{id}.
- Auto-renew on: at the end of a fixed term a new term starts for
duration_months, invoices continue, andsubscription.startedfires for the new period. - Auto-renew off: the subscription becomes
expiredat the end of the term. - Monthly rolling: there is no term to renew; the subscription continues month to month until cancelled.
effective: "next_term_renewal"; for an automatic annual uplift, set price_escalation (a percentage every interval_months). The next renewal date is on GET /subscriptions/{id}/billing-dates. For renewals that need a signature, issue a renewal quote.
5. Cancel
POST /subscriptions/{id}/cancel with a reason and an effective of immediate, end_of_term (end of the current billing period) or a date.
subscription.cancelation_scheduled fires when the cancellation is recorded and subscription.canceled when it takes effect. A scheduled cancellation can be reverted while the subscription is still active (Revert Cancellation in the dashboard), which fires subscription.cancelation_reverted. Once canceled, the subscription is final; restart the customer with a new subscription. Full detail: Canceling Subscriptions.
Lifecycle webhooks
See Webhooks for payloads and setup.
Best practices
Downgrade at the boundary
Use
next_billing_period for downgrades and removals to avoid credits.Preview first
Call
/changes/preview before applying anything mid-cycle.Capture reasons
reason is required on cancel; use reason_description for the detail.Act on webhooks, not polling
Grant access on
subscription.activated, revoke on subscription.canceled.Next steps
Proration
The calculation behind mid-cycle changes.
Versioning
Drafts, published versions and effective dates.