> ## 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.

# Introduktion

> Leverera automatiskt licensnycklar, nedladdningsbara filer, funktionsflaggor och tillgång till plattformar som Discord, GitHub, Telegram, Framer och Notion när kunder betalar.

<Info>
  Rättigheter förvandlar en lyckad betalning eller aktiv prenumeration till verklig åtkomst: en licensnyckel i kundens inkorg, en funktionsflagga som din app kontrollerar, en Discord-roll, ett GitHub-förråd, en Notion-mall, en Framer-remixlänk, en Telegram-chattinbjudan eller ett nedladdningsbart filpaket. Dodo Payments utfärdar, spårar och återkallar den åtkomsten automatiskt när betalningslivscykeln förändras.
</Info>

<Frame caption="The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.">
  <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=12a326205f64d1e71485bce46114d296" alt="Entitlements dashboard med en lista över entitlements till vänster och grant-aktiviteter till höger" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1195" data-path="images/entitlements/list.png" />
</Frame>

## Vad är Entitlements?

En **entitlement** är en återanvändbar definition av något du levererar till en kund: en Pro licensnyckel, en "Patrons"-roll i Discord, åtkomst till ditt privata GitHub-repository, ett nedladdningsbart e-bokpaket. Du fäster entitlements till produkter, och Dodo Payments hanterar resten.

När en kund köper produkten skapar Dodo Payments ett **grant**, en enskild kunds tilldelning av den entitlement. Grants rör sig genom ett litet antal statusar: `pending` medan leveransen pågår, `delivered` när kunden har tillgång, `failed` om leveransen inte kunde slutföras, och `revoked` när åtkomst återkallas.

<Tip>
  Entitlements avgränsar **uppfyllelse** (har kunden tillgång?). Krediter avgränsar **förbrukning** (hur mycket kan de använda?). Båda kan fästas till samma produkt. Se [Kreditbaserad Fakturering](/features/credit-based-billing) för krediter.
</Tip>

## Tillgängliga Integrationer

Dodo Payments levererar varje entitlement genom en dedikerad integration. Välj integrationen som matchar det du säljer.

<CardGroup cols={2}>
  <Card title="License Keys" icon="key" href="/features/license-keys">
    Generera unika licensnycklar med aktiveringsgränser och utgångsdatum. Bäst för mjukvara, plugins och CLI:er.
  </Card>

  <Card title="Digital Files" icon="download" href="/features/digital-product-delivery">
    Leverera nedladdningsbara filer (e-böcker, mallar, media) med undertecknade nedladdnings-URL:er och valfria instruktioner.
  </Card>

  <Card title="Feature Flags" icon="flag" href="/features/entitlements/feature-flags">
    Porta funktioner i din egen app mot ett köp. Levererat omedelbart, kontrollerat via API, återkallat vid avbokning.
  </Card>

  <Card title="Discord" icon="discord" href="/features/entitlements/discord">
    Ge en kund en roll i din Discord-server när de köper. Återkalla automatiskt vid avbokning.
  </Card>

  <Card title="GitHub" icon="github" href="/features/entitlements/github">
    Lägg till kunder som samarbetspartners i ett privat förråd på den tillståndsnivå du väljer.
  </Card>

  <Card title="Telegram" icon="telegram" href="/features/entitlements/telegram">
    Lägg till kunder i en privat Telegram-chatt eller kanal efter köp.
  </Card>

  <Card title="Framer" icon="puzzle-piece" href="/features/entitlements/framer">
    Lås upp en Framer-mallremixlänk för betalande kunder.
  </Card>

  <Card title="Notion" icon="book" href="/features/entitlements/notion">
    Dubbletter en Notion-mall till kundens arbetsyta vid köp.
  </Card>
</CardGroup>

***

## Hur rättigheterna fungerar

Rättigheter drivs av samma betalnings- och prenumerationshändelser som du redan tar emot som webhooks. Du behöver inte själv kalla på rättighets-API:t för köp. Dodo Payments skapar och återkallar rättigheter automatiskt baserat på den underliggande betalningslivscykeln.

### Rättigheternas livscykel

<Steps>
  <Step title="Created">
    En rättighet skapas när en betalning slutförs eller en prenumeration blir aktiv. Licensnycklar och funktionsflaggor hoppar direkt till `delivered`. Alla andra integrationer börjar i `pending`. OAuth-baserade integrationer (Discord, GitHub, Notion) inkluderar en `oauth_url` som kunden måste besöka för att slutföra samtycke. Plattform-direkta integrationer (Telegram, Framer, Digitala filer) stannar i `pending` endast kort medan leveransen förbereds, sedan övergår de till `delivered`.
  </Step>

  <Step title="Delivered">
    När leveransen är klar (licensnyckel genererad, roll tilldelad, förrådsåtkomst beviljad, fillänkar lösta, OAuth slutfört), flyttas rättigheten till `delivered` och `delivered_at` sätts.
  </Step>

  <Step title="Failed">
    Om integrationsanropet returnerar ett ej återförsökbart fel (återkallad OAuth-token, nekad behörighet, filen finns inte längre), flyttas rättigheten till `failed`. Fälten `error_code` och `error_message` fångar anledningen.
  </Step>

  <Step title="Revoked">
    När åtkomst tas bort (prenumeration avbokad, återbetalning utfärdad eller köpmaninitierad återkallelse), flyttas rättigheten till `revoked`. Fältet `revocation_reason` registrerar utlösaren.
  </Step>
</Steps>

### Rättighetsbeteende per händelse

| Händelse                                             | Beteende                                                                                                                                                                                                                                                                                                                                                            |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `payment.succeeded` (engångsbetalning)               | Utfärda en rättighet per bifogad rättighet.                                                                                                                                                                                                                                                                                                                         |
| `payment.succeeded` (prenumerationsbunden betalning) | No-op. Rättigheter drivs av prenumerationshändelsen nedan.                                                                                                                                                                                                                                                                                                          |
| `subscription.active`                                | Utfärda rättigheter för alla bifogade rättigheter som inte redan har en. Återgiv tidigare återkallade rättigheter för samma prenumeration.                                                                                                                                                                                                                          |
| `subscription.renewed`                               | No-op. Befintliga rättigheter kvarstår vid förnyelser.                                                                                                                                                                                                                                                                                                              |
| `subscription.on_hold`                               | Återkalla alla levererade och väntande rättigheter. `revocation_reason: subscription_on_hold`.                                                                                                                                                                                                                                                                      |
| `subscription.cancelled`                             | Återkalla alla. `revocation_reason: subscription_cancelled`.                                                                                                                                                                                                                                                                                                        |
| `subscription.expired`                               | Återkalla alla. `revocation_reason: subscription_expired`.                                                                                                                                                                                                                                                                                                          |
| `subscription.plan_changed`                          | Återkalla alla nuvarande rättigheter, sedan utfärda rättigheter för den nya planens rättigheter. `revocation_reason: plan_changed`.                                                                                                                                                                                                                                 |
| `refund.succeeded` (engångsbetalning)                | Återkalla rättigheter för den betalningen. `revocation_reason: refund`.                                                                                                                                                                                                                                                                                             |
| Manuell API-återkallelse                             | Återkalla med `revocation_reason: manual`. Manuella återkallanden återgrantas inte automatiskt vid prenumerationsförnyelse.                                                                                                                                                                                                                                         |
| Licensnyckel inaktiverad                             | För licensnyckelrättigheter, inaktiverar den underliggande nyckeln återkallar rättigheten med `revocation_reason: license_key_disabled`. Rättigheten återaktiveras automatiskt om nyckeln aktiveras igen.                                                                                                                                                           |
| Plattform drift upptäckt                             | Om plattformens sida av en integration går ur synk (en Discord-roll borttagen manuellt, GitHub-appen förlorar förrådsåtkomst, eller en avstämningspass upptäcker ett saknat mål), återkallas rättigheten med `revocation_reason: platform_external`. Inte automatiskt återgrantas vid prenumerationsförnyelse förrän det underliggande plattformsproblemet är löst. |

<Note>
  Prenumerationsdrivna rättigheter är idempotenta per `(entitlement, customer, subscription)`; förnyelser och återaktiveringar skapar inte dubbletträttigheter. Engångsrättigheter är idempotenta per `(entitlement, customer, payment)`.
</Note>

***

## Skapa din första rättighet

<Steps>
  <Step title="Open Entitlements">
    Gå till **Rättigheter** i din Dodo Payments-instrumentpanel och klicka på **+** för att skapa en ny rättighet.
  </Step>

  <Step title="Pick an integration">
    Välj integrationstyp: Licensnyckel, Digitala Filer, Funktionsflagga, Discord, GitHub, Telegram, Framer eller Notion. För plattformsintegrationer, anslut ditt konto först om du inte redan har gjort det.
  </Step>

  <Step title="Configure delivery">
    Fyll i integrationsspecifika fält. Till exempel, GitHub frågar efter ett förråd och en behörighetsnivå; Discord frågar efter en server och en valfri roll; Licensnyckel frågar efter aktiveringsbegränsningar och utgångsdatum.

    <Frame caption="Creating a GitHub entitlement. Each integration shows the fields it needs.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=722e925ec5158a5d16c58213132ccb9d" alt="Ny rättighetsform med integrationsväljare och konfigurationsfält" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1130" data-path="images/entitlements/github/create.png" />
    </Frame>
  </Step>

  <Step title="Save">
    Spara rättigheten. Du kan nu bifoga den till valfri produkt.
  </Step>
</Steps>

## Bifoga rättigheter till produkter

Öppna en produkt, expandera **Avancerade inställningar → Rättigheter & Krediter** och välj de rättigheter som ska levereras när produkten köps. En enda produkt kan leverera flera rättigheter samtidigt. Till exempel kan ett Pro-plan innehålla en licensnyckel, GitHub-åtkomst och en Discord-roll.

<Frame caption="Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.">
  <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=965ad78262791fa8dbb712b4fdf89538" alt="Produkturvalsutvidgningspanel som visar kryssrutor för varje tillgänglig rättighet" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1197" data-path="images/entitlements/attach-to-product.png" />
</Frame>

***

## Kundupplevelse

### E-post och kundportal

Kunder får ett leveransepostmeddelande efter köpet som innehåller licensnyckeln, nedladdningslänkar, OAuth-inbjudningslänkar eller plattformsinbjudan, vad som än gäller för produkternas rättigheter. Samma detaljer förblir tillgängliga på obestämd tid från [Kundportalen](/features/customer-portal) under deras orderhistorik.

### OAuth-baserad leverans

Discord, GitHub och Notion prenumerantåtkomst kräver att kunden auktoriserar Dodo Payments att ge dem åtkomst. Dessa rättigheter förblir i `pending`-status tills kunden slutför OAuth-flödet med länken från deras e-postmeddelande eller kundportal. När de auktoriserar flyttas rättigheten till `delivered` och plattformsåtkomsten tillhandahålls omedelbart.

### Återkallelse

Återkallade rättigheter tas bort på plattformsnivå: Discord-rollen tas bort, GitHub-samarbetaren tas bort, licensnyckeln inaktiveras. Kunder ser ändringen återspeglas i kundportalen.

<Warning>
  För Digitala Filer, återkallelse tar bort åtkomsten till de försignerade URL:erna framåt men ogiltigförklarar inte kopior en kund redan har laddat ner. Planera innehållsportering därefter.
</Warning>

***

## Hantera rättigheter

Öppna vilken rättighet som helst från instrumentpanelen för att se dess rättigheter. Rättighetspanelen visar totala rättigheter, statusfilter, kundinformation, leveransdatum och en återkallningsåtgärd.

Du kan också hantera rättigheter programmatisk:

<CodeGroup>
  ```typescript TypeScript theme={null} theme={null}
  import DodoPayments from 'dodopayments';

  const client = new DodoPayments({
    bearerToken: process.env['DODO_PAYMENTS_API_KEY'],
  });

  // List grants for an entitlement
  const grants = await client.entitlements.grants.list('ent_abc123', {
    status: 'Delivered',
  });

  // Revoke a single grant
  await client.entitlements.grants.revoke('grant_xyz789', {
    id: 'ent_abc123',
  });
  ```

  ```python Python theme={null} theme={null}
  client.entitlements.grants.list(
      "ent_abc123",
      status="Delivered",
  )

  client.entitlements.grants.revoke(
      "grant_xyz789",
      id="ent_abc123",
  )
  ```

  ```go Go theme={null} theme={null}
  grants, _ := client.Entitlements.Grants.List(
    ctx, "ent_abc123",
    dodopayments.EntitlementGrantListParams{Status: dodopayments.F("delivered")},
  )

  _, _ = client.Entitlements.Grants.Revoke(ctx, "grant_xyz789", "ent_abc123")
  ```
</CodeGroup>

***

## API-hantering

<CardGroup cols={2}>
  <Card title="Create Entitlement" icon="plus" href="/api-reference/entitlements/create-entitlement">
    Skapa en ny rättighet av vilken integrationstyp som helst.
  </Card>

  <Card title="List Entitlements" icon="list" href="/api-reference/entitlements/list-entitlements">
    Lista rättigheter med filtrering efter integrationstyp.
  </Card>

  <Card title="Get Entitlement" icon="magnifying-glass" href="/api-reference/entitlements/get-entitlement">
    Hämta en rättighet och dess lösta konfiguration.
  </Card>

  <Card title="Update Entitlement" icon="pen" href="/api-reference/entitlements/update-entitlement">
    Uppdatera namn, beskrivning eller integrationskonfiguration.
  </Card>

  <Card title="Delete Entitlement" icon="trash" href="/api-reference/entitlements/delete-entitlement">
    Soft-radera en rättighet; befintliga rättigheter påverkas inte.
  </Card>

  <Card title="Upload File" icon="upload" href="/api-reference/entitlements/upload-file">
    Ladda upp en fil till en digital filrättighet (upp till 500 MiB).
  </Card>

  <Card title="List Grants" icon="users" href="/api-reference/entitlements/list-grants">
    Lista alla rättigheter för en rättighet med status och kundfilter.
  </Card>

  <Card title="Revoke Grant" icon="ban" href="/api-reference/entitlements/revoke-grant">
    Återkalla en enskild rättighet manuellt.
  </Card>
</CardGroup>

***

## Webhooks

Dodo Payments skickar fyra webhook-händelser för rättighetslivscykeln. Prenumerera på dessa händelser för att hålla din applikation i synk med vad varje kund kan få åtkomst till.

| Händelse                      | Utlöses när                                                                                                                                                                                                                                  |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `entitlement_grant.created`   | En ny rättighet skapas. Licensnyckelrättigheter anländer `delivered`; varje annan integration anländer `pending` och övergår till `delivered` när plattformsanropet lyckas (eller för OAuth-baserade integrationer, när kunden har godkänt). |
| `entitlement_grant.delivered` | Rättigheten övergår till levererat. Kunden har nu åtkomst.                                                                                                                                                                                   |
| `entitlement_grant.failed`    | Rättigheten kunde inte levereras. Inspektera `error_code` och `error_message`.                                                                                                                                                               |
| `entitlement_grant.revoked`   | Åtkomst har tagits bort. Inspektera `revocation_reason`.                                                                                                                                                                                     |

<Card title="Entitlement Grant Webhook Payloads" icon="bell" href="/developer-resources/webhooks/intents/entitlement-grant">
  Se hela payload-schemat, exempelhändelser och `revocation_reason` referens.
</Card>

***

## Bästa praxis

* **Använd en rättighet per leveranskanal.** Dela inte en enda Discord-rättighet över produkter med olika rollavsikter; skapa en per roll för ren återkallelse.
* **Testa i testläge först.** Skapa rättigheten, bifoga den till en testprodukt, genomför ett köp och se rättigheten övergå genom `pending → delivered`. Bekräfta att avbokning av testprenumerationen återkallar rättigheten.
* **Lyssna på `entitlement_grant.delivered`, inte `payment.succeeded`.** En betalning kan lyckas innan fullföljandet slutförs (särskilt för OAuth-flöden). Vänta på leveranshändelsen innan du låser upp beroende funktioner i dina egna system.
* **Behandla `entitlement_grant.failed` som åtgärdbar.** En misslyckad rättighet betyder att en kund betalade men inte fick åtkomst. Visa dessa för ditt supportteam eller utlöse en ny beviljning.
* **Map `revocation_reason` till dina retentionflöden.** En `subscription_on_hold` återkallelse är återvinningsbar (kunden kan uppdatera sitt kort). En `manual` återkallelse är avsiktlig. Behandla dem olika i kundkommunikation.
