• Precios
  • Blog
Iniciar sesiónAgendá una demo
Introducción

Eventos de Suscripción

subscription.createdsubscription.activatedsubscription.reactivatedsubscription.canceledsubscription.updatedsubscription.plan_changedsubscription.cancellation_scheduledsubscription.cancellation_revokedsubscription.plan_change_scheduledsubscription.plan_change_revokedsubscription.past_due

Eventos de Prueba

trial.startedtrial.convertedtrial.expiredtrial.will_endtrial.checkout_ready

Eventos de Checkout

checkout.ready

Eventos de Pago

payment.receivedpayment.failedpayment.recoveredpayment.retry_failedpayment.refundedpayment.disputedpayment.dispute_resolved

Eventos de Link de Pago

payment_link.createdpayment_link.completedpayment_link.failedpayment_link.canceled

Eventos de Recibo

invoice.createdinvoice.upcominginvoice.overdueinvoice.voided

Eventos de Método de Pago

payment_method.attachedpayment_method.updated

Eventos de Cliente

customer.createdcustomer.updatedcustomer.state_changed

Eventos de Créditos y Saldo

credits.grantedcredits.purchasedcredits.lowcredits.depletedcredits.expiredbalance.topped_upbalance.lowbalance.depleted

Eventos de Cuota y Uso

quota.threshold_reachedquota.exceededusage.recorded

Eventos de Asientos

seats.updatedseats.limit_reached

Eventos de Complementos

addon.activatedaddon.deactivated

Eventos de Payout

payout.availablepayout.createdpayout.paidpayout.failed
DocumentaciónRecursosConstruir con AIAPI ReferenceWebhooks

subscription.canceled

Se dispara cuando una suscripción termina, al final del período o de inmediato. Revoca el acceso acá.

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.

canceledAtstringoptional

ISO 8601 datetime when the cancellation was requested or triggered.

cancelReasonstring | null

The reason for cancellation, if provided. Set by Commet on system-initiated terminations: "refund" (full refund of a subscription invoice) or "dunning_exhausted" (all payment retries failed).

endDatestringoptional

ISO 8601 datetime when the subscription ended. Matches the billing period end for scheduled cancellations; for immediate terminations it is the moment of termination.

{
  "event": "subscription.canceled",
  "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": "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

Una cancelación regular se agenda para el final del período de cobro actual. Se disparan dos eventos en momentos distintos:

MomentoEventostatusQué hacer
El cliente solicita la cancelaciónsubscription.updatedactiveMuestra "termina el {endDate}" en tu UI. NO revoques el acceso.
Termina el período de cobrosubscription.canceledcanceledRevoca 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")

Terminaciones inmediatas

Algunas terminaciones se saltan la agenda: subscription.canceled llega de inmediato, sin un subscription.updated previo, y endDate es el momento de la terminación — no un límite del período de cobro.

  • POST /subscriptions/{id}/cancel con immediate: true. Las cancelaciones de planes gratuitos y de suscripciones en pending_payment o past_due también se resuelven de inmediato — cancelar dentro de la ventana de gracia de dunning anula la renovación impaga.
  • Un reembolso total de un recibo de suscripción: se dispara con cancelReason: "refund", junto con payment.refunded.
  • Reintentos de dunning agotados: se dispara con cancelReason: "dunning_exhausted", junto con payment.retry_failed.

¿Cómo está esta guía?

subscription.reactivated

Se emite cuando una suscripción cancelada se reactiva y su cobro de reactivación tiene éxito.

subscription.updated

Se dispara cuando cambian los detalles de la suscripción, incluyendo cuando se agenda una cancelación.