Skip to main content
Das Go SDK ermöglicht Go-Anwendungen typisierten Zugriff auf die REST API von Dodo Payments. Jede Methode akzeptiert ein context.Context, Request-Parameter verwenden einen Field-Wrapper, der Nullwerte von ausgelassenen Feldern unterscheidet, und du kannst jeder Anfrage Middleware hinzufügen.

Installation

Füge das Modul zu deinem Projekt hinzu:
So legst du eine bestimmte Version fest:
Das SDK erfordert Go 1.22 oder höher.

Schnellstart

Erstelle einen Client und anschließend eine Checkout-Sitzung:
Wenn du option.WithBearerToken auslässt, liest NewClient die Umgebungsvariable DODO_PAYMENTS_API_KEY. Wenn du option.WithEnvironmentTestMode() auslässt, verbindet sich der Client mit dem Live-Modus. Ein API-Key für den Testmodus funktioniert nur im Testmodus.
Bewahre API-Keys in Umgebungsvariablen oder einem Secrets Manager auf. Hinterlege sie niemals fest in deinem Quellcode.

Kernfunktionen

Context Support

Jede Methode akzeptiert ein context.Context für Abbrüche und Timeouts.

Strong Typing

Typisierte Request-Parameter und Response-Strukturen für Prüfungen zur Compile-Zeit.

Middleware

Füge mit option.WithMiddleware Middleware für Logging, Metriken und eigene Logik hinzu.

Goroutine Safe

Verwende einen Client gemeinsam in mehreren Goroutinen.

Konfiguration

NewClient liest DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (dein Webhook-Signaturgeheimnis) und DODO_PAYMENTS_BASE_URL aus der Umgebung. Übergebene Optionen wie option.WithBearerToken, option.WithWebhookKey und option.WithBaseURL überschreiben diese Werte. Um einen Webhook zu verifizieren, übergib den unbearbeiteten Request-Body und die Header an client.Webhooks.Unwrap(rawBody, r.Header). Die Methode prüft die Signatur mit deinem Webhook-Key und gibt das geparste Ereignis zurück. client.Webhooks.UnsafeUnwrap(rawBody) parst den Body ohne ihn zu verifizieren; verwende die Methode daher nur für Tests. Siehe Webhooks. Die Beispiele auf dieser Seite verwenden den client aus Quick Start.

Contexts und Timeouts

Anfragen laufen standardmäßig nicht ab. Eine Context-Frist begrenzt den gesamten Aufruf einschließlich Retries. Um jeden einzelnen Versuch zu begrenzen, füge option.WithRequestTimeout() hinzu:

Retry-Konfiguration

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. Setze option.WithMaxRetries am Client oder bei einer einzelnen Anfrage:

Häufige Vorgänge

Die Beispiele in diesem Abschnitt verwenden ebenfalls einen Context, zum Beispiel ctx := context.Background().

Checkout-Sitzung erstellen

Erstelle eine Checkout-Sitzung und leite den Kunden anschließend an die zurückgegebene CheckoutURL weiter:
Jede Checkout-URL funktioniert einmal und läuft nach 24 Stunden ab. Eine Übersicht über alle Sitzungsoptionen findest du unter Checkout Sessions.

Kunden verwalten

Erstelle einen Kunden mit E-Mail-Adresse und Namen und rufe ihn anschließend über seine ID ab. Metadatenwerte verwenden die Union Types aus dem Paket shared:

Abonnements verwalten

Erstelle ein Abonnement, belaste ein On-Demand-Abonnement und lies den Nutzungsverlauf eines Abonnements aus.
POST /subscriptions (die Subscriptions.New-Methode des SDK) ist veraltet. Sie funktioniert weiterhin für bestehende Integrationen, neue Integrationen sollten Abonnements jedoch über eine Checkout Session erstellen.
Billing erfordert nur Country, einen zweistelligen ISO-Ländercode. Customer ist ein CustomerRequestUnionParam: Übergebe AttachExistingCustomerParam{CustomerID: ...} für einen bestehenden Kunden oder NewCustomerParam{Email: ..., Name: ...}, um einen neuen Kunden zu erstellen. Charge ist für On-Demand-Abonnements vorgesehen, und ProductPrice wird in der kleinsten Währungseinheit angegeben. GetUsageHistory gibt eine Ergebnisseite zurück; GetUsageHistoryAutoPaging durchläuft alle Seiten.

Nutzungsbasierte Abrechnung

Nutzungsereignisse erfassen

Sende Nutzungsereignisse für einen Kunden:
EventID ist der Idempotency-Key. Vergib daher für jedes Ereignis einen eindeutigen Wert. Wenn derselbe EventID zweimal in einer Anfrage vorkommt, wird die gesamte Anfrage abgelehnt. Wenn ein EventID 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 der Wert mehr als 1 Stunde in der Vergangenheit oder mehr als 5 Minuten in der Zukunft liegt.

Nutzungsereignisse auflisten

Liste Ereignisse, gefiltert nach Kunde und Ereignisname:
List gibt eine Seite zurück. Um alle Seiten zu durchlaufen, rufe client.UsageEvents.ListAutoPaging(ctx, params) auf und iteriere mit iter.Next(), iter.Current() und iter.Err(). Andere List-Methoden verfügen über dieselbe AutoPaging-Variante, und jede Seite hat eine GetNextPage()-Methode.

Fehlerbehandlung

Wenn die API einen nicht erfolgreichen Statuscode zurückgibt, liefert das SDK einen Fehler vom Typ *dodopayments.Error zurück. Er enthält StatusCode, *http.Request und *http.Response sowie das JSON des Fehler-Bodys. Verwende errors.As zur Prüfung und verzweige anhand von StatusCode, um bestimmte Fälle zu behandeln:
Andere Fehler werden unverpackt zurückgegeben. Wenn beispielsweise der HTTP-Transport fehlschlägt, erhältst du möglicherweise einen *url.Error, der einen *net.OpError umschließt. apiErr.DumpRequest(true) gibt den serialisierten Request zurück.

Middleware

Füge mit option.WithMiddleware Middleware hinzu. Eine Middleware empfängt jede Anfrage sowie eine next-Funktion, die sie sendet:
Mehrere Middleware in einem Aufruf von option.WithMiddleware werden von links nach rechts ausgeführt. Middleware, die an NewClient übergeben wird, läuft vor Middleware, die an eine einzelne Anfrage übergeben wird.

Nebenläufigkeit

Der Client kann sicher nebenläufig verwendet werden, sodass du einen Client in mehreren Goroutinen gemeinsam nutzen kannst:

Ressourcen

GitHub Repository

Quellcode, Releases und die vollständige Methodenliste.

API Reference

Jeder Endpunkt, Parameter und jede Antwort.

Discord Community

Stelle Fragen und tausche dich mit anderen Entwicklern aus.

Report Issues

Melde Fehler oder schlage neue Funktionen vor.

Support

Hilfe zum Go SDK:

Mitwirken

Wenn du beitragen möchtest, lies die Richtlinien für Mitwirkende.
Zuletzt geändert am 26. September 2026