> ## Documentation Index
> Fetch the complete documentation index at: https://commet.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# customer.state_changed

> Evento agregado de permisos: a qué puede acceder este cliente en este momento.

## Un solo evento para sincronizar el acceso

En lugar de gestionar cada evento del ciclo de vida (`subscription.activated`, `subscription.canceled`, `trial.expired`, ...) para mantener tus flags de acceso sincronizados, gestioná este único evento. Cada transición de permisos lo dispara con el estado **actual** del cliente, calculado en el momento de la entrega:

| trigger | Cuándo |
| - | - |
| `subscription_created` | Se creó una suscripción (estado `pending_payment`: todavía sin acceso). |
| `subscription_activated` | Un pago confirmó la suscripción. |
| `trial_started` | Comenzó una prueba. |
| `trial_converted` | Un cliente en prueba se convirtió a pago mediante un cambio de plan. |
| `trial_expired` | Una prueba se agotó y comenzó la facturación regular. |
| `plan_change` | Se ejecutó un cambio de plan (inmediato o programado). |
| `cancellation_scheduled` | Se programó una cancelación: el acceso continúa hasta el fin del período. |
| `cancellation_revoked` | Se revirtió una cancelación programada. |
| `subscription_canceled` | La suscripción terminó: `status` pasa a `none`. |
| `past_due` | Un pago recurrente falló: empieza una ventana de gracia — el uso y los asientos siguen funcionando, las compras nuevas se bloquean. |
| `seats_updated` | El conteo de asientos del cliente cambió. |
| `addon_activated` | Se activó un complemento en la suscripción. |
| `addon_deactivated` | Se desactivó un complemento de la suscripción. |
| `credits_depleted` | La suscripción se quedó sin créditos. |
| `balance_depleted` | La suscripción se quedó sin saldo prepago. |
| `quota_exceeded` | El uso superó la cantidad incluida de una función. |
| `plan_access_granted` | Un Plan Grant amplió temporalmente el acceso del customer sin cambiar la facturación de la suscripción. |
| `plan_access_ended` | Un Plan Grant venció o fue revocado; el payload contiene el estado actual resultante. |

## Cómo manejar el payload

Usá `status` como la barrera de acceso (`trialing` y `active` otorgan acceso), `features` para los límites por feature, y `credits`/`balance` para el margen de consumo en planes de créditos/balance. El payload refleja el estado en el momento de la entrega: si dos transiciones ocurren una tras otra, el evento posterior siempre lleva el estado final, así que procesar los eventos en orden de `timestamp` converge al resultado correcto.

Consultá [Plan Grants](/docs/es/plan-grants) para ver el ciclo de acceso temporal.


## OpenAPI

````yaml /openapi/es/webhooks/2026-08-27.json webhook customer.state_changed
openapi: 3.1.0
info:
  title: Commet Webhooks
  version: '2026-08-27'
  description: >-
    Outbound webhook events emitted by the Commet API. Each event is delivered
    as a signed POST to your configured endpoints.
servers: []
security: []
paths: {}

````

## Related topics

- [plan_grant.created](/docs/es/webhooks/plan-grant-created.md)
- [plan_grant.revoked](/docs/es/webhooks/plan-grant-revoked.md)
- [Otorgar Acceso Temporal a un Plan](/docs/es/plan-grants.md)
- [plan_grant.expired](/docs/es/webhooks/plan-grant-expired.md)
- [addon.deactivated](/docs/es/webhooks/addon-deactivated.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.