Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.
Los entitlements convierten un pago completado o una suscripción activa en acceso: una clave de licencia en la bandeja de entrada de tu cliente, un feature flag que comprueba tu aplicación, un rol de Discord, un repositorio de GitHub, una plantilla de Notion, un enlace de remix de Framer, una invitación a un chat de Telegram o un paquete de archivos descargables. Dodo Payments emite, realiza el seguimiento y revoca ese acceso automáticamente a medida que cambia el ciclo de vida del pago.
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, como una clave de licencia Pro, un rol de Discord llamado “Patrons”, acceso a tu repositorio privado de GitHub o un paquete de libros electrónicos descargables. Asocias entitlements a los productos y Dodo Payments los entrega cuando un cliente paga.Cuando un cliente compra el producto, Dodo Payments crea un grant: la emisión de ese entitlement para un cliente. Un grant tiene uno de cuatro estados: Pending mientras la entrega está en curso, Delivered cuando el cliente obtiene acceso, Failed si la entrega no pudo completarse y Revoked cuando se retira el acceso.
Los entitlements controlan el fulfillment (¿el cliente tiene acceso?). Los créditos controlan el consumo (¿cuánto puede usar?). Puedes asociar ambos al mismo producto. Consulta Facturación basada en créditos para obtener información sobre los créditos.
Los grants siguen los mismos eventos de pago y suscripción que recibes como webhooks. Dodo Payments crea y revoca grants automáticamente para las compras, según el ciclo de vida del pago, por lo que no tienes que llamar a la grant API.
Dodo Payments crea un grant cuando se completa un pago o una suscripción pasa a estar activa. Los grants de feature flags comienzan como Delivered. Los grants de claves de licencia también comienzan como Delivered cuando el entitlement usa fulfillment_mode: auto (el valor predeterminado). Con fulfillment_mode: manual, el grant comienza como Pending sin clave hasta que proporciones una mediante Completar grant de clave de licencia. Todas las demás integraciones comienzan como Pending.Las integraciones basadas en OAuth (Discord, GitHub y Notion) exponen un oauth_url que el cliente visita para dar su consentimiento. Dodo Payments intenta generar esta URL al crear el grant. Si falla, el campo permanece como null hasta 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 y Digital Files) permanecen como Pending solo mientras se aprovisiona la entrega; después pasan a Delivered.
2
Delivered
Cuando se completa la entrega, el grant pasa a Delivered y se establece delivered_at. La entrega se completa cuando se genera la clave de licencia, se asigna el rol, se concede el acceso al repositorio, se resuelven los enlaces de archivos o finaliza el flujo de OAuth.
3
Failed
Si la llamada de integración devuelve un error no reintentable, como un token de OAuth revocado, un permiso denegado o un 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, por ejemplo porque se cancela una suscripción, se emite un reembolso o revocas el grant, el grant pasa a Revoked. El campo revocation_reason registra el desencadenante.
Cada evento de pago y suscripción modifica los grants de la siguiente manera:
Evento
Comportamiento
payment.succeeded (pago único)
Emite un grant por cada entitlement asociado. Un entitlement de License Key emite un grant por cada clave.
payment.succeeded (pago asociado a una suscripción)
Sin cambios. Los eventos de suscripción siguientes controlan estos grants.
subscription.active
Emite grants para los entitlements asociados que aún no tengan uno y vuelve a emitir los grants revocados anteriormente para la misma suscripción. Los grants revocados con manual, refund o platform_external no vuelven a emitirse.
subscription.renewed
Sin cambios. Los grants existentes persisten durante las renovaciones.
subscription.past_due
Sin cambios. Los grants permanecen entregados durante todo el periodo de gracia.
subscription.on_hold
Revoca todos los grants entregados y pendientes con revocation_reason: subscription_on_hold.
subscription.paused
Revoca todos los grants entregados y pendientes con revocation_reason: SubscriptionPaused. A diferencia de los demás motivos de suscripción, este valor usa PascalCase, así que debes coincidir exactamente con él.
subscription.unpaused
Vuelve a emitir los grants revocados anteriormente para la misma suscripción, igual que subscription.active.
subscription.cancelled
Revoca todos los grants con revocation_reason: subscription_cancelled.
subscription.expired
Revoca todos los grants con revocation_reason: subscription_expired.
subscription.plan_changed
Revoca todos los grants actuales con revocation_reason: plan_changed y después emite grants para los entitlements del nuevo plan.
refund.succeeded (pago único)
Revoca los grants de ese pago con revocation_reason: refund.
Revocación manual mediante la API
Revoca el grant con revocation_reason: manual. Las revocaciones manuales no vuelven a emitirse automáticamente durante la renovación de una suscripción.
Clave de licencia desactivada
Para los grants de claves de licencia, desactivar la clave subyacente revoca el grant con revocation_reason: license_key_disabled. Al volver a activar la clave, el grant se restaura automáticamente.
Deriva de la plataforma detectada
Si el lado de la plataforma de una integración deja de estar sincronizado, por ejemplo, porque se eliminó manualmente un rol de Discord, la GitHub App perdió el acceso al repositorio o una ejecución de conciliación detectó que falta el destino, Dodo Payments revoca el grant con revocation_reason: platform_external. No vuelve a emitirse automáticamente durante la renovación de la suscripción hasta que se resuelva el problema de la plataforma.
Los grants controlados por suscripciones son idempotentes por (entitlement, customer, subscription), por lo que las renovaciones y reactivaciones no crean grants duplicados. Los grants de pago único son idempotentes por (entitlement, customer, payment).
Ve a Entitlements en el dashboard y haz clic en + para crear un entitlement.
2
Pick an Integration
Elige el tipo de integración: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer o Notion. Para una integración de plataforma, conecta primero tu cuenta si aún no lo has hecho.
3
Configure Delivery
Completa los campos de la integración. Por ejemplo, GitHub solicita un repositorio y un nivel de permisos; Discord solicita un servidor y un rol opcional; y License Key solicita un límite de activaciones y una duración de la licencia.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Haz clic en Create Entitlement. Ahora puedes asociar el entitlement a cualquier producto.
Abre un producto, ve a su sección Entitlements y selecciona los entitlements que se entregarán cuando se compre el producto. Un producto puede entregar varios entitlements 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.
Después de una compra, el cliente recibe un correo electrónico de entrega con la clave de licencia, los enlaces de descarga, los enlaces de invitación de OAuth o la invitación de plataforma correspondiente a los entitlements del producto. Los mismos detalles siguen disponibles en el Customer Portal, dentro del historial de pedidos, mientras el grant esté activo.
El acceso de suscriptores a Discord, GitHub y Notion requiere que el cliente autorice a Dodo Payments a conceder dicho acceso. Estos grants permanecen como Pending hasta que el cliente completa el flujo de OAuth desde el enlace de su correo electrónico o el Customer Portal. Después de que el cliente autoriza, el grant pasa a Delivered y Dodo Payments aprovisiona el acceso a la plataforma.
Cuando se revoca un grant, Dodo Payments elimina el acceso en la plataforma: elimina el rol de Discord, elimina al colaborador de GitHub o desactiva la clave de licencia. El cliente ve el cambio en el Customer Portal.
Para Digital Files, la revocación detiene las nuevas URL de descarga presigned, pero no invalida las copias que el cliente ya haya descargado. Tenlo en cuenta al planificar el control de acceso a tu contenido.
Abre cualquier entitlement desde el dashboard para ver sus grants. El panel de detalles muestra el total concedido, un filtro de estado y una fila por grant con el cliente, la fecha de acceso, el estado y una acción Revoke.Para gestionar grants mediante programación, enuméralos con el filtro status y revoca un único grant por ID:
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 envía cuatro eventos de webhook para el ciclo de vida del grant. Suscríbete a ellos para mantener tu aplicación sincronizada con lo que cada cliente puede usar.
Evento
Se activa cuando
entitlement_grant.created
Se crea un grant. Los grants de claves de licencia completados automáticamente y los grants de feature flags llegan como Delivered. Los grants de claves de licencia completados manualmente y todas las demás integraciones llegan como Pending y pasan a Delivered cuando la llamada de la plataforma se completa correctamente o, en el caso de las integraciones basadas en OAuth, cuando el cliente autoriza.
entitlement_grant.delivered
Un grant existente pasa a Delivered, por lo que el cliente obtiene acceso. Un grant que está en Delivered al crearse solo activa created.
entitlement_grant.failed
No se pudo entregar el grant. Comprueba error_code y error_message.
entitlement_grant.revoked
Se ha retirado el acceso. Comprueba revocation_reason.
Entitlement Grant Webhook Payloads
Consulta el esquema completo del payload, eventos de ejemplo y la referencia de revocation_reason.
Usa un entitlement por canal de entrega. No compartas un entitlement de Discord entre productos con distintas funciones de rol. Crea un entitlement por rol para que la revocación sea clara.
Prueba primero en modo de prueba. Crea el entitlement, asígnalo a un producto de prueba, realiza un checkout y observa cómo el grant pasa de Pending a Delivered. Después, cancela la suscripción de prueba y confirma que el grant se revoca.
Escucha entitlement_grant.delivered, no payment.succeeded. Un pago puede completarse antes de que finalice el fulfillment, especialmente en los flujos de OAuth. Espera a que el grant alcance Delivered antes de desbloquear funciones dependientes en tus propios sistemas. Un grant que se entrega al crearse, como una clave de licencia completada automáticamente o un feature flag, llega como entitlement_grant.created con status: "Delivered".
Trata entitlement_grant.failed como una acción necesaria. Un grant fallido significa que un cliente pagó pero no obtuvo acceso. Muestra estos grants a tu equipo de soporte o activa una nueva emisión.
Asocia revocation_reason a tus flujos de retención. Una revocación subscription_on_hold se puede recuperar porque el cliente podría actualizar su tarjeta. Una revocación manual es intencionada. Trátalas de forma distinta en los mensajes a los clientes.
No revoques el acceso en subscription.past_due. Ese evento abre un periodo de gracia y el cliente conserva el acceso hasta que finaliza la ventana. Espera a subscription.on_hold o subscription.cancelled.
Última modificación el 26 de septiembre de 2026
¿Esta página le ayudó?
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Dodo Payments Documentation","description":"Documentation for Dodo Payments — the all-in-one payments, billing, and merchant of record platform for SaaS, AI, and digital products.","colors":{"primary":"#779812","light":"#C6FE1E","dark":"#166534"},"logo":{"light":"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/light.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=23f7a052f7ecb9d6570b7c95ee359a97","dark":"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/dark.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=cd6c20238a54526436f21c43fee51b26"},"favicon":"https://mintcdn.com/dodopayments/doYQc9oUE-WNz0cs/favicon.svg?fit=max\u0026auto=format\u0026n=doYQc9oUE-WNz0cs\u0026q=85\u0026s=271c6cc8ce7d6bf4d7f2b9cca029e004","background":{"color":{"light":"#FFFFFF","dark":"#0D0D0D"}},"navbar":{"links":[{"icon":"link","href":"https://docs.dodopayments.com/llms-full.txt","label":"llms-full.txt"},{"icon":"discord","href":"https://discord.gg/bYqAp4ayYh","label":"Community"},{"icon":"house","href":"https://app.dodopayments.com/","label":"Dashboard"}]},"footer":{"socials":{"x":"https://x.com/dodopayments","linkedin":"https://linkedin.com/company/dodopayments","website":"https://dodopayments.com","discord":"https://discord.gg/bYqAp4ayYh","github":"https://github.com/dodopayments","instagram":"https://www.instagram.com/dodo.payments","facebook":"https://www.facebook.com/profile.php?id=61565515607280"}},"seo":{"metatags":{"og:site_name":"Dodo Payments Documentation","twitter:card":"summary_large_image"},"indexing":"navigable"},"fonts":{"heading":{"family":"ApfelGrotezk","weight":400,"source":"fonts/ApfelGrotezk-Regular.woff2","format":"woff2"},"body":{"family":"Inter","weight":400,"source":"fonts/Inter-Variable.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","cursor"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":"introduction"},{"language":"es","href":"es/introduction"},{"language":"ar","href":"ar/introduction"},{"language":"fr","href":"fr/introduction"},{"language":"de","href":"de/introduction"},{"language":"id","href":"id/introduction"},{"language":"ja","href":"ja/introduction"},{"language":"ko","href":"ko/introduction"},{"language":"pt-BR","href":"pt-BR/introduction"},{"language":"vi","href":"vi/introduction"},{"language":"cn","href":"cn/introduction"},{"language":"hi","href":"hi/introduction"},{"language":"it","href":"it/introduction"},{"language":"sv","href":"sv/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dodopayments","hasAudioNarration":false,"actualSubdomain":"dodopayments","customDomains":["docs.dodopayments.com"],"gitSource":{"type":"github","owner":"dodopayments","repo":"dodo-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af4027c778b6a49d3c24d62","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"en","tag":"API Reference","count":181},{"language":"en","tag":"Docs","count":176},{"language":"ar","tag":"Docs","count":153},{"language":"cn","tag":"Docs","count":153},{"language":"de","tag":"Docs","count":153},{"language":"es","tag":"Docs","count":153},{"language":"fr","tag":"Docs","count":153},{"language":"hi","tag":"Docs","count":153},{"language":"id","tag":"Docs","count":153},{"language":"it","tag":"Docs","count":153},{"language":"ja","tag":"Docs","count":153},{"language":"ko","tag":"Docs","count":153},{"language":"pt-BR","tag":"Docs","count":153},{"language":"sv","tag":"Docs","count":153},{"language":"vi","tag":"Docs","count":153},{"language":"ar","tag":"API Reference","count":151},{"language":"cn","tag":"API Reference","count":151},{"language":"de","tag":"API Reference","count":151},{"language":"es","tag":"API Reference","count":151},{"language":"fr","tag":"API Reference","count":151},{"language":"hi","tag":"API Reference","count":151},{"language":"id","tag":"API Reference","count":151},{"language":"it","tag":"API Reference","count":151},{"language":"ja","tag":"API Reference","count":151},{"language":"ko","tag":"API Reference","count":151},{"language":"pt-BR","tag":"API Reference","count":151},{"language":"sv","tag":"API Reference","count":151},{"language":"vi","tag":"API Reference","count":151},{"language":"en","tag":"Features","count":86},{"language":"ar","tag":"Features","count":81},{"language":"cn","tag":"Features","count":81},{"language":"de","tag":"Features","count":81},{"language":"es","tag":"Features","count":81},{"language":"fr","tag":"Features","count":81},{"language":"hi","tag":"Features","count":81},{"language":"id","tag":"Features","count":81},{"language":"it","tag":"Features","count":81},{"language":"ja","tag":"Features","count":81},{"language":"ko","tag":"Features","count":81},{"language":"pt-BR","tag":"Features","count":81},{"language":"sv","tag":"Features","count":81},{"language":"vi","tag":"Features","count":81},{"language":"en","tag":"Integrate","count":74},{"language":"en","tag":"Changelog","count":66},{"language":"ar","tag":"Changelog","count":65},{"language":"cn","tag":"Changelog","count":65},{"language":"de","tag":"Changelog","count":65},{"language":"es","tag":"Changelog","count":65},{"language":"fr","tag":"Changelog","count":65},{"language":"hi","tag":"Changelog","count":65},{"language":"id","tag":"Changelog","count":65},{"language":"it","tag":"Changelog","count":65},{"language":"ja","tag":"Changelog","count":65},{"language":"ko","tag":"Changelog","count":65},{"language":"pt-BR","tag":"Changelog","count":65},{"language":"sv","tag":"Changelog","count":65},{"language":"vi","tag":"Changelog","count":65},{"language":"ar","tag":"Integrate","count":59},{"language":"cn","tag":"Integrate","count":59},{"language":"de","tag":"Integrate","count":59},{"language":"es","tag":"Integrate","count":59},{"language":"fr","tag":"Integrate","count":59},{"language":"hi","tag":"Integrate","count":59},{"language":"id","tag":"Integrate","count":59},{"language":"it","tag":"Integrate","count":59},{"language":"ja","tag":"Integrate","count":59},{"language":"ko","tag":"Integrate","count":59},{"language":"pt-BR","tag":"Integrate","count":59},{"language":"sv","tag":"Integrate","count":59},{"language":"vi","tag":"Integrate","count":59},{"language":"en","tag":"External Integrations","count":33},{"language":"ar","tag":"External Integrations","count":30},{"language":"cn","tag":"External Integrations","count":30},{"language":"de","tag":"External Integrations","count":30},{"language":"es","tag":"External Integrations","count":30},{"language":"fr","tag":"External Integrations","count":30},{"language":"hi","tag":"External Integrations","count":30},{"language":"id","tag":"External Integrations","count":30},{"language":"it","tag":"External Integrations","count":30},{"language":"ja","tag":"External Integrations","count":30},{"language":"ko","tag":"External Integrations","count":30},{"language":"pt-BR","tag":"External Integrations","count":30},{"language":"sv","tag":"External Integrations","count":30},{"language":"vi","tag":"External Integrations","count":30},{"language":"en","tag":"Webhooks","count":23},{"language":"ar","tag":"Webhooks","count":23},{"language":"cn","tag":"Webhooks","count":23},{"language":"de","tag":"Webhooks","count":23},{"language":"es","tag":"Webhooks","count":23},{"language":"fr","tag":"Webhooks","count":23},{"language":"hi","tag":"Webhooks","count":23},{"language":"id","tag":"Webhooks","count":23},{"language":"it","tag":"Webhooks","count":23},{"language":"ja","tag":"Webhooks","count":23},{"language":"ko","tag":"Webhooks","count":23},{"language":"pt-BR","tag":"Webhooks","count":23},{"language":"sv","tag":"Webhooks","count":23},{"language":"vi","tag":"Webhooks","count":23},{"language":"en","tag":"Guides","count":22},{"language":"ar","tag":"Guides","count":22},{"language":"cn","tag":"Guides","count":22},{"language":"de","tag":"Guides","count":22},{"language":"es","tag":"Guides","count":22},{"language":"fr","tag":"Guides","count":22},{"language":"hi","tag":"Guides","count":22},{"language":"id","tag":"Guides","count":22},{"language":"it","tag":"Guides","count":22},{"language":"ja","tag":"Guides","count":22},{"language":"ko","tag":"Guides","count":22},{"language":"pt-BR","tag":"Guides","count":22},{"language":"sv","tag":"Guides","count":22},{"language":"vi","tag":"Guides","count":22},{"language":"en","tag":"Entitlements","count":20},{"language":"ar","tag":"Entitlements","count":20},{"language":"cn","tag":"Entitlements","count":20},{"language":"de","tag":"Entitlements","count":20},{"language":"es","tag":"Entitlements","count":20},{"language":"fr","tag":"Entitlements","count":20},{"language":"hi","tag":"Entitlements","count":20},{"language":"id","tag":"Entitlements","count":20},{"language":"it","tag":"Entitlements","count":20},{"language":"ja","tag":"Entitlements","count":20},{"language":"ko","tag":"Entitlements","count":20},{"language":"pt-BR","tag":"Entitlements","count":20},{"language":"sv","tag":"Entitlements","count":20},{"language":"vi","tag":"Entitlements","count":20},{"language":"en","tag":"Invoices","count":17},{"language":"ar","tag":"Customers","count":16},{"language":"cn","tag":"Customers","count":16},{"language":"de","tag":"Customers","count":16},{"language":"es","tag":"Customers","count":16},{"language":"fr","tag":"Customers","count":16},{"language":"hi","tag":"Customers","count":16},{"language":"id","tag":"Customers","count":16},{"language":"it","tag":"Customers","count":16},{"language":"ja","tag":"Customers","count":16},{"language":"ko","tag":"Customers","count":16},{"language":"pt-BR","tag":"Customers","count":16},{"language":"sv","tag":"Customers","count":16},{"language":"vi","tag":"Customers","count":16}]},"assistantConfig":{"deflection":{"enabled":false,"email":"support@dodopayments.com","showHelpButton":true}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"#content-area{max-width:60rem}h1,h2,h3,h4,h5,h6{letter-spacing:0.05em!important}.welcome-page .card-group{margin:3rem auto 8rem;max-width:70rem;padding-left:1.25rem;padding-right:1.25rem}.welcome-page .card-group .card{padding:1rem}.welcome-hero{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:20vh;text-align:center;margin-top:3rem;margin-bottom:2.5rem}.welcome-hero h1{font-size:2.5rem;font-weight:700;margin-bottom:1rem;line-height:1.2;color:#fff}.welcome-hero p{font-size:1.25rem;max-width:600px;margin:0 auto}.welcome-hero h1{color:rgb(41 42 37 / 1)}.dark .welcome-hero h1{color:rgb(255 255 255 / 1)}.welcome-hero p{color:rgb(83 85 79 / 1)}.dark .welcome-hero p{color:rgb(162 164 158 / 1)}"}],"page":{"pagePath":"es/features/entitlements/introduction","slug":"/es/features/entitlements/introduction","pageMetadata":{"title":"Introducción","sidebarTitle":"Introducción","description":"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/es/features/entitlements/introduction"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,CodeGroup,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Info,{children:_jsx(_components.p,{children:`Los entitlements convierten un pago completado o una suscripción activa en acceso: una clave de licencia en la bandeja de entrada de tu cliente, un feature flag que comprueba tu aplicación, un rol de Discord, un repositorio de GitHub, una plantilla de Notion, un enlace de remix de Framer, una invitación a un chat de Telegram o un paquete de archivos descargables. Dodo Payments emite, realiza el seguimiento y revoca ese acceso automáticamente a medida que cambia el ciclo de vida del pago.`})}),`\n`,_jsx(Frame,{caption:`The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=12a326205f64d1e71485bce46114d296`,alt:`Panel de control de Entitlements con una lista de entitlements a la izquierda y actividad de concesiones a la derecha`,style:{maxHeight:`500px`,width:`auto`},\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1195`,height:`1195`,\"data-path\":`images/entitlements/list.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=280\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=d12b37e6f3daedbb84e544d08513207e 280w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=560\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=70afcf57fcdd38039179d3054a5eb73f 560w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=840\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=b1cb6ba70f564db87c9bd19f50b21f44 840w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=1100\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=463a9ba560357d16a43e39c23ea5a042 1100w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=1650\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=8b695099d64c9bc75bef9fa1bef28541 1650w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=2500\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=9e86c8dff013279ce9c94de2b5d48338 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`¿qué-son-los-entitlements`,children:`¿Qué son los entitlements?`}),`\n`,_jsxs(_components.p,{children:[`Un `,_jsx(_components.strong,{children:`entitlement`}),` es una definición reutilizable de algo que entregas a un cliente, como una clave de licencia Pro, un rol de Discord llamado “Patrons”, acceso a tu repositorio privado de GitHub o un paquete de libros electrónicos descargables. Asocias entitlements a los productos y Dodo Payments los entrega cuando un cliente paga.`]}),`\n`,_jsxs(_components.p,{children:[`Cuando un cliente compra el producto, Dodo Payments crea un `,_jsx(_components.strong,{children:`grant`}),`: la emisión de ese entitlement para un cliente. Un grant tiene uno de cuatro estados: `,_jsx(_components.code,{children:`Pending`}),` mientras la entrega está en curso, `,_jsx(_components.code,{children:`Delivered`}),` cuando el cliente obtiene acceso, `,_jsx(_components.code,{children:`Failed`}),` si la entrega no pudo completarse y `,_jsx(_components.code,{children:`Revoked`}),` cuando se retira el acceso.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Los entitlements controlan el `,_jsx(_components.strong,{children:`fulfillment`}),` (¿el cliente tiene acceso?). Los créditos controlan el `,_jsx(_components.strong,{children:`consumo`}),` (¿cuánto puede usar?). Puedes asociar ambos al mismo producto. Consulta `,_jsx(_components.a,{href:`/features/credit-based-billing`,children:`Facturación basada en créditos`}),` para obtener información sobre los créditos.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`integraciones-disponibles`,children:`Integraciones Disponibles`}),`\n`,_jsx(_components.p,{children:`Cada entitlement se entrega mediante una integración. Elige la integración que corresponda a lo que vendes.`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`License Keys`,icon:`key`,href:`/features/license-keys`,children:_jsx(_components.p,{children:`Genera claves de licencia únicas con límites de activación y expiración. Ideal para software, plugins y CLIs.`})}),_jsx(Card,{title:`Digital Files`,icon:`download`,href:`/features/digital-product-delivery`,children:_jsx(_components.p,{children:`Entrega archivos descargables, como libros electrónicos, plantillas y contenido multimedia, con URL de descarga presigned e instrucciones opcionales.`})}),_jsx(Card,{title:`Feature Flags`,icon:`flag`,href:`/features/entitlements/feature-flags`,children:_jsx(_components.p,{children:`Controla las funciones de tu propia aplicación en función de una compra. Se entrega al crearse, se comprueba mediante la API y se revoca al cancelar.`})}),_jsx(Card,{title:`Discord`,icon:`discord`,href:`/features/entitlements/discord`,children:_jsx(_components.p,{children:`Asigna un rol a un cliente en tu servidor de Discord cuando compra. El rol se elimina automáticamente al cancelar.`})}),_jsx(Card,{title:`GitHub`,icon:`github`,href:`/features/entitlements/github`,children:_jsx(_components.p,{children:`Agrega a los clientes como colaboradores en un repositorio privado al nivel de permisos que elijas.`})}),_jsx(Card,{title:`Telegram`,icon:`telegram`,href:`/features/entitlements/telegram`,children:_jsx(_components.p,{children:`Agrega a los clientes a un chat o canal privado de Telegram después de la compra.`})}),_jsx(Card,{title:`Framer`,icon:`puzzle-piece`,href:`/features/entitlements/framer`,children:_jsx(_components.p,{children:`Desbloquea un enlace de remix de plantilla de Framer para los clientes que pagan.`})}),_jsx(Card,{title:`Notion`,icon:`book`,href:`/features/entitlements/notion`,children:_jsx(_components.p,{children:`Duplica una plantilla de Notion en el espacio de trabajo del cliente al comprar.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`cómo-funcionan-las-autorizaciones`,children:`Cómo funcionan las autorizaciones`}),`\n`,_jsx(_components.p,{children:`Los grants siguen los mismos eventos de pago y suscripción que recibes como webhooks. Dodo Payments crea y revoca grants automáticamente para las compras, según el ciclo de vida del pago, por lo que no tienes que llamar a la grant API.`}),`\n`,_jsx(Heading,{level:`3`,id:`ciclo-de-vida-de-la-autorización`,children:`Ciclo de vida de la autorización`}),`\n`,_jsx(_components.p,{children:`Un grant pasa por los siguientes estados:`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Created`,children:[_jsxs(_components.p,{children:[`Dodo Payments crea un grant cuando se completa un pago o una suscripción pasa a estar activa. Los grants de feature flags comienzan como `,_jsx(_components.code,{children:`Delivered`}),`. Los grants de claves de licencia también comienzan como `,_jsx(_components.code,{children:`Delivered`}),` cuando el entitlement usa `,_jsx(_components.code,{children:`fulfillment_mode: auto`}),` (el valor predeterminado). Con `,_jsx(_components.code,{children:`fulfillment_mode: manual`}),`, el grant comienza como `,_jsx(_components.code,{children:`Pending`}),` sin clave hasta que proporciones una mediante `,_jsx(_components.a,{href:`/api-reference/entitlements/fulfill-license-key`,children:`Completar grant de clave de licencia`}),`. Todas las demás integraciones comienzan como `,_jsx(_components.code,{children:`Pending`}),`.`]}),_jsxs(_components.p,{children:[`Las integraciones basadas en OAuth (Discord, GitHub y Notion) exponen un `,_jsx(_components.code,{children:`oauth_url`}),` que el cliente visita para dar su consentimiento. Dodo Payments intenta generar esta URL al crear el grant. Si falla, el campo permanece como `,_jsx(_components.code,{children:`null`}),` hasta 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 y Digital Files) permanecen como `,_jsx(_components.code,{children:`Pending`}),` solo mientras se aprovisiona la entrega; después pasan a `,_jsx(_components.code,{children:`Delivered`}),`.`]})]}),_jsx(Step,{title:`Delivered`,children:_jsxs(_components.p,{children:[`Cuando se completa la entrega, el grant pasa a `,_jsx(_components.code,{children:`Delivered`}),` y se establece `,_jsx(_components.code,{children:`delivered_at`}),`. La entrega se completa cuando se genera la clave de licencia, se asigna el rol, se concede el acceso al repositorio, se resuelven los enlaces de archivos o finaliza el flujo de OAuth.`]})}),_jsx(Step,{title:`Failed`,children:_jsxs(_components.p,{children:[`Si la llamada de integración devuelve un error no reintentable, como un token de OAuth revocado, un permiso denegado o un archivo que ya no existe, el grant pasa a `,_jsx(_components.code,{children:`Failed`}),`. Los campos `,_jsx(_components.code,{children:`error_code`}),` y `,_jsx(_components.code,{children:`error_message`}),` registran el motivo.`]})}),_jsx(Step,{title:`Revoked`,children:_jsxs(_components.p,{children:[`Cuando se retira el acceso, por ejemplo porque se cancela una suscripción, se emite un reembolso o revocas el grant, el grant pasa a `,_jsx(_components.code,{children:`Revoked`}),`. El campo `,_jsx(_components.code,{children:`revocation_reason`}),` registra el desencadenante.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`comportamiento-de-los-grants-según-el-evento`,children:`Comportamiento de los grants según el evento`}),`\n`,_jsx(_components.p,{children:`Cada evento de pago y suscripción modifica los grants de la siguiente manera:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Evento`}),_jsx(_components.th,{children:`Comportamiento`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (pago único)`]}),_jsx(_components.td,{children:`Emite un grant por cada entitlement asociado. Un entitlement de License Key emite un grant por cada clave.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (pago asociado a una suscripción)`]}),_jsx(_components.td,{children:`Sin cambios. Los eventos de suscripción siguientes controlan estos grants.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.active`})}),_jsxs(_components.td,{children:[`Emite grants para los entitlements asociados que aún no tengan uno y vuelve a emitir los grants revocados anteriormente para la misma suscripción. Los grants revocados con `,_jsx(_components.code,{children:`manual`}),`, `,_jsx(_components.code,{children:`refund`}),` o `,_jsx(_components.code,{children:`platform_external`}),` no vuelven a emitirse.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.renewed`})}),_jsx(_components.td,{children:`Sin cambios. Los grants existentes persisten durante las renovaciones.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.past_due`})}),_jsxs(_components.td,{children:[`Sin cambios. Los grants permanecen entregados durante todo el `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`periodo de gracia`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.on_hold`})}),_jsxs(_components.td,{children:[`Revoca todos los grants entregados y pendientes con `,_jsx(_components.code,{children:`revocation_reason: subscription_on_hold`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.paused`})}),_jsxs(_components.td,{children:[`Revoca todos los grants entregados y pendientes con `,_jsx(_components.code,{children:`revocation_reason: SubscriptionPaused`}),`. A diferencia de los demás motivos de suscripción, este valor usa PascalCase, así que debes coincidir exactamente con él.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.unpaused`})}),_jsxs(_components.td,{children:[`Vuelve a emitir los grants revocados anteriormente para la misma suscripción, igual que `,_jsx(_components.code,{children:`subscription.active`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.cancelled`})}),_jsxs(_components.td,{children:[`Revoca todos los grants con `,_jsx(_components.code,{children:`revocation_reason: subscription_cancelled`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.expired`})}),_jsxs(_components.td,{children:[`Revoca todos los grants con `,_jsx(_components.code,{children:`revocation_reason: subscription_expired`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.plan_changed`})}),_jsxs(_components.td,{children:[`Revoca todos los grants actuales con `,_jsx(_components.code,{children:`revocation_reason: plan_changed`}),` y después emite grants para los entitlements del nuevo plan.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`refund.succeeded`}),` (pago único)`]}),_jsxs(_components.td,{children:[`Revoca los grants de ese pago con `,_jsx(_components.code,{children:`revocation_reason: refund`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Revocación manual mediante la API`}),_jsxs(_components.td,{children:[`Revoca el grant con `,_jsx(_components.code,{children:`revocation_reason: manual`}),`. Las revocaciones manuales no vuelven a emitirse automáticamente durante la renovación de una suscripción.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Clave de licencia desactivada`}),_jsxs(_components.td,{children:[`Para los grants de claves de licencia, desactivar la clave subyacente revoca el grant con `,_jsx(_components.code,{children:`revocation_reason: license_key_disabled`}),`. Al volver a activar la clave, el grant se restaura automáticamente.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Deriva de la plataforma detectada`}),_jsxs(_components.td,{children:[`Si el lado de la plataforma de una integración deja de estar sincronizado, por ejemplo, porque se eliminó manualmente un rol de Discord, la GitHub App perdió el acceso al repositorio o una ejecución de conciliación detectó que falta el destino, Dodo Payments revoca el grant con `,_jsx(_components.code,{children:`revocation_reason: platform_external`}),`. No vuelve a emitirse automáticamente durante la renovación de la suscripción hasta que se resuelva el problema de la plataforma.`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Los grants controlados por suscripciones son idempotentes por `,_jsx(_components.code,{children:`(entitlement, customer, subscription)`}),`, por lo que las renovaciones y reactivaciones no crean grants duplicados. Los grants de pago único son idempotentes por `,_jsx(_components.code,{children:`(entitlement, customer, payment)`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`crea-tu-primer-entitlement`,children:`Crea tu primer entitlement`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Entitlements`,children:_jsxs(_components.p,{children:[`Ve a `,_jsx(_components.strong,{children:`Entitlements`}),` en el dashboard y haz clic en `,_jsx(_components.strong,{children:`+`}),` para crear un entitlement.`]})}),_jsx(Step,{title:`Pick an Integration`,children:_jsx(_components.p,{children:`Elige el tipo de integración: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer o Notion. Para una integración de plataforma, conecta primero tu cuenta si aún no lo has hecho.`})}),_jsxs(Step,{title:`Configure Delivery`,children:[_jsx(_components.p,{children:`Completa los campos de la integración. Por ejemplo, GitHub solicita un repositorio y un nivel de permisos; Discord solicita un servidor y un rol opcional; y License Key solicita un límite de activaciones y una duración de la licencia.`}),_jsx(Frame,{caption:`Creating a GitHub entitlement. Each integration shows the fields it needs.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=722e925ec5158a5d16c58213132ccb9d`,alt:`Formulario de nuevo entitlement con selector de integración y campos de configuración`,style:{maxHeight:`500px`,width:`auto`},\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1130`,height:`1130`,\"data-path\":`images/entitlements/github/create.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=280\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=27f80ec98d393359ca3136524a0ad9d8 280w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=560\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=6cf0a907fa86298b9ad896b1a604fa0b 560w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=840\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=a34a563dad17160d3c13067e3a349f3c 840w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=1100\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=fc893072e5f07d021b962b0bdd87933c 1100w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=1650\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=222cfaf3c0ac63f69d8494d7387d3e22 1650w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=2500\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=f6b547a74f61c76b6735d3e92c4960d8 2500w`})})]}),_jsx(Step,{title:`Save`,children:_jsxs(_components.p,{children:[`Haz clic en `,_jsx(_components.strong,{children:`Create Entitlement`}),`. Ahora puedes asociar el entitlement a cualquier producto.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`asocia-entitlements-a-productos`,children:`Asocia entitlements a productos`}),`\n`,_jsxs(_components.p,{children:[`Abre un producto, ve a su sección `,_jsx(_components.strong,{children:`Entitlements`}),` y selecciona los entitlements que se entregarán cuando se compre el producto. Un producto puede entregar varios entitlements a la vez. Por ejemplo, un plan Pro puede incluir una clave de licencia, acceso a GitHub y un rol de Discord.`]}),`\n`,_jsx(Frame,{caption:`Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=965ad78262791fa8dbb712b4fdf89538`,alt:`Panel de selección de entitlements del producto que muestra casillas para cada entitlement disponible`,style:{maxHeight:`500px`,width:`auto`},\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1197`,height:`1197`,\"data-path\":`images/entitlements/attach-to-product.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=280\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=4b98785a408414890f3247f318c96740 280w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=560\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=64f89fb68e337ec53ff48c75f0c4dc4e 560w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=840\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=2c289e402cf161b27d7c0f90b81ccd6f 840w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=1100\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=0632a046cb6d1c5e6529f3d63911f5d8 1100w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=1650\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=7e9d6f96690fcd3e53eebef77df2d279 1650w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=2500\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=adbc6c5a189350107f9faf43b2a47224 2500w`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`experiencia-del-cliente`,children:`Experiencia del cliente`}),`\n`,_jsx(Heading,{level:`3`,id:`correo-electrónico-y-customer-portal`,children:`Correo electrónico y Customer Portal`}),`\n`,_jsxs(_components.p,{children:[`Después de una compra, el cliente recibe un correo electrónico de entrega con la clave de licencia, los enlaces de descarga, los enlaces de invitación de OAuth o la invitación de plataforma correspondiente a los entitlements del producto. Los mismos detalles siguen disponibles en el `,_jsx(_components.a,{href:`/features/customer-portal`,children:`Customer Portal`}),`, dentro del historial de pedidos, mientras el grant esté activo.`]}),`\n`,_jsx(Heading,{level:`3`,id:`entrega-basada-en-oauth`,children:`Entrega basada en OAuth`}),`\n`,_jsxs(_components.p,{children:[`El acceso de suscriptores a Discord, GitHub y Notion requiere que el cliente autorice a Dodo Payments a conceder dicho acceso. Estos grants permanecen como `,_jsx(_components.code,{children:`Pending`}),` hasta que el cliente completa el flujo de OAuth desde el enlace de su correo electrónico o el Customer Portal. Después de que el cliente autoriza, el grant pasa a `,_jsx(_components.code,{children:`Delivered`}),` y Dodo Payments aprovisiona el acceso a la plataforma.`]}),`\n`,_jsx(Heading,{level:`3`,id:`revocación`,children:`Revocación`}),`\n`,_jsx(_components.p,{children:`Cuando se revoca un grant, Dodo Payments elimina el acceso en la plataforma: elimina el rol de Discord, elimina al colaborador de GitHub o desactiva la clave de licencia. El cliente ve el cambio en el Customer Portal.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Para Digital Files, la revocación detiene las nuevas URL de descarga presigned, pero no invalida las copias que el cliente ya haya descargado. Tenlo en cuenta al planificar el control de acceso a tu contenido.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`gestiona-grants`,children:`Gestiona grants`}),`\n`,_jsxs(_components.p,{children:[`Abre cualquier entitlement desde el dashboard para ver sus grants. El panel de detalles muestra el total concedido, un filtro de estado y una fila por grant con el cliente, la fecha de acceso, el estado y una acción `,_jsx(_components.strong,{children:`Revoke`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Para gestionar grants mediante programación, enuméralos con el filtro `,_jsx(_components.code,{children:`status`}),` y revoca un único grant por ID:`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`TypeScript`,expandable:`true`,numberOfLines:`15`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` DodoPayments`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'dodopayments'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` DodoPayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` bearerToken:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'DODO_PAYMENTS_API_KEY'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// List grants for an entitlement`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` grants`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`list`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ent_abc123'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` status:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Delivered'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Revoke a single grant`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`revoke`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'entg_xyz789'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'ent_abc123'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,expandable:`true`,numberOfLines:`10`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Assumes client = DodoPayments(bearer_token=os.environ[\"DODO_PAYMENTS_API_KEY\"])`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`grants `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.entitlements.grants.list(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Delivered\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client.entitlements.grants.revoke(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"entg_xyz789\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Go`,expandable:`true`,numberOfLines:`13`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Assumes client := dodopayments.NewClient() and ctx := context.Background().`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`List`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`EntitlementGrantListParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`F`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`EntitlementGrantListParamsStatusDelivered`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` nil`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` panic`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`())`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`fmt`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Println`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`len`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`_`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Revoke`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"entg_xyz789\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`gestión-mediante-la-api`,children:`Gestión mediante la API`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Create Entitlement`,icon:`plus`,href:`/api-reference/entitlements/create-entitlement`,children:_jsx(_components.p,{children:`Crea un entitlement de cualquier tipo de integración.`})}),_jsx(Card,{title:`List Entitlements`,icon:`list`,href:`/api-reference/entitlements/list-entitlements`,children:_jsx(_components.p,{children:`Enumera los entitlements, filtrados por tipo de integración.`})}),_jsx(Card,{title:`Get Entitlement`,icon:`magnifying-glass`,href:`/api-reference/entitlements/get-entitlement`,children:_jsx(_components.p,{children:`Recupera un entitlement y su configuración resuelta.`})}),_jsx(Card,{title:`Update Entitlement`,icon:`pen`,href:`/api-reference/entitlements/update-entitlement`,children:_jsx(_components.p,{children:`Actualiza el nombre, la descripción o la configuración de integración.`})}),_jsx(Card,{title:`Delete Entitlement`,icon:`trash`,href:`/api-reference/entitlements/delete-entitlement`,children:_jsx(_components.p,{children:`Elimina de forma lógica un entitlement. Los grants existentes no se revocan, pero Dodo Payments deja de gestionarlos.`})}),_jsx(Card,{title:`Upload File`,icon:`upload`,href:`/api-reference/entitlements/upload-file`,children:_jsx(_components.p,{children:`Sube un archivo de hasta 500 MiB a un entitlement de Digital Files.`})}),_jsx(Card,{title:`List Grants`,icon:`users`,href:`/api-reference/entitlements/list-grants`,children:_jsx(_components.p,{children:`Enumera los grants de un entitlement, filtrados por estado y cliente.`})}),_jsx(Card,{title:`Revoke Grant`,icon:`ban`,href:`/api-reference/entitlements/revoke-grant`,children:_jsx(_components.p,{children:`Revoca manualmente un único grant.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`webhooks`,children:`Webhooks`}),`\n`,_jsx(_components.p,{children:`Dodo Payments envía cuatro eventos de webhook para el ciclo de vida del grant. Suscríbete a ellos para mantener tu aplicación sincronizada con lo que cada cliente puede usar.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Evento`}),_jsx(_components.th,{children:`Se activa cuando`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.created`})}),_jsxs(_components.td,{children:[`Se crea un grant. Los grants de claves de licencia completados automáticamente y los grants de feature flags llegan como `,_jsx(_components.code,{children:`Delivered`}),`. Los grants de claves de licencia completados manualmente y todas las demás integraciones llegan como `,_jsx(_components.code,{children:`Pending`}),` y pasan a `,_jsx(_components.code,{children:`Delivered`}),` cuando la llamada de la plataforma se completa correctamente o, en el caso de las integraciones basadas en OAuth, cuando el cliente autoriza.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.delivered`})}),_jsxs(_components.td,{children:[`Un grant existente pasa a `,_jsx(_components.code,{children:`Delivered`}),`, por lo que el cliente obtiene acceso. Un grant que está en `,_jsx(_components.code,{children:`Delivered`}),` al crearse solo activa `,_jsx(_components.code,{children:`created`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.failed`})}),_jsxs(_components.td,{children:[`No se pudo entregar el grant. Comprueba `,_jsx(_components.code,{children:`error_code`}),` y `,_jsx(_components.code,{children:`error_message`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.revoked`})}),_jsxs(_components.td,{children:[`Se ha retirado el acceso. Comprueba `,_jsx(_components.code,{children:`revocation_reason`}),`.`]})]})]})]}),`\n`,_jsx(Card,{title:`Entitlement Grant Webhook Payloads`,icon:`bell`,href:`/developer-resources/webhooks/intents/entitlement-grant`,children:_jsxs(_components.p,{children:[`Consulta el esquema completo del payload, eventos de ejemplo y la referencia de `,_jsx(_components.code,{children:`revocation_reason`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`prácticas-recomendadas`,children:`Prácticas recomendadas`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Usa un entitlement por canal de entrega.`}),` No compartas un entitlement de Discord entre productos con distintas funciones de rol. Crea un entitlement por rol para que la revocación sea clara.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Prueba primero en modo de prueba.`}),` Crea el entitlement, asígnalo a un producto de prueba, realiza un checkout y observa cómo el grant pasa de `,_jsx(_components.code,{children:`Pending`}),` a `,_jsx(_components.code,{children:`Delivered`}),`. Después, cancela la suscripción de prueba y confirma que el grant se revoca.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Escucha `,_jsx(_components.code,{children:`entitlement_grant.delivered`}),`, no `,_jsx(_components.code,{children:`payment.succeeded`}),`.`]}),` Un pago puede completarse antes de que finalice el fulfillment, especialmente en los flujos de OAuth. Espera a que el grant alcance `,_jsx(_components.code,{children:`Delivered`}),` antes de desbloquear funciones dependientes en tus propios sistemas. Un grant que se entrega al crearse, como una clave de licencia completada automáticamente o un feature flag, llega como `,_jsx(_components.code,{children:`entitlement_grant.created`}),` con `,_jsx(_components.code,{children:`status: \"Delivered\"`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Trata `,_jsx(_components.code,{children:`entitlement_grant.failed`}),` como una acción necesaria.`]}),` Un grant fallido significa que un cliente pagó pero no obtuvo acceso. Muestra estos grants a tu equipo de soporte o activa una nueva emisión.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Asocia `,_jsx(_components.code,{children:`revocation_reason`}),` a tus flujos de retención.`]}),` Una revocación `,_jsx(_components.code,{children:`subscription_on_hold`}),` se puede recuperar porque el cliente podría actualizar su tarjeta. Una revocación `,_jsx(_components.code,{children:`manual`}),` es intencionada. Trátalas de forma distinta en los mensajes a los clientes.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`No revoques el acceso en `,_jsx(_components.code,{children:`subscription.past_due`}),`.`]}),` Ese evento abre un `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`periodo de gracia`}),` y el cliente conserva el acceso hasta que finaliza la ventana. Espera a `,_jsx(_components.code,{children:`subscription.on_hold`}),` o `,_jsx(_components.code,{children:`subscription.cancelled`}),`.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Introducción","sidebarTitle":"Introducción","description":"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/es/features/entitlements/introduction"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"¿Qué son los entitlements?","slug":"¿qué-son-los-entitlements","depth":2,"children":[]},{"title":"Integraciones Disponibles","slug":"integraciones-disponibles","depth":2,"children":[]},{"title":"Cómo funcionan las autorizaciones","slug":"cómo-funcionan-las-autorizaciones","depth":2,"children":[{"title":"Ciclo de vida de la autorización","slug":"ciclo-de-vida-de-la-autorización","depth":3,"children":[]},{"title":"Comportamiento de los grants según el evento","slug":"comportamiento-de-los-grants-según-el-evento","depth":3,"children":[]}]},{"title":"Crea tu primer entitlement","slug":"crea-tu-primer-entitlement","depth":2,"children":[]},{"title":"Asocia entitlements a productos","slug":"asocia-entitlements-a-productos","depth":2,"children":[]},{"title":"Experiencia del cliente","slug":"experiencia-del-cliente","depth":2,"children":[{"title":"Correo electrónico y Customer Portal","slug":"correo-electrónico-y-customer-portal","depth":3,"children":[]},{"title":"Entrega basada en OAuth","slug":"entrega-basada-en-oauth","depth":3,"children":[]},{"title":"Revocación","slug":"revocación","depth":3,"children":[]}]},{"title":"Gestiona grants","slug":"gestiona-grants","depth":2,"children":[]},{"title":"Gestión mediante la API","slug":"gestión-mediante-la-api","depth":2,"children":[]},{"title":"Webhooks","slug":"webhooks","depth":2,"children":[]},{"title":"Prácticas recomendadas","slug":"prácticas-recomendadas","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dodopayments/0ee82a08f7b65bcb/seo.js","/_mintlify/custom/dodopayments/6f88c9bbee313616/assistant-loader.js"],"subdomain":"dodopayments","siteName":"Dodo Payments Documentation","title":"Introducción - Dodo Payments Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/features/entitlements/introduction","matchLevel":1},"es":{"href":"/es/features/entitlements/introduction","matchLevel":0},"ar":{"href":"/ar/features/entitlements/introduction","matchLevel":1},"fr":{"href":"/fr/features/entitlements/introduction","matchLevel":1},"de":{"href":"/de/features/entitlements/introduction","matchLevel":1},"id":{"href":"/id/features/entitlements/introduction","matchLevel":1},"ja":{"href":"/ja/features/entitlements/introduction","matchLevel":1},"ko":{"href":"/ko/features/entitlements/introduction","matchLevel":1},"pt-BR":{"href":"/pt-BR/features/entitlements/introduction","matchLevel":1},"vi":{"href":"/vi/features/entitlements/introduction","matchLevel":1},"cn":{"href":"/cn/features/entitlements/introduction","matchLevel":1},"hi":{"href":"/hi/features/entitlements/introduction","matchLevel":1},"it":{"href":"/it/features/entitlements/introduction","matchLevel":1},"sv":{"href":"/sv/features/entitlements/introduction","matchLevel":1}}},"lastModified":"2026-09-26T16:06:33.854Z","gitLastModified":"2026-09-26T16:03:47.000Z","originalFileLocation":"es/features/entitlements/introduction.mdx","locale":"es"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Introducción - Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dodopayments.com/es/features/entitlements/introduction\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Entitlements\u0026amp;title=Introducci%C3%B3n\u0026amp;description=Entrega+autom%C3%A1ticamente+claves+de+licencia%2C+archivos+descargables%2C+feature+flags+y+acceso+a+Discord%2C+GitHub%2C+Telegram%2C+Framer+y+Notion+cuando+los+clientes+pagan\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=ec0ceec76bd366ea3afb96aaece2afbb2c1a97ed8fc5d95b4a61f538c1cc0e4a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Introducción - Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Entitlements\u0026amp;title=Introducci%C3%B3n\u0026amp;description=Entrega+autom%C3%A1ticamente+claves+de+licencia%2C+archivos+descargables%2C+feature+flags+y+acceso+a+Discord%2C+GitHub%2C+Telegram%2C+Framer+y+Notion+cuando+los+clientes+pagan\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=ec0ceec76bd366ea3afb96aaece2afbb2c1a97ed8fc5d95b4a61f538c1cc0e4a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#779812\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dodopayments.com/es/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/es/features/entitlements/introduction.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.dodopayments.com/es/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.dodopayments.com/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ar\" href=\"https://docs.dodopayments.com/ar/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://docs.dodopayments.com/fr/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://docs.dodopayments.com/de/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"id\" href=\"https://docs.dodopayments.com/id/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.dodopayments.com/ja/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.dodopayments.com/ko/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.dodopayments.com/pt-BR/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"vi\" href=\"https://docs.dodopayments.com/vi/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.dodopayments.com/cn/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"hi\" href=\"https://docs.dodopayments.com/hi/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"it\" href=\"https://docs.dodopayments.com/it/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"sv\" href=\"https://docs.dodopayments.com/sv/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.dodopayments.com/features/entitlements/introduction\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dodopayments.com/#organization\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/light.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=23f7a052f7ecb9d6570b7c95ee359a97\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dodopayments.com#website\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"publisher\":{\"@id\":\"https://docs.dodopayments.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dodopayments.com/es/features/entitlements/introduction#webpage\",\"url\":\"https://docs.dodopayments.com/es/features/entitlements/introduction\",\"name\":\"Introducción\",\"description\":\"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.\",\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dodopayments.com/es/features/entitlements/introduction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dodopayments.com/es/features/entitlements/introduction#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.dodopayments.com/es/features/products\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducción\",\"item\":\"https://docs.dodopayments.com/es/features/entitlements/introduction\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dodopayments.com/es/features/entitlements/introduction#article\",\"headline\":\"Introducción\",\"name\":\"Introducción\",\"description\":\"Entrega automáticamente claves de licencia, archivos descargables, feature flags y acceso a Discord, GitHub, Telegram, Framer y Notion cuando los clientes pagan.\",\"url\":\"https://docs.dodopayments.com/es/features/entitlements/introduction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dodopayments.com/es/features/entitlements/introduction#webpage\"},\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"keywords\":\"Dodo Payments, entitlements, fulfillment, license keys, digital delivery, platform access\",\"publisher\":{\"@id\":\"https://docs.dodopayments.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dodo Payments Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Dodo Payments Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/es/features/entitlements/introduction.md","siteName":"Dodo Payments Documentation","nav":{"global":null,"languages":[{"language":"en","pages":[{"title":"en","href":"/features/entitlements/introduction"}]},{"language":"es","tabs":[{"tab":"Docs","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"Welcome to Dodo Payments","sidebarTitle":"Introduction","icon":"rocket","href":"/es/introduction"},{"title":"Construya con Agentes de Codificación AI","sidebarTitle":"Agentes de Codificación AI","icon":"robot","href":"/es/developer-resources/build-with-ai-coding-agents"},{"title":"Migrar a Dodo Payments","icon":"arrow-right-arrow-left","href":"/es/migrate-to-dodo"},{"title":"Account Verification","icon":"id-card","href":"/es/miscellaneous/verification-process"}]},{"group":"Features","pages":[{"sidebarTitle":"Products","title":"Products","icon":"box","href":"/es/features/products"},{"sidebarTitle":"Colecciones de Productos","title":"Colecciones de Productos","icon":"layer-group","href":"/es/features/product-collections"},{"sidebarTitle":"Pagos únicos","title":"Pagos únicos","icon":"credit-card","href":"/es/features/one-time-payment-products"},{"group":"Subscriptions","icon":"infinity","pages":[{"sidebarTitle":"Subscriptions","title":"Subscriptions","icon":"repeat","href":"/es/features/subscription"},{"sidebarTitle":"Complementos","title":"Complementos para Suscripciones","icon":"puzzle","href":"/es/features/addons"},{"title":"Suscripciones bajo demanda","icon":"bolt","href":"/es/developer-resources/ondemand-subscriptions"}]},{"group":"Usage Based Billing","icon":"arrow-trend-up","pages":[{"sidebarTitle":"Introducción","title":"Facturación basada en el uso","icon":"box","href":"/es/features/usage-based-billing/introduction"},{"sidebarTitle":"Medidores","title":"Medidores","icon":"sliders","href":"/es/features/usage-based-billing/meters"},{"sidebarTitle":"Ingesta de Eventos","title":"Ingesta de Eventos","icon":"bolt","href":"/es/features/usage-based-billing/event-ingestion"},{"group":"Ingestion Blueprints","icon":"copy","pages":[{"sidebarTitle":"Introducción","title":"Planos de Ingesta","icon":"box","href":"/es/features/usage-based-billing/ingestion-blueprints"},{"title":"Blueprint de LLM","icon":"brain-circuit","href":"/es/developer-resources/ingestion-blueprints/llm"},{"title":"Plantilla de API Gateway","icon":"cloud","href":"/es/developer-resources/ingestion-blueprints/api-gateway"},{"title":"Plano de Almacenamiento de Objetos","icon":"box-archive","href":"/es/developer-resources/ingestion-blueprints/object-storage"},{"title":"Plantilla de Transmisión","icon":"tower-broadcast","href":"/es/developer-resources/ingestion-blueprints/stream"},{"title":"Plantilla de Rango de Tiempo","icon":"clock","href":"/es/developer-resources/ingestion-blueprints/time-range"}]}]},{"sidebarTitle":"Credit-Based Billing","title":"Credit-Based Billing","icon":"coins","tag":"NEW","href":"/es/features/credit-based-billing"},{"sidebarTitle":"Facturación por Asiento","title":"Facturación por Asiento","icon":"users","href":"/es/features/seat-based-billing"},{"sidebarTitle":"Facturación híbrida","title":"Modelos de facturación híbrida","icon":"layer-group","href":"/es/features/hybrid-billing"},{"title":"Upsells y Downsells","icon":"arrow-up-right-dots","href":"/es/features/upsells-and-downsells"},{"group":"Customers","icon":"user-group","pages":[{"title":"Gestión de Clientes","icon":"user-group","href":"/es/features/customers"},{"sidebarTitle":"Portal del Cliente","title":"Portal del Cliente","icon":"id-card","href":"/es/features/customer-portal"},{"title":"Billeteras de clientes","icon":"wallet","tag":"NEW","href":"/es/features/customer-wallet"},{"sidebarTitle":"Correos enviados","title":"Registros de correos de clientes","icon":"envelope","tag":"NEW","href":"/es/features/email-logs"},{"sidebarTitle":"Lista de bloqueo de clientes","title":"Lista de bloqueo de clientes","icon":"user-slash","tag":"NEW","href":"/es/features/customer-blocklist"}]},{"sidebarTitle":"Descuentos","title":"Descuentos","icon":"percent","href":"/es/features/discount-codes"},{"group":"Recovery","icon":"rotate","tag":"NEW","pages":[{"sidebarTitle":"Visión general","title":"Recuperación de Ingresos","icon":"rotate","href":"/es/features/recovery/overview"},{"sidebarTitle":"Recuperación de Carritos Abandonados","title":"Recuperación de Carritos Abandonados","icon":"cart-shopping","href":"/es/features/recovery/abandoned-cart-recovery"},{"sidebarTitle":"Gestión de suscripciones fallidas","title":"Gestión de suscripciones fallidas","icon":"repeat","href":"/es/features/recovery/subscription-dunning"},{"sidebarTitle":"Reintentos de Pago de Suscripción","title":"Reintentos de Pago de Suscripción","icon":"arrow-rotate-right","href":"/es/features/recovery/payment-retries"},{"sidebarTitle":"Reintento manual","title":"Reintento manual de pagos","icon":"hand-pointer","tag":"NEW","href":"/es/features/recovery/manual-retry"}]},{"group":"Transactions","icon":"credit-card","pages":[{"title":"Payments","icon":"money-bill-transfer","href":"/es/features/transactions/payments"},{"title":"Reembolsos","icon":"rotate-left","href":"/es/features/transactions/refunds"},{"title":"Disputes","description":"Consulta y responde a las disputas desde la página Transactions, y detén los chargebacks antes de que se presenten con Visa RDR, Ethoca alerts y deflections.","icon":"circle-exclamation","href":"/es/features/transactions/disputes"}]},{"group":"Entitlements","icon":"gift","tag":"NEW","pages":[{"title":"Introducción","sidebarTitle":"Introducción","icon":"box-archive","href":"/es/features/entitlements/introduction"},{"title":"License Keys","description":"Emite claves de licencia con límites de activación y caducidad mediante el entitlement License Key, y actívalas, valídalas y desactívalas desde tu software.","icon":"key","href":"/es/features/license-keys"},{"title":"Entrega de Productos Digitales","sidebarTitle":"Productos Digitales","icon":"download","href":"/es/features/digital-product-delivery"},{"title":"Derecho de Bandera de Función","sidebarTitle":"Banderas de Función","icon":"flag","tag":"NEW","href":"/es/features/entitlements/feature-flags"},{"title":"Autorización de Discord","sidebarTitle":"Discord","icon":"discord","href":"/es/features/entitlements/discord"},{"title":"Derechos de GitHub","sidebarTitle":"GitHub","icon":"github","href":"/es/features/entitlements/github"},{"title":"Derechos de Telegram","sidebarTitle":"Telegram","icon":"telegram","href":"/es/features/entitlements/telegram"},{"title":"Entitlement de Framer","sidebarTitle":"Framer","icon":"puzzle-piece","href":"/es/features/entitlements/framer"},{"title":"Asignación de Notion","sidebarTitle":"Notion","icon":"book","href":"/es/features/entitlements/notion"}]},{"group":"Payouts and Balances","icon":"wallet","pages":[{"title":"Proceso de Pagos","icon":"money-bill","href":"/es/features/payouts/payout-structure"},{"title":"Balances","icon":"file-invoice-dollar","href":"/es/features/account-summary-payout-wallet"}]},{"group":"Account Management","icon":"user","pages":[{"sidebarTitle":"Archivar un negocio","title":"Archivar un negocio","icon":"box-archive","tag":"NEW","href":"/es/features/archive-business"},{"title":"Configuración de Múltiples Marcas","icon":"building-columns","href":"/es/features/multi-brands"},{"title":"Gestión de Facturas","icon":"file-invoice-dollar","href":"/es/features/invoice-generation"},{"title":"Miembros del equipo","icon":"user-gear","href":"/es/features/team"},{"title":"Preferencias de comunicación","sidebarTitle":"Preferencias de comunicación","icon":"bell","tag":"NEW","href":"/es/features/communication-preferences"},{"title":"Mi Cuenta","icon":"user-gear","href":"/es/miscellaneous/accounts"}]},{"group":"Pricing","icon":"dollar-sign","pages":[{"sidebarTitle":"Precios con Impuestos Incluidos","title":"Precios con Impuestos Incluidos","icon":"file-invoice","href":"/es/features/tax-inclusive-pricing"},{"sidebarTitle":"Paga lo que quieras","title":"Precios de Paga lo que quieras","icon":"dollar-sign","href":"/es/features/pay-what-you-want"},{"title":"Pagos B2B","icon":"money-bills","href":"/es/features/b2b-payments"},{"title":"Precios Localizados","sidebarTitle":"Precios Localizados","icon":"earth-americas","href":"/es/features/localized-pricing"},{"sidebarTitle":"Paridad del poder adquisitivo","title":"Paridad del Poder Adquisitivo","tag":"NEW","icon":"money-bill-trend-up","href":"/es/features/purchasing-power-parity"},{"sidebarTitle":"Precios psicológicos","title":"Precios psicológicos","tag":"NEW","icon":"tag","href":"/es/features/charm-pricing"}]},{"sidebarTitle":"Finalizar compra","title":"Características de Finalización de Compra","icon":"cart-shopping","href":"/es/features/checkout"},{"sidebarTitle":"Diseño","title":"Personalización de diseño y temas","icon":"palette","tag":"NEW","href":"/es/features/design"},{"group":"Payment Methods","icon":"money-bill-wave","pages":[{"title":"Payment Methods","sidebarTitle":"Overview","icon":"layer-group","href":"/es/features/payment-methods"},{"title":"Tarjetas de Crédito y Débito","sidebarTitle":"Tarjetas","icon":"credit-card","href":"/es/features/payment-methods/cards"},{"title":"Billeteras Digitales","sidebarTitle":"Billeteras Digitales","icon":"wallet","href":"/es/features/payment-methods/digital-wallets"},{"title":"Buy Now Pay Later (BNPL)","sidebarTitle":"BNPL","icon":"calendar-days","href":"/es/features/payment-methods/bnpl"},{"title":"ACH Direct Debit","sidebarTitle":"ACH Direct Debit","icon":"building-columns","href":"/es/features/payment-methods/ach"},{"title":"Métodos de Pago en India","sidebarTitle":"India","icon":"indian-rupee-sign","href":"/es/features/payment-methods/india"},{"title":"Métodos de Pago Europeos","sidebarTitle":"Europa","icon":"euro-sign","href":"/es/features/payment-methods/europe"},{"title":"Métodos de Pago en Corea del Sur","sidebarTitle":"Corea del Sur","icon":"won-sign","href":"/es/features/payment-methods/south-korea"},{"title":"Métodos de pago de Asia-Pacífico","sidebarTitle":"Asia-Pacífico","icon":"earth-asia","href":"/es/features/payment-methods/asia-pacific"},{"title":"Pix","sidebarTitle":"Pix","icon":"brazilian-real-sign","href":"/es/features/payment-methods/pix"},{"title":"Stablecoins","sidebarTitle":"Stablecoins","icon":"dollar-sign","href":"/es/features/payment-methods/stablecoins"},{"title":"WeChat Pay","sidebarTitle":"WeChat Pay","icon":"comment-dollar","href":"/es/features/payment-methods/wechat"}]},{"title":"Analítica de terceros","sidebarTitle":"Analítica de terceros","icon":"chart-line","tag":"NEW","href":"/es/features/analytics"},{"sidebarTitle":"Moneda Adaptativa","title":"Moneda Adaptativa","icon":"money-bill-transfer","href":"/es/features/adaptive-currency"},{"group":"BYOP","icon":"shuffle","tag":"BETA","pages":[{"title":"Trae Tu Propio Procesador (BYOP)","sidebarTitle":"Descripción general","tag":"BETA","icon":"boxes-stacked","href":"/es/features/byop"},{"title":"Stripe - Conectar y Acceso a la API de Datos de Tarjeta en Crudo","sidebarTitle":"Stripe","icon":"stripe","href":"/es/features/byop/stripe"},{"title":"Adyen - Acceso a la API de Connect \u0026 Raw Card","sidebarTitle":"Adyen","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/adyen.svg","href":"/es/features/byop/adyen"}]},{"title":"Vitrina","icon":"store","href":"/es/features/storefront"},{"title":"Afiliados","icon":"users-line","href":"/es/features/affiliates"},{"title":"API de moderación","icon":"shield-check","tag":"NEW","href":"/es/features/moderation"},{"title":"Vender productos digitales en iOS","icon":"mobile","href":"/es/features/appstore-digital-goods"},{"title":"Dashboard Analytics","sidebarTitle":"Dashboard Analytics","icon":"chart-line","href":"/es/features/analytics-and-reporting"},{"title":"Informes","sidebarTitle":"Informes","icon":"file-invoice","href":"/es/features/reports"}]},{"group":"Integrate","pages":[{"group":"SDKs","icon":"box-open","pages":[{"sidebarTitle":"Descripción general","title":"SDK oficiales","icon":"box","href":"/es/developer-resources/dodo-payments-sdks"},{"title":"TypeScript","icon":"js","href":"/es/developer-resources/sdks/typescript"},{"title":"Python","icon":"python","href":"/es/developer-resources/sdks/python"},{"title":"Go","icon":"golang","href":"/es/developer-resources/sdks/go"},{"title":"Ruby","icon":"gem","href":"/es/developer-resources/sdks/ruby"},{"title":"Java","icon":"java","href":"/es/developer-resources/sdks/java"},{"title":"Kotlin","icon":"k","href":"/es/developer-resources/sdks/kotlin"},{"title":"PHP","icon":"php","href":"/es/developer-resources/sdks/php"},{"title":"C#","icon":"c","href":"/es/developer-resources/sdks/csharp"},{"title":"Rust","icon":"rust","href":"/es/developer-resources/sdks/rust"}]},{"group":"Mobile Checkout SDKs","icon":"mobile","pages":[{"title":"Mobile Integration Guide","sidebarTitle":"Integration Guide","icon":"mobile","href":"/es/developer-resources/mobile-integration"},{"title":"Android","sidebarTitle":"Android","tag":"NEW","icon":"android","href":"/es/developer-resources/sdks/android"},{"title":"iOS","sidebarTitle":"iOS","tag":"NEW","icon":"apple","href":"/es/developer-resources/sdks/ios"},{"title":"React Native","sidebarTitle":"React Native","tag":"NEW","icon":"react","href":"/es/developer-resources/sdks/react-native"},{"title":"Flutter","sidebarTitle":"Flutter","tag":"NEW","icon":"layer-group","href":"/es/developer-resources/sdks/flutter"}]},{"group":"Framework Adaptors","icon":"frame","pages":[{"sidebarTitle":"Descripción general","title":"Descripción general de los adaptadores de frameworks","icon":"box","href":"/es/developer-resources/framework-adaptors"},{"title":"Next.js Adaptor","icon":"code-merge","href":"/es/developer-resources/nextjs-adaptor"},{"title":"Better Auth Adaptor","icon":"code-merge","href":"/es/developer-resources/better-auth-adaptor"},{"title":"Componente Convex","icon":"code-merge","href":"/es/developer-resources/convex-component"},{"title":"Adaptador de TanStack","icon":"code-merge","href":"/es/developer-resources/tanstack-adaptor"},{"title":"Adaptador de Nuxt","icon":"code-merge","href":"/es/developer-resources/nuxt-adaptor"},{"title":"Express Adaptor","icon":"code-merge","href":"/es/developer-resources/express-adaptor"},{"title":"Adaptador de Astro","icon":"code-merge","href":"/es/developer-resources/astro-adaptor"},{"title":"Adaptador de SvelteKit","icon":"code-merge","href":"/es/developer-resources/sveltekit-adaptor"},{"title":"Hono Adaptor","icon":"code-merge","href":"/es/developer-resources/hono-adaptor"},{"title":"Adaptador de Remix","icon":"code-merge","href":"/es/developer-resources/remix-adaptor"},{"title":"Adaptador Fastify","icon":"code-merge","href":"/es/developer-resources/fastify-adaptor"},{"title":"Adaptador de Bun","icon":"code-merge","href":"/es/developer-resources/bun-adaptor"}]},{"group":"Webhooks","icon":"webhook","pages":[{"sidebarTitle":"Overview","title":"Webhooks","icon":"webhook","href":"/es/developer-resources/webhooks"},{"title":"Guía de eventos de Webhook","icon":"bell","href":"/es/developer-resources/webhooks/intents/webhook-events-guide"},{"group":"Webhook Payloads","icon":"code","pages":[{"title":"Pago","icon":"credit-card","href":"/es/developer-resources/webhooks/intents/payment"},{"sidebarTitle":"Suscripción","title":"Webhooks de suscripción","icon":"repeat","href":"/es/developer-resources/webhooks/intents/subscription"},{"title":"Reembolso","icon":"rotate-left","href":"/es/developer-resources/webhooks/intents/refund"},{"sidebarTitle":"Disputa","title":"Webhooks de disputas","icon":"circle-exclamation","href":"/es/developer-resources/webhooks/intents/dispute"},{"title":"Clave de Licencia","icon":"key","href":"/es/developer-resources/webhooks/intents/license-key"},{"title":"Concesión de Derechos","icon":"gift","href":"/es/developer-resources/webhooks/intents/entitlement-grant"},{"sidebarTitle":"Facturación basada en créditos","title":"Webhooks de facturación basada en créditos","icon":"coins","href":"/es/developer-resources/webhooks/intents/credit"},{"title":"Recuperación","icon":"rotate","href":"/es/developer-resources/webhooks/intents/recovery"},{"sidebarTitle":"Pago","title":"Webhooks de pagos","icon":"money-bill-transfer","href":"/es/developer-resources/webhooks/intents/payout"}]},{"group":"Deploy to Cloud","icon":"rocket","pages":[{"title":"Funciones de Vercel","icon":"triangle","href":"/es/developer-resources/webhooks/examples/vercel-example"},{"title":"Cloudflare Workers","icon":"cloud","href":"/es/developer-resources/webhooks/examples/cloudflare-example"},{"title":"Funciones Edge de Supabase","icon":"bolt","href":"/es/developer-resources/webhooks/examples/supabase-example"},{"title":"Funciones de Netlify","icon":"diamond","href":"/es/developer-resources/webhooks/examples/netlify-example"}]}]},{"group":"Testing \u0026 Demo Tools","icon":"flask","pages":[{"title":"Modo de Prueba vs Modo en Vivo","icon":"toggle-on","href":"/es/miscellaneous/test-mode-vs-live-mode"},{"title":"Testing Process","icon":"flask","href":"/es/miscellaneous/testing-process"},{"title":"Producto de Demostración de Atlas","icon":"palette","href":"/es/features/atlas-demo-website"}]},{"group":"Boilerplates","icon":"box-open","pages":[{"sidebarTitle":"Expo","title":"Plantilla de Expo","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/expo.svg","tag":"NEW","href":"/es/developer-resources/expo-boilerplate"},{"sidebarTitle":"Supabase","title":"Plantilla base de Supabase","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/supabase.svg","href":"/es/developer-resources/supabase-boilerplate"},{"sidebarTitle":"Plugin de Figma","title":"Plugin de Figma","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/figma.svg","href":"/es/integrations/figma-plugin"},{"sidebarTitle":"Next.js","title":"Plantilla Mínima de Next.js","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/nextjs.svg","href":"/es/developer-resources/nextjs-boilerplate"},{"sidebarTitle":"Astro","title":"Astro Minimal Boilerplate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/astro.svg","href":"/es/developer-resources/astro-boilerplate"},{"sidebarTitle":"FastAPI","title":"Plantilla de FastAPI","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/fastapi.svg","tag":"NEW","href":"/es/developer-resources/fastapi-boilerplate"},{"sidebarTitle":"Go","title":"Plantilla Go","icon":"golang","tag":"NEW","href":"/es/developer-resources/go-boilerplate"}]},{"title":"Dodo CLI","icon":"terminal","tag":"NEW","href":"/es/developer-resources/sdks/cli"},{"title":"Pago en Superposición","icon":"cart-shopping","href":"/es/developer-resources/overlay-checkout"},{"title":"Pago en línea","icon":"credit-card","href":"/es/developer-resources/inline-checkout"},{"title":"SDK de Facturación","icon":"boxes-stacked","href":"/es/developer-resources/billingsdk"},{"title":"Servidor MCP de Dodo Payments","icon":"server","href":"/es/developer-resources/mcp-server"},{"title":"Agent Skills","icon":"wand-magic-sparkles","href":"/es/developer-resources/agent-skills"},{"sidebarTitle":"Sincronización de Base de Datos","title":"Sincroniza con tu base de datos","icon":"database","href":"/es/developer-resources/dodo-sync"},{"sidebarTitle":"Migración de Suscripciones","title":"Migración de Suscripciones a Dodo Payments","icon":"file-import","href":"/es/miscellaneous/subscription-migration"}]},{"group":"Merchant of Record","pages":[{"sidebarTitle":"¿Qué es MoR?","title":"Introducción","icon":"building-columns","href":"/es/features/mor-introduction"},{"title":"MoR vs PG","icon":"scale-balanced","href":"/es/features/mor-vs-pg"},{"title":"Países elegibles para la aceptación de comerciantes","icon":"globe","href":"/es/miscellaneous/accepted-countries-and-territories"},{"title":"Política de Revisión y Monitoreo","icon":"magnifying-glass","href":"/es/miscellaneous/review-monitoring-policy"},{"sidebarTitle":"Bypass of App Store Fees","title":"Cómo evitar las comisiones de App Store y Play Store usando Dodo Payments","icon":"shield-check","href":"/es/features/bypassing-app-store-fees"}]},{"group":"Miscellaneous","pages":[{"group":"Support Channels","icon":"headset","pages":[{"title":"Ayuda y Soporte","icon":"headset","href":"/es/miscellaneous/help-support"},{"title":"Solicitud de Función y Hoja de Ruta","icon":"lightbulb","href":"/es/features/feature-request"}]},{"title":"Aplicaciones Móviles y de Escritorio","icon":"mobile","href":"/es/features/mobile-app"},{"title":"Política de Reporte de Seguridad","icon":"shield","href":"/es/miscellaneous/security-policy"}]}]},{"tab":"Guides","icon":"compass","pages":[{"title":"Guides","href":"/es/developer-resources/integration-guide"}]},{"tab":"API Reference","icon":"rectangle-code","pages":[{"title":"API Reference","href":"/es/api-reference/introduction"}]},{"tab":"External Integrations","icon":"plug","pages":[{"title":"External Integrations","href":"/es/integrations/introduction"}]},{"tab":"Changelog","icon":"calendar-days","pages":[{"title":"Changelog","href":"/es/changelog/introduction"}]},{"tab":"Community Projects","icon":"users","pages":[{"title":"Community Projects","href":"/es/community/overview"}]}]},{"language":"ar","pages":[{"title":"ar","href":"/ar/features/entitlements/introduction"}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/features/entitlements/introduction"}]},{"language":"de","pages":[{"title":"de","href":"/de/features/entitlements/introduction"}]},{"language":"id","pages":[{"title":"id","href":"/id/features/entitlements/introduction"}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/features/entitlements/introduction"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/features/entitlements/introduction"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/pt-BR/features/entitlements/introduction"}]},{"language":"vi","pages":[{"title":"vi","href":"/vi/features/entitlements/introduction"}]},{"language":"cn","pages":[{"title":"cn","href":"/cn/features/entitlements/introduction"}]},{"language":"hi","pages":[{"title":"hi","href":"/hi/features/entitlements/introduction"}]},{"language":"it","pages":[{"title":"it","href":"/it/features/entitlements/introduction"}]},{"language":"sv","pages":[{"title":"sv","href":"/sv/features/entitlements/introduction"}]}]},"basePath":"","title":"Introducción - Dodo Payments Documentation","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-u3J1-UOn.js","DynamicMarkdown-B-f2cqXQ.js","zoom-image-lightbox-DTFzvaXJ.js","lightbox-handle-r17bVUz3.js"]}