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.
The customer ID. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.
The live subscription ID, or null when the customer has no live subscription.
The seats feature code.
The seat count before the change.
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?