---
title: "Meter an LLM completion"
method: POST
path: "/v2/ai/completions"
tags: ["AI Metering"]
---

# Meter an LLM completion

`POST /v2/ai/completions`

Record the details of an LLM completion

## Request body

- AICompletionMetadataResource — The AI completion metadata
  - `transactionId` string, required — The unique identifier of the LLM completion transaction
  - `traceId` string — Trace multiple LLM calls belonging to same overall request
  - `model` string, required — The model used for generating the LLM completion
  - `responseQualityScore` number, double — The quality score of the response
  - `modelSource` string — The source of the AI model used for the completion
  - `inputTokenCount` integer, required — The count of consumed input tokens
  - `outputTokenCount` integer, required — The count of consumed output tokens
  - `reasoningTokenCount` integer — The number of reasoning tokens in the completion
  - `cacheCreationTokenCount` integer — The number of cached creation tokens in the completion
  - `cacheReadTokenCount` integer — The number of cached read tokens in the completion
  - `totalTokenCount` integer, required — The total number of tokens
  - `stopReason` 'END' | 'END_SEQUENCE' | 'TIMEOUT' | 'TOKEN_LIMIT' | 'COST_LIMIT' | 'COMPLETION_LIMIT' | 'ERROR', required — The reason for stopping the completion
  - `inputTokenCost` number, double — The input token cost associated with the LLM completion
  - `outputTokenCost` number, double — The output token cost associated with the LLM completion
  - `totalCost` number, double — The total cost associated with the LLM completion
  - `costType` 'AI', required — Cost type for the completion
  - `requestTime` string, required — The timestamp when the request was made
  - `completionStartTime` string, required — Time to first token for streaming requests
  - `timeToFirstToken` integer — The time to first token in milliseconds
  - `isStreamed` boolean, required — Indicates if the completion was streamed
  - `responseTime` string, required — The timestamp when the response was generated. If streaming, this is the time to first token
  - `requestDuration` integer, required — The duration of the request in milliseconds
  - `mediationLatency` integer — The latency, in milliseconds, of latency by an AI or API gateway
  - `provider` string, required — Vendor providing the LLM completion service
  - `taskType` string — If you wish to track the costs or performance of a specific task and compare the values over time or compare the performance across AI models or vendors, use a consistent taskType for all related tasks.
  - `subscriberCredentialName` string — Populate the name of the subscriber credential from your system to allow Revenium to track usage & costs for individual users.
  - `subscriberCredential` string — Populate the ID of the subscriber from your system to allow Revenium to track usage & costs for individual users.
  - `subscriberEmail` string — The email address of the subscriber
  - `subscriberId` string — Populate the ID of the subscriber from your system to allow Revenium to track usage & costs for individual users. i.e. user-123. If several subscriberCredentials have the same subscriberId, Revenium’s reporting will show usage for the entire organization broken down by user.
  - `organizationId` string — Populate the ID of the subscriber’s organization from your system to allow Revenium to track usage & costs by company. i.e. AcmeCorp. If several subscriberIds have the same organizationId, Revenium’s reporting will show usage for the entire organization broken down by user.
  - `subscriptionId` string — Unique identifier of the subscription from your own system that you wish to use to correlate usage between Revenium & your application.
  - `productId` string — Identifier of the product from your own system that you wish to use to correlate usage between Revenium & your application.
  - `agent` string — The AI agent that is making the request
  - `operationType` 'CHAT' | 'GENERATE' | 'EMBED' | 'CLASSIFY' | 'SUMMARIZE' | 'TRANSLATE' | 'OTHER' — The type of operation performed
  - `systemFingerprint` string — A unique identifier that represents the statistical signature of the language model that generated a specific chat completion. This fingerprint can be used for model attribution, debugging, and monitoring model behavior across request
  - `temperature` number, double — The temperature setting used for the LLM completion
  - `errorReason` string — The details of the error that occurred during the LLM completion

## Response `201`

AI completion successfully metered

- MeteringResponseResource — Metering response resource details for the metering API, providing metadata about response creation and validation.
  - `object` string, required — Type of the object, typically 'metering'
  - `label` string, required — A descriptive label for the metering response
  - `created` string — ISO8601 formatted timestamp when the response was created
  - `updated` string — ISO8601 formatted timestamp when the response was last updated
  - `id` string, required — Unique identifier for the metering response
  - `signature` string, required — Signature used for validating the response data
  - `_links` Links

## Other responses

- `400` — Invalid input data
- `401` — Unauthorized - Authentication required
- `403` — Forbidden - Insufficient permissions
- `404` — Not Found
- `409` — Conflict

---

[API](https://skmtc.net/revenium/apis/revenium-metering-api.md) · [All operations](https://skmtc.net/revenium/apis/revenium-metering-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/revenium/revenium-metering-api/revisions/8fb79ecfebda/schema)
