Passer au contenu principal
Parfait pour les applications SaaS, les chatbots IA, les outils de génération de contenu et toute application alimentée par LLM nécessitant une facturation basée sur l’utilisation.

Démarrage rapide

Commencez avec le suivi automatique des tokens LLM en seulement 2 minutes :
1

Installer le SDK

Installez les Ingestion Blueprints de Dodo Payments :
npm install @dodopayments/ingestion-blueprints
2

Obtenez vos clés API

Vous aurez besoin de deux clés API :
  • Clé API Dodo Payments : Obtenez-la depuis le Tableau de bord Dodo Payments
  • Clé API du fournisseur LLM : Depuis AI SDK, OpenAI, Anthropic, Groq, etc.
Stockez vos clés API en toute sécurité dans des variables d’environnement. Ne les engagez jamais dans le contrôle de version.
3

Créez un compteur dans Dodo Payments

Avant de suivre l’utilisation, créez un compteur dans votre tableau de bord Dodo Payments :
  1. Connectez-vous au Tableau de bord Dodo Payments
  2. Naviguez vers Produits → Compteurs
  3. Cliquez sur “Créer un compteur”
  4. Configurez votre compteur :
    • Nom du compteur : Choisissez un nom descriptif (ex. : “Utilisation des tokens LLM”)
    • Nom de l’événement : Définissez un identifiant d’événement unique (ex. : llm.chat_completion)
    • Type d’agrégation : Sélectionnez sum pour additionner les comptes de tokens
    • Sur propriété : Choisissez ce que vous souhaitez suivre :
      • inputTokens - Suivre les tokens d’entrée/indication
      • outputTokens - Suivre les tokens de sortie/completion (inclut les tokens de raisonnement lorsque cela est applicable)
      • totalTokens - Suivre les tokens combinés d’entrée + sortie
Le Nom de l’événement que vous définissez ici doit correspondre exactement à ce que vous passez au SDK (sensible à la casse).
Pour des instructions détaillées, consultez le Guide de facturation basée sur l’utilisation.
4

Suivre l'utilisation des tokens

Enveloppez votre client LLM et commencez à suivre automatiquement :
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);
C’est tout ! Chaque appel API suit maintenant automatiquement l’utilisation des tokens et envoie des événements à Dodo Payments pour la facturation.

Configuration

Configuration du tracker

Créez un tracker une fois au démarrage de l’application avec ces paramètres requis :
apiKey
string
required
Votre clé API Dodo Payments. Obtenez-la depuis la page des clés API.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
required
Le mode d’environnement pour le tracker.
  • test_mode - Utilisez pour le développement et les tests
  • live_mode - Utilisez pour la production
environment: 'test_mode' // or 'live_mode'
Utilisez toujours test_mode pendant le développement pour éviter d’affecter les métriques de production.
eventName
string
required
Le nom de l’événement qui déclenche votre compteur. Doit correspondre exactement à ce que vous avez configuré dans votre compteur Dodo Payments (sensible à la casse).
eventName: 'llm.chat_completion'
Ce nom d’événement lie votre utilisation suivie au bon compteur pour les calculs de facturation.

Configuration de l’enveloppeur

Lors de l’enveloppement de votre client LLM, fournissez ces paramètres :
client
object
required
Votre instance de client LLM (OpenAI, Anthropic, Groq, etc.).
client: openai
customerId
string
required
L’identifiant client unique pour la facturation. Cela doit correspondre à votre identifiant client dans Dodo Payments.
customerId: 'customer_123'
Utilisez l’ID utilisateur ou l’ID client de votre application pour garantir une facturation précise par client.
metadata
object
Données supplémentaires facultatives à attacher à l’événement de suivi. Utile pour le filtrage et l’analyse.
metadata: {
  feature: 'chat',
  userTier: 'premium',
  sessionId: 'session_123',
  modelVersion: 'gpt-4'
}

Exemple de configuration complète

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);
Suivi automatique : Le SDK suit automatiquement l’utilisation des tokens en arrière-plan sans modifier la réponse. Votre code reste propre et identique à celui utilisant les SDK du fournisseur d’origine.

Fournisseurs pris en charge

Le LLM Blueprint fonctionne parfaitement avec tous les principaux fournisseurs et agrégateurs de LLM :
Suivez l’utilisation avec le Vercel AI SDK pour un support LLM universel.
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);
Métriques suivies :
  • inputTokensinputTokens
  • outputTokens + reasoningTokensoutputTokens
  • totalTokenstotalTokens
  • Nom du modèle
Lors de l’utilisation de modèles capables de raisonnement via AI SDK (comme le Gemini 2.5 Flash de Google avec mode de réflexion), les tokens de raisonnement sont automatiquement inclus dans le compte de outputTokens pour une facturation précise.
Suivez l’utilisation des tokens à travers plus de 200 modèles via l’API unifiée d’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);
Métriques suivies :
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nom du modèle
OpenRouter fournit un accès à des modèles d’OpenAI, Anthropic, Google, Meta et de nombreux autres fournisseurs via une seule API.
Suivez automatiquement l’utilisation des tokens des modèles GPT d’OpenAI.
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);
Métriques suivies :
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nom du modèle
Suivez l’utilisation des tokens des modèles Claude d’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);
Métriques suivies :
  • input_tokensinputTokens
  • output_tokensoutputTokens
  • Calculé totalTokens
  • Nom du modèle
Suivez l’inférence LLM ultra-rapide avec 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);
Métriques suivies :
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nom du modèle
Suivez l’utilisation des tokens des modèles Gemini de Google via le SDK Google GenAI.
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);
Métriques suivies :
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Version du modèle
Mode de réflexion Gemini : Lors de l’utilisation de modèles Gemini avec des capacités de réflexion/raisonnement (comme Gemini 2.5 Pro), le SDK inclut automatiquement thoughtsTokenCount (tokens de raisonnement) dans outputTokens pour refléter avec précision le coût computationnel total.

Utilisation avancée

Plusieurs fournisseurs

Suivez l’utilisation à travers différents fournisseurs LLM avec des trackers séparés :
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({...});
Utilisez des noms d’événements différents pour différents fournisseurs afin de suivre l’utilisation séparément dans vos compteurs.

Intégration API Express.js

Exemple complet d’intégration du suivi LLM dans une 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');
});

Ce qui est suivi

Chaque appel API LLM envoie automatiquement un événement d’utilisation à Dodo Payments avec la structure suivante :
{
  "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",
  }
}

Champs d’événement

event_id
string
Identifiant unique pour cet événement spécifique. Généré automatiquement par le SDK.Format : llm_[timestamp]_[random]
customer_id
string
L’ID client que vous avez fourni lors de l’enveloppement du client. Utilisé pour la facturation.
event_name
string
Le nom de l’événement qui déclenche votre compteur. Correspond à votre configuration de tracker.
timestamp
string
Horodatage ISO 8601 lorsque l’événement s’est produit.
metadata
object
Utilisation des tokens et données de suivi supplémentaires :
  • inputTokens - Nombre de tokens d’entrée/indication utilisés
  • outputTokens - Nombre de tokens de sortie/completion utilisés (inclut les tokens de raisonnement lorsque cela est applicable)
  • totalTokens - Total des tokens (entrée + sortie)
  • model - Le modèle LLM utilisé (ex. : “gpt-4”)
  • provider - Le fournisseur LLM (si inclus dans les métadonnées de l’enveloppeur)
  • Toute métadonnée personnalisée que vous avez fournie lors de l’enveloppement du client
Tokens de raisonnement : Pour les modèles avec des capacités de raisonnement, outputTokens inclut automatiquement à la fois les tokens de completion et les tokens de raisonnement.
Votre compteur Dodo Payments utilise les champs metadata (en particulier inputTokens, outputTokens ou totalTokens) pour calculer l’utilisation et la facturation.