Concessão de Direitos
A carga útil enviada para seu endpoint de webhook quando uma concessão de direito é criada, entregue, falha ou é revogada.
Documentation Index
Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
Eventos de Webhook para Concessão de Direitos
Esses eventos são disparados sempre que a concessão de direitos de um cliente altera o estado, por exemplo, quando uma chave de licença é gerada, um papel do Discord é atribuído, um link de download é provisionado ou o acesso é revogado. Assine esses eventos para manter sua aplicação sincronizada com o que cada cliente pode acessar.| Evento | Descrição |
|---|---|
entitlement_grant.created | Uma nova linha de concessão foi criada. O status é delivered imediatamente para chaves de licença, e pending para todas as outras integrações. |
entitlement_grant.delivered | A concessão transita para entregue. O cliente agora tem acesso à plataforma, arquivo ou chave de licença atribuída. |
entitlement_grant.failed | A entrega falhou e não está sendo tentada novamente. Inspecione error_code e error_message. |
entitlement_grant.revoked | O acesso foi retirado. Inspecione revocation_reason para entender o motivo. |
EntitlementGrantResponse documentada no esquema abaixo.
Desencadeadores de Eventos
entitlement_grant.created
Uma linha de concessão foi inserida. A concessão sempre tem umid estável a partir deste ponto, mesmo que seu status mude. Use este evento para registrar que o cumprimento está em andamento.
Para chaves de licença, a linha é inserida diretamente com status: "delivered" e delivered_at preenchidos, então um único evento created é seguido por nenhuma alteração de estado adicional, a menos que a concessão seja posteriormente revogada.
Para todas as outras integrações, a linha chega com status: "pending". Um evento delivered ou failed segue uma vez que a entrega é concluída:
- Integrações baseadas em OAuth (Discord, GitHub, Notion) incluem um
oauth_urlque o cliente deve visitar para completar o consentimento. A concessão permanecependingaté que o cliente autorize. - Integrações diretas de plataforma (Telegram, Framer, Arquivos Digitais) ficam
pendingapenas brevemente enquanto a chamada de plataforma é executada, depois se movem paradelivered.
entitlement_grant.delivered
A concessão transitou depending para delivered. O cliente agora tem o acesso descrito pela concessão. Use este evento para desbloquear funcionalidades dependentes em seus próprios sistemas, por exemplo, para provisionar um espaço de trabalho, enviar um email de boas-vindas personalizado, ou marcar uma bandeira “cumprida”.
O campo delivered_at da carga útil captura quando a entrega foi concluída. Para concessões que chegaram delivered na criação, você receberá eventos created e delivered um após o outro.
entitlement_grant.failed
A entrega foi tentada e falhou com um erro não reativável. Os camposerror_code e error_message explicam a falha. Causas comuns incluem um token OAuth revogado, uma permissão de plataforma negada ou um alvo ausente (por exemplo, uma guilda do Discord excluída).
entitlement_grant.revoked
O acesso foi retirado no nível da plataforma: papel do Discord removido, colaborador do GitHub removido, chave de licença desativada, URLs de download de arquivos não são mais emitidos. O camporevocation_reason registra o disparador.
revocation_reason | Disparador |
|---|---|
subscription_cancelled | A assinatura do cliente foi cancelada (evento subscription.cancelled). |
subscription_on_hold | A assinatura está em espera devido a falha na renovação (subscription.on_hold). Recuperável: uma tentativa bem-sucedida produz uma nova concessão. |
subscription_expired | A assinatura chegou ao fim do seu termo (subscription.expired). |
plan_changed | O plano mudou; concessões antigas são revogadas antes de novas serem emitidas (subscription.plan_changed). |
refund | Um reembolso foi processado para o pagamento único original (refund.succeeded). |
manual | Um comerciante revogou a concessão via API ou painel. Revogações manuais não são automaticamente reativadas na renovação da assinatura. |
license_key_disabled | A chave de licença por trás de uma concessão de chave de licença foi desativada. A concessão é reativada automaticamente se a chave for reativada. |
platform_external | O lado da plataforma de uma integração saiu de sincronia (por exemplo, um papel do Discord foi removido manualmente, o aplicativo do GitHub perdeu acesso ao repositório, ou uma verificação de reconciliação detectou um alvo ausente). A concessão não é automaticamente reativada na renovação da assinatura até que o problema subjacente da plataforma seja resolvido. |
Variantes de Carga Útil
O campodata é sempre um objeto EntitlementGrantResponse. Dois tipos de integração anexam objetos aninhados extras:
license_keyé incluído quando o tipo de integração de concessão élicense_key. Ele contém a chave gerada, expiração e uso de ativação.digital_product_deliveryé incluído quando o tipo de integração édigital_files. Ele contém URLs de download pré-assinados, o opcionalinstructionse o opcionalexternal_url.
null; a configuração relevante é capturada na própria concessão, não na concessão.
Exemplos de Carga Útil
Chave de licença entregue (entitlement_grant.delivered)
Arquivos digitais entregues (entitlement_grant.delivered)
Papel do Discord criado e pendente (entitlement_grant.created)
Concessão revogada no cancelamento da assinatura (entitlement_grant.revoked)
Entrega falhou (entitlement_grant.failed)
Dicas de Integração
- Aguarde
entitlement_grant.deliveredantes de desbloquear funcionalidades dependentes. Um eventopayment.succeededindica que o pagamento foi processado; ele não informa se o cliente já tem o repositório GitHub ou o papel Discord. O eventodeliveredé a fonte da verdade para o cumprimento. - Mapeie
revocation_reasonpara fluxos de retenção. Uma revogaçãosubscription_on_holdgeralmente significa que o cartão do cliente falhou e a próxima renovação reativará o acesso. Uma revogaçãomanualousubscription_cancelledé intencional. Trate-os de forma diferente na comunicação com o cliente. - Use a concessão
idcomo sua chave de idempotência. Uma única concessão emite no máximo um eventocreatede no máximo um evento terminal (deliveredoufailed), e no máximo um eventorevoked. As re-entregas do sistema de webhook podem repetir eventos; deduplique na concessãoidmaistype. - Inspecione
license_keyedigital_product_deliverypara reconhecer o tipo de integração. A própria carga útil da concessão não transporta o tipo de integração, mas exatamente um desses objetos aninhados é preenchido para concessões de chave de licença e arquivos digitais. - Para concessões baseadas em OAuth, exiba
oauth_urlao cliente. O eventoentitlement_grant.createdpara fluxos de assinantes do Discord, GitHub ou Notion inclui umoauth_urleoauth_expires_at. Envie por email ao cliente ou exiba em seu aplicativo para desbloquear a entrega.
Detailed view of a single entitlement grant: who it's for, its lifecycle state, and any integration-specific delivery payload.
Identifier of the business that owns the grant.
Timestamp when the grant was created.
Identifier of the customer the grant was issued to.
Identifier of the entitlement this grant was issued from.
Unique identifier of the grant.
Arbitrary key-value metadata recorded on the grant.
Lifecycle status of the grant.
Pending, Delivered, Failed, Revoked Timestamp when the grant was last modified.
Timestamp when the grant transitioned to delivered, when applicable.
Digital-product-delivery payload, present when the entitlement
integration is digital_files.
Machine-readable code reported when delivery failed, when applicable.
Human-readable message reported when delivery failed, when applicable.
License-key delivery payload, present when the entitlement integration
is license_key.
Timestamp when oauth_url stops being valid, when applicable.
Customer-facing OAuth URL for OAuth-style integrations. Populated
during the customer-portal accept flow; null until the customer
completes that step, and on grants for non-OAuth integrations.
Identifier of the payment that triggered this grant, when applicable.
Reason recorded when the grant was revoked, when applicable.
Timestamp when the grant transitioned to revoked, when applicable.
Identifier of the subscription that triggered this grant, when applicable.