Langsung ke konten utama
Sangat cocok untuk aplikasi SaaS, chatbot AI, alat pembuatan konten, dan aplikasi bertenaga LLM apa pun yang memerlukan penagihan berbasis penggunaan.

Quick Start

Mulai dengan pelacakan token LLM otomatis hanya dalam 2 menit:
1

Install the SDK

Pasang Dodo Payments Ingestion Blueprints:
npm install @dodopayments/ingestion-blueprints
2

Get Your API Keys

Anda memerlukan dua kunci API:
  • Dodo Payments API Key: Dapatkan dari Dodo Payments Dashboard
  • LLM Provider API Key: Dari AI SDK, OpenAI, Anthropic, Groq, dll.
Simpan kunci API Anda dengan aman di variabel lingkungan. Jangan pernah commit ke kontrol versi.
3

Create a Meter in Dodo Payments

Sebelum melacak penggunaan, buat meter di dashboard Dodo Payments Anda:
  1. Masuk ke Dodo Payments Dashboard
  2. Navigasi ke Products → Meters
  3. Klik “Create Meter”
  4. Konfigurasikan meter Anda:
    • Meter Name: Pilih nama deskriptif (misalnya, “LLM Token Usage”)
    • Event Name: Atur identifier event unik (misalnya, llm.chat_completion)
    • Aggregation Type: Pilih sum untuk menjumlahkan jumlah token
    • Over Property: Pilih apa yang akan dilacak:
      • inputTokens - Lacak token input/prompt
      • outputTokens - Lacak token output/completion (termasuk token penalaran bila berlaku)
      • totalTokens - Lacak gabungan token input + output
Nama Event yang Anda tetapkan di sini harus cocok persis dengan yang Anda kirim ke SDK (peka huruf).
Untuk petunjuk mendetail, lihat Usage-Based Billing Guide.
4

Track Token Usage

Bungkus klien LLM Anda dan mulailah melacak secara otomatis:
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import { generateText } from 'ai';
import { google } from '@ai-sdk/google';

const llmTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'aisdk.usage',
});

const client = llmTracker.wrap({
  client: { generateText },
  customerId: 'customer_123'
});

const response = await client.generateText({
  model: google('gemini-2.0-flash'),
  prompt: 'Hello!',
  maxOutputTokens: 500
});

console.log('Usage:', response.usage);
Itu saja! Setiap panggilan API sekarang secara otomatis melacak penggunaan token dan mengirim event ke Dodo Payments untuk penagihan.

Konfigurasi

Konfigurasi Pelacak

Buat pelacak sekali saat aplikasi dimulai dengan parameter yang diperlukan ini:
apiKey
string
wajib
Kunci API Dodo Payments Anda. Dapatkan dari API Keys page.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
wajib
Mode lingkungan untuk tracker.
  • test_mode - Gunakan untuk pengembangan dan pengujian
  • live_mode - Gunakan untuk produksi
environment: 'test_mode' // or 'live_mode'
Selalu gunakan test_mode selama pengembangan agar tidak memengaruhi metrik produksi.
eventName
string
wajib
Nama event yang memicu meter Anda. Harus cocok persis dengan yang Anda konfigurasi di meter Dodo Payments (peka huruf).
eventName: 'llm.chat_completion'
Nama event ini menghubungkan penggunaan yang dilacak ke meter yang tepat untuk perhitungan penagihan.

Konfigurasi Pembungkus

Saat membungkus klien LLM Anda, berikan parameter ini:
client
object
wajib
Instansi klien LLM Anda (OpenAI, Anthropic, Groq, dll.).
client: openai
customerId
string
wajib
Pengidentifikasi pelanggan unik untuk penagihan. Ini harus cocok dengan ID pelanggan Anda di Dodo Payments.
customerId: 'customer_123'
Gunakan ID pengguna atau ID pelanggan aplikasi Anda untuk memastikan penagihan akurat per pelanggan.
metadata
object
Data tambahan opsional untuk dilampirkan ke event pelacakan. Berguna untuk penyaringan dan analisis.
metadata: {
  feature: 'chat',
  userTier: 'premium',
  sessionId: 'session_123',
  modelVersion: 'gpt-4'
}

Contoh Konfigurasi Lengkap

import { createLLMTracker } from "@dodopayments/ingestion-blueprints";
import { generateText } from "ai";
import { google } from "@ai-sdk/google";
import "dotenv/config";

async function aiSdkExample() {
  console.log("🤖 AI SDK Simple Usage Example\n");

  try {
    // 1. Create tracker
    const llmTracker = createLLMTracker({
      apiKey: process.env.DODO_PAYMENTS_API_KEY!,
      environment: "test_mode",
      eventName: "your_meter_event_name",
    });

    // 2. Wrap the ai-sdk methods
    const client = llmTracker.wrap({
      client: { generateText },
      customerId: "customer_123",
      metadata: {
        provider: "ai-sdk",
      },
    });

    // 3. Use the wrapped function
    const response = await client.generateText({
      model: google("gemini-2.5-flash"),
      prompt: "Hello, I am a cool guy! Tell me a fun fact.",
      maxOutputTokens: 500,
    });

    console.log(response);
    console.log(response.usage);
    console.log("✅ Automatically tracked for customer\n");
  } catch (error) {
    console.error(error);
  }
}

aiSdkExample().catch(console.error);
Pelacakan Otomatis: SDK secara otomatis melacak penggunaan token di latar belakang tanpa memodifikasi respons. Kode Anda tetap bersih dan identik dengan menggunakan SDK penyedia asli.

Penyedia yang Didukung

LLM Blueprint bekerja dengan lancar dengan semua penyedia dan agregator LLM utama:
Lacak penggunaan dengan Vercel AI SDK untuk dukungan LLM universal.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import { generateText } from 'ai';
import { google } from '@ai-sdk/google';

const llmTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'aisdk.usage',
});

const client = llmTracker.wrap({
  client: { generateText },
  customerId: 'customer_123',
  metadata: {
    model: 'gemini-2.0-flash',
    feature: 'chat'
  }
});

const response = await client.generateText({
  model: google('gemini-2.0-flash'),
  prompt: 'Explain neural networks',
  maxOutputTokens: 500
});

console.log('Usage:', response.usage);
Metrik yang Dilacak:
  • inputTokensinputTokens
  • outputTokens + reasoningTokensoutputTokens
  • totalTokenstotalTokens
  • Nama model
Saat menggunakan model yang dapat melakukan penalaran melalui AI SDK (seperti Gemini 2.5 Flash milik Google dengan thinking mode), token penalaran secara otomatis termasuk dalam outputTokens untuk penagihan yang akurat.
Lacak penggunaan token di lebih dari 200 model melalui API terpadu OpenRouter.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';

// OpenRouter uses OpenAI-compatible API
const openrouter = new OpenAI({
  baseURL: 'https://openrouter.ai/api/v1',
  apiKey: process.env.OPENROUTER_API_KEY
});

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'openrouter.usage'
});

const client = tracker.wrap({ 
  client: openrouter, 
  customerId: 'user_123',
  metadata: { provider: 'openrouter' }
});

const response = await client.chat.completions.create({
  model: 'qwen/qwen3-max',
  messages: [{ role: 'user', content: 'What is machine learning?' }],
  max_tokens: 500
});

console.log('Response:', response.choices[0].message.content);
console.log('Usage:', response.usage);
Metrik yang Dilacak:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nama model
OpenRouter menyediakan akses ke model dari OpenAI, Anthropic, Google, Meta, dan banyak penyedia lainnya melalui satu API.
Lacak penggunaan token dari model GPT OpenAI secara otomatis.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'openai.usage'
});

const client = tracker.wrap({ 
  client: openai, 
  customerId: 'user_123' 
});

// All OpenAI methods work automatically
const response = await client.chat.completions.create({
  model: 'gpt-4',
  messages: [{ role: 'user', content: 'Explain quantum computing' }]
});

console.log('Total tokens:', response.usage.total_tokens);
Metrik yang Dilacak:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nama model
Lacak penggunaan token dari model Claude milik Anthropic.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import Anthropic from '@anthropic-ai/sdk';

const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'anthropic.usage'
});

const client = tracker.wrap({ 
  client: anthropic, 
  customerId: 'user_123' 
});

const response = await client.messages.create({
  model: 'claude-sonnet-4-0',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'Explain machine learning' }]
});

console.log('Input tokens:', response.usage.input_tokens);
console.log('Output tokens:', response.usage.output_tokens);
Metrik yang Dilacak:
  • input_tokensinputTokens
  • output_tokensoutputTokens
  • Kalkulasi totalTokens
  • Nama model
Lacak inferensi LLM super cepat dengan Groq.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import Groq from 'groq-sdk';

const groq = new Groq({ apiKey: process.env.GROQ_API_KEY });

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'groq.usage'
});

const client = tracker.wrap({ 
  client: groq, 
  customerId: 'user_123' 
});

const response = await client.chat.completions.create({
  model: 'llama-3.1-8b-instant',
  messages: [{ role: 'user', content: 'What is AI?' }]
});

console.log('Tokens:', response.usage);
Metrik yang Dilacak:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nama model
Lacak penggunaan token dari model Gemini Google melalui Google GenAI SDK.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import { GoogleGenAI } from '@google/genai';

const googleGenai = new GoogleGenAI({ 
  apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY 
});

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'gemini.usage'
});

const client = tracker.wrap({ 
  client: googleGenai, 
  customerId: 'user_123' 
});

const response = await client.models.generateContent({
  model: 'gemini-2.5-flash',
  contents: 'Explain quantum computing'
});

console.log('Response:', response.text);
console.log('Usage:', response.usageMetadata);
Metrik yang Dilacak:
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Versi model
Gemini Thinking Mode: Saat menggunakan model Gemini dengan kemampuan berpikir/menalar (seperti Gemini 2.5 Pro), SDK secara otomatis memasukkan thoughtsTokenCount (token penalaran) ke dalam outputTokens agar mencerminkan biaya komputasi penuh secara akurat.

Penggunaan Lanjutan

Beberapa Penyedia

Lacak penggunaan di berbagai penyedia LLM dengan pelacak terpisah:
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';
import Groq from 'groq-sdk';
import Anthropic from '@anthropic-ai/sdk';
import { GoogleGenAI } from '@google/genai';

// Create separate trackers for different providers
const openaiTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'openai.usage'
});

const groqTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'groq.usage'
});

const anthropicTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'anthropic.usage'
});

const geminiTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'gemini.usage'
});

const openrouterTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'openrouter.usage'
});

// Initialize clients
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const groq = new Groq({ apiKey: process.env.GROQ_API_KEY });
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const googleGenai = new GoogleGenAI({ apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY });
const openrouter = new OpenAI({ 
  baseURL: 'https://openrouter.ai/api/v1',
  apiKey: process.env.OPENROUTER_API_KEY 
});

// Wrap clients
const trackedOpenAI = openaiTracker.wrap({ client: openai, customerId: 'user_123' });
const trackedGroq = groqTracker.wrap({ client: groq, customerId: 'user_123' });
const trackedAnthropic = anthropicTracker.wrap({ client: anthropic, customerId: 'user_123' });
const trackedGemini = geminiTracker.wrap({ client: googleGenai, customerId: 'user_123' });
const trackedOpenRouter = openrouterTracker.wrap({ client: openrouter, customerId: 'user_123' });

// Use whichever provider you need
const response = await trackedOpenAI.chat.completions.create({...});
// or
const geminiResponse = await trackedGemini.models.generateContent({...});
// or
const openrouterResponse = await trackedOpenRouter.chat.completions.create({...});
Gunakan nama event berbeda untuk penyedia yang berbeda agar penggunaan terlacak secara terpisah di meter Anda.

Integrasi API Express.js

Contoh lengkap mengintegrasikan pelacakan LLM ke dalam API Express.js:
import express from 'express';
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';

const app = express();
app.use(express.json());

// Initialize OpenAI client
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

// Create tracker once at startup
const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: process.env.NODE_ENV === 'production' ? 'live_mode' : 'test_mode',
  eventName: 'api.chat_completion'
});

// Chat endpoint with automatic tracking
app.post('/api/chat', async (req, res) => {
  try {
    const { message, userId } = req.body;
    
    // Validate input
    if (!message || !userId) {
      return res.status(400).json({ error: 'Missing message or userId' });
    }
    
    // Wrap client for this specific user
    const trackedClient = tracker.wrap({
      client: openai,
      customerId: userId,
      metadata: { 
        endpoint: '/api/chat',
        timestamp: new Date().toISOString()
      }
    });
    
    // Make LLM request - automatically tracked
    const response = await trackedClient.chat.completions.create({
      model: 'gpt-4',
      messages: [{ role: 'user', content: message }],
      temperature: 0.7
    });
    
    const completion = response.choices[0].message.content;
    
    res.json({ 
      message: completion,
      usage: response.usage
    });
  } catch (error) {
    console.error('Chat error:', error);
    res.status(500).json({ error: 'Internal server error' });
  }
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

Apa yang Dilacak

Setiap panggilan API LLM secara otomatis mengirimkan peristiwa penggunaan ke Dodo Payments dengan struktur berikut:
{
  "event_id": "llm_1673123456_abc123",
  "customer_id": "customer_123",
  "event_name": "llm.chat_completion",
  "timestamp": "2024-01-08T10:30:00Z",
  "metadata": {
    "inputTokens": 10,
    "outputTokens": 25,
    "totalTokens": 35,
    "model": "gpt-4",
  }
}

Bidang Peristiwa

event_id
string
Pengidentifikasi unik untuk event ini. Dibuat otomatis oleh SDK.Format: llm_[timestamp]_[random]
customer_id
string
ID pelanggan yang Anda berikan saat membungkus klien. Digunakan untuk penagihan.
event_name
string
Nama event yang memicu meter Anda. Sesuai dengan konfigurasi tracker Anda.
timestamp
string
Timestamp ISO 8601 ketika event terjadi.
metadata
object
Penggunaan token dan data pelacakan tambahan:
  • inputTokens - Jumlah token input/prompt yang digunakan
  • outputTokens - Jumlah token output/completion yang digunakan (termasuk token penalaran bila berlaku)
  • totalTokens - Total token (input + output)
  • model - Model LLM yang digunakan (misalnya, “gpt-4”)
  • provider - Penyedia LLM (jika disertakan dalam metadata wrapper)
  • Metadata khusus apa pun yang Anda berikan saat membungkus klien
Token Penalaran: Untuk model dengan kemampuan penalaran, outputTokens secara otomatis mencakup token completion dan token penalaran.
Meter Dodo Payments Anda menggunakan bidang metadata (terutama inputTokens, outputTokens atau totalTokens) untuk menghitung penggunaan dan penagihan.