Commet
  • Pricing
Log InTry out
Introduction

Subscription Events

subscription.createdsubscription.activatedsubscription.reactivatedsubscription.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

Payment Link Events

payment_link.createdpayment_link.completedpayment_link.failedpayment_link.canceled

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.canceled

Fired when a subscription is terminated at the end of the billing period. Revoke access here.

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

Always "canceled" for this event. Revoke access when you receive this.

canceledAtstring

ISO 8601 datetime when the customer originally requested cancellation.

cancelReasonstring | null

The reason for cancellation, if provided.

endDatestring

ISO 8601 datetime when the subscription ended (matches the billing period end).

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

Cancellation lifecycle

Commet cancellations are always scheduled for the end of the current billing period. Two events fire at different moments:

MomentEventstatusWhat to do
Customer requests cancellationsubscription.updatedactiveShow "ending on {endDate}" in your UI. Do NOT revoke access.
Billing period endssubscription.canceledcanceledRevoke access.
POST /subscriptions/{id}/cancel
  └→ subscription.updated  (status: "active", canceledAt: set, endDate: set)
       ... time passes until billing period ends ...
  └→ subscription.canceled (status: "canceled")

How is this guide?

subscription.reactivated

Fired when a canceled subscription is reactivated and its reactivation charge succeeds.

subscription.updated

Fired when subscription details change, including when a cancellation is scheduled.