Skip to main content
State-machine transitions on a subscription. These carry the subscription object (and the customer and plan resolved through it). The shared delivery envelope, headers, and inline-expansion rules are on the webhooks overview and the event index; every sample below shows the full envelope.
Fires when a subscription is created, through POST /v1/subscriptions, or when a checkout that binds a plan settles. Emitted by SubscriptionService.create and CheckoutSettlement.
Fires when a subscription becomes active: a trial converts, or the first charge succeeds. Emitted via the state machine (activate).
Fires when a mutable field changes without a status transition. Today that is setting cancel-at-period-end. The changed flag is carried alongside the subscription.
Fires when a subscription’s plan changes: immediately via POST /v1/subscriptions/{id}/change-plan (carries fromPlanId, toPlanId, and the proration result) or when a scheduled change is applied at renewal (carries toPlanId and scheduled: true). The changed-to plan is the one expanded into plan.
Fire when a subscription is paused or resumed (POST /v1/subscriptions/{id}/pause and .../resume). Each carries just the subscription (with customer and plan). The example is subscription_paused; subscription_resumed is identical with type and status: "active".
Fires when a renewal charge fails and the subscription moves to past_due; dunning has begun. Emitted by the state machine (renewal_failed) from the dunning service.
Fires when dunning wins and a past_due subscription returns to active. Emitted by the state machine (recover).
Fires when dunning is exhausted and the subscription is written off to unpaid. Emitted by the state machine (exhaust_dunning).
Fires on an immediate cancel (POST /v1/subscriptions/{id}/cancel). Any unused-time credit granted at cancellation is carried as creditKobo (minor units; 0 when none). Cancelling at period end emits subscription_updated instead, then subscription_cancelled when the period actually ends.
Fires when a subscription reaches its maxCycles and stops. Emitted by the state machine (reach_limit).
Fires when an incomplete subscription expires before it was ever activated (the initial payment never completed). Emitted by the state machine (expire_incomplete).