Entregue automáticamente claves de licencia, archivos descargables, feature flags y acceso a plataformas como Discord, GitHub, Telegram, Framer y Notion cuando los clientes paguen.
Las autorizaciones convierten un pago exitoso o una suscripción activa en acceso real: una clave de licencia en la bandeja de entrada de tu cliente, un feature flag que tu aplicación verifica, un rol en Discord, un repositorio de GitHub, una plantilla de Notion, un enlace de remix de Framer, una invitación al chat de Telegram o un paquete de archivos descargables. Dodo Payments emite, rastrea y revoca ese acceso automáticamente a medida que el ciclo de vida del pago cambia.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Un entitlement es una definición reutilizable de algo que entregas a un cliente: una clave de licencia Pro, un rol de Discord de “Patrons”, acceso a tu repositorio privado en GitHub, un paquete de libros electrónicos descargables. Adjuntas entitlements a productos, y Dodo Payments se encarga del resto.Cuando un cliente compra el producto, Dodo Payments crea un grant, la emisión de ese entitlement para un solo cliente. Los grants pasan por un pequeño conjunto de estados: Pending mientras la entrega está en curso, Delivered cuando el cliente obtiene acceso, Failed si la entrega no se puede completar y Revoked cuando se retira el acceso.
Las Entitlements regulan el cumplimiento (¿tiene acceso el cliente?). Los créditos regulan el consumo (¿cuánto pueden usar?). Ambos se pueden adjuntar al mismo producto. Ver Facturación Basada en Créditos para créditos.
Las autorizaciones son impulsadas por los mismos eventos de pago y suscripción que ya recibes como webhooks. No necesitas llamar a la API de autorización para las compras. Dodo Payments crea y revoca autorizaciones automáticamente basándose en el ciclo de vida de pago subyacente.
Se crea una concesión cuando se completa un pago o una suscripción pasa a estar activa. Los indicadores de funcionalidades pasan directamente a Delivered. Las claves de licencia también pasan directamente a Delivered cuando el derecho usa fulfillment_mode: auto (el valor predeterminado); con fulfillment_mode: manual, la concesión se crea en Pending sin clave hasta que proporciones una mediante Completar concesión de clave de licencia. Todas las demás integraciones comienzan en Pending. Las integraciones basadas en OAuth (Discord, GitHub, Notion) exponen un oauth_url que el cliente debe visitar para completar el consentimiento; el campo es null en una concesión recién creada y se completa una vez que el cliente inicia el flujo de aceptación desde su correo electrónico de entrega o el Customer Portal. Las integraciones directas de la plataforma (Telegram, Framer, Digital Files) permanecen en Pending solo brevemente mientras se aprovisiona la entrega y, después, pasan a Delivered.
2
Delivered
Cuando se completa la entrega (se genera la license key, se asigna el rol, se concede acceso al repositorio, se resuelven los enlaces de archivos o se completa OAuth), el grant pasa a Delivered y se establece delivered_at.
3
Failed
Si la llamada de integración devuelve un error que no se puede reintentar (token de OAuth revocado, permiso denegado o archivo que ya no existe), el grant pasa a Failed. Los campos error_code y error_message registran el motivo.
4
Revoked
Cuando se retira el acceso (se cancela la suscripción, se emite un reembolso o el merchant inicia la revocación), el grant pasa a Revoked. El campo revocation_reason registra el desencadenante.
payment.succeeded (pago vinculado a una suscripción)
No hacer nada. Las concesiones se generan mediante el evento de suscripción que aparece a continuación.
subscription.active
Emitir concesiones para cualquier derecho adjunto que aún no tenga una. Volver a conceder cualquier concesión revocada anteriormente para la misma suscripción.
subscription.renewed
No hacer nada. Las concesiones existentes persisten durante las renovaciones.
subscription.on_hold
Revocar todas las concesiones entregadas y pendientes. revocation_reason: subscription_on_hold.
subscription.paused
Revocar todas las concesiones entregadas y pendientes. revocation_reason: SubscriptionPaused.
subscription.unpaused
Volver a conceder cualquier concesión revocada anteriormente para la misma suscripción, exactamente como lo hace subscription.active.
Revocar todas las concesiones actuales y, después, emitir concesiones para los derechos del nuevo plan. revocation_reason: plan_changed.
refund.succeeded (pago único)
Revocar las concesiones de ese pago. revocation_reason: refund.
Revocación manual mediante API
Revocar con revocation_reason: manual. Las revocaciones manuales no se vuelven a conceder automáticamente durante la renovación de la suscripción.
Clave de licencia deshabilitada
Para las concesiones de claves de licencia, deshabilitar la clave subyacente revoca la concesión con revocation_reason: license_key_disabled. La concesión se reactiva automáticamente si se vuelve a habilitar la clave.
Deriva de la plataforma detectada
Si el lado de la plataforma de una integración deja de estar sincronizado (por ejemplo, si se elimina manualmente un rol de Discord, la aplicación de GitHub pierde el acceso al repositorio o una pasada de reconciliación detecta un destino ausente), la concesión se revoca con revocation_reason: platform_external. No se vuelve a conceder automáticamente durante la renovación de la suscripción hasta que se resuelva el problema subyacente de la plataforma.
Las autorizaciones impulsadas por suscripción son idempotentes por (entitlement, customer, subscription); las renovaciones y reactivaciones no crean autorizaciones duplicadas. Las autorizaciones de una sola vez son idempotentes por (entitlement, customer, payment).
Dirígete a Entitlements en tu panel de Dodo Payments y haz clic en + para crear un nuevo derecho.
2
Pick an integration
Elige el tipo de integración: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer o Notion. Para las integraciones de plataformas, conecta primero tu cuenta si aún no lo has hecho.
3
Configure delivery
Completa los campos específicos de la integración. Por ejemplo, GitHub pide un repositorio y un nivel de permiso; Discord pide un servidor y un rol opcional; Clave de Licencia pide límites de activación y caducidad.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Guarda el derecho. Ahora puedes adjuntarlo a cualquier producto.
Abre un producto, expande Configuración Avanzada → Derechos y Créditos, y selecciona los derechos que se deben entregar cuando se compra el producto. Un solo producto puede entregar múltiples derechos a la vez. Por ejemplo, un plan Pro puede incluir una clave de licencia, acceso a GitHub y un rol de Discord.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
Los clientes reciben un correo de entrega después de la compra que contiene la clave de licencia, enlaces de descarga, enlaces de invitación OAuth o invitación de plataforma, lo que aplique a los derechos en el producto. Los mismos detalles permanecen disponibles indefinidamente en el Portal del Cliente bajo su historial de pedidos.
El acceso de suscriptores de Discord, GitHub y Notion requiere que el cliente autorice a Dodo Payments a concederle acceso. Estos grants permanecen en el estado Pending hasta que el cliente completa el flujo de OAuth mediante el enlace de su correo electrónico o del portal del cliente. Una vez que autoriza, el grant pasa a Delivered y el acceso a la plataforma se aprovisiona de inmediato.
Las autorizaciones revocadas se eliminan a nivel de plataforma: se elimina el rol de Discord, se elimina el colaborador de GitHub, se desactiva la clave de licencia. Los clientes ven el cambio reflejado en el portal del cliente.
Para Archivos Digitales, la revocación elimina el acceso a las URL pre-firmadas en adelante pero no invalida las copias que un cliente ya ha descargado. Planifica el contenido del plan en consecuencia.
Abre cualquier derecho desde el panel para ver sus autorizaciones. El panel de detalle de autorización muestra autorizaciones totales, filtros de estado, información del cliente, fechas de entrega y una acción de revocación.También puedes gestionar autorizaciones de forma programática:
import DodoPayments from 'dodopayments';const client = new DodoPayments({ bearerToken: process.env['DODO_PAYMENTS_API_KEY'],});// List grants for an entitlementconst grants = await client.entitlements.grants.list('ent_abc123', { status: 'Delivered',});// Revoke a single grantawait client.entitlements.grants.revoke('entg_xyz789', { id: 'ent_abc123',});
Dodo Payments dispara cuatro eventos de webhook para el ciclo de vida de la autorización. Suscríbete a estos eventos para mantener tu aplicación sincronizada con lo que cada cliente puede acceder.
Evento
Se activa cuando
entitlement_grant.created
Se crea un grant nuevo. Los grants de license key llegan a Delivered con el fulfillment auto y a Pending con el fulfillment manual; todas las demás integraciones llegan a Pending y pasan a Delivered cuando la llamada a la plataforma se completa correctamente (o, en el caso de las integraciones basadas en OAuth, cuando el cliente autoriza).
entitlement_grant.delivered
El grant pasa al estado delivered. El cliente ya tiene acceso.
entitlement_grant.failed
No se pudo entregar el grant. Revisa error_code y error_message.
entitlement_grant.revoked
Se retiró el acceso. Revisa revocation_reason.
Entitlement Grant Webhook Payloads
Visualiza el esquema completo de carga útil, eventos de muestra y referencia revocation_reason.
Usa un derecho por canal de entrega. No compartas un único derecho de Discord entre productos con distintas intenciones de rol; crea uno por rol para facilitar la revocación.
Prueba primero en modo de prueba. Crea el derecho, adjúntalo a un producto de prueba, ejecuta un checkout y observa cómo la concesión pasa por Pending → Delivered. Confirma que cancelar la suscripción de prueba revoque la concesión.
Escucha entitlement_grant.delivered, no payment.succeeded. Un pago puede completarse antes de que finalice la entrega (especialmente en los flujos de OAuth). Espera al evento de entrega antes de desbloquear funcionalidades dependientes en tus propios sistemas.
Trata entitlement_grant.failed como una acción necesaria. Una concesión fallida significa que un cliente pagó, pero no obtuvo acceso. Comunícalo a tu equipo de soporte o activa una nueva concesión.
Asocia revocation_reason a tus flujos de retención. Una revocación de subscription_on_hold es recuperable (el cliente puede actualizar su tarjeta). Una revocación de manual es intencional. Trátalas de forma diferente en las comunicaciones con los clientes.