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

# Kunden-Wallets

> Verwalten Sie vorausbezahlte Geldkonten für Ihre Kunden. Laden Sie Wallets, wenden Sie Guthaben auf Abonnementrechnungen an, bearbeiten Sie Rückerstattungen als Wallet-Guthaben und verfolgen Sie Transaktionsverläufe.

<CardGroup cols={3}>
  <Card title="Get Customer Wallets" icon="code" href="/api-reference/customers/get-customer-wallets">
    Überprüfen Sie die Geldguthaben von Kunden in verschiedenen Währungen.
  </Card>

  <Card title="Create Ledger Entry" icon="plus" href="/api-reference/customers/post-customer-wallets-ledger-entries">
    Fügen Sie Kunden-Wallets Geld hinzu oder ziehen Sie es ab.
  </Card>

  <Card title="List Ledger Entries" icon="list" href="/api-reference/customers/get-customer-wallets-ledger-entries">
    Sehen Sie sich den vollständigen Transaktionsverlauf mit Paginierung an.
  </Card>
</CardGroup>

## Was sind Kunden-Wallets?

Kunden-Wallets sind Konten für Geldguthaben, die echte Gelder für Ihre Nutzer enthalten. Jeder Kunde erhält automatisch ein solches Wallet, wenn Sie dessen Konto erstellen. Sie können diese Wallets verwenden, um:

* **Speichern Sie vorausbezahlte Gelder** für zukünftige Abonnementzahlungen
* **Behandeln Sie Rückerstattungen** als Wallet-Guthaben statt als Kartenrückerstattung
* **Stellen Sie Werbeguthaben aus**, z. B. Willkommensboni oder Treueprämien
* **Wenden Sie Wallet-Guthaben auf Rechnungen an** und zwar automatisch während der Abrechnung
* **Verfolgen Sie Geldtransaktionen** mithilfe eines detaillierten Hauptbuchverlaufs

<Info>
  Jeder Kunde erhält automatisch ein Wallet, wenn Sie dessen Konto anlegen. Wallets unterstützen USD- und INR-Währungen mit separaten Geldguthaben für jede.
</Info>

<Warning>
  **Kunden-Wallets ≠ Credit-Based Billing**

  Kunden-Wallets enthalten **echte Geldguthaben** (USD, INR), die auf Rechnungen und Abonnementzahlungen angewendet werden können.

  Wenn Sie virtuelle Nutzungseinheiten (API-Aufrufe, Tokens, Rechenstunden) verfolgen möchten, sehen Sie stattdessen [Credit-Based Billing](/features/credit-based-billing).
</Warning>

<Frame>
  <img src="https://mintcdn.com/dodopayments/9oQrV7vsGpxeyDkL/images/customer/customer-wallet.png?fit=max&auto=format&n=9oQrV7vsGpxeyDkL&q=85&s=a4a7ff3c89f4074f37e19b8d99d49ef5" alt="Kunden-Wallets" style={{ maxHeight: '500px', width: 'auto' }} width="2860" height="1492" data-path="images/customer/customer-wallet.png" />
</Frame>

## Funktionsweise

Kunden-Wallets enthalten Gelder, die Kunden auf ihre Einkäufe anwenden können. Wenn ein Kunde eine Rechnung oder eine wiederkehrende Abonnementgebühr hat, wird zuerst sein Wallet-Guthaben überprüft. Verfügbare Beträge werden automatisch auf die Rechnung angewendet, bevor seine primäre Zahlungsmethode belastet wird.

### Automatische Einrichtung

Wenn Sie einen neuen Kunden erstellen, legt Dodo Payments automatisch ein Wallet mit einem Guthaben von null an. Es ist sofort bereit, über unsere API Gelder zu empfangen.

### Unterstützung mehrerer Währungen

Jedes Wallet kann Guthaben in verschiedenen Währungen halten:

<ResponseField name="USD Balance" type="integer">
  Guthaben in US-Dollar (in Cent gespeichert)
</ResponseField>

<ResponseField name="INR Balance" type="integer">
  Guthaben in Indischen Rupien (in Paise gespeichert)
</ResponseField>

<Info>
  Derzeit sind nur **USD**- und **INR**-Guthaben verfügbar. Weitere Währungen folgen bald.
</Info>

## Arbeiten mit Wallets

### Kundenguthaben prüfen

Sehen Sie, wie viel Guthaben ein Kunde über alle Währungen hinweg hat. Das ist nützlich, um das verfügbare Guthaben vor der Durchführung eines Kaufs zu überprüfen oder den Betrag in Ihrer Benutzeroberfläche anzuzeigen.

<Card title="Get Customer Wallet Balances" icon="wallet" href="/api-reference/customers/get-customer-wallets">
  Prüfen Sie die Geldguthaben eines Kunden-Wallets in allen unterstützten Währungen.
</Card>

### Gelder hinzufügen oder abziehen

Laden Sie Kunden-Wallets auf (z. B. mit Willkommensboni oder Rückerstattungsguthaben) oder ziehen Sie Gelder ab (z. B. für Abonnementgebühren). Sie können für jede Transaktion einen Grund angeben, um eine klare Prüfspur zu behalten.

<Note>
  The `entry_type` field uses `'credit'` to add funds to the wallet and `'debit'` to subtract funds from the wallet.
</Note>

<Card title="Create Customer Wallet Ledger Entry" icon="plus" href="/api-reference/customers/post-customer-wallets-ledger-entries">
  Fügen Sie einem Kunden-Wallet Gelder hinzu oder ziehen Sie sie ab.
</Card>

### Transaktionsverlauf anzeigen

Sehen Sie jede Gutschrift- und Belastungstransaktion eines Kunden. Dieses detaillierte Hauptbuch hilft Ihnen, Konten abzugleichen, und sorgt für Transparenz gegenüber Ihren Kunden.

<Card title="List Customer Wallet Ledger Entries" icon="list" href="/api-reference/customers/get-customer-wallets-ledger-entries">
  Zeigen Sie jede Geldtransaktion eines Kunden an.
</Card>

## Praxisbeispiele

### Rückerstattung ins Wallet

Wenn ein Kunde eine Rückerstattung anfordert, können Sie den Betrag seinem Wallet-Guthaben gutschreiben, statt eine traditionelle Kartenrückerstattung durchzuführen. So bleiben die Gelder für zukünftige Käufe in Ihrem Ökosystem.

```javascript theme={null}
async function refundToWallet(customerId, refundAmount, originalPaymentId) {
  await client.customers.wallets.ledgerEntries.create(customerId, {
    amount: refundAmount, // Amount in cents
    currency: 'USD',
    entry_type: 'credit',
    reason: `Refund for payment ${originalPaymentId}`,
    idempotency_key: `refund_${originalPaymentId}`
  });
}
```

### Willkommensbonus / Werbeguthaben

Geben Sie neuen Kunden einen monetären Willkommensbonus, um ihren ersten Kauf zu fördern.

```javascript theme={null}
async function addWelcomeBonus(customerId) {
  await client.customers.wallets.ledgerEntries.create(customerId, {
    amount: 1000, // $10.00 promotional balance
    currency: 'USD',
    entry_type: 'credit',
    reason: 'Welcome bonus - $10 promotional balance',
    idempotency_key: `welcome_${customerId}`
  });
}
```

### Abonnementzahlung über das Wallet

Ziehen Sie Gelder aus einem Wallet, um eine Abonnementgebühr oder einen manuellen Kauf zu decken.

```javascript theme={null}
async function deductForPurchase(customerId, purchaseAmount, purchaseId) {
  try {
    await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: purchaseAmount,
      currency: 'USD',
      entry_type: 'debit',
      reason: `Subscription charge - monthly billing`,
      idempotency_key: `charge_${purchaseId}`
    });
  } catch (error) {
    if (error.status === 400) {
      console.log('Insufficient wallet balance');
    }
  }
}
```

### Prepaid-Abrechnungssystem

Ermöglichen Sie Kunden, ihre Konten im Voraus aufzuladen und dieses Guthaben im Laufe der Zeit zu nutzen.

<Steps>
  <Step title="Add Initial Funds">
    Fügen Sie dem Wallet des Kunden Gelder hinzu, wenn er eine Einzahlung vornimmt.

    ```javascript theme={null}
    await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: 5000, // $50.00 deposit
      currency: 'USD',
      entry_type: 'credit',
      reason: 'Account funding - prepaid deposit',
      idempotency_key: `deposit_${paymentId}`
    });
    ```
  </Step>

  <Step title="Apply Balance to Purchases">
    Ziehen Sie vom Guthaben ab, während der Kunde Ihre Dienste nutzt oder Abonnements verlängert.

    ```javascript theme={null}
    await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: 1500, // $15.00 charge
      currency: 'USD', 
      entry_type: 'debit',
      reason: 'Service purchase - monthly subscription',
      idempotency_key: `purchase_${purchaseId}`
    });
    ```
  </Step>

  <Step title="Monitor Balances">
    Prüfen Sie, ob Kunden knapp bei Kasse sind, um eine Aufladung anzufordern.

    ```javascript theme={null}
    const wallets = await client.customers.wallets.list(customerId);
    const usdWallet = wallets.items.find(w => w.currency === 'USD');
    const balance = usdWallet.balance;

    if (balance < 1000) { // Less than $10.00
      // Send low balance notification
      await sendLowBalanceNotification(customerId, balance);
    }
    ```
  </Step>
</Steps>

### Unterstützung mehrerer Währungen

Verwalten Sie separate Geldguthaben für Kunden in verschiedenen Regionen.

<AccordionGroup>
  <Accordion title="US Customers">
    Verwalten Sie USD-Gelder für Kunden mit Sitz in den USA.

    ```javascript theme={null}
    await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: 20000, // $200.00 in cents
      currency: 'USD',
      entry_type: 'credit',
      reason: 'USD account funding',
      idempotency_key: `usd_deposit_${paymentId}`
    });
    ```
  </Accordion>

  <Accordion title="Indian Customers">
    Verwalten Sie INR-Gelder für indische Kunden.

    ```javascript theme={null}
    await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: 1500000, // Rs 15,000 in paise
      currency: 'INR',
      entry_type: 'credit',
      reason: 'INR account funding',
      idempotency_key: `inr_deposit_${paymentId}`
    });
    ```
  </Accordion>
</AccordionGroup>

## Beste Praktiken

### Vermeiden Sie doppelte Transaktionen

Verwenden Sie Idempotenzschlüssel, um sicherzustellen, dass Sie ein und dieselbe Transaktion nicht versehentlich doppelt verbuchen.

```javascript theme={null}
async function addFundsSafely(customerId, amount, reason) {
  const idempotencyKey = `${reason}_${customerId}_${Date.now()}`;
  
  try {
    const result = await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: amount,
      currency: 'USD',
      entry_type: 'credit',
      reason: reason,
      idempotency_key: idempotencyKey
    });
    
    return { success: true, wallet: result };
  } catch (error) {
    if (error.status === 409) {
      // Transaction already processed
      return { success: true, wallet: null, duplicate: true };
    }
    
    throw error;
  }
}
```

### Überprüfen Sie Guthaben vor der Belastung

Stellen Sie sicher, dass Kunden über ausreichendes Guthaben verfügen, bevor Sie versuchen, größere Transaktionen über das Wallet abzuwickeln.

```javascript theme={null}
async function checkBalanceBeforeOperation(customerId, requiredAmount) {
  const wallets = await client.customers.wallets.list(customerId);
  const usdWallet = wallets.items.find(w => w.currency === 'USD');
  
  if (!usdWallet || usdWallet.balance < requiredAmount) {
    throw new Error('Insufficient funds for this operation');
  }
  
  return usdWallet.balance;
}
```

## Was als Nächstes kommt

<Warning>
  Diese Funktionen sind für zukünftige Releases geplant:
</Warning>

* **Balance Expiration**: Legen Sie fest, dass Guthaben nach einem bestimmten Zeitraum verfällt
* **Better Analytics**: Detaillierte Ausgabenberichte und Guthabentrends
* **More Webhooks**: Echtzeitbenachrichtigungen bei Guthabenänderungen und bei niedrigem Guthaben

<Tip>
  Beginnen Sie mit grundlegenden Lade- und Abzugsoperationen und integrieren Sie dann komplexere automatisierte Abrechnungsabläufe, während Ihr Unternehmen wächst.
</Tip>
