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

# Rabatte

> Erstellen Sie Aktionscodes, um Konversionen zu fördern, Kampagnen durchzuführen und Kunden mit prozentualen Rabatten bei Einzel- und Abonnementkäufen zu belohnen.

<Frame>
  <img src="https://mintcdn.com/dodopayments/mOQO5ej_lx0yH9p-/images/discount-codes/discount-code-cover.png?fit=max&auto=format&n=mOQO5ej_lx0yH9p-&q=85&s=57f1a644801ddc5efc506b50541eaaba" alt="Rabattcodes Übersicht Umschlag" style={{ maxHeight: '500px', width: 'auto' }} width="1200" height="630" data-path="images/discount-codes/discount-code-cover.png" />
</Frame>

Rabattcodes ermöglichen zielgerichtete Werbeaktionen und Anreize. Erstellen Sie prozentuale Rabatte, legen Sie Limits und Abläufe fest, beschränken Sie auf Produkte und wenden Sie sie nahtlos beim Checkout an.

<CardGroup cols={2}>
  <Card title="Checkout Sessions" icon="cart-shopping" href="/developer-resources/checkout-session">
    Wenden Sie während des gehosteten Checkouts mit `discount_codes` einen oder mehrere gestapelte Codes an und nutzen Sie die UI-Steuerungen.
  </Card>

  <Card title="Validate Discount" icon="code" href="/api-reference/discounts/validate-discount">
    Prüfen Sie, ob ein Rabatt über seine ID gültig ist.
  </Card>

  <Card title="Get Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
    Suchen und validieren Sie einen Rabatt über seinen Code-Namen (z. B. „SAVE20“).
  </Card>

  <Card title="Create Discount (API)" icon="code" href="/api-reference/discounts/create-discount">
    Erstellen Sie programmatisch neue Rabattcodes.
  </Card>

  <Card title="List & Update Discounts" icon="code" href="/api-reference/discounts/list-discounts">
    Durchsuchen und verwalten Sie bestehende Rabatte; aktualisieren oder löschen Sie diese bei Bedarf.
  </Card>

  <Card title="Plan Change Discounts" icon="arrows-rotate" href="/api-reference/subscriptions/change-plan">
    Wenden Sie Rabattcodes beim Upgraden oder Downgraden von Abonnementplänen an.
  </Card>
</CardGroup>

## Was sind Rabattcodes?

Rabattcodes sind Promotionstoken, die die Bestellsumme an der Kasse reduzieren. Sie eignen sich ideal für:

* **Saisonale Kampagnen**: Black Friday, Produkteinführungen oder Jubiläen
* **Akquisitionsangebote**: Anreize für Ersterwerb oder Empfehlungsbelohnungen
* **Bindung**: Rückgewinnungs- oder Treuebelohnungen für bestehende Kunden
* **B2B-Deals**: Vereinbarte oder ausgehandelte Preise über private Codes

## Hauptvorteile

* **Flexible Rabatte**: Prozentuale Rabatte
* **Kombinierbare Codes**: Wenden Sie bis zu 20 Codes pro Checkout, Zahlung oder Abonnement an — kombinieren Sie Kampagnen (z. B. `WELCOME10` + `BLACKFRIDAY20`), ohne individuelle Codes zu erstellen
* **Gezielte Kontrolle**: Beschränkung nach Produkt- und Abonnementzyklen
* **Kampagnenverwaltung**: Ablaufdaten und Nutzungsbeschränkungen
* **Nahtloser Checkout**: UI-Feld und API-Unterstützung über Checkout-Sitzungen

## Rabattcodes erstellen

Erstellen Sie Rabattcodes in Ihrem Dodo Payments-Dashboard und wenden Sie diese im gehosteten Checkout oder über API an.

### Dashboard-Einrichtung

* **Rabattname** (erforderlich): Interner und Dashboard-Anzeigename
* **Code** (erforderlich): Die Zeichenfolge, die Kunden beim Checkout eingeben
* **Typ & Betrag** (erforderlich): Geben Sie einen Prozentwert ein (derzeit werden nur prozentuale Rabatte unterstützt) oder generieren Sie einen zufälligen Code mit der bereitgestellten Schaltfläche
* **Ablaufdatum** (optional): Datum, nach dem der Code ungültig wird
* **Nutzungslimit** (optional): Maximale Gesamteinlösungen über alle Kunden hinweg
* **Produkteinschränkung** (optional): Anwendbarkeit auf ausgewählte Produkte beschränken
* **Abonnementzykluslimit** (optional): Anzahl der Abrechnungszyklen, auf die der Rabatt angewendet wird
* **Metadaten** (optional): Fügen Sie benutzerdefinierte Schlüssel-Wert-Paare für internes Tracking oder Integrationen hinzu

<Tip>
  Verwenden Sie Zykluslimits für Einführungspreise bei Abonnements (z. B. "50% Rabatt für 3 Monate").
</Tip>

## Checkout-Erlebnis

1. Käufer geben den Code im Checkout-Feld ein.
2. Berechtigte Rabatte werden angewendet und die Summen sofort aktualisiert.

<Info>
  In Checkout-Sitzungen übergeben Sie `discount_codes` (ein Array), um einen oder mehrere Codes vorab anzuwenden, und setzen Sie `feature_flags.allow_discount_code`, um das Eingabefeld anzuzeigen. Codes werden in der Reihenfolge des Arrays angewendet, maximal 20.
</Info>

## Stapeln von Rabattcodes

Checkout-Sitzungen, Zahlungen und Abonnements akzeptieren bis zu **20 gestapelte Codes** über das Array `discount_codes` (maximal 20 Einträge). Codes werden **in der Reihenfolge des Arrays** angewendet, sodass der erste berechtigte Code zuerst den Basispreis reduziert, der nächste Code dann den bereits ermäßigten Preis reduziert usw. Der vollständige Satz der angewendeten Rabatte wird in der Antwort unter `discount_ids` (bei Zahlungen/Abonnements) und `discounts` (detailliertere Informationen pro Rabatt, einschließlich Position und verbleibender Abonnementzyklen) zurückgegeben.

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  discount_codes: ['WELCOME10', 'BLACKFRIDAY20'], // applied in this order
  customer: { email: 'user@example.com' },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  Das einzelne Feld `discount_code` ist **veraltet**, wird aber weiterhin vollständig unterstützt, um die Rückwärtskompatibilität zu gewährleisten — bestehende Integrationen funktionieren ohne Änderungen weiterhin. Es kann nicht mit `discount_codes` in derselben Anfrage kombiniert werden. Wir empfehlen, bei Gelegenheit zu `discount_codes` (der Array-Form) zu migrieren, selbst für einzelne Codes, um vom Stapeln und der reicheren Antwortstruktur zu profitieren.
</Info>

## API-Verwaltung

<AccordionGroup>
  <Accordion title="Create discounts">
    Erstellen Sie Rabattcodes programmatisch mit Typ und Betrag.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/create-discount">
      Besuchen Sie die Erstellen-Rabatt-API.
    </Card>
  </Accordion>

  <Accordion title="List and retrieve">
    Listen Sie alle Rabatte auf oder holen Sie Details für die Verwaltung und Prüfung ab.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/list-discounts">
      Durchsuchen Sie die Listen- und Abruf-APIs.
    </Card>
  </Accordion>

  <Accordion title="Get discount by code">
    Suchen Sie einen Rabatt mithilfe seines lesbaren Codes (z. B. "SAVE20") anstelle der internen ID.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/get-discount-by-code">
      Abrufen des Rabatts nach Code-Name.
    </Card>
  </Accordion>

  <Accordion title="Update discounts">
    Ändern Sie die Rabattkonfiguration wie Betrag, Ablauf oder Einschränkungen.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/update-discount">
      Erfahren Sie, wie Sie Rabattdetails aktualisieren.
    </Card>
  </Accordion>

  <Accordion title="Validate discounts">
    Überprüfen, ob ein Rabatt gültig und anwendbar ist, bevor er angewendet wird.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/validate-discount">
      Gültigkeitsprüfung der Rabattnutzung.
    </Card>
  </Accordion>

  <Accordion title="Delete discounts">
    Deaktivieren oder entfernen Sie Rabatte, die nicht mehr benötigt werden.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/delete-discount">
      Löschen eines Rabatts.
    </Card>
  </Accordion>
</AccordionGroup>

## Häufige Anwendungsfälle

* **Einführungsangebote**: Zeitlich begrenzte Einführungsaktionen für neue Produkte
* **Mengen- oder B2B**: Vertraglich vereinbarte Rabatte für ausgewählte Produktsätze
* **Kundenbindungsmaßnahmen**: Rückgewinnungscodes in Kündigungsverhinderungs-Workflows
* **Saisonale Kampagnen**: Feiertags- oder ereignisbasierte Aktionen

## Integrationsbeispiele

### Erstellen eines Rabatts mit Metadaten

Fügen Sie benutzerdefinierte Schlüssel-Wert-Paare für die interne Verfolgung hinzu.

```typescript theme={null}
const discount = await client.discounts.create({
  type: 'percentage',
  amount: 1500, // 15%
  code: 'SUMMER2025',
  metadata: {
    campaign: 'summer_promo',
    source: 'email_blast'
  }
});
```

<Tip>
  Verwenden Sie Metadaten, um Rabatte nach Kampagne, Quelle oder interner Referenz-ID zu kennzeichnen, damit Sie die Nutzung ausgleichen und den ROI später messen können.
</Tip>

### Anwenden von Rabatten in Checkout-Sitzungen

Wenden Sie einen oder mehrere gestapelte Rabatte vorab an und zeigen Sie die Code-Eingabe-UI an.

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['BLACKFRIDAY2024', 'NEWUSER5'], // stacked in array order
  customer: { email: 'user@example.com', name: 'Jane Doe' },
  return_url: 'https://yoursite.com/return'
});
```

### Rabatte während Planänderungen anwenden

Bieten Sie Aktionspreise an, wenn Kunden ihr Abonnement upgraden oder downgraden.

```typescript theme={null}
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately',
  discount_codes: ['UPGRADE20']
});
```

| `discount_codes` Wert                       | Verhalten bei Planänderung                                                                                              |
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `undefined` / `null` (nicht bereitgestellt) | Bestehende Rabatte mit `preserve_on_plan_change=true` werden beibehalten, wenn sie für das neue Produkt anwendbar sind. |
| `[]` (leeres Array)                         | **Alle** bestehenden Rabatte werden aus dem Abonnement entfernt.                                                        |
| `['CODE_A', 'CODE_B', ...]`                 | Ersetzt alle bestehenden Rabatte durch diesen gestapelten Satz, in Array-Reihenfolge angewendet.                        |

<Info>
  Lesen Sie alle angewendeten Rabatte aus dem neuen `discounts` Array in der Abonnementantwort. Jedes Element umfasst `discount_id`, `position`, `cycles_remaining` (für Abonnements) und den Originalcode.
</Info>

### Eingabe von Rabatten ohne Voranwendung aktivieren

Lassen Sie Kunden während des Checkouts einen Code eingeben, ohne einen im Voraus zu übergeben.

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return'
});
```

## Beste Vorgehensweisen

* **Klar benennen**: Verwenden Sie erkennbare Codes, die den Kampagnennamen entsprechen
* **Zeitlich befristen**: Fügen Sie Ablaufdaten hinzu, um Dringlichkeit zu erzeugen und Missbrauch zu verhindern
* **Klug eingrenzen**: Begrenzen Sie auf bestimmte Produkte, um Margenausfälle zu vermeiden
* **Frühzeitig validieren**: Überprüfen Sie die Codeanwendbarkeit vor Bestätigung des Checkouts
* **Auswirkungen überwachen**: Verfolgen Sie Nutzung und Konvertierung nach Kampagne

<Info>
  Rabattcodes sind leistungsstarke Hebel für Akquise und Bindung. Beginnen Sie mit einfachen, gut benannten Angeboten, validieren Sie gründlich und iterieren Sie basierend auf der Leistung.
</Info>
