Commet
  • Pricing
Log InTry out
Introduction

Subscription Events

subscription.createdsubscription.activatedsubscription.canceledsubscription.updatedsubscription.plan_changedsubscription.cancellation_scheduledsubscription.cancellation_revokedsubscription.plan_change_scheduledsubscription.plan_change_revokedsubscription.past_due

Trial Events

trial.startedtrial.convertedtrial.expiredtrial.will_endtrial.checkout_ready

Checkout Events

checkout.ready

Payment Events

payment.receivedpayment.failedpayment.recoveredpayment.refundedpayment.disputedpayment.dispute_resolved

Invoice Events

invoice.createdinvoice.upcominginvoice.overdueinvoice.voided

Payment Method Events

payment_method.attachedpayment_method.updated

Customer Events

customer.createdcustomer.updatedcustomer.state_changed

Credits & Balance Events

credits.grantedcredits.purchasedcredits.lowcredits.depletedcredits.expiredbalance.topped_upbalance.lowbalance.depleted

Quota & Usage Events

quota.threshold_reachedquota.exceededusage.recorded

Seat Events

seats.updatedseats.limit_reached

Add-on Events

addon.activatedaddon.deactivated

Payout Events

payout.availablepayout.createdpayout.paidpayout.failed
DocumentationKnowledge BaseBuild with AIAPI ReferenceWebhooks

subscription.cancellation_scheduled

Fired when a cancellation is scheduled for the end of the billing period. Do NOT revoke access yet.

Payload

All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.

subscriptionIdstring

The subscription ID.

customerIdstring

The customer ID. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.

statusstring

Still "active" — the subscription remains usable until effectiveAt.

canceledAtstring

ISO 8601 datetime when the cancellation was requested.

cancelReasonstring | null

The reason for cancellation, if provided.

effectiveAtstring

ISO 8601 datetime when the cancellation will execute (the billing period end). subscription.canceled fires at this moment.

{
  "event": "subscription.cancellation_scheduled",
  "timestamp": "2026-04-20T10:15:00.000Z",
  "organizationId": "org_abc123",
  "mode": "live",
  "apiVersion": "2026-05-25",
  "data": {
    "subscriptionId": "sub_1a2b3c4d",
    "customerId": "user_123",
    "status": "active",
    "canceledAt": "2026-04-20T10:15:00.000Z",
    "cancelReason": "Too expensive",
    "effectiveAt": "2026-04-25T00:00:00.000Z"
  }
}

Cancellation lifecycle

This event marks the start of the cancellation lifecycle. The subscription stays fully usable until effectiveAt:

MomentEventstatusWhat to do
Customer requests cancellationsubscription.cancellation_scheduledactiveShow "ending on {effectiveAt}" in your UI. Do NOT revoke access.
Customer reverts the cancellationsubscription.cancellation_revokedactiveRemove the "ending on" notice.
Billing period endssubscription.canceledcanceledRevoke access.

subscription.updated also fires at the scheduling moment for backward compatibility — if you already handle the scheduled-cancel state through subscription.updated, you can keep doing so. This event carries the same intent with an explicit name and the exact effectiveAt.

How is this guide?

subscription.plan_changed

Fired when a subscription changes plans

subscription.cancellation_revoked

Fired when a scheduled cancellation is reverted before it executes. The subscription continues normally.