Skip to content

Key Stats

GET https://api.bve.me/admin/key-stats
Authorization: Bearer admin_bve_YOUR_ADMIN_KEY

Returns a leaderboard of API keys with token totals, latency percentiles, and error breakdowns. Data is sourced from the 1%-sampled request_logs_sampled table. Default sort order is request_count descending; use sort_by and sort_dir to change it.

This is distinct from Usage Statistics (which returns exact D1-backed daily/monthly totals) and from API Key Quota (which returns real-time Durable Object counters). Key stats are sampled aggregates — useful for spotting traffic patterns across keys at a glance.

Admin Bearer token required. See Admin API Overview for authentication details.

ParameterTypeRequiredDefaultDescription
modelstringNoRestrict stats to a single model ID. Only rows where request_logs_sampled.model = ? are counted. Keys with no rows for that model are excluded entirely.
endpointstringNoRestrict stats to a single endpoint path (e.g. /v1/responses). Only rows where request_logs_sampled.endpoint = ? are counted. Keys with no rows for that endpoint are excluded. Combines with model.
sincestringNoInclude only log entries at or after this ISO 8601 timestamp
untilstringNoInclude only log entries at or before this ISO 8601 timestamp
limitintegerNo20Maximum number of key rows to return (1–500)
sort_bystringNorequest_countColumn to sort by. One of: request_count, error_count, total_tokens, avg_latency_ms, max_latency_ms, p95_latency_ms
sort_dirstringNodescSort direction: asc or desc

All parameters are optional and combinable. Note: key_id filtering is not supported — use GET /admin/api-keys/:id/stats for a single key’s aggregate.

{
"total": 2,
"keys": [
{
"key_id": "550e8400-e29b-41d4-a716-446655440000",
"key_name": "prod-client",
"request_count": 412,
"prompt_tokens": 540200,
"completion_tokens": 148300,
"total_tokens": 688500,
"avg_latency_ms": 1340,
"max_latency_ms": 9820,
"p50_latency_ms": 1020,
"p95_latency_ms": 6100,
"error_count": 12,
"client_error_count": 10,
"server_error_count": 2,
"error_rate": 2.91,
"top_models": [
{ "model": "gpt-4o", "request_count": 218 },
{ "model": "claude-sonnet-4", "request_count": 89 },
{ "model": "gpt-4o-mini", "request_count": 45 }
]
},
{
"key_id": "661f9511-f30c-52e5-b827-557766551111",
"key_name": "ci-bot",
"request_count": 54,
"prompt_tokens": 12800,
"completion_tokens": 4100,
"total_tokens": 16900,
"avg_latency_ms": 820,
"max_latency_ms": 3140,
"p50_latency_ms": 710,
"p95_latency_ms": 2400,
"error_count": 0,
"client_error_count": 0,
"server_error_count": 0,
"error_rate": 0,
"top_models": [
{ "model": "gpt-4o-mini", "request_count": 54 }
]
}
]
}
FieldTypeDescription
totalintegerTotal number of distinct keys in the result set (before limit is applied). Useful for pagination — if total > limit, not all keys are shown.
key_idstringUUID of the API key
key_namestringHuman-readable name of the API key
request_countintegerNumber of sampled log entries for this key (~1% of actual requests)
prompt_tokensintegerSum of prompt tokens across all sampled entries for this key
completion_tokensintegerSum of completion tokens across all sampled entries. 0 for embedding-only keys.
total_tokensintegerSum of prompt_tokens + completion_tokens for each sampled entry
avg_latency_msnumber | nullAverage end-to-end latency in milliseconds. null if no latency data was recorded.
max_latency_msnumber | nullMaximum end-to-end latency in milliseconds across all sampled requests for this key. Useful for spotting worst-case tail latency. null if no latency data was recorded.
p50_latency_msnumber | nullMedian (50th percentile) latency in milliseconds
p95_latency_msnumber | null95th percentile latency in milliseconds
error_countintegerNumber of sampled requests that returned HTTP 400 or above
client_error_countintegerNumber of sampled requests that returned HTTP 4xx
server_error_countintegerNumber of sampled requests that returned HTTP 5xx
error_ratenumberError rate as a percentage: (error_count / request_count) × 100, rounded to 2 decimal places. 0 when request_count is 0.
top_modelsarrayOrdered list of the models most-used by this key, sourced from request_logs_sampled. Each entry has model (model ID string) and request_count (sampled count). Sorted descending by request_count. Empty array when the key has no model-bearing log rows.
Terminal window
curl "https://api.bve.me/admin/key-stats" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl "https://api.bve.me/admin/key-stats?since=2026-05-25T00:00:00Z&limit=10" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl "https://api.bve.me/admin/key-stats?since=2026-05-01T00:00:00Z&until=2026-05-31T23:59:59Z" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl "https://api.bve.me/admin/key-stats?sort_by=total_tokens&limit=10" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl "https://api.bve.me/admin/key-stats?sort_by=p95_latency_ms" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl "https://api.bve.me/admin/key-stats?sort_by=error_count&since=2026-05-01T00:00:00Z" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl "https://api.bve.me/admin/key-stats?model=gpt-4o&limit=10" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl "https://api.bve.me/admin/key-stats?endpoint=/v1/responses" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"

Combined filter — keys using gpt-4o on the Responses endpoint

Section titled “Combined filter — keys using gpt-4o on the Responses endpoint”
Terminal window
curl "https://api.bve.me/admin/key-stats?model=gpt-4o&endpoint=/v1/responses&limit=5" \
-H "Authorization: Bearer admin_bve_YOUR_ADMIN_KEY"
Terminal window
curl -s "https://api.bve.me/admin/key-stats" \
-H "Authorization: Bearer $ADMIN_KEY" \
| jq '.keys[] | {key_name, request_count, total_tokens, error_rate}'
const res = await fetch("https://api.bve.me/admin/key-stats?limit=10", {
headers: { Authorization: `Bearer ${adminKey}` },
});
const { total, keys } = await res.json();
console.log(`Showing ${keys.length} of ${total} keys`);
for (const k of keys) {
console.log(`${k.key_name} (${k.key_id}): ${k.request_count} sampled requests, ${k.total_tokens} tokens`);
}
StatusCodeCause
400validation_errorsince or until is not a parseable ISO 8601 timestamp
400validation_errorsort_by is not one of the accepted column names
400validation_errorsort_dir is not asc or desc
401missing_api_keyNo Authorization header
401invalid_api_keyAdmin key does not match the configured ADMIN_API_KEY secret

Find which keys are consuming the most tokens this month:

Terminal window
curl -s "https://api.bve.me/admin/key-stats?sort_by=total_tokens&since=2026-05-01T00:00:00Z&limit=5" \
-H "Authorization: Bearer $ADMIN_KEY"

Find the top consumers of a specific model:

Terminal window
curl -s "https://api.bve.me/admin/key-stats?model=gpt-4o&sort_by=total_tokens&limit=5" \
-H "Authorization: Bearer $ADMIN_KEY" \
| jq '.keys[] | {key_name, request_count, total_tokens}'

Find which keys are hitting the Responses API:

Terminal window
curl -s "https://api.bve.me/admin/key-stats?endpoint=/v1/responses" \
-H "Authorization: Bearer $ADMIN_KEY" \
| jq '.keys[] | {key_name, request_count}'

Find keys with a high error rate (potential misconfiguration):

Terminal window
curl -s "https://api.bve.me/admin/key-stats" \
-H "Authorization: Bearer $ADMIN_KEY" \
| jq '[.keys[] | select(.error_rate > 10 and .request_count > 5)]'

Identify high-latency keys:

Terminal window
curl -s "https://api.bve.me/admin/key-stats?sort_by=p95_latency_ms" \
-H "Authorization: Bearer $ADMIN_KEY" \
| jq '[.keys[] | select(.p95_latency_ms != null and .p95_latency_ms > 8000)]'

See which models each top key is using:

Terminal window
curl -s "https://api.bve.me/admin/key-stats?sort_by=total_tokens&limit=5" \
-H "Authorization: Bearer $ADMIN_KEY" \
| jq '.keys[] | {key_name, total_tokens, top_models: [.top_models[] | "\(.model): \(.request_count)"]}'