Skip to main content
Biarkan Sentra menulis kode integrasi untuk Anda.
Gunakan asisten AI kami di VS Code, Cursor, atau Windsurf untuk membuat kode SDK/API, handler webhook, pemberian kredit, dan lainnya — cukup dengan menjelaskan apa yang Anda inginkan.
Coba Sentra: Integrasi Bertenaga AI →
Dalam tutorial ini, Anda akan membangun NeuralAPI — platform AI bertingkat di mana setiap paket langganan memiliki alokasi kredit token bulanan, pelanggan dapat membeli paket top-up saat kredit mereka hampir habis, dan backend Anda secara otomatis mengurangi kredit saat permintaan diproses oleh OpenAI.
Tutorial ini menggunakan Node.js/Express + OpenAI SDK. Konsep Dodo Payments (kredit, meter, webhook) berlaku untuk framework atau penyedia AI apa pun — sesuaikan dengan bebas.
Di akhir tutorial ini, Anda akan mengetahui cara:
  • 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:
Sebelum memulai, pastikan Anda memiliki:
  • 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.
Halaman daftar kredit yang menampilkan entitlement kredit yang telah dibuat

The Credits tab under Products shows all your credit entitlements.

1

Navigate to Credits

  1. Masuk ke dashboard Dodo Payments
  2. Klik Products di sidebar kiri
  3. Pilih tab Credits
  4. Klik Create Credit
2

Configure the credit unit

Isi detail dasar untuk kredit token Anda:Nama Kredit: API TokensJenis Kredit: Pilih Custom UnitNama Unit: tokenPresisi: 0 (token selalu berupa bilangan bulat)Kedaluwarsa Kredit: 30 days (kredit direset setiap siklus penagihan)
Presisi tidak dapat diubah setelah kredit dibuat. Untuk jumlah token, 0 (bilangan bulat) hampir selalu merupakan pilihan yang tepat.
3

Skip overage at the credit level

Biarkan kelebihan pemakaian dinonaktifkan di sini — Anda akan mengaturnya per paket saat mengaitkan kredit ke produk. Dengan begitu, paket Starter memblokir penggunaan saat saldo nol, sedangkan paket Pro mengizinkan kelebihan pemakaian.
Pengaturan kelebihan pemakaian yang dikonfigurasi di sini adalah default. Setiap pengaitan produk dapat menimpanya — dan itulah yang akan kita lakukan di Langkah 3.
4

Save and copy the credit ID

Klik Create Credit. Setelah tersimpan, buka kredit tersebut dan salin ID-nya — formatnya seperti cent_xxxxxxxxxxxx.
Entitlement kredit 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.
1

Open the Meters section

  1. Di sidebar dashboard, buka ProductsMeters
  2. Klik Create Meter
2

Configure the meter

Isi:Nama 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: tokens
Nama event peka huruf besar-kecil. api.tokens_usedApi.Tokens.Used — pilih salah satu dan gunakan secara konsisten.
Simpan meter dan salin ID-nya — Anda akan merujuknya saat mengaitkannya ke produk.
Meter telah dibuat. Sekarang kita dapat menghubungkannya ke kredit saat mengonfigurasi 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.
Konfigurasi harga Usage Based Billing

Usage Based Billing pricing type with meter configuration.

Paket Starter ($29/bulan — 10 juta token, tanpa kelebihan pemakaian)

1

Create the Starter UBB product

  1. Buka Products → Create Product
  2. Pilih Usage Based Billing sebagai jenis harga
  3. Isi:
Nama Produk: 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: USD
2

Attach the meter

Di bagian Select meter, klik + dan tambahkan Token Usage Meter. Kemudian pada meter tersebut:
  1. Aktifkan Bill usage in Credits
  2. Credit Entitlement: pilih API Tokens
  3. Meter units per credit: 1 — setiap token dalam event dipetakan ke 1 kredit yang dikurangi
  4. Free Threshold: 0 — alokasi kredit itu sendiri merupakan “free tier” pelanggan; kita tidak memerlukan tingkat gratis tambahan
Meter dengan Bill usage in Credits yang diaktifkan dan API Tokens yang dipilih

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

Inilah pengaturan yang membuat event api.tokens_used yang masuk benar-benar mengurangi saldo pelanggan.
3

Configure credit issuance for Starter

Masih di produk tersebut, gulir ke bagian konfigurasi kredit yang muncul setelah meter yang ditagihkan dalam kredit dikaitkan:Kredit yang diberikan per siklus penagihan: 10000000Allow Overage: Disabled — pelanggan Starter diblokir saat token habisImport Default Credit Settings: Enabled — gunakan kedaluwarsa 30 hari dari entitlement kredit
Formulir konfigurasi kredit dengan jumlah per siklus dan pengaturan kelebihan pemakaian

Configure credit issuance per cycle on the UBB product.

Klik Save dan salin ID produk.
Paket Starter: biaya dasar $29/bulan, 10 juta token/siklus, diblokir saat nol, dikurangi otomatis melalui meter.

Paket Pro ($99/bulan — 40 juta token, kelebihan pemakaian diaktifkan)

1

Create the Pro UBB product

Alurnya sama seperti Starter, dengan angka yang lebih besar:Nama Produk: NeuralAPI ProDeskripsi: 40 million API tokens per month with overage. Built for production applications.Harga Tetap: 99.00Siklus Penagihan: MonthlyMata Uang: USD
2

Attach the meter

Sama seperti Starter: tambahkan Token Usage Meter, aktifkan Bill usage in Credits, pilih API Tokens, Meter units per credit 1, dan Free Threshold 0.
3

Configure credit issuance with overage

Konfigurasikan pemberian kredit, kali ini dengan mengaktifkan kelebihan pemakaian:Kredit yang diberikan per siklus penagihan: 40000000Import Default Credit Settings: Disable — kita perlu menyesuaikan pengaturan kelebihan pemakaian per produkAllow Overage: EnabledPrice Per Unit: 0.000005 USD per token (yaitu 0.005per1Ktoken,atau0.005 per 1K token, atau 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.
Paket Pro: biaya dasar 99/bulan,40jutatoken/siklus,kelebihanpemakaiansebesar99/bulan, 40 juta token/siklus, kelebihan pemakaian sebesar 0.005/1K token, dikurangi otomatis melalui meter.

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.
Bagian harga produk dengan Single Payment yang dipilih

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

1

Create a one-time product

  1. Buka Products → Create Product
  2. Pilih Single Payment sebagai jenis harga
  3. Isi:
Nama Produk: Token Top-Up PackDeskripsi: Instantly add 5 million tokens to your NeuralAPI balance.Harga: 19.00Mata Uang: USD
2

Attach the token credit

  1. Di bagian Entitlements, klik Attach di samping Credits
  2. Pilih API Tokens
  3. Atur Credits issued: 5000000
  4. Nonaktifkan Import Default Credit Settings — kita ingin menimpa kedaluwarsa default 30 hari
  5. Atur Credit Expiry: 365 days
  6. Simpan produk
Salin ID produk.
Mengapa kedaluwarsa top-up lebih lama? Kredit langganan direset setiap 30 hari karena itulah siklusnya. Top-up adalah pembelian prabayar — pelanggan membayar $19 di muka dan sewajarnya mengharapkan token tersebut berlaku lebih dari sebulan. 365 hari sesuai dengan cara kerja kredit prabayar di OpenAI, AWS, dan Anthropic, sekaligus membatasi kewajiban Anda agar pelanggan tidak dapat menimbun kredit tanpa batas.
Paket Top-Up telah dikonfigurasi — pembeliannya memberikan 5.000.000 token yang tetap berlaku selama 365 hari.

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.
1

Set up your project

Buat tsconfig.json:
tsconfig.json
Perbarui script package.json:
package.json
2

Set up environment variables

Buat .env dengan kredensial dan ID dari langkah sebelumnya:
.env
Jangan pernah commit .env ke version control. Segera tambahkan ke .gitignore.
Anda akan mengisi DODO_PAYMENTS_WEBHOOK_KEY pada Langkah 7 setelah mendaftarkan endpoint webhook Anda.
3

Implement the server

Buat src/server.ts:
Backend selesai: checkout langganan, checkout top-up, completion OpenAI dengan penagihan token bermeter, permintaan saldo, dan handler webhook terverifikasi.
@dodopayments/ingestion-blueprints menyediakan tracker siap pakai yang mengotomatiskan panggilan usageEvents.ingest untuk Anda — termasuk penggunaan LLM Blueprint, API gateway, object storage, streams, dan time-range.
4

A note on how deductions actually happen

Anda mungkin menyadari bahwa tidak ada panggilan eksplisit “kurangi N kredit”. Itu memang dirancang demikian:
  1. Handler Anda memanggil OpenAI dan menerima usage.total_tokens (misalnya, 1532).
  2. Anda memasukkan satu event penggunaan: event_name: api.tokens_used, metadata: { tokens: 1532 }.
  3. Token Usage Meter mengagregasi event berdasarkan pelanggan.
  4. Karena meter terhubung ke kredit API Tokens dengan Bill usage in Credits, Dodo Payments mengurangi 1532 kredit dari grant pelanggan yang paling lama dan belum kedaluwarsa (FIFO).
  5. Jika kelebihan pemakaian diaktifkan dan saldo pelanggan berada di bawah nol, defisit dilacak dan ditagihkan pada invoice berikutnya.
Meter menangani semua proses tersebut. Kode Anda hanya perlu memasukkan event.

Langkah 6: Tambahkan Frontend Demo

Buat public/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.
1

Expose your local server

Webhook memerlukan URL publik. Untuk pengembangan lokal, gunakan ngrok atau tunnel apa pun:
Salin URL https://...ngrok-free.app.
2

Register the webhook in Dodo Payments

  1. Di dashboard, buka Developers → Webhooks → Add Endpoint
  2. URL: https://your-tunnel.ngrok-free.app/webhooks/dodo
  3. Berlangganan minimal ke:
    • credit.added
    • credit.deducted
    • credit.overage_charged
  4. Simpan dan salin Signing Secret
  5. Tempelkan ke .env sebagai DODO_PAYMENTS_WEBHOOK_KEY, lalu mulai ulang npm run dev
dodo.webhooks.unwrap() SDK memvalidasi header webhook-id, webhook-timestamp, dan webhook-signature menggunakan signing secret Anda. Anda tidak perlu membuat verifikasi HMAC sendiri — dan sebaiknya tidak melakukannya, karena Dodo Payments menggunakan Standard Webhooks, yang menandatangani id.timestamp.body, bukan hanya body.

Langkah 8: Uji Alur Lengkap

1

Subscribe a test customer

  1. Jalankan npm run dev
  2. Buka http://localhost:3000
  3. Pilih Paket Pro, masukkan email + nama pengujian, klik Get Checkout Link, lalu selesaikan checkout menggunakan detail kartu pengujian
  4. Di dashboard, buka Customers → most recent dan salin ID cus_...
  5. Tempelkan ke kolom “Logged-in customer ID” pada demo dan klik Save
Pelanggan seharusnya memiliki 40.000.000 token. Klik Refresh Balance untuk mengonfirmasi.
2

Generate a real AI response

Ketik prompt dan klik Generate. Server memanggil OpenAI, menerima total_tokens aktual, memasukkan event penggunaan, lalu mengembalikan respons.
Event penggunaan diproses oleh background worker setiap sekitar satu menit. Saldo tidak akan langsung berkurang — tunggu 30–90 detik dan klik Refresh Balance lagi. Jangan menganggap sistem rusak jika refresh pertama belum menunjukkan perubahan.
3

Test the top-up flow

Klik Buy 5M Tokens — $19 dan selesaikan checkout. Setelah pembayaran berhasil, refresh saldo — saldo seharusnya bertambah 5.000.000 token. Log server Anda seharusnya menampilkan event credit.added.

Pemecahan Masalah

Kemungkinan penyebab:
  • Nama event meter tidak sama dengan event_name yang Anda kirim (api.tokens_used peka huruf besar-kecil)
  • Meter tidak ditautkan ke kredit API Tokens pada produk — buka konfigurasi meter produk dan pastikan Bill usage in Credits aktif
  • Kunci metadata.tokens tidak sama dengan kolom “Over Property” pada meter
  • Grant pelanggan telah kedaluwarsa (periksa riwayat kredit pelanggan)
Yang perlu diperiksa:
  1. Products → Meters: buka meter dan pastikan nama kredit yang ditautkan terlihat pada pengaitan produk
  2. Tab Events pada meter — event yang dimasukkan akan muncul di sana bahkan sebelum pengurangan dilakukan
  3. Customers → [Customer] → Credits: entri ledger seharusnya muncul dalam satu atau dua menit
Kemungkinan penyebab:
  • Pelanggan belum menyelesaikan checkout — kredit hanya diberikan setelah pembayaran berhasil
  • Anda melakukan permintaan dengan customer_id yang salah (gunakan ID cus_... dari dashboard, bukan ID DB Anda sendiri)
  • CREDIT_ENTITLEMENT_ID di .env tidak sama dengan kredit yang dikaitkan ke produk
Yang perlu diperiksa: Buka Customers → [Customer] → Credits. Jika tidak ada kredit yang muncul, entitlement produk belum dikaitkan atau pembayaran belum selesai.
Kemungkinan penyebab:
  • 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
Yang perlu diperiksa: Edit Pro → Entitlements → Credits → pastikan Allow Overage aktif dan Price Per Unit adalah 0.000005 (= $5 per satu juta token; periksa kembali angka nol di depan — kolom ini menerima harga per token, bukan per 1K).
Kemungkinan penyebab:
  • Urutan parsing body: express.json() diterapkan ke /webhooks/dodo sebelum express.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
Yang perlu diperiksa: Pastikan baris 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

Kredit API Tokens yang dapat digunakan kembali dengan kedaluwarsa 30 hari, digunakan bersama oleh semua paket dan paket top-up

Tiered Plans, One Credit

Starter (10 juta, batas keras) dan Pro (40 juta + kelebihan pemakaian) dikonfigurasi per produk tanpa menduplikasi kredit

One-Time Top-Up Pack

Pelanggan dapat menambahkan 5 juta token seharga $19 tanpa mengubah langganan mereka

Auto-Deduction via Meter

Jumlah token OpenAI nyata dimasukkan sebagai event; meter mengurangi kredit secara FIFO tanpa pelacakan manual

Live Balance API

Saldo real-time melalui SDK untuk membatasi akses, menampilkan penggunaan, atau memperingatkan pelanggan di aplikasi

Verified Webhook Pipeline

Event ledger kredit (credit.added, credit.deducted, credit.overage_charged) dirutekan melalui handler terverifikasi signature menggunakan helper Standard Webhooks milik SDK
Akan digunakan di production? Perketat hal-hal berikut:
  • Auth pada /credits/:customerId dan /api/generate — saat ini siapa pun dapat memanggilnya dengan ID pelanggan apa pun. Autentikasi pengguna dan cari ID pelanggan mereka di sisi server.
  • event_id yang stabil — contoh ini menggunakan Date.now() + random. Dalam production, gunakan ID request Anda agar retry bersifat idempoten (Dodo Payments melakukan deduplikasi berdasarkan event_id).
  • Simpan pemetaan pelanggan↔pengguna — simpan customer_id di 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/generate dalam 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 webhook subscription.cancelled dan batasi /api/generate berdasarkan 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.

Credit-Based Billing Reference

Dokumentasi CBB lengkap: rollover, mode kelebihan pemakaian, pengelolaan ledger, dan semua endpoint API.

Credit Webhook Events

Skema payload untuk setiap event kredit yang mungkin diterima server Anda.
Terakhir diubah pada 21 Juli 2026