Skip to content

Usage Metrics And Billing

Every response may include normalized usage estimates:

ts
const response = await client.images.generate({ prompt: 'A product photo' });

console.log(response.usage?.outputImages);
console.log(response.usage?.outputBytes);
console.log(response.usage?.estimated);

Use usageLogger to persist per-request events:

ts
const client = ImageClient.fromEnv({
  usageLogger: {
    async logImage(event) {
      await db.imageUsage.create({
        data: {
          provider: event.provider,
          model: event.model,
          operation: event.operation,
          outputCount: event.outputCount,
          outputBytes: event.outputBytes,
          latencyMs: event.latencyMs,
          estimatedCost: event.usage?.costUSD,
        },
      });
    },
  },
});

Provider mapping:

FieldOpenAIGemini
outputImagesnormalized countnormalized count
outputBytescomputed from returned bytescomputed from returned bytes
costUSDestimated unless provider returns billing metadataestimated unless provider returns billing metadata
estimatedtrue unless directly provider-reportedtrue unless directly provider-reported

Do not log raw image bytes, base64 payloads, full prompts, or API keys by default.