openrouter-analytics-schema
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseOpenRouter Analytics Schema Discovery
OpenRouter分析架构探索
Discover what analytics data is available for querying. The meta endpoint returns live, always-current definitions of metrics, dimensions, filter operators, and granularities.
探索可查询的分析数据范围。元端点会返回指标、维度、过滤运算符和时间粒度的实时、最新定义。
Prerequisites
前提条件
- An OpenRouter management key. Management keys are separate from regular API keys — get one at https://openrouter.ai/settings/management-keys
- Pass it via or set the
--api-key <key>environment variableOPENROUTER_API_KEY
- 拥有OpenRouter 管理密钥。管理密钥与常规API密钥分开——可在https://openrouter.ai/settings/management-keys获取
- 通过传入密钥,或设置
--api-key <key>环境变量OPENROUTER_API_KEY
Discovery Endpoint
探索端点
GET https://openrouter.ai/api/v1/analytics/meta
Authorization: Bearer sk-or-v1-...Or via the skill scripts:
openrouter-analyticsbash
cd <openrouter-analytics-skill-path>/scripts && npx tsx discover-schema.tsGET https://openrouter.ai/api/v1/analytics/meta
Authorization: Bearer sk-or-v1-...或通过技能脚本调用:
openrouter-analyticsbash
cd <openrouter-analytics-skill-path>/scripts && npx tsx discover-schema.tsResponse Shape
响应结构
json
{
"data": {
"metrics": [
{ "name": "request_count", "display_label": "Request Count", "is_rate": false, "display_format": "number" }
],
"dimensions": [
{ "name": "model", "display_label": "Model" }
],
"operators": [
{ "name": "eq", "value_type": "scalar" }
],
"granularities": [
{ "name": "day", "display_label": "Day" }
]
}
}json
{
"data": {
"metrics": [
{ "name": "request_count", "display_label": "Request Count", "is_rate": false, "display_format": "number" }
],
"dimensions": [
{ "name": "model", "display_label": "Model" }
],
"operators": [
{ "name": "eq", "value_type": "scalar" }
],
"granularities": [
{ "name": "day", "display_label": "Day" }
]
}
}Understanding Metrics
指标说明
Each metric has:
| Field | Meaning |
|---|---|
| Identifier to use in query requests |
| Human-readable label |
| Whether this is a ratio/rate (averaged, not summed) |
| How the value should be formatted: |
每个指标包含以下字段:
| 字段 | 含义 |
|---|---|
| 查询请求中使用的标识符 |
| 易读的显示标签 |
| 是否为比率/速率指标(取平均值而非总和) |
| 值的格式化方式: |
Time Range Limits
时间范围限制
Most volume and cost metrics support time ranges up to 365 days with daily granularity. Latency/throughput metrics and some dimensions (, , , , , , ) are limited to 31-day time ranges. If a query times out, try narrowing the time range or removing latency/throughput metrics and per-generation dimensions.
providerorigincountryfinish_reasonexternal_usercontext_length_bucketgeneration_id大多数流量和成本指标支持最长365天的时间范围,粒度为天。延迟/吞吐量指标和部分维度(、、、、、、)的时间范围限制为31天。如果查询超时,尝试缩小时间范围,或移除延迟/吞吐量指标和单生成维度。
providerorigincountryfinish_reasonexternal_usercontext_length_bucketgeneration_idMetric Categories
指标分类
Volume metrics (how much):
- — number of API requests (up to 365 days)
request_count - ,
tokens_total,tokens_prompt— token counts (up to 365 days)tokens_completion - — tokens used for extended thinking (up to 365 days)
reasoning_tokens - — tokens served from cache (up to 365 days)
cached_tokens - — number of BYOK requests (up to 365 days)
byok_request_count - — count of requests that triggered guardrails (31-day limit)
guardrail_invoked_count - — count of responses served from cache (31-day limit)
response_cached_count
Cost metrics (how much money):
- — total cost in USD, including BYOK inference cost (up to 365 days). Computed as
total_usageso it reflects true spend for both credits and BYOK users.sum(usage) + sum(byok_usage_inference) - — BYOK (bring your own key) inference cost in USD (up to 365 days)
byok_usage - — all charges billed to OpenRouter credits in USD, including BYOK platform fees (up to 365 days)
credits_usage - — non-BYOK inference spend in USD; excludes requests made with user-provided keys (31-day limit)
openrouter_usage - — BYOK platform fees in USD; the platform fee portion of
byok_feescharged on BYOK requests (31-day limit).credits_usageincludes both non-BYOK inference charges and these BYOK platform fees.credits_usage - — provider-side (upstream) cost in USD (up to 365 days)
usage_upstream - — cache cost component in USD (up to 365 days)
usage_cache - — data logging cost adjustment in USD; typically negative when a data logging discount applies (up to 365 days)
usage_data - — web search cost in USD (up to 365 days)
usage_web - — provider-side web search cost in USD (up to 365 days)
usage_upstream_web - — file processing cost in USD (31-day limit)
usage_file - — provider-side file processing cost in USD (31-day limit)
usage_upstream_file - — web fetch cost in USD (31-day limit)
usage_web_fetch - — provider-side web fetch cost in USD (31-day limit)
usage_upstream_web_fetch
Performance metrics (how fast):
- ,
avg_latency,p50_latency,p90_latency— response latency in millisecondsp99_latency - ,
avg_throughput,p50_throughput,p90_throughput— tokens per secondp99_throughput
Efficiency metrics (how well):
- — ratio of cached tokens to prompt tokens (0–1)
cache_hit_rate - — ratio of requests that triggered guardrails
guardrail_invoked_rate - — ratio of responses served from cache
response_cached_rate
流量指标(数量维度):
- — API请求数量(最长365天)
request_count - ,
tokens_total,tokens_prompt— 令牌数量(最长365天)tokens_completion - — 用于扩展思考的令牌数量(最长365天)
reasoning_tokens - — 从缓存返回的令牌数量(最长365天)
cached_tokens - — BYOK请求数量(最长365天)
byok_request_count - — 触发防护机制的请求数量(31天限制)
guardrail_invoked_count - — 从缓存返回的响应数量(31天限制)
response_cached_count
成本指标(费用维度):
- — 总费用(美元),包含BYOK推理成本(最长365天)。计算方式为
total_usage,反映信用额度用户和BYOK用户的实际支出。sum(usage) + sum(byok_usage_inference) - — BYOK(自带密钥)推理成本(美元)(最长365天)
byok_usage - — 所有计入OpenRouter信用额度的费用(美元),包含BYOK平台服务费(最长365天)
credits_usage - — 非BYOK推理支出(美元);排除用户提供密钥的请求(31天限制)
openrouter_usage - — BYOK平台服务费(美元);
byok_fees中BYOK请求对应的平台服务费部分(31天限制)。credits_usage包含非BYOK推理费用和这些BYOK平台服务费。credits_usage - — 上游供应商成本(美元)(最长365天)
usage_upstream - — 缓存成本组件(美元)(最长365天)
usage_cache - — 数据日志成本调整(美元);通常在应用数据日志折扣时为负值(最长365天)
usage_data - — 网页搜索成本(美元)(最长365天)
usage_web - — 上游供应商网页搜索成本(美元)(最长365天)
usage_upstream_web - — 文件处理成本(美元)(31天限制)
usage_file - — 上游供应商文件处理成本(美元)(31天限制)
usage_upstream_file - — 网页抓取成本(美元)(31天限制)
usage_web_fetch - — 上游供应商网页抓取成本(美元)(31天限制)
usage_upstream_web_fetch
性能指标(速度维度):
- ,
avg_latency,p50_latency,p90_latency— 响应延迟(毫秒)p99_latency - ,
avg_throughput,p50_throughput,p90_throughput— 每秒处理令牌数p99_throughput
效率指标(效果维度):
- — 缓存令牌占提示令牌的比率(0–1)
cache_hit_rate - — 触发防护机制的请求比率
guardrail_invoked_rate - — 从缓存返回的响应比率
response_cached_rate
Understanding Dimensions
维度说明
Each dimension has:
| Field | Meaning |
|---|---|
| Identifier to use in query requests |
| Human-readable label |
Dimensions are what you break down by — "show me spend by model" means .
dimensions: ["model"]You can combine up to 2 dimensions in a single query (e.g., ).
["model", "provider"]每个维度包含以下字段:
| 字段 | 含义 |
|---|---|
| 查询请求中使用的标识符 |
| 易读的显示标签 |
维度用于拆分数据——“按模型展示支出”意味着。
dimensions: ["model"]单个查询最多可组合2个维度(例如)。
["model", "provider"]Label Resolution
标签解析
Some dimensions have their raw IDs automatically resolved to human-readable labels in query results. Data rows contain the resolved display names directly:
| Dimension | Resolved to |
|---|---|
| Key name/label |
| App title or origin URL |
| User name or email address |
| Workspace name |
All other dimensions (e.g., , , ) are returned as-is without resolution.
modelprovidercountryRows with an emptyvalue represent traffic not attributed to a specific org member (e.g., API keys created at the org level).user
部分维度的原始ID会在查询结果中自动解析为易读标签。数据行直接包含解析后的显示名称:
| 维度 | 解析结果 |
|---|---|
| 密钥名称/标签 |
| 应用标题或来源URL |
| 用户名或邮箱地址 |
| 工作区名称 |
其他维度(如、、)将按原始值返回,不进行解析。
modelprovidercountry值为空的行代表未归属到特定组织成员的流量(例如在组织级别创建的API密钥产生的流量)。user
Dimension Categories
维度分类
Available with all time ranges:
- — the OpenRouter model ID (permaslug)
model - — model variant (e.g., standard, extended)
variant - — which API key made the request
api_key_id - — the creator user ID (for org-level queries)
user - — workspace ID
workspace - — application ID
app
Limited to 31-day time ranges:
- — unique ID for each generation (use to drill down to individual requests, then inspect via the
generation_idskill)openrouter-generations - — upstream provider name
provider - — request origin/source
origin - — request country
country - — why the generation ended (stop, length, etc.)
finish_reason - — custom user ID passed by the caller
external_user - — bucketed context length (1K, 10K, 100K, etc.)
context_length_bucket
支持全时间范围的维度:
- — OpenRouter模型ID(永久别名)
model - — 模型变体(例如standard、extended)
variant - — 发起请求的API密钥
api_key_id - — 创建者用户ID(组织级查询)
user - — 工作区ID
workspace - — 应用ID
app
仅支持31天时间范围的维度:
- — 每个生成任务的唯一ID(用于钻取到单个请求,然后通过
generation_id技能查看详细信息)openrouter-generations - — 上游供应商名称
provider - — 请求来源/发起方
origin - — 请求发起国家
country - — 生成任务结束原因(stop、length等)
finish_reason - — 调用方传入的自定义用户ID
external_user - — 分桶后的上下文长度(1K、10K、100K等)
context_length_bucket
Classifier Dimensions
分类器维度
Beyond the standard dimensions above, you can group by classifier dimensions — dynamic labels produced by a user-created classifier (e.g., topic, sentiment, category).
- Use the request field to group by classifier-produced values
classifier_dimensions - Use the request field to filter on classifier values
classifier_filters - The classifier must belong to your account (validated server-side)
- Classifier dimensions/filters limit the query time range to 31 days
- See the skill for the full request shape
openrouter-analytics-query
除上述标准维度外,你还可以按分类器维度分组——由用户创建的分类器生成的动态标签(例如主题、情感、类别)。
- 使用请求字段按分类器生成的值分组
classifier_dimensions - 使用请求字段按分类器值过滤
classifier_filters - 分类器必须属于你的账户(服务器端验证)
- 分类器维度/过滤器会将查询时间范围限制为31天
- 完整请求结构请参考技能
openrouter-analytics-query
Mapping Questions to Classifier Queries
问题到分类器查询的映射
| Question pattern | Request fields | Notes |
|---|---|---|
| "Spend by topic" | | Single dimension → column aliased to |
| "Only billing-related requests" | | Filters support |
| "Sentiment breakdown including unclassified" | | Includes rows without classification |
| 问题模式 | 请求字段 | 说明 |
|---|---|---|
| “按主题展示支出” | | 单个维度→列别名设为 |
| “仅展示账单相关请求” | | 过滤器仅支持 |
| “包含未分类内容的情感分布” | | 包含未被分类的行 |
Understanding Operators
运算符说明
Filter operators for the array in query requests:
filters| Operator | Value Type | Meaning |
|---|---|---|
| scalar | Equals |
| scalar | Not equals |
| scalar | Greater than |
| scalar | Greater than or equal |
| scalar | Less than |
| scalar | Less than or equal |
| array | In list |
| array | Not in list |
查询请求中数组支持的过滤运算符:
filters| 运算符 | 值类型 | 含义 |
|---|---|---|
| 标量 | 等于 |
| 标量 | 不等于 |
| 标量 | 大于 |
| 标量 | 大于等于 |
| 标量 | 小于 |
| 标量 | 小于等于 |
| 数组 | 在列表中 |
| 数组 | 不在列表中 |
Understanding Granularities
时间粒度说明
Time bucketing for time-series queries:
| Granularity | Use when |
|---|---|
| Last few hours, real-time monitoring |
| Last 1–3 days |
| Last week to 3 months |
| Last 3–12 months |
| Year-scale trends |
When no granularity is set, the query returns aggregate totals without time bucketing.
时间序列查询的时间分桶方式:
| 粒度 | 使用场景 |
|---|---|
| 最近几小时,实时监控 |
| 最近1–3天 |
| 最近一周到3个月 |
| 最近3–12个月 |
| 年度趋势分析 |
未设置粒度时,查询将返回无时间分桶的聚合总计。
Mapping Questions to Queries
问题到查询的映射
Use this guide to translate natural-language questions into the right metric/dimension/filter combination:
| Question pattern | Metrics | Dimensions | Notes |
|---|---|---|---|
| "How much did I spend?" | | — | Add granularity for trends |
| "Which models cost the most?" | | | Order by |
| "How many requests?" | | — | Add |
| "How many tokens?" | | — | Use |
| "Which provider is fastest?" | | | 31-day limit |
| "What's my cache hit rate?" | | | Rate metric — shows per-model caching |
| "Which API key uses the most?" | | | — |
| "Usage over time" | | — | Set |
| "Latency trends" | | — | Set |
| "Usage by country" | | | 31-day limit |
| "How can I save money?" | | | See cost optimization in |
| "Show me individual requests" | | | 31-day limit. Use returned IDs with |
| "How much BYOK spend?" | | | Up to 365 days |
| "BYOK vs credits split?" | | — | Both up to 365 days |
| "BYOK platform fees?" | | | 31-day limit |
| "Non-BYOK inference spend?" | | | 31-day limit |
| "How many guardrail triggers?" | | | 31-day limit |
| "How many cached responses?" | | | 31-day limit |
| "Where does my spend go?" | | — | Full cost breakdown (up to 365 days) |
| "Web search costs?" | | | Up to 365 days |
| "File processing costs?" | | | 31-day limit |
| "Web fetch costs?" | | | 31-day limit |
使用本指南将自然语言问题转换为正确的指标/维度/过滤器组合:
| 问题模式 | 指标 | 维度 | 说明 |
|---|---|---|---|
| “我花费了多少钱?” | | — | 添加粒度查看趋势 |
| “哪些模型成本最高?” | | | 按 |
| “有多少请求?” | | — | 添加 |
| “有多少令牌?” | | — | 使用 |
| “哪个供应商速度最快?” | | | 31天限制 |
| “我的缓存命中率是多少?” | | | 速率指标——展示各模型的缓存情况 |
| “哪个API密钥使用量最大?” | | | — |
| “随时间变化的使用情况” | | — | 设置 |
| “延迟趋势” | | — | 设置 |
| “按国家划分的使用情况” | | | 31天限制 |
| “如何节省成本?” | | | 参考 |
| “展示单个请求详情” | | | 31天限制。使用返回的ID通过 |
| “BYOK支出是多少?” | | | 最长365天 |
| “BYOK与信用额度支出拆分?” | | — | 均支持最长365天 |
| “BYOK平台服务费是多少?” | | | 31天限制 |
| “非BYOK推理支出是多少?” | | | 31天限制 |
| “防护机制触发了多少次?” | | | 31天限制 |
| “有多少缓存响应?” | | | 31天限制 |
| “我的支出流向哪里?” | | — | 完整成本拆分(最长365天) |
| “网页搜索成本是多少?” | | | 最长365天 |
| “文件处理成本是多少?” | | | 31天限制 |
| “网页抓取成本是多少?” | | | 31天限制 |
Filter Value Reference
过滤值参考
Several dimensions are label-resolved in query results — the response shows human-readable names, but filters must use the underlying ID. Here's where to find each:
| Dimension | Filter value | Where to find it |
|---|---|---|
| Numeric ID or 64-char SHA-256 hash | Numeric ID: generation metadata ( |
| Clerk user ID (e.g. | User settings or org member list — not the display name/email shown in results. |
| Workspace UUID | Workspace settings page or |
| Numeric app ID | Generation metadata ( |
| Permaslug (e.g. | Model page URL or |
Other dimensions (, , , , , etc.) are not enriched — filter values match what's returned in results.
providerorigincountryfinish_reasonexternal_user部分维度在查询结果中会被标签解析——响应显示易读名称,但过滤时必须使用底层ID。以下是各维度过滤值的获取方式:
| 维度 | 过滤值 | 获取位置 |
|---|---|---|
| 数字ID 或 64位SHA-256哈希 | 数字ID:生成任务元数据( |
| Clerk用户ID(例如 | 用户设置或组织成员列表——不是结果中显示的用户名/邮箱。 |
| 工作区UUID | 工作区设置页面或 |
| 数字应用ID | 生成任务元数据( |
| 永久别名(例如 | 模型页面URL或 |
其他维度(、、、、等)不会被增强——过滤值与结果中返回的值一致。
providerorigincountryfinish_reasonexternal_userConstraints
约束条件
- Maximum 2 dimensions per query
- Maximum 20 filters per query
- Maximum 10 classifier dimensions per query
- Maximum 10 classifier filters per query
- Maximum 10,000 rows returned per query (default 1,000)
- (1–10,000): controls max rows per dimension combination. Auto-computed on time-series queries with dimensions to guarantee full time-window coverage. Set explicitly to cap per-group rows (e.g., top N per model per day).
group_limit - Most volume/cost metrics: up to 365 days with daily granularity
- Latency/throughput metrics and per-generation dimensions: up to 31 days
- Classifier dimensions/filters: always limited to 31 days
- Minute granularity: only available when the time window is ≤ 3 hours
- Rate-limited to 64 requests per minute
- 单个查询最多支持2个维度
- 单个查询最多支持20个过滤器
- 单个查询最多支持10个分类器维度
- 单个查询最多支持10个分类器过滤器
- 单个查询最多返回10,000行结果(默认1,000行)
- (1–10,000):控制每个维度组合的最大行数。在带维度的时间序列查询中会自动计算,以保证完整时间窗口覆盖。可显式设置以限制每组行数(例如每天排名前N的模型)。
group_limit - 大多数流量/成本指标:最长365天时间范围,粒度为天
- 延迟/吞吐量指标和单生成维度:最长31天时间范围
- 分类器维度/过滤器:始终限制为31天
- 分钟粒度:仅在时间窗口≤3小时时可用
- 速率限制:每分钟最多64次请求 ",