Saltar al contenido principal
Perfecto para aplicaciones SaaS, chatbots de IA, herramientas de generación de contenido y cualquier aplicación impulsada por LLM que necesite facturación basada en el uso.

Inicio Rápido

Comienza con el seguimiento automático de tokens LLM en solo 2 minutos:
1

Instalar el SDK

Instala los Planos de Ingestión de Dodo Payments:
npm install @dodopayments/ingestion-blueprints
2

Obtén tus Claves API

Necesitarás dos claves API:
  • Clave API de Dodo Payments: Consíguela en el Tablero de Dodo Payments
  • Clave API del Proveedor de LLM: De AI SDK, OpenAI, Anthropic, Groq, etc.
Almacena tus claves API de forma segura en variables de entorno. Nunca las comites en el control de versiones.
3

Crea un Medidor en Dodo Payments

Antes de rastrear el uso, crea un medidor en tu tablero de Dodo Payments:
  1. Inicia sesión en el Tablero de Dodo Payments
  2. Navega a Productos → Medidores
  3. Haz clic en “Crear Medidor”
  4. Configura tu medidor:
    • Nombre del Medidor: Elige un nombre descriptivo (por ejemplo, “Uso de Tokens LLM”)
    • Nombre del Evento: Establece un identificador de evento único (por ejemplo, llm.chat_completion)
    • Tipo de Agregación: Selecciona sum para sumar los conteos de tokens
    • Sobre Propiedad: Elige qué rastrear:
      • inputTokens - Rastrear tokens de entrada/prompt
      • outputTokens - Rastrear tokens de salida/completación (incluye tokens de razonamiento cuando sea aplicable)
      • totalTokens - Rastrear tokens combinados de entrada + salida
El Nombre del Evento que establezcas aquí debe coincidir exactamente con lo que envías al SDK (sensible a mayúsculas).
Para instrucciones detalladas, consulta la Guía de Facturación Basada en el Uso.
4

Rastrear el Uso de Tokens

Envuelve tu cliente LLM y comienza a rastrear automáticamente:
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);
¡Eso es todo! Cada llamada a la API ahora rastrea automáticamente el uso de tokens y envía eventos a Dodo Payments para la facturación.

Configuración

Configuración del Rastreador

Crea un rastreador una vez al inicio de la aplicación con estos parámetros requeridos:
apiKey
string
required
Tu clave API de Dodo Payments. Consíguela en la página de Claves API.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
required
El modo de entorno para el rastreador.
  • test_mode - Usar para desarrollo y pruebas
  • live_mode - Usar para producción
environment: 'test_mode' // or 'live_mode'
Siempre usa test_mode durante el desarrollo para evitar afectar las métricas de producción.
eventName
string
required
El nombre del evento que activa tu medidor. Debe coincidir exactamente con lo que configuraste en tu medidor de Dodo Payments (sensible a mayúsculas).
eventName: 'llm.chat_completion'
Este nombre de evento vincula tu uso rastreado al medidor correcto para los cálculos de facturación.

Configuración del Wrapper

Al envolver tu cliente LLM, proporciona estos parámetros:
client
object
required
Tu instancia de cliente LLM (OpenAI, Anthropic, Groq, etc.).
client: openai
customerId
string
required
El identificador único del cliente para la facturación. Esto debe coincidir con tu ID de cliente en Dodo Payments.
customerId: 'customer_123'
Usa el ID de usuario o ID de cliente de tu aplicación para asegurar una facturación precisa por cliente.
metadata
object
Datos adicionales opcionales para adjuntar al evento de seguimiento. Útil para filtrado y análisis.
metadata: {
  feature: 'chat',
  userTier: 'premium',
  sessionId: 'session_123',
  modelVersion: 'gpt-4'
}

Ejemplo Completo de Configuración

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);
Seguimiento Automático: El SDK rastrea automáticamente el uso de tokens en segundo plano sin modificar la respuesta. Tu código permanece limpio e idéntico al uso de los SDKs del proveedor original.

Proveedores Soportados

El Plano LLM funciona sin problemas con todos los principales proveedores y agregadores de LLM:
Rastrea el uso con el SDK de IA de Vercel para soporte universal de LLM.
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étricas Rastreadas:
  • inputTokensinputTokens
  • outputTokens + reasoningTokensoutputTokens
  • totalTokenstotalTokens
  • Nombre del modelo
Al usar modelos con capacidades de razonamiento a través del SDK de IA (como el Gemini 2.5 Flash de Google en modo de pensamiento), los tokens de razonamiento se incluyen automáticamente en el conteo de outputTokens para una facturación precisa.
Rastrea el uso de tokens a través de más de 200 modelos mediante la API unificada de 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étricas Rastreadas:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nombre del modelo
OpenRouter proporciona acceso a modelos de OpenAI, Anthropic, Google, Meta y muchos más proveedores a través de una sola API.
Rastrea automáticamente el uso de tokens de los modelos GPT de 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étricas Rastreadas:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nombre del modelo
Rastrea el uso de tokens de los modelos Claude de 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étricas Rastreadas:
  • input_tokensinputTokens
  • output_tokensoutputTokens
  • totalTokens calculado
  • Nombre del modelo
Rastrea la inferencia ultra-rápida de LLM con 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étricas Rastreadas:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nombre del modelo
Rastrea el uso de tokens de los modelos Gemini de Google a través del SDK de 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étricas Rastreadas:
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Versión del modelo
Modo de Pensamiento de Gemini: Al usar modelos Gemini con capacidades de pensamiento/razonamiento (como Gemini 2.5 Pro), el SDK incluye automáticamente thoughtsTokenCount (tokens de razonamiento) en outputTokens para reflejar con precisión el costo computacional total.

Uso Avanzado

Múltiples Proveedores

Rastrea el uso a través de diferentes proveedores de LLM con rastreadores separados:
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({...});
Usa diferentes nombres de eventos para diferentes proveedores para rastrear el uso por separado en tus medidores.

Integración de API de Express.js

Ejemplo completo de integración del seguimiento de LLM en una API de 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');
});

Qué se Rastrea

Cada llamada a la API de LLM envía automáticamente un evento de uso a Dodo Payments con la siguiente estructura:
{
  "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",
  }
}

Campos del Evento

event_id
string
Identificador único para este evento específico. Generado automáticamente por el SDK.Formato: llm_[timestamp]_[random]
customer_id
string
El ID del cliente que proporcionaste al envolver el cliente. Usado para la facturación.
event_name
string
El nombre del evento que activa tu medidor. Coincide con la configuración de tu rastreador.
timestamp
string
Marca de tiempo ISO 8601 cuando ocurrió el evento.
metadata
object
Uso de tokens y datos adicionales de seguimiento:
  • inputTokens - Número de tokens de entrada/prompt utilizados
  • outputTokens - Número de tokens de salida/completación utilizados (incluye tokens de razonamiento cuando sea aplicable)
  • totalTokens - Total de tokens (entrada + salida)
  • model - El modelo LLM utilizado (por ejemplo, “gpt-4”)
  • provider - El proveedor de LLM (si se incluye en los metadatos del wrapper)
  • Cualquier metadato personalizado que proporcionaste al envolver el cliente
Tokens de Razonamiento: Para modelos con capacidades de razonamiento, outputTokens incluye automáticamente tanto los tokens de completación como los tokens de razonamiento.
Tu medidor de Dodo Payments utiliza los campos metadata (especialmente inputTokens, outputTokens o totalTokens) para calcular el uso y la facturación.