Skip to main content
Überlassen Sie Sentra das Schreiben Ihres Integrationscodes.
Verwenden Sie unseren AI-Assistenten in VS Code, Cursor oder Windsurf, um SDK-/API-Code, Webhook-Handler, Credit-Vergaben und mehr zu generieren – beschreiben Sie einfach, was Sie benötigen.
Sentra ausprobieren: AI-gestützte Integration →
In diesem Tutorial erstellen Sie NeuralAPI – eine abgestufte AI-Plattform, bei der jeder Abonnementplan ein monatliches Token-Credit-Kontingent umfasst, Kunden Aufladepakete kaufen können, wenn ihre Credits knapp werden, und Ihr Backend Credits automatisch abzieht, während Anfragen von OpenAI verarbeitet werden.
Dieses Tutorial verwendet Node.js/Express und das OpenAI SDK. Die Konzepte von Dodo Payments (Credits, Meter, Webhooks) gelten für jedes Framework und jeden AI-Anbieter – passen Sie sie frei an.
Am Ende dieses Tutorials wissen Sie, wie Sie Folgendes tun:
  • Eine benutzerdefinierte Credit-Berechtigung (Tokens) und einen Meter erstellen, der Credits automatisch abzieht
  • Credits an Abonnementpläne (mit und ohne Überschreitung) und ein einmaliges Aufladeprodukt anhängen
  • Einen echten OpenAI-Completion-Endpunkt einrichten, der Tokens über Dodo Payments abrechnet
  • Den aktuellen Credit-Saldo eines Kunden über das SDK abfragen
  • Webhook-Signaturen überprüfen und Dodo Payments-Credit-Ereignisse weiterleiten

Was wir erstellen

Hier ist das Preismodell für NeuralAPI:
Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
  • Ein Konto bei Dodo Payments (Testmodus ist ausreichend)
  • Einen OpenAI-API-Schlüssel
  • Node.js 18+
  • Grundkenntnisse in TypeScript/Node.js

Schritt 1: Token-Credit-Berechtigung erstellen

Erstellen Sie zunächst die Credit-Berechtigung, die von beiden Abonnementplänen und dem Aufladepaket gemeinsam verwendet wird. Stellen Sie sich dies als Definition der Einheit „Token“ vor, die Ihre Plattform verwendet.
Auflistungsseite mit erstellten Credit-Berechtigungen

The Credits tab under Products shows all your credit entitlements.

1

Navigate to Credits

  1. Melden Sie sich bei Ihrem Dodo Payments-Dashboard an
  2. Klicken Sie in der linken Seitenleiste auf Products
  3. Wählen Sie den Tab Credits aus
  4. Klicken Sie auf Create Credit
2

Configure the credit unit

Geben Sie die grundlegenden Informationen für Ihren Token-Credit ein:Credit Name: API TokensCredit Type: Wählen Sie Custom Unit ausUnit Name: tokenPrecision: 0 (Tokens sind immer ganze Zahlen)Credit Expiry: 30 days (Credits werden in jedem Abrechnungszyklus zurückgesetzt)
Die Genauigkeit kann nach der Erstellung eines Credits nicht mehr geändert werden. Für Token-Zählungen ist 0 (ganze Zahlen) fast immer korrekt.
3

Skip overage at the credit level

Lassen Sie die Überschreitung hier deaktiviert – Sie konfigurieren sie beim Anhängen des Credits an Produkte für jeden Plan einzeln. Dadurch blockiert der Starter Plan die Nutzung bei null, während der Pro Plan eine Überschreitung zulässt.
Die hier konfigurierten Überschreitungseinstellungen sind Standardeinstellungen. Jeder Produktanhang kann sie überschreiben – genau das tun wir in Schritt 3.
4

Save and copy the credit ID

Klicken Sie auf Create Credit. Öffnen Sie den Credit nach dem Speichern und kopieren Sie seine ID – sie sieht wie cent_xxxxxxxxxxxx aus.
Ihre API Tokens-Credit-Berechtigung ist bereit. Erstellen Sie als Nächstes einen Meter, damit Nutzungsereignisse automatisch Abzüge auslösen können.

Schritt 2: Meter für die Token-Nutzung erstellen

Ein Meter aggregiert eingehende Nutzungsereignisse und wandelt sie in Credit-Abzüge um. Sie benötigen ihn vor der Erstellung der Planprodukte, da Sie ihn während der Produkterstellung in Schritt 3 anhängen.
1

Open the Meters section

  1. Gehen Sie in der Dashboard-Seitenleiste zu ProductsMeters
  2. Klicken Sie auf Create Meter
2

Configure the meter

Geben Sie Folgendes ein:Meter Name: Token Usage MeterEvent Name: api.tokens_used (dies muss exakt dem entsprechen, was Ihre App sendet)Aggregation Type: Sum – wir summieren die Token-Anzahl aus jedem EreignisOver Property: tokens – der Metadaten-Schlüssel jedes Ereignisses, dessen Wert summiert wirdMeasurement Unit: tokens
Bei Ereignisnamen wird zwischen Groß- und Kleinschreibung unterschieden. api.tokens_usedApi.Tokens.Used – wählen Sie einen Namen und verwenden Sie ihn konsequent.
Speichern Sie den Meter und kopieren Sie seine ID – Sie werden darauf verweisen, wenn Sie ihn an Produkte anhängen.
Der Meter wurde erstellt. Jetzt können wir ihn bei der Produktkonfiguration mit dem Credit verbinden.

Schritt 3: Planprodukte erstellen

Beide Pläne müssen Produkte für Usage Based Billing sein, keine einfachen Abonnements – Meter können nur an UBB-Produkte angehängt werden, und Sie benötigen den Meter, um Credits automatisch abzuziehen, während Kunden Ihre API aufrufen. UBB-Produkte unterstützen weiterhin eine wiederkehrende Grundgebühr ($29 / $99); die darüber hinausgehende Nutzung wird in Credits abgerechnet.
Preiskonfiguration für Usage Based Billing

Usage Based Billing pricing type with meter configuration.

Starter Plan ($29/Monat – 10M Tokens, keine Überschreitung)

1

Create the Starter UBB product

  1. Gehen Sie zu Products → Create Product
  2. Wählen Sie Usage Based Billing als Preistyp aus
  3. Geben Sie Folgendes ein:
Product Name: NeuralAPI StarterDescription: 10 million API tokens per month. Perfect for individual developers and small projects.Fixed Price: 29.00 (die wiederkehrende Grundgebühr – wird monatlich berechnet, auch bevor Nutzung anfällt)Billing Cycle: MonthlyCurrency: USD
2

Attach the meter

Klicken Sie im Abschnitt Select meter auf + und fügen Sie Token Usage Meter hinzu. Gehen Sie dann beim Meter wie folgt vor:
  1. Aktivieren Sie Bill usage in Credits
  2. Credit Entitlement: Wählen Sie API Tokens aus
  3. Meter units per credit: 1 – jedes Token im Ereignis entspricht 1 abgezogenem Credit
  4. Free Threshold: 0 – die Credit-Zuteilung selbst ist das „kostenlose Kontingent“ des Kunden; ein zusätzliches kostenloses Band ist nicht erforderlich
Meter mit aktivierter Option Bill usage in Credits und ausgewählten API Tokens

Toggle 'Bill usage in Credits' on the meter and pick the credit entitlement.

Damit werden eingehende api.tokens_used-Ereignisse tatsächlich vom Saldo des Kunden abgezogen.
3

Configure credit issuance for Starter

Scrollen Sie beim Produkt zum Abschnitt mit der Credit-Konfiguration, der erscheint, sobald ein Credit-abgerechneter Meter angehängt wurde:Credits issued per billing cycle: 10000000Allow Overage: Deaktiviert – Starter-Kunden werden blockiert, sobald ihre Tokens aufgebraucht sindImport Default Credit Settings: Aktiviert – verwenden Sie den Ablauf nach 30 Tagen aus der Credit-Berechtigung
Credit-Konfigurationsformular mit Betrag pro Zyklus und Überschreitungseinstellungen

Configure credit issuance per cycle on the UBB product.

Klicken Sie auf Save und kopieren Sie die Produkt-ID.
Starter Plan: Grundgebühr von $29/Monat, 10M Tokens/Zyklus, bei null blockiert, automatischer Abzug über den Meter.

Pro Plan ($99/Monat – 40M Tokens, Überschreitung aktiviert)

1

Create the Pro UBB product

Der Ablauf entspricht dem Starter Plan, jedoch mit größeren Werten:Product Name: NeuralAPI ProDescription: 40 million API tokens per month with overage. Built for production applications.Fixed Price: 99.00Billing Cycle: MonthlyCurrency: USD
2

Attach the meter

Identisch mit Starter: Fügen Sie Token Usage Meter hinzu, aktivieren Sie Bill usage in Credits, wählen Sie API Tokens aus, setzen Sie Meter units per credit auf 1 und Free Threshold auf 0.
3

Configure credit issuance with overage

Konfigurieren Sie die Credit-Vergabe, diesmal mit aktivierter Überschreitung:Credits issued per billing cycle: 40000000Import Default Credit Settings: Deaktivieren – wir müssen die Überschreitungseinstellungen pro Produkt anpassenAllow Overage: AktiviertPrice Per Unit: 0.000005 USD pro Token (d. h. 0.005pro1KTokensoder0.005 pro 1K Tokens oder 5 pro 1M Tokens – über dem effektiven Tokenpreis des Plans, um eine übermäßige Nutzung zu vermeiden)Overage Behavior: Bill overage at billing – die Überschreitung wird auf der nächsten Rechnung berechnet, danach wird der Saldo zurückgesetztSpeichern Sie das Produkt und kopieren Sie die Produkt-ID.
Pro Plan: Grundgebühr von 99/Monat,40MTokens/Zyklus,U¨berschreitungmit99/Monat, 40M Tokens/Zyklus, Überschreitung mit 0.005/1K Tokens, automatischer Abzug über den Meter.

Schritt 4: Token-Aufladepaket erstellen

Das Aufladepaket ist ein einmaliger Kauf, der dem bestehenden Saldo eines Kunden 5.000.000 Tokens hinzufügt.
Produktpreisbereich mit ausgewählter Option Single Payment

Single Payment pricing selected for a one-time credit product.

1

Create a one-time product

  1. Gehen Sie zu Products → Create Product
  2. Wählen Sie Single Payment als Preistyp aus
  3. Geben Sie Folgendes ein:
Product Name: Token Top-Up PackDescription: Instantly add 5 million tokens to your NeuralAPI balance.Price: 19.00Currency: USD
2

Attach the token credit

  1. Klicken Sie im Abschnitt Entitlements neben Credits auf Attach
  2. Wählen Sie API Tokens aus
  3. Setzen Sie Credits issued auf 5000000
  4. Deaktivieren Sie Import Default Credit Settings – wir möchten den standardmäßigen Ablauf nach 30 Tagen überschreiben
  5. Setzen Sie Credit Expiry auf 365 days
  6. Speichern Sie das Produkt
Kopieren Sie die Produkt-ID.
Warum eine längere Gültigkeit für Aufladungen? Abonnement-Credits werden alle 30 Tage zurückgesetzt, da dies dem Zyklus entspricht. Aufladungen sind vorausbezahlte Käufe – der Kunde hat $19 im Voraus bezahlt und erwartet vernünftigerweise, dass diese Tokens länger als einen Monat gültig bleiben. 365 Tage entsprechen der Funktionsweise echter Prepaid-Credits bei OpenAI, AWS und Anthropic und begrenzen gleichzeitig Ihre Haftung, damit Kunden nicht unbegrenzt Credits ansammeln können.
Das Aufladepaket ist konfiguriert – durch den Kauf werden 5.000.000 Tokens gutgeschrieben, die 365 Tage gültig bleiben.

Schritt 5: Backend erstellen

Erstellen wir nun den Express-Server, der den Checkout für Abonnements und Aufladungen, echte OpenAI-Completions mit Token-Abrechnung, Saldoabfragen und Credit-Webhook-Ereignisse verarbeitet.
1

Set up your project

Erstellen Sie eine tsconfig.json:
tsconfig.json
Aktualisieren Sie die package.json-Skripte:
package.json
2

Set up environment variables

Erstellen Sie eine .env mit Ihren Anmeldedaten und IDs aus den vorherigen Schritten:
.env
Übergeben Sie .env niemals an die Versionsverwaltung. Fügen Sie sie sofort zu .gitignore hinzu.
Sie tragen DODO_PAYMENTS_WEBHOOK_KEY in Schritt 7 ein, nachdem Sie Ihren Webhook-Endpunkt registriert haben.
3

Implement the server

Erstellen Sie src/server.ts:
Backend fertig: Checkout für Abonnements und Aufladungen, OpenAI-Completion mit Meter-basierter Token-Abrechnung, Saldoabfrage und verifizierter Webhook-Handler.
@dodopayments/ingestion-blueprints bietet sofort einsetzbare Tracker, die den Aufruf von usageEvents.ingest für Sie automatisieren – einschließlich der Nutzung von LLM Blueprint, API gateway, object storage, streams und time-range.
4

A note on how deductions actually happen

Vielleicht ist Ihnen aufgefallen, dass es keinen ausdrücklichen Aufruf „N Credits abziehen“ gibt. Das ist beabsichtigt:
  1. Ihr Handler ruft OpenAI auf und erhält usage.total_tokens (z. B. 1532).
  2. Sie nehmen ein einzelnes Nutzungsereignis auf: event_name: api.tokens_used, metadata: { tokens: 1532 }.
  3. Token Usage Meter aggregiert Ereignisse nach Kunde.
  4. Da der Meter mit dem API Tokens-Credit und Bill usage in Credits verbunden ist, zieht Dodo Payments 1532 Credits aus der ältesten nicht abgelaufenen Vergabe des Kunden ab (FIFO).
  5. Wenn die Überschreitung aktiviert ist und der Kunde unter null fällt, wird das Defizit erfasst und auf der nächsten Rechnung abgerechnet.
Der Meter übernimmt all diese Aufgaben. Ihr Code muss nur Ereignisse aufnehmen.

Schritt 6: Demo-Frontend hinzufügen

Erstellen Sie public/index.html, um alle Abläufe im Browser zu testen. Wir speichern die Kunden-ID in localStorage, damit Abonnieren → Generieren → Aufladen dieselbe Identität verwenden und so eine angemeldete App nachahmen:

Schritt 7: Webhook einrichten

Webhooks ermöglichen es Ihrem Server, auf Saldoänderungen zu reagieren – Sie verwenden sie, um „wird knapp“-E-Mails zu senden, bevor Kunden null erreichen.
1

Expose your local server

Webhooks benötigen eine öffentliche URL. Verwenden Sie für die lokale Entwicklung ngrok oder einen beliebigen Tunnel:
Kopieren Sie die URL von https://...ngrok-free.app.
2

Register the webhook in Dodo Payments

  1. Gehen Sie im Dashboard zu Developers → Webhooks → Add Endpoint
  2. URL: https://your-tunnel.ngrok-free.app/webhooks/dodo
  3. Abonnieren Sie mindestens folgende Ereignisse:
    • credit.added
    • credit.deducted
    • credit.overage_charged
  4. Speichern Sie und kopieren Sie das Signing Secret
  5. Fügen Sie es als DODO_PAYMENTS_WEBHOOK_KEY in .env ein und starten Sie npm run dev anschließend neu
Die dodo.webhooks.unwrap() des SDK überprüft die Header webhook-id, webhook-timestamp und webhook-signature mithilfe Ihres Signing Secret. Sie müssen keine eigene HMAC-Überprüfung erstellen – und sollten dies auch nicht tun, da Dodo Payments Standard Webhooks verwendet, die id.timestamp.body statt nur des Bodys signieren.

Schritt 8: Gesamten Ablauf testen

1

Subscribe a test customer

  1. Führen Sie npm run dev aus
  2. Öffnen Sie http://localhost:3000
  3. Wählen Sie Pro Plan, geben Sie eine Test-E-Mail-Adresse und einen Namen ein, klicken Sie auf Get Checkout Link und schließen Sie den Checkout mit Testkartendaten ab
  4. Gehen Sie im Dashboard zu Customers → most recent und kopieren Sie die cus_...-ID
  5. Fügen Sie sie in das Feld „Logged-in customer ID“ der Demo ein und klicken Sie auf Save
Der Kunde sollte 40.000.000 Tokens haben. Klicken Sie auf Refresh Balance, um dies zu bestätigen.
2

Generate a real AI response

Geben Sie einen Prompt ein und klicken Sie auf Generate. Der Server ruft OpenAI auf, erhält die tatsächliche total_tokens, nimmt ein Nutzungsereignis auf und gibt die Antwort zurück.
Nutzungsereignisse werden etwa jede Minute von einem Hintergrund-Worker verarbeitet. Der Saldo sinkt nicht sofort – warten Sie 30–90 Sekunden und klicken Sie erneut auf Refresh Balance. Gehen Sie nicht davon aus, dass etwas defekt ist, wenn die erste Aktualisierung keine Änderung zeigt.
3

Test the top-up flow

Klicken Sie auf Buy 5M Tokens — $19 und schließen Sie den Checkout ab. Aktualisieren Sie nach erfolgreicher Zahlung den Saldo – er sollte um 5.000.000 Tokens steigen. Ihr Server-Log sollte ein Ereignis credit.added anzeigen.

Fehlerbehebung

Mögliche Ursachen:
  • Der Ereignisname des Meters stimmt nicht mit dem event_name überein, das Sie senden (bei api.tokens_used wird zwischen Groß- und Kleinschreibung unterschieden)
  • Der Meter ist beim Produkt nicht mit dem API Tokens-Credit verknüpft – öffnen Sie die Meter-Konfiguration des Produkts und überprüfen Sie, ob Bill usage in Credits aktiviert ist
  • Der Schlüssel metadata.tokens stimmt nicht mit dem Feld „Over Property“ des Meters überein
  • Die Vergabe des Kunden ist abgelaufen (überprüfen Sie die Credit-Historie des Kunden)
Zu überprüfen:
  1. Products → Meters: Öffnen Sie den Meter und bestätigen Sie, dass der verknüpfte Credit-Name am Produktanhang angezeigt wird
  2. Der Tab Events des Meters – aufgenommene Ereignisse sollten dort bereits vor dem Abzug erscheinen
  3. Customers → [Customer] → Credits: Ledger-Einträge sollten innerhalb von ein bis zwei Minuten erscheinen
Mögliche Ursachen:
  • Der Kunde hat den Checkout noch nicht abgeschlossen – Credits werden erst nach erfolgreicher Zahlung vergeben
  • Sie fragen mit der falschen customer_id ab (verwenden Sie die cus_...-ID aus dem Dashboard, nicht Ihre eigene DB-ID)
  • CREDIT_ENTITLEMENT_ID in .env stimmt nicht mit dem am Produkt angehängten Credit überein
Zu überprüfen: Öffnen Sie Customers → [Customer] → Credits. Wenn dort keine Credits erscheinen, wurde die Produktberechtigung nicht angehängt oder die Zahlung nicht abgeschlossen.
Mögliche Ursachen:
  • Die Überschreitung wurde am Credit-Anhang des Pro-Produkts nicht aktiviert (die Einstellung auf Credit-Ebene ist nur ein Standardwert)
  • Der Kunde verwendet tatsächlich den Starter Plan und nicht den Pro Plan
  • Das Überschreitungslimit wurde auf 0 gesetzt
Zu überprüfen: Bearbeiten Sie Pro → Entitlements → Credits und bestätigen Sie, dass Allow Overage aktiviert und Price Per Unit auf 0.000005 gesetzt ist (= $5 pro Million Tokens; überprüfen Sie die führenden Nullen – das Feld erwartet den Preis pro Token, nicht pro 1K).
Mögliche Ursachen:
  • Falsche Reihenfolge beim Parsen des Bodys: express.json() wurde auf /webhooks/dodo angewendet, bevor express.raw() ausgeführt wurde – das SDK benötigt die rohen Bytes der Anfrage, kein geparstes JSON
  • Falsches Signing Secret in DODO_PAYMENTS_WEBHOOK_KEY
  • Der Reverse Proxy schreibt Header um
Zu überprüfen: Bestätigen Sie, dass die Zeile app.use('/webhooks/dodo', express.raw(...)) in server.ts vor app.use(express.json()) steht.

Benötigen Sie Hilfe?

Glückwunsch! Sie haben eine kreditbasierte Abrechnung für NeuralAPI erstellt

Ihre Plattform verfügt nun über ein vollständiges, produktionsbereites Credit-Abrechnungssystem:

Token Credit Entitlement

Ein wiederverwendbarer API Tokens-Credit mit 30-tägiger Gültigkeit, der von allen Plänen und dem Aufladepaket gemeinsam verwendet wird

Tiered Plans, One Credit

Starter (10M, harte Begrenzung) und Pro (40M + Überschreitung) pro Produkt konfiguriert, ohne den Credit zu duplizieren

One-Time Top-Up Pack

Kunden können 5M Tokens für $19 hinzufügen, ohne ihr Abonnement zu ändern

Auto-Deduction via Meter

Echte OpenAI-Token-Zählungen werden als Ereignisse aufgenommen; der Meter zieht Credits per FIFO ab, ohne manuelle Nachverfolgung

Live Balance API

Echtzeit-Saldo über das SDK, um Zugriff zu steuern, Nutzung anzuzeigen oder Kunden in der App zu warnen

Verified Webhook Pipeline

Credit-Ledger-Ereignisse (credit.added, credit.deducted, credit.overage_charged), die über einen signaturverifizierten Handler mithilfe des Standard-Webhooks-Helfers des SDK weitergeleitet werden
Gehen Sie in Produktion? Sichern Sie Folgendes ab:
  • Authentifizierung für /credits/:customerId und /api/generate – derzeit kann jeder diese Endpunkte mit einer beliebigen Kunden-ID aufrufen. Authentifizieren Sie Benutzer und ermitteln Sie deren Kunden-ID serverseitig.
  • Stabile event_ids – das Beispiel verwendet Date.now() + random. Verwenden Sie in der Produktion Ihre Request-ID, damit Wiederholungen idempotent sind (Dodo Payments dedupliziert nach event_id).
  • Kunden↔Benutzer-Zuordnung speichern – speichern Sie customer_id nach dem ersten Checkout in Ihrer Datenbank, damit kein manuelles Einfügen erforderlich ist.
  • Legen Sie fest, was beim Ende eines Abonnements geschieht. Plan-Credits bleiben bis zu ihrem natürlichen Ablauf (30 Tage nach Vergabe) im Ledger des Kunden, und Auflade-Credits bleiben 365 Tage gültig – der /api/generate des Cookbooks prüft jedoch nur den Saldo, nicht den Abonnementstatus. Ein gekündigter Kunde kann daher weiterhin seine verbleibenden Tokens verbrauchen. Dies ist die kundenfreundliche Standardeinstellung. Für eine strengere Zugriffskontrolle können Sie entweder (a) auf den subscription.cancelled-Webhook hören und /api/generate vom Abonnementstatus abhängig machen oder (b) die Ledger-API von Dodo aufrufen, um ungenutzte Plan-Credits bei der Kündigung abzubuchen und Auflade-Credits unangetastet zu lassen.
  • Überwachen Sie das Usage Billing-Dashboard, um Unregelmäßigkeiten bei der Messung frühzeitig zu erkennen.

Credit-Based Billing Reference

Vollständige CBB-Dokumentation: Übertragung, Überschreitungsmodi, Ledger-Verwaltung und alle API-Endpunkte.

Credit Webhook Events

Payload-Schemas für jedes Credit-Ereignis, das Ihr Server empfangen kann.
Zuletzt geändert am 31. Juli 2026