Subscription Lifecycle
A subscription has exactly four states: active, cancelled, expired, and inactive.
ββββββββββββββββ
β active β
ββββββββ¬ββββββββ
β
ββββββββββββββββΌβββββββββββββββββββ
βΌ βΌ βΌ
ββββββββββββ ββββββββββββ ββββββββββββ
β cancelledβ β inactive β β expired β
ββββββββββββ ββββββββββββ ββββββββββββ
Transitions β who triggers whatβ
| From β To | Triggered by |
|---|---|
active β cancelled | Your DELETE /v1/subscriptions/{subUid} (immediate) |
active β inactive | Charge retries exhausted (cron, automatic) |
active β expired | Fixed-term subscription reached its end |
There are no trialing, past_due, unpaid, or paused states, so there is no trial-end, pause/resume, plan-change, or proration transition.
Plan changes and prorationsβ
The current API does not support changing a subscription's plan or prorating mid-cycle. PUT /v1/subscriptions only updates the notification email (see Subscriptions β Update).
Cancellationβ
Cancellation is immediate: DELETE /v1/subscriptions/{subUid} sets the subscription's status to cancelled. There are no cancelAt, immediate, or period_end modes and no currentPeriodEnd concept.
Failed chargesβ
When a scheduled charge fails, retries are governed per-plan by dailyAttempts and intervalAttempt (plus an optional graceDays window). Once attempts are exhausted the subscription transitions to inactive. See Scheduled charges β Retry schedule.
Reactivationβ
A cancelled or inactive subscription cannot be un-cancelled or reactivated through the API. A new subscription is created via the verify-card flow with shouldCreateSubscription: true, tied to a new transaction.
Notificationsβ
The subscription flow sends email notifications (notifyEvent) and a merchant callback (subsCallback) rather than a public outbound webhook contract. See Subscriptions β Notifications.