Un derecho de bandera de función convierte a Dodo Payments en un almacén de banderas de función consciente de la facturación. Adjunta una bandera como
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:- En la compra, se crea la concesión y pasa directamente a
delivered. No hay fase depending, no hay acción del cliente, y no hay forma de que la entrega falle. - La concesión lleva una carga útil tipificada
feature:{ "feature_type": "boolean", "feature_id": "advanced_reports" }. Tu aplicación leefeature_idpara decidir qué desbloquear. - La cancelación, reembolso o revocación manual mueven la concesión a
revoked, y tu aplicación ve desaparecer la bandera.
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
En tu panel de Dodo Payments, ve a Derechos y haz clic en + para iniciar un nuevo derecho, luego elige Banderas de Función.
Name the flag
Dale a la bandera un Nombre de Presentación para tu panel, un ID de Función que verificará tu aplicación (el panel sugiere uno a partir del nombre), y una Descripción para que tu equipo sepa qué controla.

Optionally add metadata
Activa Metadatos para adjuntar configuración clave-valor — límites, nombres de niveles, cuotas — que se entrega a tu aplicación junto con la bandera. Consulta Adjuntar límites con metadatos.
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.

Configuración requerida
| Campo | Requerido | Descripción |
|---|---|---|
feature_id | Sí | Identificador que verifica tu aplicación, por ejemplo, advanced_reports. No único entre derechos. |
feature_type | Sí | Tipo de capacidad conferida. Solo boolean es soportado hoy. |
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.
La carga útil
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
Las concesiones de bandera de función siguen el estándar ciclo de vida de concesión con una simplificación: no hay paso de entrega, por lo que las concesiones nunca se sitúan enpending y nunca pasan a failed.
| Disparador | Efecto |
|---|---|
| El pago único tiene éxito / suscripción se activa | Concesión creada con status: delivered e delivered_at establecido. |
| Suscripción suspendida, cancelada o caducada | Concesión revocada con la revocation_reason coincidente. |
| Reembolso en un pago único | Concesión revocada con revocation_reason: refund. |
| Suscripción se recupera (por ejemplo, cobro exitoso) | La concesión revocada se restaura a delivered — mismo id de concesión, campos de revocación despejados. |
| Revocación manual de API | Concesión revocada con revocation_reason: manual. No se restaura automáticamente en la renovación. |
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 yadeliveredcon la carga útilfeature. Activa la función.entitlement_grant.delivered— se activa cuando una concesión previamente revocada se restaura. Re-activa la función.entitlement_grant.revoked— acceso retirado. Desactiva la función y verificarevocation_reasonpara decidir tu mensajería.
TypeScript
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 la bandera.
feature_id: advanced_reportscon metadatos{ "tier": "pro", "monthly_report_limit": 100 }. - Adjúntala a tu producto de suscripción del Plan Pro.
- Un cliente se suscribe. Dodo Payments crea una concesión
deliveredy disparaentitlement_grant.created; tu manejador de webhooks habilitaadvanced_reportspara el cliente con un límite de 100. - Tu aplicación restringe la función. Al cargar el panel, verifica el conjunto de características en caché (o llama
listEntitlementGrants) y renderiza la pestaña de informes solo cuandoadvanced_reportsestá presente. - El cliente cancela. Dodo Payments revoca la concesión y dispara
entitlement_grant.revoked; tu manejador desactiva la función. Si el cliente luego se recupera a través de cobro,entitlement_grant.deliveredla restaura — no se necesitan cambios de código.
Mejores prácticas
- Usa ids de función estables y en snake_case. Tu código de aplicación verifica estas cadenas; renombrar una es un cambio de ruptura en ambos lados.
- Una bandera por capacidad. Prefiere
advanced_reports+api_accesscomo dos derechos sobre un solopro_bundle— la revocación y las mezclas de plan se mantienen limpias. - Impulsa el estado desde webhooks, verifica con la API. Los webhooks mantienen tu base de datos actualizada; el punto de lista es la fuente de verdad para trabajos de reconciliación y pérdidas de caché.
- Trata
revokedcomo inmediato. Una bandera revocada significa que el cliente ya no está pagando por la función. Verifica en la siguiente solicitud, no en la siguiente sesión. - Pon límites en metadatos, no en el código. Cambiar una cuota luego solo requiere editar el derecho — los nuevos clientes la adoptan automáticamente mientras que las concesiones existentes mantienen su instantánea comprada.
