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

# Synchronisieren Sie mit Ihrer Datenbank

> Synchronisieren Sie automatisch Ihre Dodo Payments-Daten mit Ihrer eigenen Datenbank für Analysen, Berichterstattung und Integrationen.

Dodo Payments bietet eine integrierte Datenbank-Synchronisierungsfunktion, die Ihre Zahlungsdaten automatisch mit Ihrer eigenen Datenbank synchronisiert. Sie können **Zahlungen**, **Kunden**, **Abonnements** und **Lizenzen** synchronisieren, um eine lokale Kopie Ihrer Daten für Analysen, Berichterstattung oder die Integration mit anderen Systemen zu behalten.

<Info>
  **Implementation**: Available via [npm package](https://www.npmjs.com/package/dodo-sync) | **Source Code**: [GitHub](https://github.com/dodopayments/dodo-sync)
</Info>

## Was können Sie synchronisieren?

Unsere Datenbank-Synchronisierungsfunktion unterstützt die Synchronisierung der folgenden Dodo Payments-Entitäten mit Ihrer Datenbank:

<CardGroup cols={2}>
  <Card title="Payments" icon="credit-card">
    Synchronisiere alle Zahlungstransaktionen, einschließlich Einmalzahlungen, Rückerstattungen und Zahlungsstatusaktualisierungen.
  </Card>

  <Card title="Customers" icon="users">
    Halte deine Kundendaten synchron, einschließlich Kundenprofile, Kontaktinformationen und Metadaten.
  </Card>

  <Card title="Subscriptions" icon="repeat">
    Synchronisiere Abonnementdaten, einschließlich aktiver Abonnements, Abrechnungszyklen und Änderungen des Abonnementstatus.
  </Card>

  <Card title="Licenses" icon="key">
    Synchronisiere Lizenzinformationen, einschließlich Lizenzschlüsseln, Aktivierungen und Aktualisierungen des Lizenzstatus.
  </Card>
</CardGroup>

You can sync any combination of these entities by specifying them in the `scopes` parameter. All sync operations are incremental and only transfer new or updated records for optimal performance.

## Datenbankunterstützung

Derzeit unterstützen wir **MongoDB**, **PostgreSQL**, **MySQL** und **ClickHouse**.

Wir arbeiten aktiv daran, die Unterstützung für:

* **Datenbanken**: Snowflake und andere.
* **Pipelines**: ETL-Pipelines, Echtzeitsynchronisierung zu erweitern.

<Tip>
  We're continuously expanding database support. If you'd like to contribute a new database integration, please submit a Pull Request to our [GitHub repository](https://github.com/dodopayments/dodo-sync).
</Tip>

## Erste Schritte

Sie können unsere Datenbank-Synchronisierungsfunktion über die **CLI** oder programmgesteuert in Ihrem **Code** verwenden. Beide Methoden bieten die gleiche Funktionalität – wählen Sie diejenige, die am besten zu Ihrem Workflow passt.

### Verwendung der CLI

Das CLI-Tool bietet eine schnelle Möglichkeit, die Datenbanksynchronisierung einzurichten und auszuführen. Installieren Sie es global, um es von überall in Ihrem Terminal verwenden zu können:

<CodeGroup>
  ```bash npm theme={null}
  npm install -g dodo-sync
  ```

  ```bash bun theme={null}
  bun add -g dodo-sync
  ```
</CodeGroup>

#### Ausführen der CLI

Die CLI unterstützt zwei Modi: **Interaktiver Modus** für geführte Einrichtung und **Manueller Modus** für direkte Konfiguration.

**Interaktiver Modus**: Führen Sie einfach den Befehl ohne Argumente aus, um den interaktiven Einrichtungsassistenten zu starten.

```bash theme={null}
dodo-sync
```

**Manueller Modus**: Übergeben Sie Argumente direkt, um den Assistenten zu überspringen.

```bash theme={null}
dodo-sync -i [interval] -d [database] -u [database_uri] --scopes [scopes] --api-key [api_key] --env [environment]
```

**Beispiele:**

```bash theme={null}
# MongoDB
dodo-sync -i 600 -d mongodb -u mongodb://mymongodb.url --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode

# PostgreSQL
dodo-sync -i 600 -d postgres -u postgresql://user:password@localhost:5432/mydb --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode

# MySQL
dodo-sync -i 600 -d mysql -u mysql://user:password@localhost:3306/mydb --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode

# ClickHouse
dodo-sync -i 600 -d clickhouse -u http://localhost:8123 --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode
```

#### CLI-Argumente

<ParamField path="--interval" type="number" alias="-i">
  Sync-Intervall in Sekunden. Bestimmt, wie häufig der Sync-Vorgang ausgeführt wird. Wird kein Wert angegeben, läuft der Sync einmal und endet.
</ParamField>

<ParamField path="--database" type="string" alias="-d" required>
  Zu verwendender Datenbanktyp. Unterstützte Werte: `"mongodb"`, `"postgres"`, `"mysql"` oder `"clickhouse"`.
</ParamField>

<ParamField path="--database-uri" type="string" alias="-u" required>
  Verbindungs-URI für deine Datenbank:

  * **MongoDB**: `mongodb://localhost:27017` oder `mongodb+srv://user:pass@cluster.mongodb.net/`
  * **PostgreSQL**: `postgresql://user:password@localhost:5432/mydb`
  * **MySQL**: `mysql://user:password@localhost:3306/mydb`
  * **ClickHouse**: `http://localhost:8123`
</ParamField>

<ParamField path="--scopes" type="string" required>
  Kommagetrennte Liste von Datenentitäten zum Synchronisieren. Verfügbare Bereiche: `licences`, `payments`, `customers`, `subscriptions`. Beispiel: `"payments,customers"`.
</ParamField>

<ParamField path="--api-key" type="string" required>
  Dein Dodo Payments API-Schlüssel. Muss mit `dp_live_` für den Live-Modus oder `dp_test_` für den Testmodus beginnen.
</ParamField>

<ParamField path="--env" type="string" required>
  Zielumgebung. Muss entweder `"live_mode"` oder `"test_mode"` sein. Dies bestimmt, aus welcher Dodo Payments-Umgebung synchronisiert wird.
</ParamField>

<ParamField path="--rate-limit" type="number" alias="--rl">
  Ratenbegrenzung in Anfragen pro Sekunde. Steuert, wie schnell die Sync-Engine API-Anfragen stellt, um eine Überlastung der Dodo Payments API zu vermeiden.
</ParamField>

### Verwendung in Ihrem Code

Für programmgesteuerte Kontrolle integrieren Sie die Synchronisierungsfunktion direkt in Ihre Anwendung. Installieren Sie sie als Abhängigkeit in Ihrem Projekt:

<CodeGroup>
  ```bash npm theme={null}
  npm install dodo-sync
  ```

  ```bash bun theme={null}
  bun add dodo-sync
  ```
</CodeGroup>

#### Automatische Synchronisierung (intervallbasiert)

Verwenden Sie die automatische Synchronisierung, wenn Sie möchten, dass die Synchronisierung kontinuierlich in regelmäßigen Abständen ausgeführt wird:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60, // Sync every 60 seconds
  database: 'mongodb',
  databaseURI: process.env.MONGODB_URI, // e.g., 'mongodb://localhost:27017'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode' // or 'live_mode'
  }
});

// Initialize connection
await syncDodoPayments.init();

// Start the sync loop
syncDodoPayments.start();
```

<Tip>
  Die `interval`-Option ist erforderlich, wenn `.start()` für automatische Synchronisierung verwendet wird. Der Sync läuft kontinuierlich im angegebenen Intervall, bis der Prozess gestoppt wird.
</Tip>

#### Manuelle Synchronisierung

Verwenden Sie die manuelle Synchronisierung, wenn Sie Synchronisierungsoperationen auf Abruf auslösen möchten (z. B. von einem Cron-Job oder API-Endpunkt):

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  database: 'mongodb',
  databaseURI: process.env.MONGODB_URI,
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

// Initialize connection
await syncDodoPayments.init();

// Trigger a single sync operation
await syncDodoPayments.run();
```

<Tip>
  Bei manueller Synchronisierung ist die `interval`-Option nicht erforderlich. Du kannst `.run()` aufrufen, wann immer du eine Synchronisierung durchführen musst.
</Tip>

#### PostgreSQL-Beispiel

So verwendest du `dodo-sync` mit PostgreSQL:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60,
  database: 'postgres',
  databaseURI: process.env.POSTGRES_URI, // e.g., 'postgresql://user:password@localhost:5432/mydb'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

await syncDodoPayments.init();
syncDodoPayments.start();
```

#### MySQL-Beispiel

So verwendest du `dodo-sync` mit MySQL:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60,
  database: 'mysql',
  databaseURI: process.env.MYSQL_URI, // e.g., 'mysql://user:password@localhost:3306/mydb'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

await syncDodoPayments.init();
syncDodoPayments.start();
```

#### ClickHouse-Beispiel

So verwendest du `dodo-sync` mit ClickHouse:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60,
  database: 'clickhouse',
  databaseURI: process.env.CLICKHOUSE_URI, // e.g., 'http://localhost:8123'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

await syncDodoPayments.init();
syncDodoPayments.start();
```

#### Konstruktoroptionen

<ParamField body="database" type="string" required>
  Name der zu verwendenden Datenbank. Unterstützte Werte: `"mongodb"`, `"postgres"`, `"mysql"` oder `"clickhouse"`.
</ParamField>

<ParamField body="databaseURI" type="string" required>
  Verbindungszeichenfolge für deine Datenbank:

  * **MongoDB**: `mongodb://localhost:27017` oder `mongodb+srv://...`
  * **PostgreSQL**: `postgresql://user:password@localhost:5432/mydb`
  * **MySQL**: `mysql://user:password@localhost:3306/mydb`
  * **ClickHouse**: `http://localhost:8123`
</ParamField>

<ParamField body="scopes" type="string[]" required>
  Array von zu synchronisierenden Entitäten. Verfügbare Optionen: `"licences"`, `"payments"`, `"customers"`, `"subscriptions"`. Du kannst jede Kombination davon einschließen.
</ParamField>

<ParamField body="dodoPaymentsOptions" type="object" required>
  Dodo Payments API-Konfiguration für Authentifizierung und Umgebungswahl. Siehe die [TypeScript SDK-Typen](https://github.com/dodopayments/dodopayments-typescript/blob/main/src/client.ts) für vollständige Optionen.

  **Erforderliche Eigenschaften:**

  * `bearerToken`: Dein Dodo Payments API-Schlüssel
  * `environment`: Entweder `"test_mode"` oder `"live_mode"`
</ParamField>

<ParamField body="interval" type="number">
  Zeit in Sekunden zwischen automatischen Synchronisierungen. Erforderlich bei Verwendung von `.start()` für automatische Synchronisierung. Optional bei Verwendung von `.run()` für manuelle Synchronisierung.
</ParamField>

<ParamField body="rateLimit" type="number">
  Anzahl der Anfragen pro Sekunde. Steuert, wie schnell die Sync-Engine API-Anfragen stellt, um eine Überlastung der Dodo Payments API zu vermeiden.
</ParamField>

## Wichtige Informationen

<Warning>
  **MongoDB**: Auf deinem Datenbankserver wird automatisch eine Datenbank mit dem Namen `dodopayments_sync` erstellt. Alle synchronisierten Daten werden dort gespeichert. Dieser Datenbankname ist derzeit fest und kann nicht geändert werden.

  **PostgreSQL**: Tabellen (`Subscriptions`, `Payments`, `Licenses`, `Customers`) werden in der Datenbank erstellt, die in deiner Verbindungs-URI angegeben ist. Die Daten werden als JSONB gespeichert.

  **MySQL**: Tabellen (`Subscriptions`, `Payments`, `Licenses`, `Customers`) werden in der Datenbank erstellt, die in deiner Verbindungs-URI angegeben ist. Die Daten werden als JSON gespeichert.

  **ClickHouse**: Tabellen (`Subscriptions`, `Payments`, `Licenses`, `Customers`) werden mit der ReplacingMergeTree-Engine erstellt. Verwende beim Abfragen das Schlüsselwort `FINAL`, um deduplizierte Ergebnisse sicherzustellen.
</Warning>

<Info>
  Die Sync-Engine verfolgt Änderungen und synchronisiert nur neue oder aktualisierte Datensätze, wodurch nachfolgende Syncs selbst bei großen Datensätzen effizient bleiben.
</Info>

## Zusätzliche Ressourcen

<CardGroup cols={2}>
  <Card title="GitHub Repository" icon="github" href="https://github.com/dodopayments/dodo-sync">
    Quellcode ansehen, Probleme melden oder Verbesserungen beitragen
  </Card>

  <Card title="npm Package" icon="box-open" href="https://www.npmjs.com/package/dodo-sync">
    Paketdetails und Installationsanweisungen ansehen
  </Card>
</CardGroup>
