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

Schnellstart

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

SDK installieren

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

Holen Sie sich Ihre API-Schlüssel

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. Fügen Sie sie niemals zur Versionskontrolle hinzu.
3

Erstellen Sie einen Zähler 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 Sie 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 Nutzung”)
    • Ereignisname: Legen Sie einen eindeutigen Ereignisbezeichner fest (z. B. llm.chat_completion)
    • Aggregationsart: Wählen Sie sum, um die Tokenanzahl zu summieren
    • Über Eigenschaft: Wählen Sie, was verfolgt werden soll:
      • inputTokens - Verfolgen Sie Eingabe-/Prompt-Token
      • outputTokens - Verfolgen Sie Ausgabe-/Vervollständigungs-Token (einschließlich Denk-Token, wenn zutreffend)
      • totalTokens - Verfolgen Sie kombinierte Eingabe + Ausgabe-Token
Der Ereignisname, den Sie hier festlegen, muss genau mit dem übereinstimmen, was Sie an das SDK übergeben (groß- und kleinschreibungssensitiv).
Für detaillierte Anweisungen siehe den Leitfaden zur nutzungsbasierten Abrechnung.
4

Token-Nutzung verfolgen

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 die Token-Nutzung und sendet Ereignisse an Dodo Payments zur Abrechnung.

Konfiguration

Tracker-Konfiguration

Erstellen Sie einen Tracker einmal beim Start der Anwendung mit diesen erforderlichen Parametern:
apiKey
string
required
Ihr Dodo Payments API-Schlüssel. Holen Sie ihn sich von der API-Schlüssel-Seite.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
required
Der Umgebungsmodus für den Tracker.
  • test_mode - Verwenden Sie für Entwicklung und Test
  • live_mode - Verwenden Sie für die Produktion
environment: 'test_mode' // or 'live_mode'
Verwenden Sie immer test_mode während der Entwicklung, um zu vermeiden, dass Produktionsmetriken beeinträchtigt werden.
eventName
string
required
Der Ereignisname, der Ihren Zähler auslöst. Muss genau mit dem übereinstimmen, was Sie in Ihrem Dodo Payments-Zähler konfiguriert haben (groß- und kleinschreibungssensitiv).
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
required
Ihre LLM-Clientinstanz (OpenAI, Anthropic, Groq usw.).
client: openai
customerId
string
required
Die eindeutige Kundenkennung für die Abrechnung. Dies sollte mit Ihrer Kunden-ID in Dodo Payments übereinstimmen.
customerId: 'customer_123'
Verwenden Sie die Benutzer-ID oder Kunden-ID Ihrer Anwendung, um eine genaue Abrechnung pro Kunde sicherzustellen.
metadata
object
Optionale zusätzliche Daten, die dem Verfolgungsevent angehängt werden sollen. Nützlich für Filterung und Analyse.
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 automatisch die Token-Nutzung im Hintergrund, ohne die Antwort zu ändern. Ihr Code bleibt sauber und identisch zur Verwendung der ursprünglichen Anbieter-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
Bei der Verwendung von Modellen mit Denkfähigkeiten über AI SDK (wie Googles Gemini 2.5 Flash im Denkmodus) werden Denk-Token automatisch in die outputTokens-Zählung für eine genaue Abrechnung einbezogen.
Verfolgen Sie die Token-Nutzung über 200+ Modelle über die einheitliche 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 von OpenAI’s 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 von Anthropic’s 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 ultra-schnelle 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 Denkmodus: Bei der Verwendung von Gemini-Modellen mit Denk-/Denkfähigkeiten (wie Gemini 2.5 Pro) schließt das SDK automatisch thoughtsTokenCount (Denk-Token) in outputTokens ein, um die gesamten 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 in Ihren Zählern separat 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. Automatisch vom SDK 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 aufgetreten ist.
metadata
object
Token-Nutzung und zusätzliche Verfolgungsdaten:
  • inputTokens - Anzahl der verwendeten Eingabe-/Prompt-Token
  • outputTokens - Anzahl der verwendeten Ausgabe-/Vervollständigungs-Token (einschließlich Denk-Token, wenn zutreffend)
  • totalTokens - Gesamte Token (Eingabe + Ausgabe)
  • model - Das verwendete LLM-Modell (z. B. “gpt-4”)
  • provider - Der LLM-Anbieter (wenn in den Wrapper-Metadaten enthalten)
  • Alle benutzerdefinierten Metadaten, die Sie beim Umwickeln des Clients bereitgestellt haben
Denk-Token: Bei Modellen mit Denkfähigkeiten umfasst outputTokens automatisch sowohl die Vervollständigungs-Token als auch die Denk-Token.
Ihr Dodo Payments-Zähler verwendet die metadata-Felder (insbesondere inputTokens, outputTokens oder totalTokens), um Nutzung und Abrechnung zu berechnen.