Skip to main content

AI Analytics

Retrieve usage and performance analytics for AI models managed by the Strongly AI Gateway, counted in requests and tokens. All analytics endpoints are read-only and cover one date range: the last 24h, 7d, 30d or 90d.

Each figure counts the requests the caller may see: a platform administrator sees every request, an organization owner or admin on a multi-tenant platform sees their organization's members' requests, and anyone else sees their own.


GET /api/v1/ai-gateway/analytics/usage​

Get usage statistics

Returns the range's totals: requests, tokens, latency, error rate, users and models.

Scope: ai-gateway:read

Parameters:

NameInTypeRequiredDescription
dateRangequerystringYes24h, 7d, 30d or 90d
modelIdquerystringNoOnly this model's requests

Response: 200 OK

{
"data": {
"totalRequests": 145230,
"totalTokens": 28500000,
"promptTokens": 18200000,
"completionTokens": 10300000,
"avgResponseTime": 485,
"minResponseTime": 42,
"maxResponseTime": 9120,
"p95ResponseTime": 1500,
"p95OverBound": false,
"p99ResponseTime": 3000,
"p99OverBound": false,
"errorRate": 1.5,
"successRate": 98.5,
"uniqueUsersCount": 38,
"uniqueModelsCount": 7
},
"meta": { "requestId": "req_abc123" }
}

See UsageStats for the fields.


GET /api/v1/ai-gateway/analytics/performance​

Get performance metrics

Returns request latency per model over the range, most requests first.

Scope: ai-gateway:read

Parameters:

NameInTypeRequiredDescription
dateRangequerystringYes24h, 7d, 30d or 90d
modelIdquerystringNoOnly this model

Response: 200 OK

{
"data": [
{
"modelId": "model_abc123",
"modelName": "GPT-4 Production",
"provider": "openai",
"totalRequests": 52000,
"avgResponseTime": 420,
"minResponseTime": 38,
"maxResponseTime": 8800,
"p95ResponseTime": 1500,
"p95OverBound": false,
"p99ResponseTime": 3000,
"p99OverBound": false
}
],
"meta": { "requestId": "req_abc123" }
}
FieldTypeDescription
modelIdstringModel ID
modelNamestringModel name
providerstringModel provider
totalRequestsintegerRequests in the range
avgResponseTimeinteger | nullMean latency in milliseconds
minResponseTimenumber | nullFastest request in milliseconds
maxResponseTimenumber | nullSlowest request in milliseconds
p95ResponseTimeinteger | null95th percentile latency in milliseconds, as the upper bound of its latency bucket
p95OverBoundbooleantrue when the 95th percentile is above the highest bucket bound (10000 ms), so the true value is over p95ResponseTime
p99ResponseTimeinteger | null99th percentile latency in milliseconds, as the upper bound of its latency bucket
p99OverBoundbooleanAs p95OverBound, for the 99th percentile

GET /api/v1/ai-gateway/analytics/time-series​

Get time-series data

Returns requests, tokens, mean latency and errors per provider, per hour or per UTC day, suitable for charting and trend analysis.

Scope: ai-gateway:read

Parameters:

NameInTypeRequiredDescription
dateRangequerystringYes24h, 7d, 30d or 90d
granularityquerystringYeshourly or daily. hourly is allowed only with 24h; any other range is refused with the message An hourly series is of the last 24 hours only
providerquerystringNoOnly this provider (all means every provider)

Response: 200 OK

{
"data": [
{
"timestamp": "2025-02-06",
"provider": "anthropic",
"requests": 1850,
"tokens": 410000,
"avgLatency": 540,
"errors": 12
},
{
"timestamp": "2025-02-06",
"provider": "openai",
"requests": 4200,
"tokens": 820000,
"avgLatency": 410,
"errors": 30
}
],
"meta": { "requestId": "req_abc123" }
}

data holds one point per period and provider, ordered by timestamp then provider. timestamp is YYYY-MM-DD HH:00 for hourly and YYYY-MM-DD for daily (UTC). With daily, every day of the range is present for each provider: a day with no requests has zero requests, tokens and errors and a null avgLatency (milliseconds).


GET /api/v1/ai-gateway/analytics/providers​

Get per-provider statistics

Returns aggregated statistics grouped by AI provider, most requests first, useful for comparing providers side by side.

Scope: ai-gateway:read

Parameters:

NameInTypeRequiredDescription
dateRangequerystringYes24h, 7d, 30d or 90d

Response: 200 OK

{
"data": [
{
"provider": "openai",
"modelsCount": 5,
"totalRequests": 82000,
"totalTokens": 18500000,
"avgLatency": 420,
"uniqueUsersCount": 31
},
{
"provider": "anthropic",
"modelsCount": 3,
"totalRequests": 45000,
"totalTokens": 12000000,
"avgLatency": 550,
"uniqueUsersCount": 22
}
],
"meta": { "requestId": "req_abc123" }
}
FieldTypeDescription
providerstringProvider name
modelsCountintegerModels of this provider with requests in the range
totalRequestsintegerRequests in the range
totalTokensintegerTokens in the range (prompt + completion)
avgLatencyinteger | nullMean latency in milliseconds
uniqueUsersCountintegerUsers with requests to this provider

Response Models Reference​

UsageStats​

FieldTypeDescription
totalRequestsintegerTotal number of inference requests
totalTokensintegerTotal tokens consumed (prompt + completion)
promptTokensintegerTotal input/prompt tokens
completionTokensintegerTotal output/completion tokens
avgResponseTimeinteger | nullMean latency in milliseconds (null with no requests)
minResponseTimenumber | nullFastest request in milliseconds
maxResponseTimenumber | nullSlowest request in milliseconds
p95ResponseTimeinteger | null95th percentile latency in milliseconds, as the upper bound of its latency bucket
p95OverBoundbooleantrue when the 95th percentile is above the highest bucket bound (10000 ms)
p99ResponseTimeinteger | null99th percentile latency in milliseconds, as the upper bound of its latency bucket
p99OverBoundbooleanAs p95OverBound, for the 99th percentile
errorRatenumber | nullPercentage of requests that failed (0 - 100), null with no requests
successRatenumber | nullPercentage of requests that succeeded (0 - 100), null with no requests
uniqueUsersCountintegerUsers with requests in the range
uniqueModelsCountintegerModels with requests in the range