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

seats.updated

A customer's seat count changed.

Payload

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

customerIdstring

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

subscriptionIdstring | null

The live subscription ID, or null when the customer has no live subscription.

featureCodestring

The seats feature code.

previousSeatsnumber

The seat count before the change.

currentSeatsnumber

The seat count after the change.

{
  "event": "seats.updated",
  "timestamp": "2026-06-18T09:12:00.000Z",
  "organizationId": "org_abc123",
  "mode": "live",
  "apiVersion": "2026-06-10",
  "data": {
    "customerId": "user_123",
    "subscriptionId": "sub_1a2b3c4d",
    "featureCode": "editors",
    "previousSeats": 3,
    "currentSeats": 5
  }
}

When this fires

Every seat mutation fires it: the SDK seat endpoints (add, set, remove, bulk) and manual seat events created from the dashboard. The payload carries the previous and the new absolute count for the feature.

customer.state_changed fires alongside it with trigger seats_updated, carrying the full entitlement state including the seats summary.

Use it to keep your own member-management UI in sync with billed seats.

How is this guide?

usage.recorded

A usage event was recorded. High volume — explicit opt-in.

seats.limit_reached

A seat change reached the plan's included seat limit.