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

# Checkout-Funktionen

> Konversionsoptimierter, global konformer Checkout mit Unterstützung für mehrere Währungen, mehrere Sprachen, automatische Steuerberechnung, Rabattcodes, Add-Ons und intelligente Adressensammlung.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/cover.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=2dc0a0db8e021e39fb17e84fc12eb5f9" alt="Checkout-Seite" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1556" data-path="images/checkout/cover.png" />
</Frame>

<Info>
  Dodo Payments Checkout ist ein konversionsoptimierter, weltweit konformer Checkout, der für digitale Produkte und SaaS-Unternehmen entwickelt wurde. Er unterstützt mehrere Währungen, Sprachen, Steuern, Rabatte, Add-ons und compliance-freundliche Geschäftsabläufe.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Erstellen Sie gehostete Checkout-Sitzungen programmatisch.
  </Card>

  <Card title="Preview Checkout" icon="eye" href="/api-reference/checkout-sessions/preview">
    Berechnen Sie Preise und Steuern, bevor Sie eine Sitzung erstellen.
  </Card>

  <Card title="Payment Methods" icon="credit-card" href="/features/payment-methods">
    Unterstützte Zahlungsmethoden und Konfigurationsoptionen.
  </Card>
</CardGroup>

## Adaptive Währung

Adaptive Währung ermöglicht es Kunden, in ihrer bevorzugten lokalen Währung zu bezahlen, was Vertrauen und Konversionsraten verbessert.

### So funktioniert es

1. **Aktivieren**: Adaptive Currency unter **Einstellungen → Business** aktivieren
2. **Wählen**: Kunden können die Währung direkt beim Checkout wechseln
3. **Konvertieren**: Preise werden dynamisch mit Echtzeit-Wechselkursen umgerechnet
4. **Anzeigen**: Der endgültige zu zahlende Betrag wird transparent vor der Zahlung angezeigt

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c1.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=c2f9ee4b1748448d4ab7ab23954dcc64" alt="Währungsauswahl beim Checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c1.png" />
</Frame>

<Card title="Adaptive Currency" icon="money-bill-transfer" href="/features/adaptive-currency">
  Erfahren Sie mehr über unterstützte Währungen, Wechselgebühren und Rückerstattungsabwicklung.
</Card>

## Mehrsprachiger Checkout

Dodo Payments unterstützt mehrere Sprachen auf der Checkout-Seite, sodass Kunden Zahlungen in einer Sprache abschließen können, mit der sie sich wohlfühlen.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c2.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=ecc6eb8db604e37433d8797c51768577" alt="Sprachauswahl beim Checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c2.png" />
</Frame>

### Wichtige Highlights

* Sprachselector direkt beim Checkout verfügbar
* UI-Text, Labels und Systemnachrichten sind lokalisiert
* Verbessert die Zugänglichkeit und internationale Konversion

### Unterstützte Sprachen

Die Checkout-Seite unterstützt 21 Sprachen:

| Sprache        | Code |
| -------------- | ---- |
| Arabisch       | `ar` |
| Katalanisch    | `ca` |
| Chinesisch     | `zh` |
| Niederländisch | `nl` |
| Englisch       | `en` |
| Französisch    | `fr` |
| Deutsch        | `de` |
| Hebräisch      | `he` |
| Indonesisch    | `id` |
| Italienisch    | `it` |
| Japanisch      | `ja` |
| Koreanisch     | `ko` |
| Malaiisch      | `ms` |
| Polnisch       | `pl` |
| Portugiesisch  | `pt` |
| Rumänisch      | `ro` |
| Russisch       | `ru` |
| Spanisch       | `es` |
| Schwedisch     | `sv` |
| Thailändisch   | `th` |
| Türkisch       | `tr` |

<Tip>
  Sie können im Checkout eine bestimmte Sprache erzwingen, indem Sie den `force_language`-Parameter beim Erstellen einer Checkout-Sitzung festlegen. Details finden Sie in der [Checkout Sessions API](/developer-resources/checkout-session#14-forcing-a-language).
</Tip>

## Automatische Steuerberechnung

Die Steuern werden automatisch basierend auf dem Rechnungsort des Kunden berechnet und gewährleisten die Einhaltung von GST-, MwSt.- und Umsatzsteueranforderungen ohne manuelle Einrichtung.

### So funktioniert die Steuerberechnung

<Steps>
  <Step title="Location Detection">
    Steuervorschriften werden basierend auf dem Land des Kunden (und ggf. der Region) angewendet.
  </Step>

  <Step title="Dynamic Updates">
    Der Steuerbetrag wird automatisch aktualisiert, wenn:

    * sich das Land ändert
    * die Adresse aktualisiert wird
  </Step>

  <Step title="Transparent Display">
    Die endgültige Steueraufstellung wird klar vor der Zahlung angezeigt.
  </Step>
</Steps>

<Tip>
  Die Steuerberechnung ist vollständig automatisiert. Für Standard-Digitalwaren und SaaS-Produkte ist keine manuelle Konfiguration erforderlich.
</Tip>

## Unterstützung für Business-Steuer-ID

Für registrierte Unternehmen erlaubt der Checkout Kunden die Eingabe ihrer Business-Steuer-ID (z. B. MwSt./GST-Nummer).

### Was passiert, wenn eine Steuer-ID eingegeben wird

* Die Steuerberechtigung wird in Echtzeit validiert
* Anwendbare Steuerbefreiungen oder Reverse-Charge-Regeln werden angewendet
* Der Steuerbetrag wird sofort im Checkout aktualisiert

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c3.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=76451fed5636a6ef3e5c3ec7f6a96c9f" alt="Geschäftssteuer-ID-Eingabe beim Checkout" style={{ maxHeight: '500px', width: '70%' }} width="1440" height="1716" data-path="images/checkout/c3.png" />
</Frame>

<Info>
  Dies ist besonders nützlich für B2B-SaaS und digitale Dienstleistungen, bei denen Geschäftskunden möglicherweise für Steuerbefreiungen infrage kommen.
</Info>

## Rabattcodes

Kunden können Rabatt- oder Aktionscodes, die Sie im Dashboard erstellt haben, direkt auf der Checkout-Seite eingeben.

### Checkout-Erlebnis

1. Kunde gibt den Rabattcode ein
2. Der Rabatt wird sofort validiert
3. Der aktualisierte Preis und die Einsparungen werden klar angezeigt

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c4.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=639dcc94ddd1b41fdd6ff200c2a28e47" alt="Rabattcode-Eingabe beim Checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c4.png" />
</Frame>

### API-Integration

Vorab einen oder mehrere gestapelte Rabattcodes anwenden oder das Eingabefeld für den Rabatt aktivieren:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['WELCOME20'], // Pre-apply one or more codes (max 20, applied in order)
  feature_flags: {
    allow_discount_code: true // Show discount input field
  },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  `discount_codes` akzeptiert ein Array von bis zu 20 Codes, die in Reihenfolge gestapelt werden. Das einzelne `discount_code` Feld ist veraltet, funktioniert aber noch — bestehende Integrationen müssen nicht sofort geändert werden. Wechsle zu `discount_codes`, wenn das Stapeln und die reichhaltigere Antwortform bequem genutzt werden sollen.
</Info>

<Card title="Discount Codes" icon="percent" href="/features/discount-codes">
  Erfahre, wie man Rabattcodes erstellt und verwaltet.
</Card>

<Card title="Validate Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
  Nachschlagen und Validieren von Rabatten mit Hilfe von Codenamen.
</Card>

## Intelligente Adresserfassung

Der Checkout unterstützt flexible Adresseingabe für einen schnelleren Abschluss.

### Verfügbare Optionen

| Option                      | Beschreibung                                                                                                                      |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **Google Address Autofill** | Schnelle Auswahl mit Autovervollständigung                                                                                        |
| **Manuelle Eingabe**        | Volle Kontrolle über vollständige Adressen                                                                                        |
| **Länderauswahl**           | Beeinflusst Steuer- und Compliance-Logik                                                                                          |
| **Minimale Adresse**        | Erfasse nur das Land (und die Postleitzahl, falls für Steuern erforderlich) — siehe [Minimal Address Mode](#minimal-address-mode) |

<Tip>
  Die Adresserfassung balanciert Geschwindigkeit, Genauigkeit und globale Abdeckung, um die Konversion zu maximieren und sicherzustellen, dass die Compliance gewährleistet ist.
</Tip>

### Minimal Address Mode

Für maximale Konversionsraten aktiviere die minimale Adresssammlung, um Reibungen im Checkout-Prozess zu reduzieren. Wenn `minimal_address` auf `true` gesetzt ist, werden im Checkout nur folgende Informationen gesammelt:

* **Land** — immer erforderlich zur Steuerbestimmung
* **Postleitzahl** — nur in Regionen, in denen sie für die Berechnung von Umsatzsteuer, MwSt. oder GST notwendig ist

Alle anderen Adressfelder (Straße, Stadt, Bundesland) werden übersprungen, was die Abschlussgeschwindigkeit des Checkouts erheblich erhöht.

<Frame>
  <img src="https://mintcdn.com/dodopayments/7dyPZdWH7JucnLrT/images/changelog/minimal-address.png?fit=max&auto=format&n=7dyPZdWH7JucnLrT&q=85&s=cd0e5d6f8c32e052c7ab93a88d841fb8" alt="Minimaler Adressmodus zeigt nur das Feld für Land und Postleitzahl beim Checkout" style={{ maxHeight: '500px', width: 'auto' }} width="1459" height="817" data-path="images/changelog/minimal-address.png" />
</Frame>

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

<Info>
  Die vollständige Adresssammlung bleibt der Standard. Aktiviere `minimal_address` für digitale Produkte und SaaS-Flows, bei denen vollständige Rechnungsdetails nicht erforderlich sind.
</Info>

<Card title="Minimal Address Reference" icon="address-card" href="/developer-resources/checkout-session#request-body">
  Siehe die vollständige `minimal_address` Parameterreferenz im Checkout Sessions API Guide.
</Card>

## Telefonnummernsammlung

Steuere, ob das Telefonnummernfeld beim Checkout angezeigt wird — und ob es erforderlich ist — mittels Feature-Flags in der Checkout-Session.

| Flag                            | Standard | Verhalten                                                                                        |
| ------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
| `allow_phone_number_collection` | `true`   | Zeigt das Telefonnummernfeld im Checkout-Formular                                                |
| `require_phone_number`          | `false`  | Macht das Telefonnummernfeld erforderlich (Formularvalidierung erzwingt einen nicht-leeren Wert) |

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

<Warning>
  `require_phone_number: true` erfordert `allow_phone_number_collection: true`. Die API lehnt Sessions ab, bei denen das Sammeln von Telefonnummern deaktiviert ist, während es erforderlich ist.
</Warning>

<Tip>
  Verwende `require_phone_number` für B2B SaaS, regulierte Branchen oder jede Flow, bei dem ein verifizierter Kontaktkanal für Support, Betrugsüberprüfung oder Compliance erforderlich ist.
</Tip>

## Benutzerdefinierte Felder

Sammle zusätzliche Informationen von Kunden während des Checkouts, indem du benutzerdefinierte Formularfelder definierst. Dies ist nützlich, um Daten wie Firmenname, Teamgröße, Quelle der Empfehlung oder andere geschäftsspezifische Informationen zu sammeln.

### Verfügbare Feldtypen

| Typ        | Beschreibung                        |
| ---------- | ----------------------------------- |
| `text`     | Eingabe einzeiliger Text            |
| `number`   | Numerische Eingabe                  |
| `email`    | E-Mail-Adresse mit Validierung      |
| `url`      | URL mit Validierung                 |
| `date`     | Datumsauswahl                       |
| `dropdown` | Auswahl aus vordefinierten Optionen |
| `boolean`  | Ja/Nein Umschalter                  |

### Beispiel

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  custom_fields: [
    {
      key: 'company_name',
      label: 'Company Name',
      field_type: 'text',
      required: true
    },
    {
      key: 'team_size',
      label: 'Team Size',
      field_type: 'dropdown',
      required: true,
      options: ['1-10', '11-50', '51-200', '200+']
    }
  ],
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  Kundenantworten werden automatisch in Webhook-Nutzlasten (`payment.succeeded`, `subscription.active`) und API-Antworten über das `custom_field_responses` Array aufgenommen. Du kannst bis zu 5 benutzerdefinierte Felder pro Checkout-Session definieren.
</Info>

<Card title="Custom Fields Guide" icon="input-text" href="/developer-resources/checkout-session#15-collecting-custom-fields">
  Erfahre mehr über die Konfiguration benutzerdefinierter Felder und den Zugriff auf Antworten.
</Card>

## Datenschutzbestimmungen & Nutzungsbedingungen

Um rechtliche und Compliance-Transparenz sicherzustellen:

* [Datenschutzbestimmungen](https://dodopayments.com/privacy-policy) und [Käuferbedingungen](https://dodopayments.com/buyer-terms) Links sind deutlich beim Checkout angezeigt
* Kunden bestätigen diese explizit vor Abschluss der Zahlung

<Info>
  Dies hilft, globale Verbraucher- und Datenschutzanforderungen einschließlich der DSGVO-Konformität zu erfüllen.
</Info>

## Sammlung Checkout

Produktkollektionen ermöglichen ein einheitliches Checkout-Erlebnis, bei dem Kunden mehrere verwandte Produkte (z.B. Starter, Pro, Enterprise-Pläne) in einem einzigen Checkout ansehen und auswählen können.

### Wie es funktioniert

1. **Alle Produkte angezeigt**: Kunden sehen jedes aktive Produkt in der Sammlung
2. **Erstes Produkt vorausgewählt**: Das erste Produkt in der Sammlung ist automatisch ausgewählt
3. **Optionen vergleichen**: Kunden können Preise und Funktionen vergleichen, bevor sie sich entscheiden
4. **Einzelne Auswahl**: Nach Auswahl eines Produkts geht der Checkout in den Standard-Zahlungsfluss über

### Erstellung eines Sammlung-Checkouts

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  Bei der Verwendung von `product_collection_id` übergib ein leeres `product_cart` Array. Rabattcodes können nicht vorab angewendet werden bei der Sitzungserstellung.
</Warning>

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  Erfahre, wie du Produktkollektionen für ein einheitliches Checkout-Erlebnis erstellen und verwalten kannst.
</Card>

## Checkout-Sitzungskonfiguration

Steuere das Checkout-Verhalten über die Checkout Sessions API:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'Jane Doe'
  },
  billing_currency: 'EUR', // Set specific currency
  discount_codes: ['PROMO10'],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return',
  cancel_url: 'https://yoursite.com/pricing', // Optional: where to redirect on cancel
  metadata: {
    order_ref: 'ORD-12345'
  }
});
```

<Info>
  Nach der Zahlung werden Kunden auf deine `return_url` weitergeleitet, mit automatisch angehängten Abfrageparametern — einschließlich `payment_id` oder `subscription_id`, `status`, `email`, und `license_key` (falls zutreffend). Siehe den [Checkout Sessions Guide](/developer-resources/checkout-session#request-body) für die vollständige Liste.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Vollständige API-Referenz für Checkout-Sitzungen.
  </Card>

  <Card title="Checkout Integration Guide" icon="book" href="/developer-resources/checkout-session">
    Schritt-für-Schritt-Anleitung zur Integration des Checkouts.
  </Card>
</CardGroup>

## Anpassung des Checkout-Themes

Passe das Erscheinungsbild der Checkout-Seite an deine Marke an, indem du den `customization.theme_config` Parameter verwendest, wenn du eine Checkout-Sitzung über die API erstellst. Konfiguriere Farben, Schriftarten, Randradius und Button-Text für sowohl helle als auch dunkle Modi.

<Frame>
  <img src="https://mintcdn.com/dodopayments/rTHkQICkStFgSdh-/images/checkout/theme-example.png?fit=max&auto=format&n=rTHkQICkStFgSdh-&q=85&s=5277b69d67c90fd87e7c5d9c125fee12" alt="Benutzerdefinierte gestaltete Checkout-Seite" style={{ maxHeight: '500px', width: 'auto' }} width="2856" height="1490" data-path="images/checkout/theme-example.png" />
</Frame>

<Card title="Design & Theme Customization" icon="palette" href="/features/design">
  Konfiguriere Themes visuell aus dem Dashboard mit vorgefertigten Themes, Typografie, Farben und Live-Vorschau.
</Card>

<Info>
  Dieser Abschnitt behandelt die **serverseitige API**-Themenkonfiguration unter Verwendung von `customization.theme_config`. Wenn Sie das **Checkout SDK** (Overlay- oder Inline-Checkout) verwenden, siehe den Abschnitt zur Themenanpassung in [Overlay Checkout](/developer-resources/overlay-checkout#theme-customization), der camelCase-Eigenschaften verwendet (z. B. `bgPrimary` statt `bg_primary`).
</Info>

### Theme-Konfigurationsoptionen

| Eigenschaft          | Beschreibung                                                                                   |
| -------------------- | ---------------------------------------------------------------------------------------------- |
| `light`              | Farbkonfiguration für den hellen Modus                                                         |
| `dark`               | Farbkonfiguration für den dunklen Modus                                                        |
| `font_primary_url`   | URL für die primäre Schriftart                                                                 |
| `font_secondary_url` | URL für die sekundäre Schriftart                                                               |
| `font_size`          | Schriftgröße: `xs`, `sm`, `md`, `lg`, `xl`, `2xl`                                              |
| `font_weight`        | Schriftgewicht: `normal`, `medium`, `bold`, `extraBold`                                        |
| `radius`             | Randradius für UI-Elemente (z.B. `4px`, `0.5rem`, `8px`)                                       |
| `pay_button_text`    | Benutzerdefinierter Text für den Bezahlen-Button (z.B. "Kauf abschließen", "Jetzt abonnieren") |

### Farbkonfiguration (Heller/Dunkler Modus)

Jeder Modus (`light` und `dark`) unterstützt die folgenden Farbeigenschaften:

| Eigenschaft              | Beschreibung                   |
| ------------------------ | ------------------------------ |
| `bg_primary`             | Hintergrund Primärfarbe        |
| `bg_secondary`           | Hintergrund Sekundärfarbe      |
| `text_primary`           | Text Primärfarbe               |
| `text_secondary`         | Text Sekundärfarbe             |
| `text_placeholder`       | Text Platzhalterfarbe          |
| `text_error`             | Text Fehlerfarbe               |
| `text_success`           | Text Erfolgsfarbe              |
| `border_primary`         | Randfarbe Primär               |
| `border_secondary`       | Randfarbe Sekundär             |
| `button_primary`         | Hintergrundfarbe Primärknopf   |
| `button_primary_hover`   | Hover-Farbe Primärknopf        |
| `button_secondary`       | Hintergrundfarbe Sekundärknopf |
| `button_secondary_hover` | Hover-Farbe Sekundärknopf      |
| `button_text_primary`    | Textfarbe Primärknopf          |
| `button_text_secondary`  | Textfarbe Sekundärknopf        |
| `input_focus_border`     | Eingabefokus Randfarbe         |

<Info>
  Alle Farbfelder akzeptieren Standard-CSS-Farbformate:

  * Hex: `#fff`, `#ffffff`, `#ffffffff`
  * RGB/RGBA: `rgb(255, 255, 255)`, `rgba(255, 255, 255, 0.5)`
  * HSL/HSLA: `hsl(120, 100%, 50%)`, `hsla(120, 100%, 50%, 0.5)`
  * Benannte Farben: `red`, `blue`, `transparent`
</Info>

### Beispiel

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customization: {
    theme_config: {
      // Custom fonts
      font_primary_url: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap',
      font_size: 'md',
      font_weight: 'medium',
      radius: '8px',
      pay_button_text: 'Complete Purchase',
      
      // Light mode colors
      light: {
        bg_primary: '#ffffff',
        bg_secondary: '#f5f5f5',
        text_primary: '#1a1a1a',
        text_secondary: '#666666',
        button_primary: '#0066ff',
        button_primary_hover: '#0052cc',
        button_text_primary: '#ffffff',
        border_primary: '#e0e0e0'
      },
      
      // Dark mode colors
      dark: {
        bg_primary: '#1a1a1a',
        bg_secondary: '#2d2d2d',
        text_primary: '#ffffff',
        text_secondary: '#a0a0a0',
        button_primary: '#3385ff',
        button_primary_hover: '#4d99ff',
        button_text_primary: '#ffffff',
        border_primary: '#404040'
      }
    }
  },
  return_url: 'https://yoursite.com/return'
});
```

<Tip>
  Du musst nicht alle Farbeigenschaften angeben. Alle nicht spezifizierten Eigenschaften verwenden die Standard-Theme-Werte.
</Tip>
