Skip to main content
Das Python SDK ermöglicht Python-Anwendungen einen typisierten Zugriff auf die Dodo Payments REST API. Es verfügt über einen synchronen Client, DodoPayments, und einen asynchronen Client, AsyncDodoPayments, die beide auf httpx basieren. Verschachtelte Anfrageparameter sind typisierte Dictionaries, und Antworten sind Pydantic-Modelle.

Installation

Installieren Sie das SDK mit pip:
Um aiohttp als HTTP-Backend für den asynchronen Client zu verwenden, installieren Sie das aiohttp-Extra:
Um Webhook-Signaturen mit client.webhooks.unwrap() zu überprüfen, installieren Sie zusätzlich das webhooks-Extra: pip install "dodopayments[webhooks]".
Das SDK erfordert Python 3.9 oder höher. Verwenden Sie die neueste stabile Python-Version, um Sicherheitsupdates zu erhalten.

Schnellstart

Synchroner Client

Erstellen Sie einen Client und anschließend eine Checkout-Sitzung:
Wenn Sie bearer_token weglassen, liest der Client die Umgebungsvariable DODO_PAYMENTS_API_KEY. Wenn Sie environment weglassen, verbindet sich der Client mit dem Live-Modus. Ein API-Schlüssel für den Testmodus funktioniert nur mit environment="test_mode".

Asynchroner Client

AsyncDodoPayments verfügt über dieselben Methoden wie DodoPayments. Warten Sie jeden Aufruf mit await ab:
Bewahren Sie API-Schlüssel in Umgebungsvariablen oder einem Secrets Manager auf. Übertragen Sie sie niemals in die Versionsverwaltung.

Kernfunktionen

Pythonic Interface

Schlüsselwortargumente für Parameter, TypedDict-Typen für verschachtelte Objekte und Pydantic-Modelle für Antworten.

Async/Await

AsyncDodoPayments für asyncio mit aiohttp als optionalem HTTP-Backend.

Type Hints

Type Hints für jede Methode zur Autovervollständigung im Editor und zur Typprüfung mit mypy.

Auto-Pagination

Listenmethoden geben Iteratoren zurück, die beim Durchlaufen die nächste Seite abrufen.

Konfiguration

Umgebungsvariablen

Speichern Sie Ihren API-Schlüssel in einer Umgebungsvariablen:
.env
Der Client liest diese Variablen, wenn Sie das entsprechende Argument nicht übergeben: Wenn DODO_PAYMENTS_BASE_URL gesetzt ist und Sie außerdem environment übergeben, löst der Konstruktor einen Fehler vom Typ “Ambiguous URL” aus. Um in diesem Fall environment zu verwenden, übergeben Sie base_url=None. Um einen Webhook zu überprüfen, übergeben Sie den unveränderten Anfrage-Body und die Header an client.webhooks.unwrap(payload, headers=headers). Die Signatur wird mit Ihrem Webhook-Schlüssel überprüft und das geparste Ereignis zurückgegeben. client.webhooks.unsafe_unwrap(payload) parst den Body, ohne ihn zu überprüfen. Verwenden Sie es daher nur für Tests. Siehe Webhooks.

Timeouts

Anfragen laufen standardmäßig nach 1 Minute ab, mit einem Verbindungs-Timeout von 5 Sekunden. Übergeben Sie timeout in Sekunden oder ein httpx.Timeout für separate Lese-, Schreib- und Verbindungslimits:
Wenn bei einer Anfrage ein Timeout auftritt, löst das SDK APITimeoutError aus. Anfragen mit Timeout werden erneut versucht. Daher kann ein Aufruf länger als timeout dauern, bevor er fehlschlägt.

Wiederholungsversuche

Setzen Sie max_retries auf dem Client oder bei einer einzelnen Anfrage mit with_options():
Das SDK wiederholt Verbindungsfehler und Antworten mit dem Status 408, 409, 429 oder 500 und höher. Standardmäßig wird ein Vorgang zweimal mit exponentiellem Backoff wiederholt. Wenn eine Anfrage weiterhin fehlschlägt, löst das SDK eine Unterklasse von dodopayments.APIError aus: Die Statusausnahmen erben von dodopayments.APIStatusError, das über die Attribute status_code und response verfügt. APITimeoutError ist eine Unterklasse von APIConnectionError.

Häufige Vorgänge

Die Beispiele in diesem Abschnitt verwenden client aus dem Schnellstart.

Checkout-Sitzung erstellen

Erstellen Sie eine Checkout-Sitzung und leiten Sie den Kunden anschließend an die zurückgegebene checkout_url weiter:
Jede checkout_url funktioniert einmal und läuft nach 24 Stunden ab. Eine Übersicht über alle Sitzungsoptionen finden Sie unter Checkout-Sitzungen.

Kunden verwalten

Erstellen Sie einen Kunden mit einer E-Mail-Adresse und einem Namen und rufen Sie ihn anschließend über seine ID ab:

Abonnements verwalten

Erstellen Sie ein Abonnement, belasten Sie ein On-Demand-Abonnement und lesen Sie den Nutzungsverlauf eines Abonnements aus.
POST /subscriptions (die subscriptions.create-Methode des SDK) ist veraltet. Sie funktioniert weiterhin für bestehende Integrationen, aber neue Integrationen sollten Abonnements über eine Checkout-Sitzung erstellen.
billing erfordert nur country, einen zweistelligen ISO-Ländercode. customer akzeptiert {"customer_id": ...}, um einen bestehenden Kunden zu verknüpfen, oder {"email": ..., "name": ...}, um einen Kunden zu erstellen. charge ist für On-Demand-Abonnements vorgesehen, und product_price wird in der kleinsten Währungseinheit angegeben. retrieve_usage_history gibt eine paginierte Liste zurück, die Sie wie unter Paginierung gezeigt durchlaufen können.

Nutzungsbasierte Abrechnung

Nutzungsereignisse erfassen

Senden Sie Nutzungsereignisse für einen Kunden:
event_id ist der Idempotenzschlüssel. Weisen Sie daher jedem Ereignis einen eindeutigen Wert zu. Wenn derselbe event_id zweimal in einer Anfrage vorkommt, wird die gesamte Anfrage abgelehnt. Wenn ein event_id bereits erfasst wurde, wird das neue Ereignis ignoriert. Eine Anfrage akzeptiert bis zu 1.000 Ereignisse. timestamp wird standardmäßig auf die aktuelle Zeit gesetzt und abgelehnt, wenn sie mehr als 1 Stunde in der Vergangenheit oder mehr als 5 Minuten in der Zukunft liegt.

Ereignisse auflisten und abrufen

Rufen Sie ein einzelnes Ereignis über seinen event_id ab oder listen Sie Ereignisse auf, gefiltert nach Kunde und Ereignisnamen:
usage_events.list akzeptiert außerdem die Filter meter_id, start und end.

Paginierung

Automatische Paginierung

Listenmethoden geben einen Iterator zurück, der beim Durchlaufen die nächste Seite abruft:

Asynchrone Paginierung

Verwenden Sie mit dem asynchronen Client async for für die Schleife:

Manuelle Paginierung

Um jeweils mit einer Seite zu arbeiten, lesen Sie items und rufen Sie has_next_page() und get_next_page() auf. next_page_info() gibt die Parameter für die nächste Anfrage zurück:

Konfiguration des HTTP-Clients

Um einen Proxy, einen benutzerdefinierten Transport oder andere httpx-Einstellungen hinzuzufügen, übergeben Sie Ihren eigenen http_client. DefaultHttpxClient übernimmt die standardmäßigen Verbindungslimits, Timeout- und Weiterleitungseinstellungen des SDK:
Um für eine einzelne Anfrage einen anderen HTTP-Client zu verwenden, rufen Sie client.with_options(http_client=...) auf.

Async mit AIOHTTP

Standardmäßig sendet der asynchrone Client Anfragen mit httpx. Für eine bessere Nebenläufigkeit installieren Sie das aiohttp-Extra und übergeben Sie DefaultAioHttpClient() als http_client:

Protokollierung

Das SDK protokolliert über das logging-Modul der Standardbibliothek. Um die Protokollierung zu aktivieren, setzen Sie DODO_PAYMENTS_LOG auf info:
Für ausführlichere Informationen setzen Sie den Wert auf debug:

Integration in Frameworks

Diese Beispiele erstellen eine Checkout-Sitzung über einen Web-Endpunkt und geben deren URL zurück.

FastAPI

Dieser Endpunkt verwendet den asynchronen Client:

Django

Diese View verwendet den synchronen Client:

Ressourcen

GitHub Repository

Quellcode, Releases und die vollständige Methodenliste.

API Reference

Jeder Endpunkt, Parameter und jede Antwort.

Discord Community

Stellen Sie Fragen und tauschen Sie sich mit anderen Entwicklern aus.

Report Issues

Melden Sie Fehler oder schlagen Sie Funktionen vor.

Support

Hilfe zum Python SDK:

Mitwirken

Um mitzuwirken, lesen Sie die Richtlinien für Beiträge.
Zuletzt geändert am 26. September 2026