- 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:- 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.
The Credits tab under Products shows all your credit entitlements.
Navigate to Credits
- Melden Sie sich bei Ihrem Dodo Payments-Dashboard an
- Klicken Sie in der linken Seitenleiste auf Products
- Wählen Sie den Tab Credits aus
- Klicken Sie auf Create Credit
Configure the credit unit
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)Skip overage at the credit level
Save and copy the credit ID
cent_xxxxxxxxxxxx aus.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.Open the Meters section
- Gehen Sie in der Dashboard-Seitenleiste zu Products → Meters
- Klicken Sie auf Create Meter
Configure the meter
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: tokensSpeichern Sie den Meter und kopieren Sie seine ID – Sie werden darauf verweisen, wenn Sie ihn an Produkte anhängen.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.

Usage Based Billing pricing type with meter configuration.
Starter Plan ($29/Monat – 10M Tokens, keine Überschreitung)
Create the Starter UBB product
- Gehen Sie zu Products → Create Product
- Wählen Sie Usage Based Billing als Preistyp aus
- Geben Sie Folgendes ein:
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: USDAttach the meter
Token Usage Meter hinzu. Gehen Sie dann beim Meter wie folgt vor:- Aktivieren Sie Bill usage in Credits
- Credit Entitlement: Wählen Sie
API Tokensaus - Meter units per credit:
1– jedes Token im Ereignis entspricht 1 abgezogenem Credit - Free Threshold:
0– die Credit-Zuteilung selbst ist das „kostenlose Kontingent“ des Kunden; ein zusätzliches kostenloses Band ist nicht erforderlich

Toggle 'Bill usage in Credits' on the meter and pick the credit entitlement.
api.tokens_used-Ereignisse tatsächlich vom Saldo des Kunden abgezogen.Configure credit issuance for Starter
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
Configure credit issuance per cycle on the UBB product.
Pro Plan ($99/Monat – 40M Tokens, Überschreitung aktiviert)
Create the Pro UBB product
NeuralAPI ProDescription: 40 million API tokens per month with overage. Built for production applications.Fixed Price: 99.00Billing Cycle: MonthlyCurrency: USDAttach the meter
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.Configure credit issuance with overage
40000000Import Default Credit Settings: Deaktivieren – wir müssen die Überschreitungseinstellungen pro Produkt anpassenAllow Overage: AktiviertPrice Per Unit: 0.000005 USD pro Token (d. h. 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.Schritt 4: Token-Aufladepaket erstellen
Das Aufladepaket ist ein einmaliger Kauf, der dem bestehenden Saldo eines Kunden 5.000.000 Tokens hinzufügt.
Single Payment pricing selected for a one-time credit product.
Create a one-time product
- Gehen Sie zu Products → Create Product
- Wählen Sie Single Payment als Preistyp aus
- Geben Sie Folgendes ein:
Token Top-Up PackDescription: Instantly add 5 million tokens to your NeuralAPI balance.Price: 19.00Currency: USDAttach the token credit
- Klicken Sie im Abschnitt Entitlements neben Credits auf Attach
- Wählen Sie
API Tokensaus - Setzen Sie Credits issued auf
5000000 - Deaktivieren Sie Import Default Credit Settings – wir möchten den standardmäßigen Ablauf nach 30 Tagen überschreiben
- Setzen Sie Credit Expiry auf
365 days - Speichern Sie das Produkt
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.Set up your project
tsconfig.json:package.json-Skripte:Set up environment variables
.env mit Ihren Anmeldedaten und IDs aus den vorherigen Schritten:DODO_PAYMENTS_WEBHOOK_KEY in Schritt 7 ein, nachdem Sie Ihren Webhook-Endpunkt registriert haben.Implement the server
src/server.ts:A note on how deductions actually happen
- Ihr Handler ruft OpenAI auf und erhält
usage.total_tokens(z. B. 1532). - Sie nehmen ein einzelnes Nutzungsereignis auf:
event_name: api.tokens_used,metadata: { tokens: 1532 }. Token Usage Meteraggregiert Ereignisse nach Kunde.- 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). - Wenn die Überschreitung aktiviert ist und der Kunde unter null fällt, wird das Defizit erfasst und auf der nächsten Rechnung abgerechnet.
Schritt 6: Demo-Frontend hinzufügen
Erstellen Siepublic/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.Expose your local server
https://...ngrok-free.app.Register the webhook in Dodo Payments
- Gehen Sie im Dashboard zu Developers → Webhooks → Add Endpoint
- URL:
https://your-tunnel.ngrok-free.app/webhooks/dodo - Abonnieren Sie mindestens folgende Ereignisse:
credit.addedcredit.deductedcredit.overage_charged
- Speichern Sie und kopieren Sie das Signing Secret
- Fügen Sie es als
DODO_PAYMENTS_WEBHOOK_KEYin.envein und starten Sienpm run devanschließend neu
Schritt 8: Gesamten Ablauf testen
Subscribe a test customer
- Führen Sie
npm run devaus - Öffnen Sie
http://localhost:3000 - 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
- Gehen Sie im Dashboard zu Customers → most recent und kopieren Sie die
cus_...-ID - Fügen Sie sie in das Feld „Logged-in customer ID“ der Demo ein und klicken Sie auf Save
Generate a real AI response
total_tokens, nimmt ein Nutzungsereignis auf und gibt die Antwort zurück.Test the top-up flow
credit.added anzeigen.Fehlerbehebung
Credits not deducting after usage events
Credits not deducting after usage events
- Der Ereignisname des Meters stimmt nicht mit dem
event_nameüberein, das Sie senden (beiapi.tokens_usedwird 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.tokensstimmt nicht mit dem Feld „Over Property“ des Meters überein - Die Vergabe des Kunden ist abgelaufen (überprüfen Sie die Credit-Historie des Kunden)
- Products → Meters: Öffnen Sie den Meter und bestätigen Sie, dass der verknüpfte Credit-Name am Produktanhang angezeigt wird
- Der Tab Events des Meters – aufgenommene Ereignisse sollten dort bereits vor dem Abzug erscheinen
- Customers → [Customer] → Credits: Ledger-Einträge sollten innerhalb von ein bis zwei Minuten erscheinen
Balance always shows 0 or 'customer not found'
Balance always shows 0 or 'customer not found'
- Der Kunde hat den Checkout noch nicht abgeschlossen – Credits werden erst nach erfolgreicher Zahlung vergeben
- Sie fragen mit der falschen
customer_idab (verwenden Sie diecus_...-ID aus dem Dashboard, nicht Ihre eigene DB-ID) CREDIT_ENTITLEMENT_IDin.envstimmt nicht mit dem am Produkt angehängten Credit überein
Overage not working for Pro plan customers
Overage not working for Pro plan customers
- 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
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).`Webhook verification failed` in logs
`Webhook verification failed` in logs
- Falsche Reihenfolge beim Parsen des Bodys:
express.json()wurde auf/webhooks/dodoangewendet, bevorexpress.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
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
API Tokens-Credit mit 30-tägiger Gültigkeit, der von allen Plänen und dem Aufladepaket gemeinsam verwendet wirdTiered Plans, One Credit
One-Time Top-Up Pack
Auto-Deduction via Meter
Live Balance API
Verified Webhook Pipeline
credit.added, credit.deducted, credit.overage_charged), die über einen signaturverifizierten Handler mithilfe des Standard-Webhooks-Helfers des SDK weitergeleitet werden- Authentifizierung für
/credits/:customerIdund/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 verwendetDate.now() + random. Verwenden Sie in der Produktion Ihre Request-ID, damit Wiederholungen idempotent sind (Dodo Payments dedupliziert nachevent_id). - Kunden↔Benutzer-Zuordnung speichern – speichern Sie
customer_idnach 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/generatedes 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 densubscription.cancelled-Webhook hören und/api/generatevom 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.