- Eine benutzerdefinierte Credit-Berechtigung für Tokens und einen Meter erstellen, der davon abzieht.
- Credits mit und ohne Mehrverbrauch an Abonnementpläne sowie an ein einmaliges Aufladeprodukt anhängen.
- OpenAI über einen Endpunkt aufrufen, der Tokens über Dodo Payments abrechnet.
- Das aktuelle Credit-Guthaben eines Kunden mit dem SDK auslesen.
- Webhook-Signaturen überprüfen und Dodo Payments-Credit-Ereignisse weiterleiten.
Was wir erstellen
NeuralAPI verkauft drei Produkte:- Ein Dodo Payments-Konto. Führe alles im Testmodus aus.
- Einen OpenAI API-Schlüssel.
- Node.js 22 oder höher sowie Kenntnisse in TypeScript und Node.js.
Schritt 1: Token-Credit-Berechtigung erstellen
Erstelle die Credit-Berechtigung, die von beiden Plänen und dem Aufladepaket gemeinsam verwendet wird. Sie definiert die Token-Einheit, die NeuralAPI verkauft.
The Credits tab under Products shows all your credit entitlements.
Navigate to Credits
- Melde dich im Dodo Payments-Dashboard an.
- Klicke in der Seitenleiste auf Products.
- Wähle den Tab Credits aus.
- Klicke auf Create Credit.
Configure the Credit Unit
API TokensCredit Type: Custom UnitUnit Name: tokenDefine Precision: 0. Tokenanzahlen sind ganze Zahlen.Credit Expiry: 30 days. Credits laufen 30 Tage nach ihrer Ausstellung ab, passend zum monatlichen Abrechnungszyklus.Skip Overage at the Credit Level
Save and Copy the Credit ID
cde_ beginnt.API Tokens ist bereit. Erstelle als Nächstes einen Meter, damit Nutzungsevents Credits abziehen.Schritt 2: Meter für die Token-Nutzung erstellen
Ein Meter aggregiert eingehende Nutzungsevents. Wenn du ihn mit einem Credit verknüpfst, wird die aggregierte Nutzung vom Credit-Guthaben des Kunden abgezogen. Erstelle den Meter vor den Produktplänen, da du ihn beim Erstellen in Schritt 3 anhängst.Open the Meters Section
- Gehe in der Dashboard-Seitenleiste zu Products → Meters.
- Klicke auf Create Meter.
Configure the Meter
Token Usage MeterEvent Name: api.tokens_used. Dies muss mit dem event_name übereinstimmen, das deine App sendet.Aggregation Type: Sum, um die Tokenanzahl jedes Events zu addieren.Over Property: tokens, der Metadatenschlüssel, dessen Wert summiert wird.Measurement Unit: tokensErstelle den Meter. Du wählst ihn beim Anhängen an Produkte anhand seines Namens aus.Schritt 3: Planprodukte erstellen
Erstelle beide Pläne mit dem Preistyp Usage Based Billing, nicht mit einfachem Subscription. Meter werden an Usage Based Billing-Produkte angehängt, und der Meter zieht Credits ab, wenn Kunden deine API aufrufen. Ein Usage Based Billing-Produkt berechnet weiterhin eine wiederkehrende Grundgebühr ($29 oder $99); die darüber hinausgehende Nutzung wird in Credits abgerechnet.
Usage Based Billing pricing type with meter configuration.
Starter Plan ($29/Monat — 10 Mio. Tokens, kein Mehrverbrauch)
Create the Starter Product
- Gehe zu Products und klicke auf Add Product.
- Wähle unter Pricing Type die Option Usage Based Billing.
- Gib diese Werte ein:
NeuralAPI StarterDescription: 10 million API tokens per month. Perfect for individual developers and small projects.Price: 29.00. Dies ist die wiederkehrende Grundgebühr, die jeden Monat auch vor jeglicher Nutzung berechnet wird.Repeat payment every: 1 MonatCurrency: USDAttach the Meter
Token Usage Meter hinzu. Konfiguriere den Meter anschließend:- Aktiviere Bill usage in credits.
- Select credit:
API Tokens - Meter units per credit:
1. Jedes Token in einem Event zieht einen Credit ab. - Free Threshold:
0. Der kostenlose Schwellenwert gilt nur, wenn ein Meter in Geld abrechnet. Bei der Abrechnung in Credits wird jede Einheit vom Guthaben abgezogen.

Toggle 'Bill usage in Credits' on the meter and pick the credit entitlement.
api.tokens_used-Events vom Guthaben des Kunden abgezogen werden.Configure Credit Issuance for Starter
10000000Import Default Credit Settings: aktiviert, damit das Produkt das Ablaufdatum von 30 Tagen aus der Credit-Berechtigung verwendet.Allow Overage: deaktiviert. Der Standardwert aus Schritt 1 lässt den Mehrverbrauch deaktiviert, sodass Starter-Kunden bei null stoppen.
Configure credit issuance per cycle on the UBB product.
pdt_ beginnt.Pro Plan ($99/Monat — 40 Mio. Tokens, Mehrverbrauch aktiviert)
Create the Pro Product
NeuralAPI ProDescription: 40 million API tokens per month with overage. Built for production applications.Price: 99.00Repeat payment every: 1 MonatCurrency: USDAttach the Meter
Token Usage Meter hinzu, aktiviere Bill usage in credits, wähle API Tokens und setze Meter units per credit auf 1 sowie Free Threshold auf 0.Configure Credit Issuance with Overage
40000000Import Default Credit Settings: deaktiviert, damit du den Mehrverbrauch für dieses Produkt festlegen kannst.Allow Overage: aktiviertPrice Per Unit: 0.000005 USD pro Token. Das entspricht $0.005 pro 1K Tokens oder $5 pro 1 Mio. Tokens. Dieser Preis liegt über dem effektiven Preis pro Token des Plans und wirkt Mehrverbrauch entgegen.Overage Behavior: Bill overage at billing. Der Mehrverbrauch wird auf der nächsten Rechnung berechnet; anschließend wird das Guthaben zurückgesetzt.Speichere das Produkt und kopiere seine ID.Schritt 4: Token Top-Up Pack erstellen
Das Aufladepaket ist ein einmaliger Kauf, der dem Guthaben eines bestehenden Kunden 5.000.000 Tokens hinzufügt.
One-time pricing selected for a credit product.
Create a One-Time Product
- Gehe zu Products und klicke auf Add Product.
- Wähle unter Pricing Type die Option One Time.
- Gib diese Werte ein:
Token Top-Up PackDescription: Add 5 million tokens to your NeuralAPI balance.Price: 19.00Currency: USDAttach the Token Credit
- Klicke im Abschnitt Entitlements neben Credits auf Attach.
- Wähle
API Tokensaus. - Setze No of credits issued auf
5000000. - Deaktiviere Import Default Credit Settings, um das standardmäßige Ablaufdatum von 30 Tagen zu überschreiben.
- Setze Credit Expiry auf Custom und gib
365Tage ein. - Speichere das Produkt.
Schritt 5: Backend erstellen
Erstelle den Express-Server. Er erstellt Checkouts für Abonnements und Aufladungen, ruft OpenAI auf und berechnet die Tokens, liest Guthaben aus und empfängt Credit-Webhook-Ereignisse.Set Up Your Project
tsconfig.json:package.json:Set Up Environment Variables
.env mit einem API-Schlüssel für den Testmodus aus Developer → API Keys und den IDs aus den vorherigen Schritten:DODO_PAYMENTS_WEBHOOK_KEY in Schritt 7 ein, nachdem du den Webhook-Endpunkt registriert hast.Implement the Server
src/server.ts. Der Completion-Endpunkt ruft das Modell gpt-6-luna von OpenAI auf, das sich für Anfragen mit hohem Volumen eignet. Der Tab package.json zeigt die vollständige Liste der Abhängigkeiten:How Deductions Happen
- Dein Handler ruft OpenAI auf und liest
usage.total_tokens, zum Beispiel 1532. - Du nimmst ein Nutzungsereignis mit
event_name: api.tokens_usedundmetadata: { tokens: 1532 }auf. Token Usage Meteraggregiert Ereignisse pro Kunde. Ein Hintergrund-Worker verarbeitet neue Ereignisse jede Minute.- Da der Meter das
API Tokens-Guthaben über Bill usage in credits abrechnet, zieht Dodo Payments 1532 Guthaben ab, beginnend mit dem Guthaben des Kunden, das zuerst verfällt (FIFO). - Wenn Overages aktiviert sind und das Guthaben aufgebraucht ist, wird das Defizit erfasst und auf der nächsten Rechnung abgerechnet.
Schritt 6: Ein Demo-Frontend hinzufügen
Erstellepublic/index.html, um jeden Ablauf in deinem Browser zu testen. Die Seite speichert die Kunden-ID in localStorage, sodass Abonnement, Generierung und Aufladung dieselbe Identität verwenden – wie in einer App mit angemeldeten Benutzern:
Schritt 7: Den Webhook einrichten
Webhooks ermöglichen es deinem Server, auf Änderungen des Kontostands zu reagieren, zum Beispiel einem Kunden eine E-Mail zu senden, dessen Guthaben knapp wird.Expose Your Local Server
ngrok-free.app endet.Register the Webhook in Dodo Payments
- Gehe im Dashboard zu Developer → Webhooks und klicke auf Add endpoint.
- Gib die URL
https://your-tunnel.ngrok-free.app/webhooks/dodoein und verwende dabei deinen eigenen Tunnel-Host. - Wähle mindestens diese Ereignisse aus:
credit.addedcredit.deductedcredit.overage_charged
- Klicke auf Create endpoint und kopiere anschließend das Signaturgeheimnis aus dem Tab Overview des Endpunkts.
- Füge es als
DODO_PAYMENTS_WEBHOOK_KEYin.envein und starte anschließendnpm run devneu.
Schritt 8: Den vollständigen Ablauf testen
Subscribe a Test Customer
- Führe
npm run devaus. - Öffne
http://localhost:3000. - Wähle Pro, gib eine Test-E-Mail-Adresse und einen Namen ein und klicke auf Get Checkout Link. Schließe den Checkout mit Testkartendaten ab.
- Gehe im Dashboard zu Customers, öffne den neuesten Kunden und kopiere dessen ID. Sie beginnt mit
cus_. - Füge die ID in das Feld Logged-in customer ID der Demo ein und klicke auf Save.
Generate an AI Response
total_tokens, nimmt ein Nutzungsereignis auf und gibt die Antwort zurück.Test the Top-Up Flow
credit.added.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 du sendest.api.tokens_usedunterscheidet zwischen Groß- und Kleinschreibung. - Der Meter ist nicht mit dem
API Tokens-Guthaben des Produkts verknüpft. Öffne die Meter-Konfiguration des Produkts und bestätige, dass Bill usage in credits aktiviert ist. - Der Schlüssel
metadata.tokensstimmt nicht mit dem Over Property des Meters überein. - Das Guthaben des Kunden ist abgelaufen. Prüfe die Guthabenhistorie des Kunden.
- Öffne im Bereich Products → Meters den Meter und bestätige, dass der Produktanhang den Namen des verknüpften Guthabens anzeigt.
- Öffne den Tab Events des Meters. Aufgenommene Ereignisse erscheinen dort bereits vor einem Abzug.
- Öffne den Kunden unter Customers und wähle den Tab Credits aus. Ledger-Einträge erscheinen innerhalb von ein bis zwei Minuten.
Balance always shows 0 or 'customer not found'
Balance always shows 0 or 'customer not found'
- Der Kunde hat den Checkout nicht abgeschlossen. Guthaben werden erst nach erfolgreicher Zahlung ausgegeben.
- Du fragst mit der falschen
customer_idab. Verwende die ID aus dem Dashboard, die mitcus_beginnt, nicht eine ID aus deiner eigenen Datenbank. CREDIT_ENTITLEMENT_IDin.envstimmt nicht mit dem mit dem Produkt verknüpften Guthaben überein.
Overage not working for Pro plan customers
Overage not working for Pro plan customers
- Overage ist für den Guthabenanhang des Pro-Produkts nicht aktiviert. Die Einstellung des Guthabens dient nur als Standardwert.
- Der Kunde hat Starter und nicht Pro.
- Overage Limit ist auf 0 gesetzt.
0.000005 gesetzt ist (5$ pro Million Tokens). Achte auf die führenden Nullen: Das Feld erwartet einen Preis pro Token, nicht pro 1.000 Tokens.Webhook verification failed in logs
Webhook verification failed in logs
- Reihenfolge der Body-Analyse:
express.json()wurde auf/webhooks/dodoangewendet, bevorexpress.raw()ausgeführt wurde. Das SDK benötigt die rohen Bytes der Anfrage, kein analysiertes JSON. DODO_PAYMENTS_WEBHOOK_KEYenthält das falsche Signaturgeheimnis.- Ein Reverse Proxy schreibt die Request-Header um.
app.use('/webhooks/dodo', express.raw(...)) vor app.use(express.json()) in server.ts steht.Benötigst du Hilfe?
Glückwunsch! Du hast eine guthabenbasierte Abrechnung für NeuralAPI erstellt
NeuralAPI rechnet jetzt vom Checkout bis zum Abzug in Guthaben ab:Token Credit Entitlement
API Tokens-Guthaben mit einer Gültigkeitsdauer von 30 Tagen, das von beiden Tarifen und dem Aufladungspaket gemeinsam genutzt wird.Tiered Plans, One Credit
One-Time Top-Up Pack
Deduction Through a Meter
Live Balance API
Verified Webhook Pipeline
credit.added, credit.deducted, credit.overage_charged), die über einen Handler geleitet werden, der Signaturen mit dem Standard-Webhooks-Helfer des SDK verifiziert.- Füge
/credits/:customerIdund/api/generateeine Authentifizierung hinzu. In der aktuellen Form kann jeder beliebige Kunden-ID-Werte an sie senden. Authentifiziere Benutzer und ermittle ihre Kunden-ID auf dem Server. - Verwende stabile
event_id-Werte. Das Beispiel verwendetDate.now()plus eine zufällige Zeichenfolge. Verwende in der Produktion deine Request-ID, damit Wiederholungsversuche idempotent sind: Dodo Payments ignoriert ein Ereignis, dessenevent_idbereits aufgenommen wurde. - Speichere die Zuordnung zwischen Kunde und Benutzer. Speichere
customer_idnach dem ersten Checkout in deiner Datenbank, damit Benutzer sie nicht manuell einfügen müssen. - Lege fest, was beim Ende eines Abonnements geschieht. Tarifguthaben verbleiben im Ledger des Kunden, bis sie 30 Tage nach der Ausgabe verfallen, und Aufladungsguthaben bleiben 365 Tage gültig.
/api/generatedes Tutorials prüft nur den Kontostand, nicht den Abonnementstatus. Daher kann ein gekündigter Kunde seine verbleibenden Tokens weiterhin verwenden. Das ist der kundenfreundliche Standard. Für einen strengeren Zugriff kannst du entweder (a) auf densubscription.cancelled-Webhook hören und/api/generateanhand des Abonnementstatus beschränken oder (b) bei der Kündigung die nicht verwendeten Tarifguthaben über die Ledger API abbuchen. Abbuchungen greifen auf das Guthaben zurück, das zuerst verfällt, daher werden die 30-Tage-Tarifguthaben vor den 365-Tage-Aufladungsguthaben verwendet. - Überwache das Usage Billing-Dashboard, um Unregelmäßigkeiten bei der Abrechnung frühzeitig zu erkennen.