advanced_reports a un producto, y cada cliente de pago recibe una concesión que tu aplicación puede verificar vía API o mantener sincronizada con webhooks. Sin plataforma externa, sin OAuth, sin paso de entrega: la concesión en sí es la capacidad.Qué se entrega
Nada sale de Dodo Payments — la concesión es el entregable:- Al realizar la compra, se crea el grant y pasa directamente a
Delivered. No existe una fasePending, no se requiere ninguna acción del cliente y no hay forma de que la entrega falle. - El grant contiene un payload
featuretipado:{ "feature_type": "boolean", "feature_id": "advanced_reports" }. Tu aplicación leefeature_idpara decidir qué desbloquear. - Una cancelación, un reembolso o una revocación manual mueve el grant a
Revoked, y tu aplicación ve desaparecer el indicador.
feature_id es un identificador elegido por el comerciante, no único en todos los derechos. Dos derechos pueden conferir el mismo feature_id — por ejemplo, un plan Pro mensual y uno anual ambos otorgando advanced_reports.Crear una bandera de función
Open Entitlements
Name the flag

Creating a feature flag. The Feature ID is what your application checks; Meta Data attaches limits alongside the flag.
Optionally add metadata
Confirm

The created feature flag. The right pane tracks every customer grant issued from it.
Adjuntar a un producto
Abre un producto (o crea uno), encuentra la tarjeta Derechos, y haz clic en + para adjuntar derechos existentes. Selecciona tu bandera de función y haz clic en Hecho.
Attaching the feature flag to a product. One product can deliver multiple entitlements.

The product now includes the feature flag. Every successful purchase or active subscription grants it.
Configuración requerida
Crear vía API
Adjuntar límites con metadatos
Una bandera booleana responde “¿tiene este cliente la función?”. Los metadatos responden “¿con qué configuración?”. Los metadatos de derechos aceptan valores de cadena, entero, número y booleano, y cada concesión toma una instantánea congelada de los metadatos del derecho en el momento en que se crea. Ese comportamiento de instantánea es lo que hace que los metadatos sean seguros para usar en los límites del plan:- Editar los metadatos del derecho más tarde solo afecta a las futuras concesiones. Los clientes mantienen los límites bajo los que compraron.
- La instantánea se devuelve en cada concesión como su campo
metadata, por lo que una llamada API te da tanto la bandera como su configuración.
advanced_reports con { "tier": "pro", "monthly_report_limit": 100 } permite a tu aplicación desbloquear el panel y hacer cumplir la cuota de 100 informes sin una segunda consulta. Si más tarde aumentas el límite a 250, los clientes existentes se mantendrán en 100 hasta que reciban una nueva concesión (por ejemplo, después de un cambio de plan).
Comprobar las características de un cliente
Lista las concesiones de bandera de función entregadas a un cliente y construye el conjunto de características habilitadas. El endpoint devuelve una fila por concesión en todos los derechos, filtrable porintegration_type y status.
feature se povis posts tarjetas feature_flag concesiones; es null para cada otro tipo de integración. Consulta la referencia de la API Listar Concesiones de Cliente para la forma completa de respuesta.Ciclo de vida
Los grants de feature flags siguen el ciclo de vida estándar de los grants con una simplificación: no hay paso de entrega, por lo que los grants nunca permanecen enPending ni pasan a Failed.
Webhooks
Suscríbete a los eventosentitlement_grant.* para reflejar las banderas en tu propia base de datos en lugar de sondear:
entitlement_grant.created— llega ya enDeliveredcon el payloadfeature. Activa la funcionalidad.entitlement_grant.delivered— se dispara cuando se restaura un grant revocado anteriormente. Vuelve a activar la funcionalidad.entitlement_grant.revoked— se retira el acceso. Desactiva la funcionalidad y compruebarevocation_reasonpara decidir qué mensaje mostrar.
entitlement_grant.failed para banderas de función — la entrega ocurre completamente dentro de Dodo Payments y no puede fallar.
Ejemplo: El plan Pro desbloquea informes avanzados
- Crea el indicador.
feature_id: advanced_reportscon los metadatos{ "tier": "pro", "monthly_report_limit": 100 }. - Asócialo al producto de suscripción Pro Plan.
- Un cliente se suscribe. Dodo Payments crea un grant
Deliveredy disparaentitlement_grant.created; tu webhook habilitaadvanced_reportspara el cliente con un límite de 100. - Tu aplicación controla el acceso a la funcionalidad. Al cargar el dashboard, comprueba el conjunto de funcionalidades almacenado en caché (o llama a
listEntitlementGrants) y muestra la pestaña de informes solo cuandoadvanced_reportsesté presente. - El cliente cancela. Dodo Payments revoca el grant y dispara
entitlement_grant.revoked; tu webhook desactiva la funcionalidad. Si el cliente se recupera posteriormente mediante el proceso de cobro de deuda,entitlement_grant.deliveredla restaura; no se necesitan cambios de código.
Mejores prácticas
- Usa ids de feature estables en snake_case. El código de tu aplicación comprueba estas cadenas; cambiarles el nombre es un cambio incompatible en ambos lados.
- Un indicador por capacidad. Es preferible
advanced_reports+api_accesscomo dos entitlements en lugar de un únicopro_bundle: la revocación y las combinaciones de planes se mantienen ordenadas. - Obtén el estado de los webhooks y verifícalo con la API. Los webhooks mantienen actualizada tu base de datos; el endpoint de lista es la fuente de verdad para los procesos de reconciliación y las ausencias de caché.
- Trata
Revokedcomo inmediato. Un indicador revocado significa que el cliente ya no está pagando por la funcionalidad. Controla el acceso en la siguiente solicitud, no en la siguiente sesión. - Coloca los límites en los metadatos, no en el código. Cambiar una cuota solo requiere editar el entitlement; los nuevos clientes la obtienen automáticamente, mientras que los grants existentes conservan la configuración adquirida.