- Membuat entitlement kredit khusus (token) dan meter yang secara otomatis mengurangi kredit darinya
- Mengaitkan kredit ke paket langganan (dengan dan tanpa kelebihan pemakaian) serta produk top-up satu kali
- Menghubungkan endpoint completion OpenAI nyata yang menagihkan token melalui Dodo Payments
- Meminta saldo kredit pelanggan secara real-time melalui SDK
- Memverifikasi signature webhook dan merutekan event kredit Dodo Payments
Yang Akan Kita Bangun
Berikut model harga untuk NeuralAPI:- Akun Dodo Payments (mode pengujian dapat digunakan)
- API key OpenAI
- Node.js 18+
- Pemahaman dasar tentang TypeScript/Node.js
Langkah 1: Buat Entitlement Kredit Token
Pertama, buat entitlement kredit yang akan digunakan bersama oleh kedua paket langganan dan paket top-up. Anggap ini sebagai definisi unit “token” yang digunakan platform Anda.
The Credits tab under Products shows all your credit entitlements.
Navigate to Credits
- Masuk ke dashboard Dodo Payments
- Klik Products di sidebar kiri
- Pilih tab Credits
- Klik Create Credit
Configure the credit unit
API TokensJenis Kredit: Pilih Custom UnitNama Unit: tokenPresisi: 0 (token selalu berupa bilangan bulat)Kedaluwarsa Kredit: 30 days (kredit direset setiap siklus penagihan)Skip overage at the credit level
Save and copy the credit ID
cent_xxxxxxxxxxxx.API Tokens Anda siap digunakan. Selanjutnya, buat meter agar event penggunaan dapat memicu pengurangan secara otomatis.Langkah 2: Buat Meter untuk Penggunaan Token
Meter mengagregasi event penggunaan yang masuk dan mengubahnya menjadi pengurangan kredit. Anda memerlukannya sebelum membuat produk paket, karena meter akan dikaitkan saat pembuatan produk pada Langkah 3.Open the Meters section
- Di sidebar dashboard, buka Products → Meters
- Klik Create Meter
Configure the meter
Token Usage MeterNama Event: api.tokens_used (harus sama persis dengan yang dikirim aplikasi Anda)Jenis Agregasi: Sum — kami menjumlahkan jumlah token dari setiap eventOver Property: tokens — kunci metadata pada setiap event yang nilainya akan dijumlahkanUnit Pengukuran: tokensSimpan meter dan salin ID-nya — Anda akan merujuknya saat mengaitkannya ke produk.Langkah 3: Buat Produk Paket
Kedua paket harus berupa produk Usage Based Billing, bukan Subscription biasa — meter hanya dapat dikaitkan ke produk UBB, dan Anda memerlukan meter untuk mengurangi kredit secara otomatis saat pelanggan memanggil API. Produk UBB tetap mendukung biaya dasar berulang ($29 / $99); penggunaan di luar itu akan ditagihkan dalam kredit.

Usage Based Billing pricing type with meter configuration.
Paket Starter ($29/bulan — 10 juta token, tanpa kelebihan pemakaian)
Create the Starter UBB product
- Buka Products → Create Product
- Pilih Usage Based Billing sebagai jenis harga
- Isi:
NeuralAPI StarterDeskripsi: 10 million API tokens per month. Perfect for individual developers and small projects.Harga Tetap: 29.00 (biaya dasar berulang — ditagihkan setiap bulan bahkan sebelum ada penggunaan)Siklus Penagihan: MonthlyMata Uang: USDAttach the meter
Token Usage Meter. Kemudian pada meter tersebut:- Aktifkan Bill usage in Credits
- Credit Entitlement: pilih
API Tokens - Meter units per credit:
1— setiap token dalam event dipetakan ke 1 kredit yang dikurangi - Free Threshold:
0— alokasi kredit itu sendiri merupakan “free tier” pelanggan; kita tidak memerlukan tingkat gratis tambahan

Toggle 'Bill usage in Credits' on the meter and pick the credit entitlement.
api.tokens_used yang masuk benar-benar mengurangi saldo pelanggan.Configure credit issuance for Starter
10000000Allow Overage: Disabled — pelanggan Starter diblokir saat token habisImport Default Credit Settings: Enabled — gunakan kedaluwarsa 30 hari dari entitlement kredit
Configure credit issuance per cycle on the UBB product.
Paket Pro ($99/bulan — 40 juta token, kelebihan pemakaian diaktifkan)
Create the Pro UBB product
NeuralAPI ProDeskripsi: 40 million API tokens per month with overage. Built for production applications.Harga Tetap: 99.00Siklus Penagihan: MonthlyMata Uang: USDAttach the meter
Token Usage Meter, aktifkan Bill usage in Credits, pilih API Tokens, Meter units per credit 1, dan Free Threshold 0.Configure credit issuance with overage
40000000Import Default Credit Settings: Disable — kita perlu menyesuaikan pengaturan kelebihan pemakaian per produkAllow Overage: EnabledPrice Per Unit: 0.000005 USD per token (yaitu 5 per 1 juta token — di atas tarif efektif per token paket untuk mencegah penggunaan berlebih)Overage Behavior: Bill overage at billing — kelebihan pemakaian ditagihkan pada invoice berikutnya, lalu saldo diresetSimpan produk dan salin ID produk.Langkah 4: Buat Paket Top-Up Token
Paket top-up adalah pembelian satu kali yang memberikan 5.000.000 token ke saldo pelanggan yang sudah ada.
Single Payment pricing selected for a one-time credit product.
Create a one-time product
- Buka Products → Create Product
- Pilih Single Payment sebagai jenis harga
- Isi:
Token Top-Up PackDeskripsi: Instantly add 5 million tokens to your NeuralAPI balance.Harga: 19.00Mata Uang: USDAttach the token credit
- Di bagian Entitlements, klik Attach di samping Credits
- Pilih
API Tokens - Atur Credits issued:
5000000 - Nonaktifkan Import Default Credit Settings — kita ingin menimpa kedaluwarsa default 30 hari
- Atur Credit Expiry:
365 days - Simpan produk
Langkah 5: Bangun Backend
Sekarang mari kita bangun server Express yang menangani checkout langganan, checkout top-up, completion OpenAI nyata dengan penagihan token, permintaan saldo, dan event webhook kredit.Set up your project
tsconfig.json:package.json:Set up environment variables
.env dengan kredensial dan ID dari langkah sebelumnya:DODO_PAYMENTS_WEBHOOK_KEY pada Langkah 7 setelah mendaftarkan endpoint webhook Anda.Implement the server
src/server.ts:A note on how deductions actually happen
- Handler Anda memanggil OpenAI dan menerima
usage.total_tokens(misalnya, 1532). - Anda memasukkan satu event penggunaan:
event_name: api.tokens_used,metadata: { tokens: 1532 }. Token Usage Metermengagregasi event berdasarkan pelanggan.- Karena meter terhubung ke kredit
API Tokensdengan Bill usage in Credits, Dodo Payments mengurangi 1532 kredit dari grant pelanggan yang paling lama dan belum kedaluwarsa (FIFO). - Jika kelebihan pemakaian diaktifkan dan saldo pelanggan berada di bawah nol, defisit dilacak dan ditagihkan pada invoice berikutnya.
Langkah 6: Tambahkan Frontend Demo
Buatpublic/index.html untuk menguji semua alur di browser Anda. Kami menyimpan ID pelanggan ke localStorage agar subscribe → generate → top-up semuanya menggunakan identitas yang sama, meniru aplikasi yang penggunanya telah login:
Langkah 7: Hubungkan Webhook
Webhook memungkinkan server Anda merespons perubahan saldo — Anda akan menggunakannya untuk mengirim email “saldo hampir habis” sebelum pelanggan mencapai nol.Expose your local server
https://...ngrok-free.app.Register the webhook in Dodo Payments
- Di dashboard, buka Developers → Webhooks → Add Endpoint
- URL:
https://your-tunnel.ngrok-free.app/webhooks/dodo - Berlangganan minimal ke:
credit.addedcredit.deductedcredit.overage_charged
- Simpan dan salin Signing Secret
- Tempelkan ke
.envsebagaiDODO_PAYMENTS_WEBHOOK_KEY, lalu mulai ulangnpm run dev
Langkah 8: Uji Alur Lengkap
Subscribe a test customer
- Jalankan
npm run dev - Buka
http://localhost:3000 - Pilih Paket Pro, masukkan email + nama pengujian, klik Get Checkout Link, lalu selesaikan checkout menggunakan detail kartu pengujian
- Di dashboard, buka Customers → most recent dan salin ID
cus_... - Tempelkan ke kolom “Logged-in customer ID” pada demo dan klik Save
Generate a real AI response
total_tokens aktual, memasukkan event penggunaan, lalu mengembalikan respons.Test the top-up flow
credit.added.Pemecahan Masalah
Credits not deducting after usage events
Credits not deducting after usage events
- Nama event meter tidak sama dengan
event_nameyang Anda kirim (api.tokens_usedpeka huruf besar-kecil) - Meter tidak ditautkan ke kredit
API Tokenspada produk — buka konfigurasi meter produk dan pastikan Bill usage in Credits aktif - Kunci
metadata.tokenstidak sama dengan kolom “Over Property” pada meter - Grant pelanggan telah kedaluwarsa (periksa riwayat kredit pelanggan)
- Products → Meters: buka meter dan pastikan nama kredit yang ditautkan terlihat pada pengaitan produk
- Tab Events pada meter — event yang dimasukkan akan muncul di sana bahkan sebelum pengurangan dilakukan
- Customers → [Customer] → Credits: entri ledger seharusnya muncul dalam satu atau dua menit
Balance always shows 0 or 'customer not found'
Balance always shows 0 or 'customer not found'
- Pelanggan belum menyelesaikan checkout — kredit hanya diberikan setelah pembayaran berhasil
- Anda melakukan permintaan dengan
customer_idyang salah (gunakan IDcus_...dari dashboard, bukan ID DB Anda sendiri) CREDIT_ENTITLEMENT_IDdi.envtidak sama dengan kredit yang dikaitkan ke produk
Overage not working for Pro plan customers
Overage not working for Pro plan customers
- Kelebihan pemakaian tidak diaktifkan pada pengaitan kredit produk Pro (pengaturan tingkat kredit hanya merupakan default)
- Pelanggan sebenarnya menggunakan Starter, bukan Pro
- Batas kelebihan pemakaian ditetapkan ke 0
0.000005 (= $5 per satu juta token; periksa kembali angka nol di depan — kolom ini menerima harga per token, bukan per 1K).`Webhook verification failed` in logs
`Webhook verification failed` in logs
- Urutan parsing body:
express.json()diterapkan ke/webhooks/dodosebelumexpress.raw()— SDK memerlukan raw bytes dari request, bukan JSON yang telah diparsing - Signing secret yang salah di
DODO_PAYMENTS_WEBHOOK_KEY - Reverse proxy menulis ulang header
app.use('/webhooks/dodo', express.raw(...)) berada sebelum app.use(express.json()) di server.ts.Butuh bantuan?
Selamat! Anda Telah Membangun Penagihan Berbasis Kredit untuk NeuralAPI
Platform Anda kini memiliki sistem penagihan kredit lengkap yang siap digunakan di production:Token Credit Entitlement
API Tokens yang dapat digunakan kembali dengan kedaluwarsa 30 hari, digunakan bersama oleh semua paket dan paket top-upTiered 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) dirutekan melalui handler terverifikasi signature menggunakan helper Standard Webhooks milik SDK- Auth pada
/credits/:customerIddan/api/generate— saat ini siapa pun dapat memanggilnya dengan ID pelanggan apa pun. Autentikasi pengguna dan cari ID pelanggan mereka di sisi server. event_idyang stabil — contoh ini menggunakanDate.now() + random. Dalam production, gunakan ID request Anda agar retry bersifat idempoten (Dodo Payments melakukan deduplikasi berdasarkanevent_id).- Simpan pemetaan pelanggan↔pengguna — simpan
customer_iddi DB setelah checkout pertama agar Anda tidak memerlukan langkah penempelan manual. - Tentukan apa yang terjadi saat langganan berakhir. Kredit paket tetap berada di ledger pelanggan hingga kedaluwarsa secara alami (30 hari sejak diberikan), sedangkan kredit top-up tetap berlaku selama 365 hari — tetapi
/api/generatedalam cookbook hanya memeriksa saldo, bukan status langganan. Jadi, pelanggan yang membatalkan langganan masih dapat menggunakan token yang tersisa. Ini adalah default yang ramah konsumen. Jika Anda menginginkan kontrol akses yang lebih ketat, (a) dengarkan webhooksubscription.cancelleddan batasi/api/generateberdasarkan status langganan, atau (b) panggil API ledger milik Dodo untuk mendebit kredit paket yang belum digunakan saat pembatalan, sambil membiarkan kredit top-up tetap utuh. - Pantau dashboard Usage Billing untuk mendeteksi anomali metering sejak dini.