Zum Hauptinhalt springen
Perfekt für SaaS-Apps, KI-Chatbots, Content-Generierungstools und jede LLM-gestützte Anwendung, die nutzungsbasierte Abrechnung benötigt.

Schnellstart

Starten Sie mit der automatischen LLM-Token-Verfolgung in nur 2 Minuten:
1

Install the SDK

Installieren Sie die Dodo Payments Ingestion Blueprints:
npm install @dodopayments/ingestion-blueprints
2

Get Your API Keys

Sie benötigen zwei API-Schlüssel:
  • Dodo Payments API-Schlüssel: Holen Sie ihn sich vom Dodo Payments Dashboard
  • LLM-Anbieter API-Schlüssel: Von AI SDK, OpenAI, Anthropic, Groq usw.
Speichern Sie Ihre API-Schlüssel sicher in Umgebungsvariablen. Kommittieren Sie sie niemals in die Versionskontrolle.
3

Create a Meter in Dodo Payments

Bevor Sie die Nutzung verfolgen, erstellen Sie einen Zähler in Ihrem Dodo Payments Dashboard:
  1. Anmelden beim Dodo Payments Dashboard
  2. Navigieren zu Produkte → Zähler
  3. Klicken Sie auf „Zähler erstellen“
  4. Konfigurieren Sie Ihren Zähler:
    • Zählername: Wählen Sie einen beschreibenden Namen (z. B. „LLM Token Usage“)
    • Ereignisname: Legen Sie eine eindeutige Ereigniskennzeichnung fest (z. B. llm.chat_completion)
    • Aggregationstyp: Wählen Sie sum, um Token-Zahlen aufzusummieren
    • Über Eigenschaft: Wählen Sie, was verfolgt werden soll:
      • inputTokens – Eingabe-/Prompt-Token verfolgen
      • outputTokens – Ausgabe-/Completion-Token verfolgen (schließt Reasoning-Token ein, falls zutreffend)
      • totalTokens – Kombination aus Eingabe- und Ausgabetoken verfolgen
Der Ereignisname, den Sie hier festlegen, muss exakt mit dem übereinstimmen, was Sie an das SDK übergeben (Groß-/Kleinschreibung beachten).
Für detaillierte Anweisungen siehe den Usage-Based Billing Guide.
4

Track Token Usage

Umwickeln Sie Ihren LLM-Client und beginnen Sie automatisch mit der Verfolgung:
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);
Das war’s! Jeder API-Aufruf verfolgt jetzt automatisch den Token-Verbrauch und sendet Ereignisse zur Abrechnung an Dodo Payments.

Konfiguration

Tracker-Konfiguration

Erstellen Sie einen Tracker einmal beim Start der Anwendung mit diesen erforderlichen Parametern:
apiKey
string
erforderlich
Ihr Dodo Payments API-Schlüssel. Erhalten Sie ihn auf der API Keys-Seite.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
erforderlich
Der Umgebungsmodus für den Tracker.
  • test_mode – Für Entwicklung und Tests verwenden
  • live_mode – Für die Produktion verwenden
environment: 'test_mode' // or 'live_mode'
Verwenden Sie während der Entwicklung immer test_mode, um Produktionsmetriken nicht zu beeinflussen.
eventName
string
erforderlich
Der Ereignisname, der Ihren Zähler auslöst. Muss exakt mit der Konfiguration Ihres Dodo Payments-Zählers übereinstimmen (Groß-/Kleinschreibung beachten).
eventName: 'llm.chat_completion'
Dieser Ereignisname verknüpft Ihre verfolgte Nutzung mit dem richtigen Zähler für die Abrechnungsberechnungen.

Wrapper-Konfiguration

Beim Umwickeln Ihres LLM-Clients geben Sie diese Parameter an:
client
object
erforderlich
Ihre LLM-Clientinstanz (OpenAI, Anthropic, Groq usw.).
client: openai
customerId
string
erforderlich
Die eindeutige Kundenkennung für die Abrechnung. Diese sollte mit Ihrer Kunden-ID in Dodo Payments übereinstimmen.
customerId: 'customer_123'
Verwenden Sie die Benutzer-ID oder Kunden-ID Ihrer Anwendung für eine genaue Abrechnung pro Kunde.
metadata
object
Optionale zusätzliche Daten, die an das Tracking-Ereignis angehängt werden. Nützlich zum Filtern und Analysieren.
metadata: {
  feature: 'chat',
  userTier: 'premium',
  sessionId: 'session_123',
  modelVersion: 'gpt-4'
}

Vollständiges Konfigurationsbeispiel

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);
Automatische Verfolgung: Das SDK verfolgt Token-Nutzung automatisch im Hintergrund, ohne die Antwort zu verändern. Ihr Code bleibt sauber und identisch zur Nutzung der ursprünglichen Provider-SDKs.

Unterstützte Anbieter

Das LLM Blueprint funktioniert nahtlos mit allen großen LLM-Anbietern und Aggregatoren:
Verfolgen Sie die Nutzung mit dem Vercel AI SDK für universelle LLM-Unterstützung.
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);
Verfolgte Metriken:
  • inputTokensinputTokens
  • outputTokens + reasoningTokensoutputTokens
  • totalTokenstotalTokens
  • Modellname
Beim Einsatz von reasoning-fähigen Modellen über das AI SDK (z. B. Googles Gemini 2.5 Flash mit Thinking Mode) werden Reasoning-Token automatisch in die outputTokens-Zählung einbezogen, um eine genaue Abrechnung zu gewährleisten.
Verfolgen Sie Token-Nutzung über 200+ Modelle hinweg über die vereinheitlichte API von 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);
Verfolgte Metriken:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Modellname
OpenRouter bietet Zugriff auf Modelle von OpenAI, Anthropic, Google, Meta und vielen weiteren Anbietern über eine einzige API.
Verfolgen Sie automatisch die Token-Nutzung aus OpenAIs GPT-Modellen.
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);
Verfolgte Metriken:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Modellname
Verfolgen Sie die Token-Nutzung aus Anthropics Claude-Modellen.
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);
Verfolgte Metriken:
  • input_tokensinputTokens
  • output_tokensoutputTokens
  • Berechnete totalTokens
  • Modellname
Verfolgen Sie ultraschnelle LLM-Inferenz mit 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);
Verfolgte Metriken:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Modellname
Verfolgen Sie die Token-Nutzung von Googles Gemini-Modellen über das 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);
Verfolgte Metriken:
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Modellversion
Gemini Thinking Mode: Wenn Sie Gemini-Modelle mit Thinking-/Reasoning-Fähigkeiten verwenden (z. B. Gemini 2.5 Pro), fügt das SDK automatisch thoughtsTokenCount (Reasoning-Token) zur outputTokens hinzu, um die vollständigen Rechenkosten genau widerzuspiegeln.

Erweiterte Nutzung

Mehrere Anbieter

Verfolgen Sie die Nutzung über verschiedene LLM-Anbieter mit separaten Trackern:
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({...});
Verwenden Sie unterschiedliche Ereignisnamen für verschiedene Anbieter, um die Nutzung getrennt in Ihren Zählern zu verfolgen.

Express.js API-Integration

Vollständiges Beispiel zur Integration der LLM-Verfolgung in eine Express.js-API:
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');
});

Was verfolgt wird

Jeder LLM-API-Aufruf sendet automatisch ein Nutzungsevent an Dodo Payments mit folgender Struktur:
{
  "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",
  }
}

Ereignisfelder

event_id
string
Eindeutige Kennung für dieses spezifische Ereignis. Wird vom SDK automatisch generiert.Format: llm_[timestamp]_[random]
customer_id
string
Die Kunden-ID, die Sie beim Umwickeln des Clients angegeben haben. Wird für die Abrechnung verwendet.
event_name
string
Der Ereignisname, der Ihren Zähler auslöst. Entspricht Ihrer Tracker-Konfiguration.
timestamp
string
ISO-8601-Zeitstempel, wann das Ereignis stattgefunden hat.
metadata
object
Token-Nutzung und zusätzliche Tracking-Daten:
  • inputTokens – Anzahl der verwendeten Eingabe-/Prompt-Token
  • outputTokens – Anzahl der verwendeten Ausgabe-/Completion-Token (schließt Reasoning-Token ein, falls zutreffend)
  • totalTokens – Gesamte Token (Eingabe + Ausgabe)
  • model – Das verwendete LLM-Modell (z. B. „gpt-4“)
  • provider – Der LLM-Anbieter (falls in den Wrapper-Metadaten enthalten)
  • Alle benutzerdefinierten Metadaten, die Sie beim Umwickeln des Clients angegeben haben
Reasoning-Token: Bei Modellen mit Reasoning-Fähigkeiten beinhaltet outputTokens automatisch sowohl Completion- als auch Reasoning-Token.
Ihr Dodo Payments-Zähler verwendet die metadata-Felder (insbesondere inputTokens, outputTokens oder totalTokens), um die Nutzung und Abrechnung zu berechnen.