Concessione di Diritti
Il payload inviato al tuo endpoint webhook quando una concessione di diritti è creata, consegnata, fallita o revocata.
Eventi Webhook di Concessione di Diritti
Questi eventi vengono attivati ogni volta che lo stato della concessione di diritti di un cliente cambia, ad esempio quando viene generata una chiave di licenza, viene assegnato un ruolo Discord, viene fornito un link di download, o l’accesso viene revocato. Abbonati a questi eventi per mantenere la tua applicazione sincronizzata con ciò a cui ogni cliente può accedere.EntitlementGrantResponse documentato nello schema qui sotto.
Trigger degli Eventi
entitlement_grant.created
È stata inserita una riga grant. Da questo momento il grant ha sempre unid stabile, anche se il suo stato cambia. Usa questo evento per registrare che l’evasione è in corso.
Per le license key evase automaticamente e i feature flag, la riga viene inserita direttamente con status: "Delivered" e delivered_at valorizzati, quindi un singolo evento created non è seguito da ulteriori cambiamenti di stato, a meno che il grant non venga revocato successivamente.
Per le license key soddisfatte manualmente (entitlement con fulfillment_mode: manual), la riga arriva con status: "Pending" e senza l’oggetto license_key: la key non è ancora disponibile. Questo evento segnala che una key è in attesa di fulfillment; fornisci la key tramite POST /grants/{grant_id}/license-key, che genera quindi entitlement_grant.delivered. Consulta Manual Fulfillment.
Per ogni altra integrazione, la riga arriva con status: "Pending". Al completamento della delivery segue un evento delivered o failed:
- Le integrazioni basate su OAuth (Discord, GitHub, Notion) utilizzano un
oauth_urlche il cliente deve visitare per completare il consenso. Dodo Payments prova a crearlo quando viene creato il grant, quindientitlement_grant.createdpotrebbe includerlo; se ènull, viene compilato quando il cliente avvia il flusso di accettazione dal Customer Portal. Il grant rimanePendingfinché il cliente non lo autorizza. - Le integrazioni dirette con la piattaforma (Telegram, Framer, Digital Files) rimangono in
Pendingsolo brevemente mentre viene eseguita la chiamata alla piattaforma, quindi passano aDelivered.
pending a delivered. Il cliente ora ha l’accesso descritto dal diritto. Usa questo evento per sbloccare funzionalità dipendenti nei tuoi sistemi, per esempio per fornire uno spazio di lavoro, inviare un’email di benvenuto personalizzata, o segnare un flag “adempiuto”.
Il grant è passato a Delivered, generalmente da Pending. Il cliente ora dispone dell’accesso descritto dal diritto. Usa questo evento per sbloccare le funzionalità dipendenti nei tuoi sistemi, ad esempio per effettuare il provisioning di un workspace, inviare un’email di benvenuto personalizzata o contrassegnare un flag “fulfilled”.
Il campo delivered_at del payload registra il momento in cui la delivery è stata completata. delivered viene emesso ogni volta che lo stato di un grant esistente cambia in Delivered: da Pending, quando un grant OAuth fallito ha successivamente esito positivo, o quando un grant revocato viene ripristinato. Un grant che arriva a Delivered al momento della creazione, come una license key evasa automaticamente, emette solo created.
La consegna è stata tentata e fallita con un errore non ripetibile. I campi error_code e error_message spiegano il fallimento. Cause comuni includono un token OAuth revocato, un permesso della piattaforma negato, o un target mancante (es. una gilda Discord eliminata).
entitlement_grant.revoked
L’accesso è stato revocato a livello di piattaforma: ruolo Discord rimosso, collaboratore GitHub rimosso, chiave di licenza disabilitata, URL di download del file non più emessi. Il camporevocation_reason registra il trigger.
Varianti di Payload
Il campodata è sempre un oggetto EntitlementGrantResponse. Due tipi di integrazione allegano oggetti annidati extra:
Il campo data è sempre un oggetto EntitlementGrantResponse. Il payload contiene un campo integration_type (ad esempio license_key, digital_files, discord) che consente di riconoscere direttamente il tipo di grant. Tre tipi di integrazione includono inoltre oggetti annidati aggiuntivi:
license_keyè incluso quandointegration_typeèlicense_keye una key è stata emessa. Contiene la key generata, la scadenza e l’utilizzo per l’attivazione. Per un grant soddisfatto manualmente ancora in statoPending, questo oggetto ènullfinché non completi il fulfillment del grant.digital_product_deliveryè incluso quandointegration_typeèdigital_files. Contiene URL di download presigned, l’elemento opzionaleinstructionse l’elemento opzionaleexternal_url.featureè incluso quandointegration_typeèfeature_flag. Contienefeature_typeefeature_iddella capacità conferita dal grant.
null; la configurazione pertinente è acquisita nell’entitlement stesso, non nel grant.
Esempi di Payload
Chiave di licenza consegnata (entitlement_grant.delivered)
License Key consegnata (entitlement_grant.delivered)
License Key in attesa di evasione manuale (entitlement_grant.created)
Generato quando un cliente acquista un prodotto il cui entitlement License Key utilizza fulfillment_mode: manual. Il grant è Pending e non contiene ancora l’oggetto license_key: il merchant deve fornire la key.
File digitali consegnati (entitlement_grant.delivered)
Ruolo Discord creato e in attesa (entitlement_grant.created)
Grant revocato in seguito alla cancellazione dell’abbonamento (entitlement_grant.revoked)
Delivery non riuscita (entitlement_grant.failed)
Suggerimenti per l’integrazione
- Sblocca le funzionalità dipendenti quando un grant raggiunge
Delivered. Un eventopayment.succeededti informa che il pagamento è stato completato; non indica che il cliente abbia già il repository GitHub o il ruolo Discord. Gestiscientitlement_grant.deliverede ancheentitlement_grant.createdconstatus: "Delivered", perché un grant consegnato al momento della creazione non genera alcun eventodelivered. - Associa
revocation_reasonai flussi di retention. Una revocasubscription_on_holddi solito indica che la carta del cliente non è andata a buon fine e che il rinnovo successivo concederà nuovamente l’accesso. Una revocamanualosubscription_cancelledè intenzionale. Gestiscile in modo diverso nei messaggi al cliente. - Rileva i duplicati con l’header
webhook-id, non coniddel grant. Un grant emettecreateduna sola volta, madeliverederevokedpossono essere attivati più volte, perché un grant revocato può essere ripristinato e revocato nuovamente. Anchefailednon è sempre definitivo: un grant OAuth non riuscito può comunque essere consegnato. Le nuove consegne dal sistema webhook possono inoltre ripetere un evento. Ignora le ripetizioni usandowebhook-ide usaiddel grant come chiave per i tuoi record dei grant. - Leggi
integration_typeper riconoscere il tipo di grant. Il payload contiene direttamenteintegration_type(ad esempiolicense_key,digital_files,discord). Gli oggetti annidatilicense_keyedigital_product_deliveryvengono popolati dopo la consegna dei rispettivi grant; un grant con license key completato manualmente rimanePendingconintegration_type: "license_key"e unnulllicense_keyfinché non lo completi. - Per i grant basati su OAuth, mostra
oauth_urlal cliente. L’eventoentitlement_grant.createdper i flussi degli abbonati Discord, GitHub o Notion può includere unoauth_urleoauth_expires_at. Se ènull, attendi un evento successivo o indirizza il cliente al Customer Portal. Invia l’URL al cliente tramite email oppure visualizzalo nella tua app per sbloccare la consegna.
Detailed view of a single entitlement grant: who it's for, its lifecycle state, and any integration-specific delivery payload.
Brand id this grant belongs to.
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.
The integration type of the grant's entitlement (e.g. license_key).
discord, telegram, github, figma, framer, notion, digital_files, license_key, feature_flag 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.
Typed feature payload, present only when the entitlement integration is
feature_flag; null for every other integration type.
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.