- Create a custom credit entitlement for tokens, and a meter that deducts from it.
- Attach credits to subscription plans, with and without overage, and to a one-time top-up product.
- Call OpenAI from an endpoint that bills tokens through Dodo Payments.
- Read a customer’s live credit balance with the SDK.
- Verify webhook signatures and route Dodo Payments credit events.
What We’re Building
NeuralAPI sells three products:- A Dodo Payments account. Build everything in test mode.
- An OpenAI API key.
- Node.js 22 or later, and working knowledge of TypeScript and Node.js.
Step 1: Create Your Token Credit Entitlement
Create the credit entitlement that both plans and the top-up pack share. It defines the token unit NeuralAPI sells.
The Credits tab under Products shows all your credit entitlements.
Navigate to Credits
- Log in to the Dodo Payments dashboard.
- Click Products in the sidebar.
- Select the Credits tab.
- Click Create Credit.
Configure the Credit Unit
API TokensCredit Type: Custom UnitUnit Name: tokenDefine Precision: 0. Token counts are whole numbers.Credit Expiry: 30 days. Credits expire 30 days after they’re issued, which matches the monthly billing cycle.Skip Overage at the Credit Level
Save and Copy the Credit ID
cde_.API Tokens credit entitlement is ready. Next, create a meter so that usage events deduct credits.Step 2: Create a Meter for Token Usage
A meter aggregates incoming usage events. When you link it to a credit, the aggregated usage is deducted from the customer’s credit balance. Create the meter before the plan products, because you attach it while you create them in Step 3.Open the Meters Section
- In the dashboard sidebar, go to Products → Meters.
- Click Create Meter.
Configure the Meter
Token Usage MeterEvent Name: api.tokens_used. This must match the event_name your app sends.Aggregation Type: Sum, to add up the token count from each event.Over Property: tokens, the metadata key whose value is summed.Measurement Unit: tokensCreate the meter. You select it by name when you attach it to products.Step 3: Create the Plan Products
Create both plans with the Usage Based Billing pricing type, not plain Subscription. Meters attach to Usage Based Billing products, and the meter is what deducts credits as customers call your API. A Usage Based Billing product still charges a recurring base fee ($29 or $99), and usage on top of it is billed in credits.
Usage Based Billing pricing type with meter configuration.
Starter Plan ($29/month — 10M Tokens, No Overage)
Create the Starter Product
- Go to Products and click Add Product.
- Under Pricing Type, select Usage Based Billing.
- Enter these values:
NeuralAPI StarterDescription: 10 million API tokens per month. Perfect for individual developers and small projects.Price: 29.00. This is the recurring base fee, charged every month even before any usage.Repeat payment every: 1 monthCurrency: USDAttach the Meter
Token Usage Meter. Then configure the meter:- Turn on Bill usage in credits.
- Select credit:
API Tokens - Meter units per credit:
1. Each token in an event deducts one credit. - Free Threshold:
0. The free threshold applies only when a meter bills in money. When it bills in credits, every unit is deducted from the balance.

Toggle 'Bill usage in Credits' on the meter and pick the credit entitlement.
api.tokens_used events deduct from the customer’s balance.Configure Credit Issuance for Starter
10000000Import Default Credit Settings: on, so the product uses the 30-day expiry from the credit entitlement.Allow Overage: off. The default from Step 1 keeps overage disabled, so Starter customers stop at zero.
Configure credit issuance per cycle on the UBB product.
pdt_.Pro Plan ($99/month — 40M Tokens, Overage Enabled)
Create the Pro Product
NeuralAPI ProDescription: 40 million API tokens per month with overage. Built for production applications.Price: 99.00Repeat payment every: 1 monthCurrency: USDAttach the Meter
Token Usage Meter, turn on Bill usage in credits, select API Tokens, and set Meter units per credit to 1 and Free Threshold to 0.Configure Credit Issuance with Overage
40000000Import Default Credit Settings: off, so you can set overage for this product.Allow Overage: onPrice Per Unit: 0.000005 USD per token. That is $0.005 per 1K tokens, or $5 per 1M tokens, which is above the plan’s effective per-token rate and discourages overage.Overage Behavior: Bill overage at billing. Overage is charged on the next invoice, and then the balance resets.Save the product and copy its ID.Step 4: Create the Token Top-Up Pack
The top-up pack is a one-time purchase that adds 5,000,000 tokens to an existing customer’s balance.
One-time pricing selected for a credit product.
Create a One-Time Product
- Go to Products and click Add Product.
- Under Pricing Type, select One Time.
- Enter these values:
Token Top-Up PackDescription: Add 5 million tokens to your NeuralAPI balance.Price: 19.00Currency: USDAttach the Token Credit
- In the Entitlements section, click Attach next to Credits.
- Select
API Tokens. - Set No of credits issued to
5000000. - Turn off Import Default Credit Settings to override the default 30-day expiry.
- Set Credit Expiry to Custom and enter
365days. - Save the product.
Step 5: Build the Backend
Build the Express server. It creates subscription and top-up checkouts, calls OpenAI and bills the tokens, reads balances, and receives credit webhook events.Set Up Your Project
tsconfig.json:package.json scripts:Set Up Environment Variables
.env with a test mode API key from Developer → API Keys and the IDs from the previous steps:DODO_PAYMENTS_WEBHOOK_KEY in Step 7, after you register the webhook endpoint.Implement the Server
src/server.ts बनाएँ। Completion endpoint OpenAI के gpt-6-luna model को call करता है, जो high-volume requests के लिए उपयुक्त है। package.json tab पूरी dependency list दिखाता है:How Deductions Happen
- आपका handler OpenAI को call करता है और
usage.total_tokensपढ़ता है, उदाहरण के लिए 1532। - आप
event_name: api.tokens_usedऔरmetadata: { tokens: 1532 }के साथ एक usage event ingest करते हैं। Token Usage Meterप्रत्येक customer के events को aggregate करता है। Background worker हर मिनट नए events को process करता है।- क्योंकि meter
API Tokenscredit को Bill usage in credits के माध्यम से bill करता है, Dodo Payments 1532 credits deduct करता है और शुरुआत customer के उस grant से करता है जिसकी expiry सबसे पहले है (FIFO)। - यदि overage enabled है और balance समाप्त हो जाता है, तो deficit को track करके अगली invoice पर bill किया जाता है।
Step 6: Demo Frontend जोड़ें
अपने browser में हर flow को test करने के लिएpublic/index.html बनाएँ। यह page customer ID को localStorage में save करता है, इसलिए subscribe, generate और top-up एक ही identity share करते हैं, जैसा कि logged-in app में होता है:
Step 7: Webhook जोड़ें
Webhooks आपके server को balance changes पर react करने देते हैं, उदाहरण के लिए ऐसे customer को email भेजने के लिए जिसका balance कम हो रहा है।Expose Your Local Server
ngrok-free.app पर समाप्त होता है।Register the Webhook in Dodo Payments
- Dashboard में Developer → Webhooks पर जाएँ और Add endpoint पर click करें।
- URL
https://your-tunnel.ngrok-free.app/webhooks/dodoदर्ज करें और अपने tunnel host का उपयोग करें। - कम से कम ये events select करें:
credit.addedcredit.deductedcredit.overage_charged
- Create endpoint पर click करें, फिर endpoint के Overview tab से signing secret copy करें।
- इसे
.envमेंDODO_PAYMENTS_WEBHOOK_KEYके रूप में paste करें, फिरnpm run devrestart करें।
Step 8: पूरा Flow Test करें
Subscribe a Test Customer
npm run devचलाएँ।http://localhost:3000खोलें।- Pro चुनें, test email address और name दर्ज करें, और Get Checkout Link पर click करें। test card details का उपयोग करके checkout पूरा करें।
- Dashboard में Customers पर जाएँ, सबसे नए customer को खोलें, और उसकी ID copy करें, जो
cus_से शुरू होती है। - Demo के Logged-in customer ID field में ID paste करें और Save पर click करें।
Generate an AI Response
total_tokens पढ़ता है, usage event ingest करता है और response लौटाता है।Test the Top-Up Flow
credit.added event दिखाई देगा।Troubleshooting
Credits not deducting after usage events
Credits not deducting after usage events
- Meter का event name आपके भेजे गए
event_nameसे match नहीं करता।api.tokens_usedcase-sensitive है। - Meter product पर मौजूद
API Tokenscredit से linked नहीं है। Product की meter configuration खोलें और पुष्टि करें कि Bill usage in credits enabled है। metadata.tokenskey meter के Over Property से match नहीं करती।- Customer का grant expire हो चुका है। Customer का credit history जाँचें।
- Products → Meters में meter खोलें और पुष्टि करें कि product attachment में linked credit name दिखाई दे रहा है।
- Meter का Events tab खोलें। Ingest किए गए events किसी भी deduction से पहले वहाँ दिखाई देते हैं।
- Customers में customer खोलें और Credits tab चुनें। Ledger entries एक या दो मिनट के भीतर दिखाई देती हैं।
Balance always shows 0 or 'customer not found'
Balance always shows 0 or 'customer not found'
- Customer ने checkout पूरा नहीं किया है। Credits केवल successful payment के बाद जारी होते हैं।
- आप गलत
customer_idसे query कर रहे हैं। Dashboard सेcus_से शुरू होने वाली ID का उपयोग करें, अपनी database की ID का नहीं। .envमें मौजूदCREDIT_ENTITLEMENT_IDproduct से attached credit से match नहीं करता।
Overage not working for Pro plan customers
Overage not working for Pro plan customers
- Pro product’s credit attachment पर overage enabled नहीं है। Credit पर मौजूद setting केवल default है।
- Customer Pro पर नहीं, Starter पर है।
- Overage Limit 0 पर set है।
0.000005 (प्रति million tokens $5) है। Leading zeros जाँचें: यह field प्रति token की price लेती है, प्रति 1K tokens की नहीं।Webhook verification failed in logs
Webhook verification failed in logs
- Body parsing order:
express.json()नेexpress.raw()से पहले/webhooks/dodoपर run किया। SDK को parsed JSON नहीं, request के raw bytes चाहिए। DODO_PAYMENTS_WEBHOOK_KEYमें गलत signing secret है।- Reverse proxy request headers को rewrite कर रहा है।
app.use('/webhooks/dodo', express.raw(...)) line, server.ts में app.use(express.json()) से पहले आती है।सहायता चाहिए?
बधाई हो! आपने NeuralAPI के लिए Credit-Based Billing बना लिया है
अब NeuralAPI checkout से deduction तक credits में bill करता है:Token Credit Entitlement
API Tokens credit, जिसे दोनों plans और top-up pack share करते हैं।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) ऐसे handler के माध्यम से route किए जाते हैं जो SDK के Standard Webhooks helper से signatures verify करता है।/credits/:customerIdऔर/api/generateमें authentication जोड़ें। वर्तमान रूप में कोई भी व्यक्ति इन्हें किसी भी customer ID के साथ call कर सकता है। Users को authenticate करें और server पर उनकी customer ID lookup करें।- Stable
event_idvalues का उपयोग करें। Example मेंDate.now()और एक random string का उपयोग किया गया है। Production में अपनी request ID का उपयोग करें ताकि retries idempotent हों: Dodo Payments ऐसे event को ignore करता है जिसकाevent_idवह पहले ही ingest कर चुका है। - Customer-to-user mapping store करें। पहले checkout के बाद अपनी database में
customer_idsave करें, ताकि users को इसे manually paste न करना पड़े। - तय करें कि subscription समाप्त होने पर क्या होगा। Plan credits customer के ledger में issuance के 30 दिन बाद expire होने तक बने रहते हैं और top-up credits 365 दिनों तक valid रहते हैं। Tutorial का
/api/generateकेवल balance check करता है, subscription status नहीं, इसलिए cancelled customer अपने बचे हुए tokens का उपयोग कर सकता है। यह customer-friendly default है। अधिक सख्त access के लिए या तोsubscription.cancelledwebhook सुनें और subscription status के आधार पर/api/generateको gate करें, या (b) cancellation पर ledger API से unused plan credits debit करें। Debits उस grant से लिए जाते हैं जिसकी expiry सबसे पहले है, इसलिए 30-day plan credits 365-day top-up credits से पहले उपयोग होंगे। - Usage Billing dashboard monitor करें ताकि metering anomalies का जल्दी पता चल सके।