Langsung ke konten utama
Sempurna untuk aplikasi SaaS, chatbot AI, alat generasi konten, dan aplikasi bertenaga LLM lainnya yang memerlukan penagihan berbasis penggunaan.

Quick Start

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

Install the SDK

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

Get Your API Keys

Anda akan 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 mengkomitnya ke kontrol versi.
3

Create a Meter in Dodo Payments

Sebelum melacak penggunaan, buat meter di dasbor Dodo Payments Anda:
  1. Login ke Dodo Payments Dashboard
  2. Navigasi ke Produk → Meter
  3. Klik “Buat Meter”
  4. Konfigurasi meter Anda:
    • Nama Meter: Pilih nama deskriptif (misalnya, “Penggunaan Token LLM”)
    • Nama Peristiwa: Atur pengidentifikasi peristiwa yang unik (misalnya, llm.chat_completion)
    • Tipe Agregasi: Pilih sum untuk menjumlahkan jumlah token
    • Atas Properti: Pilih apa yang akan dilacak:
      • inputTokens - Lacak token input/prompt
      • outputTokens - Lacak token output/kompleksi (termasuk token penalaran jika berlaku)
      • totalTokens - Lacak token gabungan input + output
Nama Peristiwa yang Anda atur di sini harus cocok persis dengan apa yang Anda kirimkan ke SDK (sensitif terhadap huruf besar/kecil).
Untuk instruksi lebih rinci, lihat Usage-Based Billing Guide.
4

Track Token Usage

Bungkus klien LLM Anda dan mulai 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 mengirimkan peristiwa ke Dodo Payments untuk penagihan.

Konfigurasi

Konfigurasi Pelacak

Buat pelacak sekali saat aplikasi dimulai dengan parameter yang diperlukan ini:
apiKey
string
required
Kunci API Dodo Payments Anda. Dapatkan dari halaman API Keys.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
required
Mode lingkungan untuk pelacak.
  • test_mode - Gunakan untuk pengembangan dan pengujian
  • live_mode - Gunakan untuk produksi
environment: 'test_mode' // or 'live_mode'
Selalu gunakan test_mode selama pengembangan untuk menghindari mempengaruhi metrik produksi.
eventName
string
required
Nama peristiwa yang memicu meter Anda. Harus cocok persis dengan apa yang Anda konfigurasi di meter Dodo Payments Anda (sensitif terhadap huruf besar/kecil).
eventName: 'llm.chat_completion'
Nama peristiwa ini menghubungkan penggunaan yang Anda lacak ke meter yang benar untuk perhitungan penagihan.

Konfigurasi Pembungkus

Saat membungkus klien LLM Anda, berikan parameter ini:
client
object
required
Instansi klien LLM Anda (OpenAI, Anthropic, Groq, dll.).
client: openai
customerId
string
required
Pengidentifikasi pelanggan unik untuk penagihan. Ini harus cocok dengan ID pelanggan Anda di Dodo Payments.
customerId: 'customer_123'
Gunakan ID pengguna aplikasi Anda atau ID pelanggan untuk memastikan penagihan yang akurat per pelanggan.
metadata
object
Data tambahan opsional untuk dilampirkan pada peristiwa 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 mampu penalaran melalui AI SDK (seperti Gemini 2.5 Flash dari Google dengan mode berpikir), token penalaran secara otomatis termasuk dalam jumlah 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
  • totalTokens yang dihitung
  • Nama model
Lacak inferensi LLM ultra-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 milik 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
Mode Berpikir Gemini: Saat menggunakan model Gemini dengan kemampuan berpikir/penalaran (seperti Gemini 2.5 Pro), SDK secara otomatis menyertakan thoughtsTokenCount (token penalaran) dalam outputTokens untuk mencerminkan biaya komputasi penuh dengan 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 peristiwa yang berbeda untuk penyedia yang berbeda untuk melacak penggunaan 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 peristiwa spesifik ini. Secara otomatis dihasilkan oleh SDK.Format: llm_[timestamp]_[random]
customer_id
string
ID pelanggan yang Anda berikan saat membungkus klien. Digunakan untuk penagihan.
event_name
string
Nama peristiwa yang memicu meter Anda. Cocok dengan konfigurasi pelacak Anda.
timestamp
string
Timestamp ISO 8601 saat peristiwa terjadi.
metadata
object
Penggunaan token dan data pelacakan tambahan:
  • inputTokens - Jumlah token input/prompt yang digunakan
  • outputTokens - Jumlah token output/kompleksi yang digunakan (termasuk token penalaran jika berlaku)
  • totalTokens - Total token (input + output)
  • model - Model LLM yang digunakan (misalnya, “gpt-4”)
  • provider - Penyedia LLM (jika disertakan dalam metadata pembungkus)
  • Metadata kustom apa pun yang Anda berikan saat membungkus klien
Token Penalaran: Untuk model dengan kemampuan penalaran, outputTokens secara otomatis menyertakan baik token penyelesaian maupun token penalaran.
Meter Dodo Payments Anda menggunakan bidang metadata (terutama inputTokens, outputTokens atau totalTokens) untuk menghitung penggunaan dan penagihan.