subscription.canceled
Se dispara cuando una suscripción termina al final del período de cobro. Revoca el acceso acá.
Payload
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
The subscription ID.
The customer ID. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.
Your external ID for this customer. Only included if you set an externalId when creating the customer.
Always "canceled" for this event. Revoke access when you receive this.
ISO 8601 datetime when the customer originally requested cancellation.
The reason for cancellation, if provided.
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",
"data": {
"subscriptionId": "sub_1a2b3c4d",
"customerId": "user_123",
"externalId": "user_123",
"status": "canceled",
"canceledAt": "2026-04-20T10:15:00.000Z",
"cancelReason": "Too expensive",
"endDate": "2026-04-25T00:00:00.000Z"
}
}Ciclo de vida de la cancelación
Las cancelaciones en Commet siempre se agendan para el final del período de cobro actual. Se disparan dos eventos en momentos distintos:
| Momento | Evento | status | Qué hacer |
|---|---|---|---|
| El cliente solicita la cancelación | subscription.updated | active | Muestra "termina el {endDate}" en tu UI. NO revoques el acceso. |
| Termina el período de cobro | subscription.canceled | canceled | Revoca el acceso. |
POST /subscriptions/{id}/cancel
└→ subscription.updated (status: "active", canceledAt: set, endDate: set)
... pasa el tiempo hasta que termina el período de cobro ...
└→ subscription.canceled (status: "canceled")¿Cómo está esta guía?