Skip to main content
Uma concessão de feature flag transforma Dodo Payments em um armazenamento de feature flags com conhecimento de billing. Anexe uma flag como advanced_reports a um produto, e cada cliente pagante recebe uma concessão que sua aplicação verifica por meio da API ou mantém sincronizada com webhooks. Não há plataforma externa, etapa de OAuth ou etapa de entrega: a própria concessão é a capacidade.

O que é entregue

Nada sai do Dodo Payments. A concessão é o entregável:
  • Na compra, o Dodo Payments cria a concessão diretamente em Delivered. Ela nunca entra em Pending, não exige nenhuma ação do cliente e não tem uma etapa de entrega que possa falhar.
  • A concessão contém um payload feature tipado: { "feature_type": "boolean", "feature_id": "advanced_reports" }. Sua aplicação lê feature_id para decidir o que desbloquear.
  • Cancelamento, reembolso ou uma revogação manual move a concessão para Revoked, e a flag desaparece das concessões entregues ao cliente.
Usos comuns incluem feature gating baseado em plano (Pro desbloqueia analytics), capacidades adicionais (um upgrade de “acesso à API”), e programas de acesso antecipado vendidos como compras únicas.
feature_id é um identificador escolhido por você e não é exclusivo entre as concessões. Duas concessões podem conferir o mesmo feature_id, por exemplo, um plano Pro mensal e um anual que concedem advanced_reports.

Criar uma feature flag

1

Open Entitlements

No dashboard do Dodo Payments, acesse Entitlements e clique em + para iniciar uma nova concessão; depois, escolha Feature Flags.
2

Name the Flag

Insira um Display Name para o dashboard e os relatórios e uma Description para que sua equipe saiba o que a flag controla. O Feature ID é o que sua aplicação verifica. O dashboard o preenche com base no nome de exibição (por exemplo, “API access” se torna api_access), e você pode editá-lo. Ele não pode conter espaços.
Novo formulário de Feature Flag com nome de exibição, ID de recurso, descrição e entradas de metadados chave-valor

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

3

Add Metadata (Optional)

Ative Meta Data para anexar uma configuração de chave-valor, como limites, nomes de níveis ou cotas, que sua aplicação recebe junto com a flag. Clique em Add Entry para cada par. Consulte Anexar limites com metadados.
4

Confirm

Clique em Confirmar. A flag aparece na sua lista de entitlements, pronta para ser anexada aos produtos.
Painel de Entitlements mostrando a feature flag de Advanced Reports com seu painel de atividades de concessão

The created feature flag. The right pane tracks every customer grant issued from it.

Anexar a um produto

Abra um produto ou crie um e localize o card Entitlements. Clique em + para anexar concessões existentes, selecione sua feature flag e clique em Done.
Painel de anexação de Entitlements com a feature flag de Advanced Reports selecionada

Attaching the feature flag to a product. One product can deliver multiple entitlements.

A flag anexada aparece no formulário do produto, e a visualização da finalização da compra a lista em Inclui.
Formulário de produto com a feature flag de Advanced Reports anexada no cartão de Entitlements

The product now includes the feature flag. Every successful purchase or active subscription grants it.

Configuração obrigatória

Criar via API


Anexar limites com metadados

Uma flag booleana responde a “Este cliente tem o recurso?”. Os metadados respondem a “Com qual configuração?”. Os metadados da concessão aceitam valores de string, inteiro, número e booleano. Cada concessão recebe um snapshot congelado dos metadados da concessão quando é criada. O snapshot é o que torna seguro usar metadados para limites de planos:
  • Editar os metadados da concessão posteriormente afeta apenas concessões futuras. Os clientes mantêm os limites sob os quais compraram.
  • Cada concessão retorna seu snapshot no campo metadata, portanto uma chamada à API fornece a flag e sua configuração.
Por exemplo, uma flag advanced_reports com { "tier": "pro", "monthly_report_limit": 100 } permite que sua aplicação desbloqueie o dashboard e aplique a cota de 100 relatórios sem uma segunda consulta. Se você aumentar o limite posteriormente para 250, os clientes existentes continuarão com 100 até receberem uma nova concessão, por exemplo, após uma alteração de plano.
Use metadados para limites e configuração e use feature_id apenas para identidade. Codificar um limite no ID (advanced_reports_100) exige uma nova flag a cada alteração de limite e interrompe as verificações da sua aplicação.

Verificar os recursos de um cliente

Para criar o conjunto de recursos que um cliente possui, liste suas concessões de feature flags entregues. O endpoint retorna uma linha por concessão em todas as concessões, e você pode filtrá-lo por integration_type e status. Estes exemplos usam o client de Criar via API.
O payload feature é preenchido apenas em concessões feature_flag. Ele é null para todos os outros tipos de integração. Consulte a referência da API Listar concessões de clientes para ver o formato completo da resposta.
Chamar a API a cada solicitação adiciona latência ao seu hot path. Armazene em cache o conjunto de recursos de cada cliente com um TTL curto (minutos, não horas) e invalide o cache no handler do webhook quando uma concessão mudar de estado. Juntos, esses procedimentos mantêm as verificações rápidas e fazem com que as revogações tenham efeito na próxima solicitação.

Ciclo de vida

As concessões de feature flags seguem o ciclo de vida padrão das concessões, com uma simplificação: não há etapa de entrega, portanto as concessões nunca ficam em Pending e nunca passam para Failed. As concessões são idempotentes por concessão e cliente. Enquanto um cliente tiver uma concessão não revogada para uma flag, compras repetidas e renovações não criarão duplicatas.

Webhooks

Para espelhar as flags em seu próprio banco de dados em vez de fazer polling, assine os eventos entitlement_grant.*:
  • entitlement_grant.created chega já em Delivered, com o payload feature. Habilite o recurso.
  • entitlement_grant.delivered é disparado quando uma concessão anteriormente revogada é restaurada. Habilite o recurso novamente.
  • entitlement_grant.revoked significa que o acesso foi retirado. Desabilite o recurso e verifique revocation_reason para escolher sua mensagem.
Este handler do Express verifica a assinatura do webhook com o SDK e, em seguida, armazena o estado da flag:
TypeScript
As feature flags nunca disparam entitlement_grant.failed, porque a entrega acontece inteiramente dentro do Dodo Payments.

Exemplo: o plano Pro desbloqueia relatórios avançados

  1. Crie a flag. Defina feature_id: advanced_reports com os metadados { "tier": "pro", "monthly_report_limit": 100 }.
  2. Anexe-a ao produto de assinatura do seu plano Pro.
  3. Um cliente assina. O Dodo Payments cria uma concessão Delivered e dispara entitlement_grant.created. Seu handler de webhook habilita advanced_reports para o cliente com um limite de 100.
  4. Sua aplicação controla o acesso ao recurso. Ao carregar o dashboard, verifique o conjunto de recursos armazenado em cache (ou chame listEntitlementGrants) e renderize a aba de relatórios somente quando advanced_reports estiver presente.
  5. O cliente cancela. O Dodo Payments revoga a concessão e dispara entitlement_grant.revoked, e seu handler desabilita o recurso. Se uma assinatura se recuperar posteriormente por meio de dunning, entitlement_grant.delivered restaura o recurso sem alterações no código.

Boas práticas

  • Use IDs de recursos estáveis em snake_case. O código da sua aplicação verifica essas strings, portanto renomear uma delas é uma alteração incompatível nos dois lados.
  • Use uma flag por capacidade. Prefira advanced_reports e api_access como duas concessões, em vez de uma única pro_bundle, para manter organizadas a revogação e as combinações de planos.
  • Baseie o estado em webhooks e verifique com a API. Os webhooks mantêm seu banco de dados atualizado. O endpoint de listagem é a fonte de verdade para jobs de reconciliação e falhas de cache.
  • Trate Revoked como imediato. Uma flag revogada significa que o cliente não paga mais pelo recurso. Controle o acesso na próxima solicitação, não na próxima sessão.
  • Coloque os limites nos metadados, não no código. Alterar uma cota exige apenas editar a concessão. Novos clientes recebem o novo valor, e as concessões existentes mantêm o snapshot que foi comprado.
Última modificação em 26 de setembro de 2026