Concesión de Derechos
La carga útil enviada a su endpoint de webhook cuando se crea, entrega, falla o revoca una concesión de derechos.
Documentation Index
Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
Eventos de Webhook para Concesión de Derechos
Estos eventos se activan cada vez que cambia el estado de la concesión de derechos de un cliente, por ejemplo, cuando se genera una clave de licencia, se asigna un rol de Discord, se proporciona un enlace de descarga, o se revoca el acceso. Suscríbase a estos eventos para mantener su aplicación sincronizada con lo que cada cliente puede acceder.| Evento | Descripción |
|---|---|
entitlement_grant.created | Se creó una nueva fila de concesión. El estado es delivered inmediatamente para claves de licencia, e pending para todas las demás integraciones. |
entitlement_grant.delivered | La concesión pasa a estar entregada. El cliente ahora tiene acceso a la plataforma, archivo o clave de licencia atribuidos. |
entitlement_grant.failed | La entrega falló y no se está reintentando. Inspeccione error_code y error_message. |
entitlement_grant.revoked | Se retiró el acceso. Inspeccione revocation_reason para entender por qué. |
EntitlementGrantResponse documentada en el esquema a continuación.
Desencadenantes de Eventos
entitlement_grant.created
Se acaba de insertar una fila de concesión. La concesión siempre tiene unid estable desde este punto en adelante, incluso si su estado cambia. Use este evento para registrar que el cumplimiento está en progreso.
Para claves de licencia la fila se inserta directamente con status: "delivered" y delivered_at poblados, de modo que un solo evento created es seguido por ningún cambio de estado adicional, a menos que la concesión sea revocada más tarde.
Para todas las demás integraciones la fila llega con status: "pending". Un evento delivered o failed sigue una vez finalizada la entrega:
- Integraciones basadas en OAuth (Discord, GitHub, Notion) incluyen un
oauth_urlque el cliente debe visitar para completar el consentimiento. La concesión permanecependinghasta que el cliente autorice. - Integraciones directas de plataforma (Telegram, Framer, Archivos Digitales) permanecen
pendingsolo brevemente mientras se ejecuta la llamada de plataforma, luego pasan adelivered.
entitlement_grant.delivered
La concesión pasó depending a delivered. El cliente ahora tiene el acceso descrito por el derecho. Use este evento para desbloquear funciones dependientes en sus propios sistemas, por ejemplo, para proporcionar un espacio de trabajo, enviar un correo electrónico de bienvenida personalizado o marcar una bandera de “cumplido”.
El campo delivered_at de la carga útil captura cuándo se completó la entrega. Para las concesiones que llegaron delivered al momento de la creación, recibirá eventos created e delivered de manera consecutiva.
entitlement_grant.failed
Se intentó la entrega y falló con un error no recuperable. Los camposerror_code e error_message explican la falla. Las causas comunes incluyen un token OAuth revocado, un permiso de plataforma denegado, o un destino faltante (por ejemplo, una guild de Discord eliminada).
entitlement_grant.revoked
Se retiró el acceso a nivel de plataforma: se eliminó el rol de Discord, se eliminó el colaborador de GitHub, se desactivó la clave de licencia, las URL de descarga de archivos ya no se emiten. El camporevocation_reason registra el desencadenante.
revocation_reason | Desencadenante |
|---|---|
subscription_cancelled | Se canceló la suscripción del cliente (evento subscription.cancelled). |
subscription_on_hold | La suscripción está en espera debido a la falla en la renovación (subscription.on_hold). Recuperable: un reintento exitoso produce una nueva concesión. |
subscription_expired | La suscripción alcanzó el final de su término (subscription.expired). |
plan_changed | El plan cambió; las concesiones antiguas se revocan antes de emitir nuevas (subscription.plan_changed). |
refund | Se procesó un reembolso para el pago único original (refund.succeeded). |
manual | Un comerciante revocó la concesión a través de la API o el panel de control. Las revocaciones manuales no se otorgan nuevamente automáticamente en la renovación de la suscripción. |
license_key_disabled | La clave de licencia detrás de una concesión de clave de licencia fue deshabilitada. La concesión se re-activa automáticamente si la clave es re-habilitada. |
platform_external | El lado de la plataforma de una integración se desincronizó (por ejemplo, se eliminó un rol de Discord manualmente, la App de GitHub perdió acceso al repositorio, o un pase de reconciliación detectó un objetivo faltante). La concesión no se otorga automáticamente en la renovación de la suscripción hasta que se solucione el problema subyacente de la plataforma. |
Variantes de Carga Útil
El campodata siempre es un objeto EntitlementGrantResponse. Dos tipos de integraciones incluyen objetos anidados adicionales:
license_keyse incluye cuando el tipo de integración de derechos eslicense_key. Contiene la clave generada, la expiración y el uso de activación.digital_product_deliveryse incluye cuando el tipo de integración esdigital_files. Contiene URLs de descarga prefirmadas, el opcionalinstructions, y el opcionalexternal_url.
null; la configuración relevante se captura en el propio derecho, no en la concesión.
Ejemplos de Carga Útil
Clave de licencia entregada (entitlement_grant.delivered)
Archivos digitales entregados (entitlement_grant.delivered)
Rol de Discord creado y pendiente (entitlement_grant.created)
Concesión revocada por cancelación de suscripción (entitlement_grant.revoked)
Entrega fallida (entitlement_grant.failed)
Consejos de Integración
- Espere
entitlement_grant.deliveredantes de desbloquear funciones dependientes. Un eventopayment.succeededle indica que el dinero se transfirió; no le indica que el cliente ya tiene el repositorio de GitHub o el rol de Discord. El eventodeliveredes la fuente de verdad para el cumplimiento. - Mapee
revocation_reasona flujos de retención. Una revocaciónsubscription_on_holdgeneralmente significa que la tarjeta del cliente falló y la próxima renovación re-otorgará el acceso. Una revocaciónmanualosubscription_cancelledes intencional. Trátelos de manera diferente en la mensajería al cliente. - Utilice la concesión
idcomo su clave de idempotencia. Una sola concesión emite como máximo un eventocreatedy como máximo un evento terminal (deliveredofailed), y como máximo un eventorevoked. Las re-entregas del sistema de webhook pueden repetir eventos; dedupe en la concesiónidmástype. - Inspeccione
license_keyedigital_product_deliverypara reconocer el tipo de integración. La carga útil de la concesión en sí no lleva el tipo de integración, pero exactamente uno de estos objetos anidados se completa para derechos de clave de licencia y archivos digitales. - Para concesiones basadas en OAuth, haga visible
oauth_urlal cliente. El eventoentitlement_grant.createdpara flujos de suscripción de Discord, GitHub, o Notion incluye unoauth_urleoauth_expires_at. Envíelo por correo electrónico al cliente o muéstrelo en su aplicación para desbloquear la entrega.
Detailed view of a single entitlement grant: who it's for, its lifecycle state, and any integration-specific delivery payload.
Identifier of the business that owns the grant.
Timestamp when the grant was created.
Identifier of the customer the grant was issued to.
Identifier of the entitlement this grant was issued from.
Unique identifier of the grant.
Arbitrary key-value metadata recorded on the grant.
Lifecycle status of the grant.
Pending, Delivered, Failed, Revoked Timestamp when the grant was last modified.
Timestamp when the grant transitioned to delivered, when applicable.
Digital-product-delivery payload, present when the entitlement
integration is digital_files.
Machine-readable code reported when delivery failed, when applicable.
Human-readable message reported when delivery failed, when applicable.
License-key delivery payload, present when the entitlement integration
is license_key.
Timestamp when oauth_url stops being valid, when applicable.
Customer-facing OAuth URL for OAuth-style integrations. Populated
during the customer-portal accept flow; null until the customer
completes that step, and on grants for non-OAuth integrations.
Identifier of the payment that triggered this grant, when applicable.
Reason recorded when the grant was revoked, when applicable.
Timestamp when the grant transitioned to revoked, when applicable.
Identifier of the subscription that triggered this grant, when applicable.