Rättighetsbeviljande
Den nyttolast som skickas till din webhook-endpoint när ett rättighetsbeviljande skapas, levereras, misslyckas eller återkallas.
Webhook-händelser för rättighetsbeviljande
Dessa händelser utlöses när en kunds rättighetsbeviljande ändrar tillstånd, till exempel när en licensnyckel genereras, en Discord-roll tilldelas, en nedladdningslänk tillhandahålls eller åtkomst återkallas. Prenumerera på dessa händelser för att hålla din applikation synkroniserad med vad varje kund kan komma åt.EntitlementGrantResponse nyttolast dokumenterad i schemat nedan.
Händelsetriggare
entitlement_grant.created
En rad för beviljande infogades. Beviljandet har alltid ett stabiltid från och med nu, även om dess status ändras. Använd den här händelsen för att registrera att uppfyllelsen pågår.
För automatiskt uppfyllda licensnycklar och feature flags infogas raden direkt med status: "Delivered" och delivered_at ifyllda, så att en enda created-händelse följs av inga ytterligare statusändringar, såvida beviljandet inte senare återkallas.
För manuellt uppfyllda licensnycklar (entitlements med fulfillment_mode: manual) kommer raden med status: "Pending" och utan något license_key-objekt — det finns ännu ingen nyckel. Den här händelsen signalerar att en nyckel väntar på att uppfyllas; leverera den via POST /grants/{grant_id}/license-key, vilket sedan utlöser entitlement_grant.delivered. Se Manuell uppfyllelse.
För alla andra integrationer kommer raden med status: "Pending". En delivered- eller failed-händelse följer när leveransen har slutförts:
- OAuth-baserade integrationer (Discord, GitHub, Notion) använder en
oauth_urlsom kunden måste besöka för att slutföra medgivandet. Dodo Payments försöker skapa den när grantet skapas, såentitlement_grant.createdkan innehålla den. Om den ärnullfylls den i när kunden startar acceptflödet från Customer Portal. Grantet förblirPendingtills kunden har auktoriserat. - Plattformsdirekta integrationer (Telegram, Framer, Digital Files) förblir
Pendingendast kortvarigt medan plattformsanropet körs och flyttas sedan tillDelivered.
pending till delivered. Kunden har nu åtkomsten som beskrivs av rättigheterna. Använd denna händelse för att låsa upp beroende funktioner i dina egna system, till exempel för att tillhandahålla en arbetsyta, skicka ett anpassat välkomstmail eller markera en “uppfylld” flagga.
Beviljandet övergick till Delivered, vanligtvis från Pending. Kunden har nu den åtkomst som beskrivs av berättigandet. Använd den här händelsen för att låsa upp beroende funktioner i dina egna system, till exempel genom att provisionera en arbetsyta, skicka ett anpassat välkomstmeddelande eller markera en “fulfilled”-flagga.
Fältet delivered_at i payloaden anger när leveransen slutfördes. delivered utlöses varje gång statusen för ett befintligt beviljande ändras till Delivered: från Pending, när ett misslyckat OAuth-beviljande senare lyckas eller när ett återkallat beviljande återställs. Ett beviljande som anländer som Delivered vid skapandet, till exempel en automatiskt uppfylld licensnyckel, utlöser endast created.
Leverans försöktes och misslyckades med ett icke-återprovbart fel. Fälten error_code och error_message förklarar felet. Vanliga orsaker inkluderar en återkallad OAuth-token, en nekad plattformsbehörighet eller ett saknat mål (t.ex., en raderad Discord-gille).
entitlement_grant.revoked
Åtkomst drogs tillbaka på plattformsnivån: Discord-roll borttagen, GitHub-samarbetare borttagen, licensnyckel inaktiverad, filnedladdnings-URL:er ej längre tillhandahållna. Fältetrevocation_reason registrerar utlösaren.
Nyttolastvarianter
Fältetdata är alltid ett EntitlementGrantResponse-objekt. Två integrationstyper bifogar extra kapslade objekt:
Fältet data är alltid ett EntitlementGrantResponse-objekt. Payloaden innehåller ett integration_type-fält (till exempel license_key, digital_files, discord), så att du kan identifiera grant-typen direkt. Tre integrationstyper innehåller dessutom extra nästlade objekt:
license_keyinkluderas närintegration_typeärlicense_keyoch en nyckel har utfärdats. Det innehåller den genererade nyckeln, utgångsdatumet och aktiveringsanvändningen. För en manuellt uppfylld grant som fortfarande ärPendingär det här objektetnulltills du uppfyller grant.digital_product_deliveryinkluderas närintegration_typeärdigital_files. Det innehåller försignerade nedladdnings-URL:er, den valfriainstructionsoch den valfriaexternal_url.featureinkluderas närintegration_typeärfeature_flag. Det innehållerfeature_typeochfeature_idför den kapacitet som grant ger.
null; den relevanta konfigurationen finns i själva entitlement, inte i grant.
Exempel på nyttolaster
Licensnyckel levererad (entitlement_grant.delivered)
Licensnyckel levererad (entitlement_grant.delivered)
Licensnyckel väntar på manuell uppfyllelse (entitlement_grant.created)
Utlöses när en kund köper en produkt vars License Key-entitlement använder fulfillment_mode: manual. Grant är Pending utan något license_key-objekt ännu — merchant måste tillhandahålla nyckeln.
Digitala filer levererade (entitlement_grant.delivered)
Discord-roll skapad och väntande (entitlement_grant.created)
Beviljande återkallat vid avslutad prenumeration (entitlement_grant.revoked)
Leveransen misslyckades (entitlement_grant.failed)
Integreringstips
- Lås upp beroende funktioner när ett grant når
Delivered. Enpayment.succeeded-händelse talar om för dig att pengarna har gått igenom; den talar inte om att kunden redan har GitHub-repot eller Discord-rollen. Hanteraentitlement_grant.delivered, och ävenentitlement_grant.createdmedstatus: "Delivered", eftersom ett grant som levereras när det skapas inte utlöser någondelivered-händelse. - Koppla
revocation_reasontill retentionflöden. Ettsubscription_on_holdrevoke innebär vanligtvis att kundens kort misslyckades och att nästa förnyelse kommer att bevilja åtkomsten igen. Ettmanual- ellersubscription_cancelledrevoke är avsiktligt. Hantera dem olika i kundkommunikationen. - Identifiera dubbletter med
webhook-id-headern, inte grantetsid. Ett grant skickarcreateden gång, mendeliveredochrevokedkan var och en utlösas flera gånger, eftersom ett återkallat grant kan återställas och återkallas igen.failedär inte heller alltid slutgiltigt: ett misslyckat OAuth-grant kan fortfarande levereras. Oleveranser från webhook-systemet kan också upprepa en händelse. Hoppa över upprepningar baserat påwebhook-idoch använd grantetsidsom nyckel för dina egna grant-poster. - Läs
integration_typeför att identifiera granttypen. Payloaden innehållerintegration_typedirekt (till exempellicense_key,digital_files,discord). De nästlade objektenlicense_keyochdigital_product_deliveryfylls i när deras respektive grant har levererats. Ett manuellt uppfyllt license-key-grant förblirPendingmedintegration_type: "license_key"och ettnulllicense_keytills du uppfyller det. - För OAuth-baserade grant ska du visa
oauth_urlför kunden.entitlement_grant.created-händelsen för prenumerantflöden i Discord, GitHub eller Notion kan innehålla enoauth_urlochoauth_expires_at. Om den ärnullväntar du på en senare händelse eller hänvisar kunden till Customer Portal. Skicka URL:en till kunden via e-post eller visa den i din app för att möjliggöra leveransen.
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.