Vai al contenuto principale
Perfetto per app SaaS, chatbot AI, strumenti di generazione di contenuti e qualsiasi applicazione alimentata da LLM che richieda fatturazione basata sull’utilizzo.

Inizio Veloce

Inizia con il monitoraggio automatico dei token LLM in soli 2 minuti:
1

Install the SDK

Installa i Blueprints di ingestione di Dodo Payments:
npm install @dodopayments/ingestion-blueprints
2

Get Your API Keys

Ti serviranno due chiavi API:
  • Chiave API di Dodo Payments: Ottienila dal Dashboard di Dodo Payments
  • Chiave API del Fornitore LLM: Da AI SDK, OpenAI, Anthropic, Groq, ecc.
Conserva le tue chiavi API in modo sicuro nelle variabili d’ambiente. Non inserirle mai nel controllo versione.
3

Create a Meter in Dodo Payments

Prima di monitorare l’utilizzo, crea un contatore nella tua dashboard di Dodo Payments:
  1. Accedi a Dodo Payments Dashboard
  2. Vai su Prodotti → Contatori
  3. Clicca “Crea contatore”
  4. Configura il tuo contatore:
    • Nome del contatore: scegli un nome descrittivo (es. “Utilizzo token LLM”)
    • Nome evento: imposta un identificatore evento univoco (es. llm.chat_completion)
    • Tipo di aggregazione: seleziona sum per sommare i conteggi dei token
    • Proprietà su cui operare: scegli cosa monitorare:
      • inputTokens - Monitora i token di input/prompt
      • outputTokens - Monitora i token di output/completamento (include i token di ragionamento quando applicabile)
      • totalTokens - Monitora i token combinati input + output
Il Nome evento che imposti qui deve corrispondere esattamente a quello che passi all’SDK (case-sensitive).
Per istruzioni dettagliate, consulta la Guida alla fatturazione basata sull’utilizzo.
4

Track Token Usage

Avvolgi il tuo client LLM e inizia a monitorare 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);
Fatelo! Ora ogni chiamata API monitora automaticamente l’utilizzo dei token e invia eventi a Dodo Payments per la fatturazione.

Configurazione

Configurazione del Tracker

Crea un tracker una sola volta all’avvio dell’applicazione con questi parametri richiesti:
apiKey
string
obbligatorio
La tua chiave API di Dodo Payments. Ottienila dalla pagina delle chiavi API.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
obbligatorio
La modalità dell’ambiente per il tracker.
  • test_mode - Utilizza per sviluppo e test
  • live_mode - Utilizza per la produzione
environment: 'test_mode' // or 'live_mode'
Usa sempre test_mode durante lo sviluppo per evitare di influenzare le metriche di produzione.
eventName
string
obbligatorio
Il nome dell’evento che attiva il tuo contatore. Deve corrispondere esattamente a quello configurato nel tuo contatore Dodo Payments (case-sensitive).
eventName: 'llm.chat_completion'
Questo nome evento collega l’utilizzo monitorato al contatore corretto per i calcoli di fatturazione.

Configurazione del Wrapper

Quando avvolgi il tuo client LLM, fornisci questi parametri:
client
object
obbligatorio
La tua istanza del client LLM (OpenAI, Anthropic, Groq, ecc.).
client: openai
customerId
string
obbligatorio
L’identificatore univoco del cliente per la fatturazione. Deve corrispondere al tuo ID cliente in Dodo Payments.
customerId: 'customer_123'
Usa l’ID utente o l’ID cliente della tua applicazione per garantire una fatturazione accurata per cliente.
metadata
object
Dati aggiuntivi opzionali da allegare all’evento di monitoraggio. Utile per filtraggio e analisi.
metadata: {
  feature: 'chat',
  userTier: 'premium',
  sessionId: 'session_123',
  modelVersion: 'gpt-4'
}

Esempio Completo di Configurazione

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);
Monitoraggio automatico: l’SDK monitora automaticamente l’utilizzo dei token in background senza modificare la risposta. Il tuo codice rimane pulito e identico all’utilizzo degli SDK originali del provider.

Fornitori Supportati

Il LLM Blueprint funziona senza problemi con tutti i principali fornitori e aggregatori di LLM:
Monitora l’utilizzo con l’SDK Vercel AI per un supporto universale agli 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);
Metriche monitorate:
  • inputTokensinputTokens
  • outputTokens + reasoningTokensoutputTokens
  • totalTokenstotalTokens
  • Nome del modello
Quando usi modelli con capacità di ragionamento tramite AI SDK (come il Gemini 2.5 Flash di Google con modalità thinking), i token di ragionamento sono automaticamente inclusi nel conteggio outputTokens per una fatturazione accurata.
Monitora l’utilizzo dei token per oltre 200 modelli tramite l’API unificata di 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);
Metriche monitorate:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nome del modello
OpenRouter offre accesso a modelli di OpenAI, Anthropic, Google, Meta e molti altri provider tramite un’unica API.
Monitora automaticamente l’utilizzo dei token dei modelli GPT di 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);
Metriche monitorate:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nome del modello
Monitora l’utilizzo dei token dei modelli Claude di 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);
Metriche monitorate:
  • input_tokensinputTokens
  • output_tokensoutputTokens
  • totalTokens calcolato
  • Nome del modello
Monitora inferenze LLM ultra-veloci 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);
Metriche monitorate:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Nome del modello
Monitora l’utilizzo dei token dei modelli Gemini di Google tramite il 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);
Metriche monitorate:
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Versione del modello
Modalità Gemini Thinking: Quando usi i modelli Gemini con capacità di thinking/ragionamento (come Gemini 2.5 Pro), l’SDK include automaticamente thoughtsTokenCount (token di ragionamento) in outputTokens per riflettere accuratamente il costo computazionale totale.

Utilizzo Avanzato

Molteplici Fornitori

Monitora l’uso tra diversi fornitori LLM con tracker separati:
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 nomi evento diversi per provider differenti per monitorare separatamente l’utilizzo nei tuoi contatori.

Integrazione API Express.js

Esempio completo di integrazione del monitoraggio LLM in un’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');
});

Cosa Viene Monitorato

Ogni chiamata API LLM invia automaticamente un evento di utilizzo a Dodo Payments con la seguente struttura:
{
  "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",
  }
}

Campi Evento

event_id
string
Identificatore univoco per questo evento specifico. Generato automaticamente dall’SDK.Formato: llm_[timestamp]_[random]
customer_id
string
L’ID cliente che hai fornito quando hai avvolto il client. Usato per la fatturazione.
event_name
string
Il nome evento che attiva il tuo contatore. Corrisponde alla configurazione del tracker.
timestamp
string
Timestamp ISO 8601 in cui si è verificato l’evento.
metadata
object
Utilizzo dei token e dati aggiuntivi di monitoraggio:
  • inputTokens - Numero di token di input/prompt utilizzati
  • outputTokens - Numero di token di output/completamento utilizzati (include i token di ragionamento quando applicabile)
  • totalTokens - Token totali (input + output)
  • model - Il modello LLM utilizzato (es. “gpt-4”)
  • provider - Il provider LLM (se incluso nei metadati del wrapper)
  • Qualsiasi metadato personalizzato fornito al momento dell’avvolgimento del client
  • inputTokens - Numero di token di input/prompt utilizzati
  • outputTokens - Numero di token di output/completamento utilizzati (inclusi i token di ragionamento quando applicabile)
  • totalTokens - Token totali (input + output)
  • model - Il modello LLM utilizzato (es. “gpt-4”)
  • provider - Il fornitore LLM (se incluso nei metadati del wrapper)
  • Qualsiasi metadato personalizzato fornito durante l’involucro del client
Token di ragionamento: per i modelli con capacità di ragionamento, outputTokens include automaticamente sia i token di completamento sia quelli di ragionamento.
Il tuo contatore di Dodo Payments utilizza i campi metadata (specialmente inputTokens, outputTokens o totalTokens) per calcolare l’utilizzo e la fatturazione.