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

# Digital Product Delivery

> Liefern Sie herunterladbare Dateien, externe Links und Download-Anweisungen automatisch, wenn Kunden kaufen. Die digitale Produktauslieferung ist der Berechtigungstyp für digitale Dateien. Dateien werden bei jedem Erhalt mit vorgenerierten Download-URLs ausgegeben und widerrufen, wenn der Zugriff entzogen wird.

## Overview

Die digitale Produktauslieferung ist der Berechtigungstyp **Digitale Dateien**. Sie laden Ihre Dateien einmal in eine Berechtigung für digitale Dateien hoch, fügen die Berechtigung einem Produkt hinzu, und Dodo Payments liefert vorgenerierte Download-Links an jeden zahlenden Kunden per E-Mail und im Kundenportal.

Die Berechtigung unterstützt:

* **Gehostete Datei-Uploads**: Speichern Sie Dateien bei Dodo Payments und bereitstellen über kurzlebige vorgenerierte URLs.
* **Externe Download-Links**: Verlinken Sie zu Dateien, die auf Dropbox, Google Drive, S3 oder einer beliebigen URL gehostet werden.
* **Download-Anweisungen**: Freiform-Text, der dem Kunden auf seiner Bestellseite und in der Liefer-E-Mail angezeigt wird.

Sie können alle drei auf einer einzigen Berechtigung kombinieren.

## Hauptmerkmale

<CardGroup cols={2}>
  <Card title="File Upload" icon="upload">
    Laden Sie Dateien (PDF, ZIP, Bilder, Videos, etc.) bis zu 500 MiB hoch. Dateien werden effizient gestreamt und gespeichert.
  </Card>

  <Card title="Multiple Files" icon="files">
    Fügen Sie einer einzigen Berechtigung so viele Dateien hinzu, wie Sie benötigen.
  </Card>

  <Card title="External Links" icon="link">
    Stellen Sie externe Download-Links (Dropbox, Google Drive, signierte S3-URLs) als Alternative oder Ergänzung bereit.
  </Card>

  <Card title="Presigned URLs" icon="lock">
    Gehostete Dateien werden über kurzlebige vorgenerierte URLs bereitgestellt. Jede Download-URL läuft automatisch nach etwa 15 Minuten ab.
  </Card>
</CardGroup>

***

## Digitale Produktauslieferung einrichten

<Steps>
  <Step title="Open Entitlements">
    Gehen Sie zu **Berechtigungen** in Ihrem Dodo Payments-Dashboard und klicken Sie auf **+**, um eine neue Berechtigung zu erstellen.
  </Step>

  <Step title="Choose Digital Files">
    Wählen Sie **Digitale Produktauslieferung** als Integration aus.
  </Step>

  <Step title="Add files, links, and instructions">
    Konfigurieren Sie jede Kombination von:

    * **Dateien**: Laden Sie eine oder mehrere Dateien hoch. Jeder Upload gibt einen `file_id` zurück, der der Berechtigung hinzugefügt wird.
    * **Externe URL**: Ein öffentlich erreichbarer HTTPS-Link, der zusammen mit gehosteten Dateien bereitgestellt wird.
    * **Anweisungen**: Freiform-Text, der dem Kunden angezeigt wird (z.B. "Entpacken und setup.sh ausführen").

    <Frame>
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/digital-files/create.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=33ad03277809d14585d247442c191462" alt="Berechtigung für digitale Dateien mit Dateiupload, externer URL und Anweisungsfeldern" style={{ maxHeight: '500px', width: 'auto' }} width="1669" height="989" data-path="images/entitlements/digital-files/create.png" />
    </Frame>
  </Step>

  <Step title="Save the entitlement">
    Speichern. Die Berechtigung kann jetzt jedem Produkt hinzugefügt werden.
  </Step>
</Steps>

## An Produkte anhängen

Öffnen Sie ein Produkt, erweitern Sie **Erweiterte Einstellungen → Berechtigungen & Gutschriften**, und wählen Sie Ihre Berechtigung für digitale Dateien. Die Berechtigung wird bei jedem erfolgreichen Kauf oder aktiven Abonnement, das mit diesem Produkt verknüpft ist, geliefert.

<Frame caption="Attaching the Digital Files entitlement to a product alongside other entitlements.">
  <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="Produktberechtigungen-Panel mit aktivierter digitaler Produktauslieferung" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1197" data-path="images/entitlements/attach-to-product.png" />
</Frame>

***

## Funktionsweise der Auslieferung

Die Auslieferung von digitalen Dateien folgt dem Standard [Lebenszyklus der Erteilung](/features/entitlements/introduction#how-grants-work):

| Ereignis                                         | Verhalten                                                                                                                                                                                                           |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `payment.succeeded` (einmalig)                   | Erteilen Sie eine Erlaubnis. Die Erlaubnis enthält vorgenerierte Download-URLs, die ca. 15 Minuten gültig sind; Kunden können sie durch erneutes Öffnen des E-Mail-Links oder der Kundenportal-Seite aktualisieren. |
| `subscription.active`                            | Erteilen Sie eine Erlaubnis. Dateien bleiben zugänglich, solange das Abonnement aktiv ist.                                                                                                                          |
| `subscription.renewed`                           | Keine Operation. Die gleiche Erlaubnis bleibt bestehen; neue vorgenerierte URLs werden bei jedem Abruf erstellt.                                                                                                    |
| `subscription.on_hold` / `cancelled` / `expired` | Widerrufen Sie die Erlaubnis. Neue vorgenerierte URLs werden nicht mehr ausgegeben.                                                                                                                                 |
| `subscription.plan_changed`                      | Widerrufen Sie die alte Erlaubnis; erteilen Sie eine neue für die Berechtigung des neuen Plans.                                                                                                                     |
| `refund.succeeded` (einmalig)                    | Widerrufen Sie die Erlaubnis.                                                                                                                                                                                       |
| Manuelles Widerrufen                             | Widerrufen Sie mit `revocation_reason: manual`.                                                                                                                                                                     |

<Warning>
  Der Widerruf stoppt Dodo Payments daran, neue Download-URLs auszugeben, aber er macht nicht Kopien ungültig, die ein Kunde bereits heruntergeladen hat. Behandeln Sie Downloads gehosteter Dateien als "einmal gelesen, dann geliefert".
</Warning>

***

## Kundenerfahrung

### Kaufbestätigung

Nach einer erfolgreichen Transaktion erhält der Kunde eine E-Mail mit Download-Links und allen von Ihnen konfigurierten Anweisungen.

<Frame>
  <img src="https://mintcdn.com/dodopayments/mOQO5ej_lx0yH9p-/images/digital-product-delivery/2.png?fit=max&auto=format&n=mOQO5ej_lx0yH9p-&q=85&s=54f5247f6d67fe5bb48736682995e23e" alt="Kaufbestätigungs-E-Mail mit Download-Links für digitale Produkte" style={{ maxHeight: '500px', width: 'auto' }} width="1920" height="1080" data-path="images/digital-product-delivery/2.png" />
</Frame>

### Kundenportal-Zugang

Kunden können jederzeit die Download-Links aus dem [Kundenportal](/features/customer-portal) abrufen. Die Portalseite generiert bei Bedarf neue vorgenerierte URLs, sodass derselbe Kauf auch dann funktioniert, wenn die Links in der E-Mail abgelaufen sind.

<Frame>
  <img src="https://mintcdn.com/dodopayments/mOQO5ej_lx0yH9p-/images/digital-product-delivery/3.png?fit=max&auto=format&n=mOQO5ej_lx0yH9p-&q=85&s=490c6755474c1f00a93f7adde7dabb63" alt="Kundenportal-Interface mit verfügbaren digitalen Produkten zum Download" style={{ maxHeight: '500px', width: 'auto' }} width="1920" height="1080" data-path="images/digital-product-delivery/3.png" />
</Frame>

<Check>
  Kunden können Dateien direkt aus Bestätigungs-E-Mails herunterladen oder jederzeit über ihr Portal darauf zugreifen.
</Check>

***

## Dateien programmgesteuert verwalten

### Eine Datei zu einer Berechtigung hochladen

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

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

  await client.entitlements.files.upload('ent_files_abc', {
    file: fs.createReadStream('./pro-bundle.zip'),
    filename: 'pro-bundle.zip',
  });
  ```

  ```bash cURL theme={null} theme={null}
  curl -X POST "https://test.dodopayments.com/entitlements/ent_files_abc/files" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -F "file=@./pro-bundle.zip" \
    -F "filename=pro-bundle.zip"
  ```
</CodeGroup>

### Erlaubnisse auflisten und Download-URLs auflösen

```typescript theme={null} theme={null}
const grants = await client.entitlements.grants.list('ent_files_abc', {
  customer_id: 'cus_abc123',
});

for (const grant of grants.items) {
  for (const file of grant.digital_product_delivery.files) {
    console.log(file.filename, file.download_url, `expires in ${file.expires_in}s`);
  }
}
```

### Eine Datei aus einer Berechtigung entfernen

```typescript theme={null} theme={null}
await client.entitlements.files.delete('ent_files_abc', 'df_a4f6c1de');
```

***

## Wichtige Überlegungen

* **Vorgenerierte URLs laufen schnell ab.** Download-URLs, die in Erlaubnis-Nutzlasten oder Webhook-Ereignissen zurückgegeben werden, sind ca. 15 Minuten gültig. Speichern Sie sie nicht; rufen Sie sie neu ab, wenn der Kunde erneut herunterladen muss.
* **Dateiaktualisierungen betreffen nur zukünftige Käufe.** Das Ersetzen oder Entfernen einer Datei ändert nicht rückwirkend Downloads, die bereits ausgegeben wurden. Frühere Kunden können weiterhin die Version abrufen, die aktuell war, als ihre Erlaubnis erstellt wurde.
* **Rückerstattungen machen heruntergeladene Kopien nicht ungültig.** Ein Kunde, der bereits eine Datei heruntergeladen hat, behält diese Kopie. Für widerrufbare Inhalte (lizenzbeschränkte Medien, zeitlich begrenzter Zugriff) kombinieren Sie digitale Dateien mit [Lizenzschlüsseln](/features/license-keys) und validieren Sie zur Laufzeit.
* **Für sensible Inhalte bevorzugen Sie externe URLs mit eigener Auth.** Vorgenerierte URLs von Dodo Payments laufen zwar kurzlebig ab, sind aber innerhalb ihres Fensters nicht authentifiziert; jeder mit der URL kann in diesem Fenster herunterladen. Extern gehostete, kontogeschützte Inhalte bieten stärkere Garantien.

***

## API-Verwaltung

<CardGroup cols={2}>
  <Card title="Create Entitlement" icon="plus" href="/api-reference/entitlements/create-entitlement">
    Erstellen Sie eine Berechtigung für digitale Dateien mit optionaler externer URL und Anweisungen.
  </Card>

  <Card title="Upload File" icon="upload" href="/api-reference/entitlements/upload-file">
    Laden Sie eine Datei (bis zu 500 MiB) hoch und fügen Sie sie der Berechtigung hinzu.
  </Card>

  <Card title="Delete File" icon="trash" href="/api-reference/entitlements/delete-file">
    Entfernen Sie eine Datei aus der Berechtigung.
  </Card>

  <Card title="List Grants" icon="users" href="/api-reference/entitlements/list-grants">
    Liste der Berechtigungen und lesen Sie die aufgelösten Download-URLs.
  </Card>

  <Card title="Update Entitlement" icon="pen" href="/api-reference/entitlements/update-entitlement">
    Aktualisieren Sie Anweisungen, externe URL oder ersetzen Sie Dateien.
  </Card>

  <Card title="Revoke Grant" icon="ban" href="/api-reference/entitlements/revoke-grant">
    Widerrufen Sie manuell den Zugriff eines Kunden.
  </Card>
</CardGroup>

***

## Webhooks

Digitale Dateiauslieferung und Widerruf lösen die vier [`entitlement_grant.*` Webhook-Ereignisse](/developer-resources/webhooks/intents/entitlement-grant) aus. Für Erlaubnisse für digitale Dateien enthält die Nutzlast ein `digital_product_delivery` Objekt mit der aufgelösten Dateiliste (vorgenerierte URLs, Dateinamen, Größen), dem optionalen `instructions` und dem optionalen `external_url`.

```json theme={null} theme={null}
"digital_product_delivery": {
  "files": [
    {
      "file_id": "df_a4f6c1de",
      "download_url": "https://files.dodopayments.com/.../pro-bundle.zip?Signature=...",
      "filename": "pro-bundle.zip",
      "content_type": "application/zip",
      "file_size": 18742390,
      "expires_in": 900
    }
  ],
  "instructions": "Unzip and run setup.sh from the project root.",
  "external_url": null
}
```

***

## Legacy digitale Produktauslieferung

<Note>
  Produkte, die mit dem älteren `digital_product_delivery` Block am Produkt selbst konfiguriert sind, wurden **automatisch migriert** zu einer Berechtigung für digitale Dateien. Vorhandene Dateien, die unter der Legacy-Produktdatei-API hochgeladen wurden, bleiben erhalten; sie sind weiterhin herunterladbar und erscheinen in Erlaubnis-Nutzlasten, die mit `source: "legacy"` gekennzeichnet sind. Zukünftige Updates (Hinzufügen von Dateien, Ändern von Anweisungen, Ersetzen der externen URL) sollten durch Bearbeiten der migrierten Berechtigung für digitale Dateien unter **Berechtigungen** vorgenommen werden.

  Die Legacy-Produktfeld-Level (`digital_product_delivery.external_url`, `digital_product_delivery.instructions`) werden weiterhin für Rückwärtskompatibilität in Produktantworten gefüllt, aber die Berechtigung ist die maßgebliche Quelle für die Zukunft.
</Note>

***

## Beste Praktiken

* **Behandeln Sie Downloads als einmalig.** Kunden werden Links teilen oder verlieren, daher sollten Sie Ihr Produkt so gestalten, dass alles, was sie herunterladen, ihnen gehört.
* **Verwenden Sie Anweisungen, um Erwartungen zu setzen.** Für Multi-Datei-Pakete fügen Sie eine `instructions` Zeile hinzu, die erklärt, was zuerst installiert werden soll oder wie die Dateien zu kombinieren sind.
* **Beachten Sie das 500 MiB-Limit.** Größere Artefakte (Multi-GB-Datensätze, Videokurse) sollten extern gehostet und über `external_url` verlinkt werden, anstatt sie hochzuladen.
* **Kombinieren Sie mit Lizenzschlüsseln für widerrufbaren Zugriff.** Wenn Sie den Zugriff auf in Produkt-Funktionen nach einer Rückerstattung widerrufen müssen, kombinieren Sie die Berechtigung für digitale Dateien mit einer Lizenzschlüsselberechtigung und validieren Sie den Schlüssel zur Laufzeit.
* **Testen Sie den Aktualisierungsfluss des Kundenportals.** Bestätigen Sie, dass ein Kunde eine Woche später zum Portal zurückkehren kann und immer noch einen funktionierenden Download-Link erhält. Dies ist der primäre Wiederherstellungsweg, wenn E-Mail-Links ablaufen.
