Se dispara cuando se programa un downgrade o cambio de intervalo para el fin del período de facturación.
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.
Current status — the subscription stays usable.
The plan currently in effect (id and name).
The plan that takes effect at effectiveAt (id and name).
The current billing interval.
The new billing interval, if the change includes one. Null when only the plan changes.
ISO 8601 datetime when the change executes (the billing period end).
{
"event": "subscription.plan_change_scheduled",
"timestamp": "2026-06-23T14:30:00.000Z",
"organizationId": "8f14e45f-ceea-4e7a-9c3d-1c2b3a4d5e6f",
"mode": "live",
"apiVersion": "2026-07-31",
"data": {
"subscriptionId": "sub_1a2b3c4d",
"customerId": "user_123",
"status": "active",
"currentPlan": {
"id": "pln_pro",
"name": "Pro"
},
"scheduledPlan": {
"id": "pln_starter",
"name": "Starter"
},
"billingInterval": "monthly",
"scheduledBillingInterval": null,
"effectiveAt": "2026-04-25T00:00:00.000Z"
}
}La dirección del intervalo tiene prioridad: uno más corto se programa para el final del período pagado y uno más largo cambia de inmediato. Si el intervalo no cambia, los Plan Groups usan sortOrder: los planes con menor orden se programan y los de mayor orden cambian de inmediato. Los cambios de pago a gratuito siempre se programan.
| Momento | Evento | Qué hacer |
|---|---|---|
| Se solicita un downgrade | subscription.plan_change_scheduled | Mostrá "cambia a {scheduledPlan.name} el {effectiveAt}". Mantené el acceso del plan actual. |
| Un cambio distinto lo reemplaza | subscription.plan_change_revoked + subscription.plan_change_scheduled | Actualizá el aviso al nuevo plan objetivo. |
| Termina el período de facturación | subscription.plan_changed | Aplicá los permisos del nuevo plan. |
Los upgrades inmediatos se saltan este evento por completo: disparan subscription.plan_changed de inmediato.
¿Cómo está esta guía?