Pular para o conteúdo principal
Perfeito para aplicativos SaaS, chatbots de IA, ferramentas de geração de conteúdo e qualquer aplicação alimentada por LLM que precise de faturamento baseado em uso.

Início Rápido

Comece com o rastreamento automático de tokens LLM em apenas 2 minutos:
1

Instale o SDK

Instale os Blueprint de Ingestão do Dodo Payments:
npm install @dodopayments/ingestion-blueprints
2

Obtenha suas Chaves de API

Você precisará de duas chaves de API:
  • Chave de API do Dodo Payments: Obtenha-a no Painel do Dodo Payments
  • Chave de API do Provedor LLM: Do AI SDK, OpenAI, Anthropic, Groq, etc.
Armazene suas chaves de API com segurança em variáveis de ambiente. Nunca as comprometa no controle de versão.
3

Crie um Medidor no Dodo Payments

Antes de rastrear o uso, crie um medidor no seu painel do Dodo Payments:
  1. Faça login no Painel do Dodo Payments
  2. Navegue até Produtos → Medidores
  3. Clique em “Criar Medidor”
  4. Configure seu medidor:
    • Nome do Medidor: Escolha um nome descritivo (ex: “Uso de Tokens LLM”)
    • Nome do Evento: Defina um identificador de evento único (ex: llm.chat_completion)
    • Tipo de Agregação: Selecione sum para somar contagens de tokens
    • Sobre a Propriedade: Escolha o que rastrear:
      • inputTokens - Rastrear tokens de entrada/prompt
      • outputTokens - Rastrear tokens de saída/compleção (inclui tokens de raciocínio quando aplicável)
      • totalTokens - Rastrear tokens combinados de entrada + saída
O Nome do Evento que você definir aqui deve corresponder exatamente ao que você passa para o SDK (sensível a maiúsculas e minúsculas).
Para instruções detalhadas, consulte o Guia de Faturamento Baseado em Uso.
4

Rastrear Uso de Tokens

Envolva seu cliente LLM e comece a rastrear automaticamente:
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);
É isso! Cada chamada de API agora rastreia automaticamente o uso de tokens e envia eventos para o Dodo Payments para faturamento.

Configuração

Configuração do Rastreador

Crie um rastreador uma vez na inicialização do aplicativo com estes parâmetros obrigatórios:
apiKey
string
required
Sua chave de API do Dodo Payments. Obtenha-a na página de Chaves de API.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
required
O modo de ambiente para o rastreador.
  • test_mode - Use para desenvolvimento e teste
  • live_mode - Use para produção
environment: 'test_mode' // or 'live_mode'
Sempre use test_mode durante o desenvolvimento para evitar afetar as métricas de produção.
eventName
string
required
O nome do evento que aciona seu medidor. Deve corresponder exatamente ao que você configurou no seu medidor do Dodo Payments (sensível a maiúsculas e minúsculas).
eventName: 'llm.chat_completion'
Este nome de evento vincula seu uso rastreado ao medidor correto para cálculos de faturamento.

Configuração do Wrapper

Ao envolver seu cliente LLM, forneça estes parâmetros:
client
object
required
Sua instância de cliente LLM (OpenAI, Anthropic, Groq, etc.).
client: openai
customerId
string
required
O identificador único do cliente para faturamento. Isso deve corresponder ao seu ID de cliente no Dodo Payments.
customerId: 'customer_123'
Use o ID do usuário ou ID do cliente do seu aplicativo para garantir um faturamento preciso por cliente.
metadata
object
Dados adicionais opcionais para anexar ao evento de rastreamento. Útil para filtragem e análise.
metadata: {
  feature: 'chat',
  userTier: 'premium',
  sessionId: 'session_123',
  modelVersion: 'gpt-4'
}

Exemplo Completo de Configuração

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);
Rastreamento Automático: O SDK rastreia automaticamente o uso de tokens em segundo plano sem modificar a resposta. Seu código permanece limpo e idêntico ao uso dos SDKs do provedor original.

Provedores Suportados

O LLM Blueprint funciona perfeitamente com todos os principais provedores e agregadores de LLM:
Rastreie o uso com o Vercel AI SDK para suporte 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
  • Nome do modelo
Ao usar modelos com capacidade de raciocínio através do AI SDK (como o Gemini 2.5 Flash do Google com modo de pensamento), os tokens de raciocínio são automaticamente incluídos na contagem de outputTokens para faturamento preciso.
Rastreie o uso de tokens em mais de 200 modelos através da API unificada do 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
  • Nome do modelo
O OpenRouter fornece acesso a modelos do OpenAI, Anthropic, Google, Meta e muitos outros provedores através de uma única API.
Rastreie automaticamente o uso de tokens dos modelos GPT do 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
  • Nome do modelo
Rastreie o uso de tokens dos modelos Claude da 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
  • Nome do modelo
Rastreie a inferência ultra-rápida de LLM com 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
  • Nome do modelo
Rastreie o uso de tokens dos modelos Gemini do Google através do 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);
Métricas Rastreadas:
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Versão do modelo
Modo de Pensamento do Gemini: Ao usar modelos Gemini com capacidades de raciocínio (como o Gemini 2.5 Pro), o SDK inclui automaticamente thoughtsTokenCount (tokens de raciocínio) em outputTokens para refletir com precisão o custo computacional total.

Uso Avançado

Múltiplos Provedores

Rastreie o uso em diferentes provedores de LLM com 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({...});
Use nomes de eventos diferentes para diferentes provedores para rastrear o uso separadamente em seus medidores.

Integração da API Express.js

Exemplo completo de integração do rastreamento LLM em uma 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');
});

O que é Rastreado

Cada chamada de API LLM envia automaticamente um evento de uso para o Dodo Payments com a seguinte estrutura:
{
  "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 do Evento

event_id
string
Identificador único para este evento específico. Gerado automaticamente pelo SDK.Formato: llm_[timestamp]_[random]
customer_id
string
O ID do cliente que você forneceu ao envolver o cliente. Usado para faturamento.
event_name
string
O nome do evento que aciona seu medidor. Corresponde à sua configuração de rastreador.
timestamp
string
Timestamp ISO 8601 quando o evento ocorreu.
metadata
object
Uso de tokens e dados adicionais de rastreamento:
  • inputTokens - Número de tokens de entrada/prompt usados
  • outputTokens - Número de tokens de saída/compleção usados (inclui tokens de raciocínio quando aplicável)
  • totalTokens - Total de tokens (entrada + saída)
  • model - O modelo LLM usado (ex: “gpt-4”)
  • provider - O provedor LLM (se incluído nos metadados do wrapper)
  • Quaisquer metadados personalizados que você forneceu ao envolver o cliente
Tokens de Raciocínio: Para modelos com capacidades de raciocínio, outputTokens inclui automaticamente tanto os tokens de conclusão quanto os tokens de raciocínio.
Seu medidor do Dodo Payments usa os campos metadata (especialmente inputTokens, outputTokens ou totalTokens) para calcular uso e faturamento.