[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openrouter-openrouter-analytics":3,"mdc-94jbhj-key":28,"related-org-openrouter-openrouter-analytics":1998,"related-repo-openrouter-openrouter-analytics":2136},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":18,"repoUrl":19,"updatedAt":20,"license":21,"forks":22,"topics":23,"repo":24,"sourceUrl":26,"mdContent":27},"openrouter-analytics","analyze OpenRouter usage and spend","Answer natural-language questions about a user's OpenRouter usage data — spend, request volume, model breakdown, latency, token usage, and cost optimization. Use when the user asks about their API usage, billing, costs, top models, traffic patterns, or wants to optimize their OpenRouter spend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"openrouter","OpenRouter","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenrouter.png","OpenRouterTeam",[13,15],{"name":9,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Analytics","analytics",187,"https:\u002F\u002Fgithub.com\u002FOpenRouterTeam\u002Fskills","2026-07-30T05:30:15.098344",null,26,[],{"repoUrl":19,"stars":18,"forks":22,"topics":25,"description":21},[],"https:\u002F\u002Fgithub.com\u002FOpenRouterTeam\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fopenrouter-analytics","---\nname: openrouter-analytics\ndescription: Answer natural-language questions about a user's OpenRouter usage data — spend, request volume, model breakdown, latency, token usage, and cost optimization. Use when the user asks about their API usage, billing, costs, top models, traffic patterns, or wants to optimize their OpenRouter spend.\nversion: 0.1.0\n---\n\n# OpenRouter Analytics\n\nQuery your OpenRouter usage data programmatically. Answer questions like \"What was my spend this month?\", \"Which models cost the most?\", and \"How can I reduce my bill?\" using the Analytics API.\n\n## Prerequisites\n\n- An OpenRouter **management key** (provisioning key). Regular API keys will get a 403.\n- Get a management key at https:\u002F\u002Fopenrouter.ai\u002Fsettings\u002Fmanagement-keys (separate from the regular API keys page)\n- Pass it via `--api-key \u003Ckey>` or set the `OPENROUTER_API_KEY` environment variable\n\n## First-Time Setup\n\n```bash\ncd \u003Cskill-path>\u002Fscripts && npm install\n```\n\n## Decision Tree\n\n| User wants to… | Do this |\n|---|---|\n| Know what data is available | Run `discover-schema.ts` to see metrics, dimensions, and filters |\n| See spend \u002F usage \u002F volume | Run `query-analytics.ts` with appropriate metrics |\n| Break down by model, provider, API key | Add `--dimensions` to the query |\n| See trends over time | Add `--granularity day` (or `hour`, `week`, `month`) |\n| Reduce costs | Run `suggest-queries.ts`, find the cost optimization template, execute it |\n| Inspect individual generations | Add `--dimensions generation_id`, then use the `openrouter-generations` skill for details |\n| Break down by classifier labels | Use `classifier_dimensions` in the request body (see `openrouter-analytics-query` skill) |\n| Filter by classifier labels | Use `classifier_filters` in the request body (see `openrouter-analytics-query` skill) |\n| Answer a specific question | Map the question → metrics + dimensions, then query |\n\n## Workflow\n\nThe recommended workflow for answering a user's analytics question:\n\n1. **Discover** — Call `discover-schema.ts` to see available metrics and dimensions\n2. **Map** — Translate the user's question into metrics, dimensions, filters, and time range\n3. **Query** — Execute via `query-analytics.ts`\n4. **Interpret** — Analyze the returned data and explain the results\n\nFor common questions, `suggest-queries.ts` provides ready-made query templates.\n\n## Discover Available Data\n\n```bash\ncd \u003Cskill-path>\u002Fscripts && npx tsx discover-schema.ts\n```\n\nReturns the full schema: metrics, dimensions, filter operators, and granularities.\n\nFilter to a specific section:\n\n```bash\nnpx tsx discover-schema.ts --section metrics\nnpx tsx discover-schema.ts --section dimensions\nnpx tsx discover-schema.ts --section operators\nnpx tsx discover-schema.ts --section granularities\n```\n\nSee the `openrouter-analytics-schema` skill for detailed guidance on interpreting the schema response and mapping user questions to the right metrics and dimensions.\n\n## Query Analytics Data\n\n```bash\ncd \u003Cskill-path>\u002Fscripts && npx tsx query-analytics.ts --metrics request_count,total_usage\n```\n\nSee the `openrouter-analytics-query` skill for the full parameter reference and query construction guide.\n\n### Quick Examples\n\nSpend over the last 7 days, broken down by day:\n\n```bash\nnpx tsx query-analytics.ts --metrics total_usage --granularity day\n```\n\nTop 10 models by cost:\n\n```bash\nnpx tsx query-analytics.ts --metrics total_usage,request_count --dimensions model --order-by total_usage --limit 10\n```\n\nUsage by API key:\n\n```bash\nnpx tsx query-analytics.ts --metrics request_count,tokens_total --dimensions api_key_id --order-by request_count --limit 10\n```\n\nLatency by provider (limited to 31-day range):\n\n```bash\nnpx tsx query-analytics.ts --metrics avg_latency,p90_latency --dimensions provider --order-by p90_latency\n```\n\nUsage cost breakdown (credits, BYOK, upstream, cache, data logging, web search):\n\n```bash\nnpx tsx query-analytics.ts --metrics credits_usage,byok_usage,byok_fees,usage_upstream,usage_cache,usage_data,usage_web --granularity day\n```\n\n## Common Query Templates\n\n```bash\ncd \u003Cskill-path>\u002Fscripts && npx tsx suggest-queries.ts\n```\n\nReturns a list of pre-built query templates for common questions, each with:\n- The natural-language question it answers\n- The query parameters (metrics, dimensions, filters, time range)\n- The CLI flags to pass to `query-analytics.ts`\n- Interpretation guidance (where applicable)\n\n## Interpreting Results\n\nThe query endpoint returns an array of data rows. Each row is a flat object with keys matching the requested metrics and dimensions.\n\nWhen interpreting results for the user:\n- **Spend metrics** (`total_usage`, `credits_usage`, `openrouter_usage`, `byok_usage`, `byok_fees`, `usage_upstream`, `usage_cache`, `usage_web`, `usage_upstream_web`, `usage_file`, `usage_upstream_file`, `usage_web_fetch`, `usage_upstream_web_fetch`) are in USD. `total_usage` includes BYOK inference cost. `usage_data` is typically negative (a data logging discount)\n- **Token counts** (`tokens_total`, `tokens_prompt`, `tokens_completion`) are in native model tokens\n- **Latency** (`avg_latency`, `p50_latency`, etc.) is in milliseconds\n- **Rates** (`cache_hit_rate`) are 0–1 ratios\n- **Throughput** (`avg_throughput`) is tokens per second\n- When `granularity` is set, rows include a `date__\u003Cgranularity>` field for the time bucket (e.g., `date__day`, `date__hour`, `date__month`)\n- **Label resolution**: dimensions `api_key_id`, `app`, `user`, and `workspace` have their raw IDs replaced with human-readable names (key name, app title, user name, workspace name) directly in the data rows; `generation_id` and `session_id` return raw values\n- **Truncation**: when consuming output programmatically, check `metadata.truncated`. If `true`, the result was capped at `--limit` and is a *partial* dataset — raise `--limit` or paginate before reporting totals or rankings\n\n### Cost Optimization Guidance\n\nWhen the user asks \"How can I spend less?\" or similar:\n\n1. Query top models by spend: `--metrics total_usage,tokens_total,cache_hit_rate,request_count --dimensions model --order-by total_usage --limit 10`\n2. Query cost breakdown: `--metrics credits_usage,byok_usage,byok_fees,usage_upstream,usage_cache,usage_data,usage_web,usage_file --granularity day` to see where spend goes\n3. Look for:\n   - Models with high spend but low `cache_hit_rate` — prompt caching can help\n   - Expensive models that could be replaced by cheaper alternatives for specific tasks\n   - High token counts with low request counts — may indicate oversized prompts\n   - Models where `reasoning_tokens` are a large fraction of total — consider disabling extended thinking if not needed\n   - High `usage_web` or `usage_file` relative to `usage_upstream` — web search and file processing add-on costs may be significant\n\n## Drilling Down to Individual Generations\n\nTo inspect specific generations or sessions from your analytics results, add `generation_id` or `session_id` as a dimension. Both are generations-only dimensions (31-day limit). `generation_id` returns the unique ID for each generation in the result set. `session_id` groups and filters sessionless requests as the literal `none`: the ClickHouse column defaults to an empty string, and the query builder coalesces it to `none`. Use `neq 'none'` to exclude sessionless requests; filtering on `''` matches nothing.\n\n```bash\nnpx tsx query-analytics.ts --metrics total_usage,tokens_total --dimensions generation_id --order-by total_usage --limit 10\n```\n\nOnce you have a generation ID (e.g., `gen-aBcDeFgHiJkLmNoPqRsT`), use the `openrouter-generations` skill to get detailed information:\n\n- **`get-generation`** — Fetch full request metadata: cost breakdown, token counts, latency, provider routing chain, finish reason, and more\n- **`get-generation-content`** — Fetch the stored prompt and completion text (unless Zero Data Retention was enabled)\n\n```bash\ncd \u003Copenrouter-generations-skill-path>\u002Fscripts\nnpx tsx get-generation.ts gen-aBcDeFgHiJkLmNoPqRsT\nnpx tsx get-generation-content.ts gen-aBcDeFgHiJkLmNoPqRsT\n```\n\nThis workflow is useful for identifying your most expensive or slowest requests via analytics, then inspecting the actual prompt\u002Fcompletion to understand why.\n\n## API Reference\n\nBoth endpoints require a management key via `Authorization: Bearer sk-or-v1-...`.\n\n| Endpoint | Method | Description |\n|---|---|---|\n| `\u002Fapi\u002Fv1\u002Fanalytics\u002Fmeta` | GET | Returns available metrics, dimensions, operators, granularities |\n| `\u002Fapi\u002Fv1\u002Fanalytics\u002Fquery` | POST | Executes an analytics query and returns structured data |\n\nFull documentation: https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fapi\u002Fapi-reference\u002Fanalytics\n",{"data":29,"body":31},{"name":4,"description":6,"version":30},"0.1.0",{"type":32,"children":33},"root",[34,42,48,55,110,116,183,189,437,443,448,504,516,522,575,580,585,694,707,713,774,785,792,797,838,843,904,909,966,971,1020,1025,1064,1070,1121,1126,1154,1160,1165,1170,1526,1532,1537,1633,1639,1702,1758,1778,1809,1886,1891,1897,1910,1981,1992],{"type":35,"tag":36,"props":37,"children":38},"element","h1",{"id":4},[39],{"type":40,"value":41},"text","OpenRouter Analytics",{"type":35,"tag":43,"props":44,"children":45},"p",{},[46],{"type":40,"value":47},"Query your OpenRouter usage data programmatically. Answer questions like \"What was my spend this month?\", \"Which models cost the most?\", and \"How can I reduce my bill?\" using the Analytics API.",{"type":35,"tag":49,"props":50,"children":52},"h2",{"id":51},"prerequisites",[53],{"type":40,"value":54},"Prerequisites",{"type":35,"tag":56,"props":57,"children":58},"ul",{},[59,73,88],{"type":35,"tag":60,"props":61,"children":62},"li",{},[63,65,71],{"type":40,"value":64},"An OpenRouter ",{"type":35,"tag":66,"props":67,"children":68},"strong",{},[69],{"type":40,"value":70},"management key",{"type":40,"value":72}," (provisioning key). Regular API keys will get a 403.",{"type":35,"tag":60,"props":74,"children":75},{},[76,78,86],{"type":40,"value":77},"Get a management key at ",{"type":35,"tag":79,"props":80,"children":84},"a",{"href":81,"rel":82},"https:\u002F\u002Fopenrouter.ai\u002Fsettings\u002Fmanagement-keys",[83],"nofollow",[85],{"type":40,"value":81},{"type":40,"value":87}," (separate from the regular API keys page)",{"type":35,"tag":60,"props":89,"children":90},{},[91,93,100,102,108],{"type":40,"value":92},"Pass it via ",{"type":35,"tag":94,"props":95,"children":97},"code",{"className":96},[],[98],{"type":40,"value":99},"--api-key \u003Ckey>",{"type":40,"value":101}," or set the ",{"type":35,"tag":94,"props":103,"children":105},{"className":104},[],[106],{"type":40,"value":107},"OPENROUTER_API_KEY",{"type":40,"value":109}," environment variable",{"type":35,"tag":49,"props":111,"children":113},{"id":112},"first-time-setup",[114],{"type":40,"value":115},"First-Time Setup",{"type":35,"tag":117,"props":118,"children":123},"pre",{"className":119,"code":120,"language":121,"meta":122,"style":122},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd \u003Cskill-path>\u002Fscripts && npm install\n","bash","",[124],{"type":35,"tag":94,"props":125,"children":126},{"__ignoreMap":122},[127],{"type":35,"tag":128,"props":129,"children":132},"span",{"class":130,"line":131},"line",1,[133,139,145,151,157,162,167,172,178],{"type":35,"tag":128,"props":134,"children":136},{"style":135},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[137],{"type":40,"value":138},"cd",{"type":35,"tag":128,"props":140,"children":142},{"style":141},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[143],{"type":40,"value":144}," \u003C",{"type":35,"tag":128,"props":146,"children":148},{"style":147},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[149],{"type":40,"value":150},"skill-pat",{"type":35,"tag":128,"props":152,"children":154},{"style":153},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[155],{"type":40,"value":156},"h",{"type":35,"tag":128,"props":158,"children":159},{"style":141},[160],{"type":40,"value":161},">",{"type":35,"tag":128,"props":163,"children":164},{"style":147},[165],{"type":40,"value":166},"\u002Fscripts",{"type":35,"tag":128,"props":168,"children":169},{"style":141},[170],{"type":40,"value":171}," &&",{"type":35,"tag":128,"props":173,"children":175},{"style":174},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[176],{"type":40,"value":177}," npm",{"type":35,"tag":128,"props":179,"children":180},{"style":147},[181],{"type":40,"value":182}," install\n",{"type":35,"tag":49,"props":184,"children":186},{"id":185},"decision-tree",[187],{"type":40,"value":188},"Decision Tree",{"type":35,"tag":190,"props":191,"children":192},"table",{},[193,212],{"type":35,"tag":194,"props":195,"children":196},"thead",{},[197],{"type":35,"tag":198,"props":199,"children":200},"tr",{},[201,207],{"type":35,"tag":202,"props":203,"children":204},"th",{},[205],{"type":40,"value":206},"User wants to…",{"type":35,"tag":202,"props":208,"children":209},{},[210],{"type":40,"value":211},"Do this",{"type":35,"tag":213,"props":214,"children":215},"tbody",{},[216,238,258,279,322,342,370,399,424],{"type":35,"tag":198,"props":217,"children":218},{},[219,225],{"type":35,"tag":220,"props":221,"children":222},"td",{},[223],{"type":40,"value":224},"Know what data is available",{"type":35,"tag":220,"props":226,"children":227},{},[228,230,236],{"type":40,"value":229},"Run ",{"type":35,"tag":94,"props":231,"children":233},{"className":232},[],[234],{"type":40,"value":235},"discover-schema.ts",{"type":40,"value":237}," to see metrics, dimensions, and filters",{"type":35,"tag":198,"props":239,"children":240},{},[241,246],{"type":35,"tag":220,"props":242,"children":243},{},[244],{"type":40,"value":245},"See spend \u002F usage \u002F volume",{"type":35,"tag":220,"props":247,"children":248},{},[249,250,256],{"type":40,"value":229},{"type":35,"tag":94,"props":251,"children":253},{"className":252},[],[254],{"type":40,"value":255},"query-analytics.ts",{"type":40,"value":257}," with appropriate metrics",{"type":35,"tag":198,"props":259,"children":260},{},[261,266],{"type":35,"tag":220,"props":262,"children":263},{},[264],{"type":40,"value":265},"Break down by model, provider, API key",{"type":35,"tag":220,"props":267,"children":268},{},[269,271,277],{"type":40,"value":270},"Add ",{"type":35,"tag":94,"props":272,"children":274},{"className":273},[],[275],{"type":40,"value":276},"--dimensions",{"type":40,"value":278}," to the query",{"type":35,"tag":198,"props":280,"children":281},{},[282,287],{"type":35,"tag":220,"props":283,"children":284},{},[285],{"type":40,"value":286},"See trends over time",{"type":35,"tag":220,"props":288,"children":289},{},[290,291,297,299,305,307,313,314,320],{"type":40,"value":270},{"type":35,"tag":94,"props":292,"children":294},{"className":293},[],[295],{"type":40,"value":296},"--granularity day",{"type":40,"value":298}," (or ",{"type":35,"tag":94,"props":300,"children":302},{"className":301},[],[303],{"type":40,"value":304},"hour",{"type":40,"value":306},", ",{"type":35,"tag":94,"props":308,"children":310},{"className":309},[],[311],{"type":40,"value":312},"week",{"type":40,"value":306},{"type":35,"tag":94,"props":315,"children":317},{"className":316},[],[318],{"type":40,"value":319},"month",{"type":40,"value":321},")",{"type":35,"tag":198,"props":323,"children":324},{},[325,330],{"type":35,"tag":220,"props":326,"children":327},{},[328],{"type":40,"value":329},"Reduce costs",{"type":35,"tag":220,"props":331,"children":332},{},[333,334,340],{"type":40,"value":229},{"type":35,"tag":94,"props":335,"children":337},{"className":336},[],[338],{"type":40,"value":339},"suggest-queries.ts",{"type":40,"value":341},", find the cost optimization template, execute it",{"type":35,"tag":198,"props":343,"children":344},{},[345,350],{"type":35,"tag":220,"props":346,"children":347},{},[348],{"type":40,"value":349},"Inspect individual generations",{"type":35,"tag":220,"props":351,"children":352},{},[353,354,360,362,368],{"type":40,"value":270},{"type":35,"tag":94,"props":355,"children":357},{"className":356},[],[358],{"type":40,"value":359},"--dimensions generation_id",{"type":40,"value":361},", then use the ",{"type":35,"tag":94,"props":363,"children":365},{"className":364},[],[366],{"type":40,"value":367},"openrouter-generations",{"type":40,"value":369}," skill for details",{"type":35,"tag":198,"props":371,"children":372},{},[373,378],{"type":35,"tag":220,"props":374,"children":375},{},[376],{"type":40,"value":377},"Break down by classifier labels",{"type":35,"tag":220,"props":379,"children":380},{},[381,383,389,391,397],{"type":40,"value":382},"Use ",{"type":35,"tag":94,"props":384,"children":386},{"className":385},[],[387],{"type":40,"value":388},"classifier_dimensions",{"type":40,"value":390}," in the request body (see ",{"type":35,"tag":94,"props":392,"children":394},{"className":393},[],[395],{"type":40,"value":396},"openrouter-analytics-query",{"type":40,"value":398}," skill)",{"type":35,"tag":198,"props":400,"children":401},{},[402,407],{"type":35,"tag":220,"props":403,"children":404},{},[405],{"type":40,"value":406},"Filter by classifier labels",{"type":35,"tag":220,"props":408,"children":409},{},[410,411,417,418,423],{"type":40,"value":382},{"type":35,"tag":94,"props":412,"children":414},{"className":413},[],[415],{"type":40,"value":416},"classifier_filters",{"type":40,"value":390},{"type":35,"tag":94,"props":419,"children":421},{"className":420},[],[422],{"type":40,"value":396},{"type":40,"value":398},{"type":35,"tag":198,"props":425,"children":426},{},[427,432],{"type":35,"tag":220,"props":428,"children":429},{},[430],{"type":40,"value":431},"Answer a specific question",{"type":35,"tag":220,"props":433,"children":434},{},[435],{"type":40,"value":436},"Map the question → metrics + dimensions, then query",{"type":35,"tag":49,"props":438,"children":440},{"id":439},"workflow",[441],{"type":40,"value":442},"Workflow",{"type":35,"tag":43,"props":444,"children":445},{},[446],{"type":40,"value":447},"The recommended workflow for answering a user's analytics question:",{"type":35,"tag":449,"props":450,"children":451},"ol",{},[452,469,479,494],{"type":35,"tag":60,"props":453,"children":454},{},[455,460,462,467],{"type":35,"tag":66,"props":456,"children":457},{},[458],{"type":40,"value":459},"Discover",{"type":40,"value":461}," — Call ",{"type":35,"tag":94,"props":463,"children":465},{"className":464},[],[466],{"type":40,"value":235},{"type":40,"value":468}," to see available metrics and dimensions",{"type":35,"tag":60,"props":470,"children":471},{},[472,477],{"type":35,"tag":66,"props":473,"children":474},{},[475],{"type":40,"value":476},"Map",{"type":40,"value":478}," — Translate the user's question into metrics, dimensions, filters, and time range",{"type":35,"tag":60,"props":480,"children":481},{},[482,487,489],{"type":35,"tag":66,"props":483,"children":484},{},[485],{"type":40,"value":486},"Query",{"type":40,"value":488}," — Execute via ",{"type":35,"tag":94,"props":490,"children":492},{"className":491},[],[493],{"type":40,"value":255},{"type":35,"tag":60,"props":495,"children":496},{},[497,502],{"type":35,"tag":66,"props":498,"children":499},{},[500],{"type":40,"value":501},"Interpret",{"type":40,"value":503}," — Analyze the returned data and explain the results",{"type":35,"tag":43,"props":505,"children":506},{},[507,509,514],{"type":40,"value":508},"For common questions, ",{"type":35,"tag":94,"props":510,"children":512},{"className":511},[],[513],{"type":40,"value":339},{"type":40,"value":515}," provides ready-made query templates.",{"type":35,"tag":49,"props":517,"children":519},{"id":518},"discover-available-data",[520],{"type":40,"value":521},"Discover Available Data",{"type":35,"tag":117,"props":523,"children":525},{"className":119,"code":524,"language":121,"meta":122,"style":122},"cd \u003Cskill-path>\u002Fscripts && npx tsx discover-schema.ts\n",[526],{"type":35,"tag":94,"props":527,"children":528},{"__ignoreMap":122},[529],{"type":35,"tag":128,"props":530,"children":531},{"class":130,"line":131},[532,536,540,544,548,552,556,560,565,570],{"type":35,"tag":128,"props":533,"children":534},{"style":135},[535],{"type":40,"value":138},{"type":35,"tag":128,"props":537,"children":538},{"style":141},[539],{"type":40,"value":144},{"type":35,"tag":128,"props":541,"children":542},{"style":147},[543],{"type":40,"value":150},{"type":35,"tag":128,"props":545,"children":546},{"style":153},[547],{"type":40,"value":156},{"type":35,"tag":128,"props":549,"children":550},{"style":141},[551],{"type":40,"value":161},{"type":35,"tag":128,"props":553,"children":554},{"style":147},[555],{"type":40,"value":166},{"type":35,"tag":128,"props":557,"children":558},{"style":141},[559],{"type":40,"value":171},{"type":35,"tag":128,"props":561,"children":562},{"style":174},[563],{"type":40,"value":564}," npx",{"type":35,"tag":128,"props":566,"children":567},{"style":147},[568],{"type":40,"value":569}," tsx",{"type":35,"tag":128,"props":571,"children":572},{"style":147},[573],{"type":40,"value":574}," discover-schema.ts\n",{"type":35,"tag":43,"props":576,"children":577},{},[578],{"type":40,"value":579},"Returns the full schema: metrics, dimensions, filter operators, and granularities.",{"type":35,"tag":43,"props":581,"children":582},{},[583],{"type":40,"value":584},"Filter to a specific section:",{"type":35,"tag":117,"props":586,"children":588},{"className":119,"code":587,"language":121,"meta":122,"style":122},"npx tsx discover-schema.ts --section metrics\nnpx tsx discover-schema.ts --section dimensions\nnpx tsx discover-schema.ts --section operators\nnpx tsx discover-schema.ts --section granularities\n",[589],{"type":35,"tag":94,"props":590,"children":591},{"__ignoreMap":122},[592,619,644,669],{"type":35,"tag":128,"props":593,"children":594},{"class":130,"line":131},[595,600,604,609,614],{"type":35,"tag":128,"props":596,"children":597},{"style":174},[598],{"type":40,"value":599},"npx",{"type":35,"tag":128,"props":601,"children":602},{"style":147},[603],{"type":40,"value":569},{"type":35,"tag":128,"props":605,"children":606},{"style":147},[607],{"type":40,"value":608}," discover-schema.ts",{"type":35,"tag":128,"props":610,"children":611},{"style":147},[612],{"type":40,"value":613}," --section",{"type":35,"tag":128,"props":615,"children":616},{"style":147},[617],{"type":40,"value":618}," metrics\n",{"type":35,"tag":128,"props":620,"children":622},{"class":130,"line":621},2,[623,627,631,635,639],{"type":35,"tag":128,"props":624,"children":625},{"style":174},[626],{"type":40,"value":599},{"type":35,"tag":128,"props":628,"children":629},{"style":147},[630],{"type":40,"value":569},{"type":35,"tag":128,"props":632,"children":633},{"style":147},[634],{"type":40,"value":608},{"type":35,"tag":128,"props":636,"children":637},{"style":147},[638],{"type":40,"value":613},{"type":35,"tag":128,"props":640,"children":641},{"style":147},[642],{"type":40,"value":643}," dimensions\n",{"type":35,"tag":128,"props":645,"children":647},{"class":130,"line":646},3,[648,652,656,660,664],{"type":35,"tag":128,"props":649,"children":650},{"style":174},[651],{"type":40,"value":599},{"type":35,"tag":128,"props":653,"children":654},{"style":147},[655],{"type":40,"value":569},{"type":35,"tag":128,"props":657,"children":658},{"style":147},[659],{"type":40,"value":608},{"type":35,"tag":128,"props":661,"children":662},{"style":147},[663],{"type":40,"value":613},{"type":35,"tag":128,"props":665,"children":666},{"style":147},[667],{"type":40,"value":668}," operators\n",{"type":35,"tag":128,"props":670,"children":672},{"class":130,"line":671},4,[673,677,681,685,689],{"type":35,"tag":128,"props":674,"children":675},{"style":174},[676],{"type":40,"value":599},{"type":35,"tag":128,"props":678,"children":679},{"style":147},[680],{"type":40,"value":569},{"type":35,"tag":128,"props":682,"children":683},{"style":147},[684],{"type":40,"value":608},{"type":35,"tag":128,"props":686,"children":687},{"style":147},[688],{"type":40,"value":613},{"type":35,"tag":128,"props":690,"children":691},{"style":147},[692],{"type":40,"value":693}," granularities\n",{"type":35,"tag":43,"props":695,"children":696},{},[697,699,705],{"type":40,"value":698},"See the ",{"type":35,"tag":94,"props":700,"children":702},{"className":701},[],[703],{"type":40,"value":704},"openrouter-analytics-schema",{"type":40,"value":706}," skill for detailed guidance on interpreting the schema response and mapping user questions to the right metrics and dimensions.",{"type":35,"tag":49,"props":708,"children":710},{"id":709},"query-analytics-data",[711],{"type":40,"value":712},"Query Analytics Data",{"type":35,"tag":117,"props":714,"children":716},{"className":119,"code":715,"language":121,"meta":122,"style":122},"cd \u003Cskill-path>\u002Fscripts && npx tsx query-analytics.ts --metrics request_count,total_usage\n",[717],{"type":35,"tag":94,"props":718,"children":719},{"__ignoreMap":122},[720],{"type":35,"tag":128,"props":721,"children":722},{"class":130,"line":131},[723,727,731,735,739,743,747,751,755,759,764,769],{"type":35,"tag":128,"props":724,"children":725},{"style":135},[726],{"type":40,"value":138},{"type":35,"tag":128,"props":728,"children":729},{"style":141},[730],{"type":40,"value":144},{"type":35,"tag":128,"props":732,"children":733},{"style":147},[734],{"type":40,"value":150},{"type":35,"tag":128,"props":736,"children":737},{"style":153},[738],{"type":40,"value":156},{"type":35,"tag":128,"props":740,"children":741},{"style":141},[742],{"type":40,"value":161},{"type":35,"tag":128,"props":744,"children":745},{"style":147},[746],{"type":40,"value":166},{"type":35,"tag":128,"props":748,"children":749},{"style":141},[750],{"type":40,"value":171},{"type":35,"tag":128,"props":752,"children":753},{"style":174},[754],{"type":40,"value":564},{"type":35,"tag":128,"props":756,"children":757},{"style":147},[758],{"type":40,"value":569},{"type":35,"tag":128,"props":760,"children":761},{"style":147},[762],{"type":40,"value":763}," query-analytics.ts",{"type":35,"tag":128,"props":765,"children":766},{"style":147},[767],{"type":40,"value":768}," --metrics",{"type":35,"tag":128,"props":770,"children":771},{"style":147},[772],{"type":40,"value":773}," request_count,total_usage\n",{"type":35,"tag":43,"props":775,"children":776},{},[777,778,783],{"type":40,"value":698},{"type":35,"tag":94,"props":779,"children":781},{"className":780},[],[782],{"type":40,"value":396},{"type":40,"value":784}," skill for the full parameter reference and query construction guide.",{"type":35,"tag":786,"props":787,"children":789},"h3",{"id":788},"quick-examples",[790],{"type":40,"value":791},"Quick Examples",{"type":35,"tag":43,"props":793,"children":794},{},[795],{"type":40,"value":796},"Spend over the last 7 days, broken down by day:",{"type":35,"tag":117,"props":798,"children":800},{"className":119,"code":799,"language":121,"meta":122,"style":122},"npx tsx query-analytics.ts --metrics total_usage --granularity day\n",[801],{"type":35,"tag":94,"props":802,"children":803},{"__ignoreMap":122},[804],{"type":35,"tag":128,"props":805,"children":806},{"class":130,"line":131},[807,811,815,819,823,828,833],{"type":35,"tag":128,"props":808,"children":809},{"style":174},[810],{"type":40,"value":599},{"type":35,"tag":128,"props":812,"children":813},{"style":147},[814],{"type":40,"value":569},{"type":35,"tag":128,"props":816,"children":817},{"style":147},[818],{"type":40,"value":763},{"type":35,"tag":128,"props":820,"children":821},{"style":147},[822],{"type":40,"value":768},{"type":35,"tag":128,"props":824,"children":825},{"style":147},[826],{"type":40,"value":827}," total_usage",{"type":35,"tag":128,"props":829,"children":830},{"style":147},[831],{"type":40,"value":832}," --granularity",{"type":35,"tag":128,"props":834,"children":835},{"style":147},[836],{"type":40,"value":837}," day\n",{"type":35,"tag":43,"props":839,"children":840},{},[841],{"type":40,"value":842},"Top 10 models by cost:",{"type":35,"tag":117,"props":844,"children":846},{"className":119,"code":845,"language":121,"meta":122,"style":122},"npx tsx query-analytics.ts --metrics total_usage,request_count --dimensions model --order-by total_usage --limit 10\n",[847],{"type":35,"tag":94,"props":848,"children":849},{"__ignoreMap":122},[850],{"type":35,"tag":128,"props":851,"children":852},{"class":130,"line":131},[853,857,861,865,869,874,879,884,889,893,898],{"type":35,"tag":128,"props":854,"children":855},{"style":174},[856],{"type":40,"value":599},{"type":35,"tag":128,"props":858,"children":859},{"style":147},[860],{"type":40,"value":569},{"type":35,"tag":128,"props":862,"children":863},{"style":147},[864],{"type":40,"value":763},{"type":35,"tag":128,"props":866,"children":867},{"style":147},[868],{"type":40,"value":768},{"type":35,"tag":128,"props":870,"children":871},{"style":147},[872],{"type":40,"value":873}," total_usage,request_count",{"type":35,"tag":128,"props":875,"children":876},{"style":147},[877],{"type":40,"value":878}," --dimensions",{"type":35,"tag":128,"props":880,"children":881},{"style":147},[882],{"type":40,"value":883}," model",{"type":35,"tag":128,"props":885,"children":886},{"style":147},[887],{"type":40,"value":888}," --order-by",{"type":35,"tag":128,"props":890,"children":891},{"style":147},[892],{"type":40,"value":827},{"type":35,"tag":128,"props":894,"children":895},{"style":147},[896],{"type":40,"value":897}," --limit",{"type":35,"tag":128,"props":899,"children":901},{"style":900},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[902],{"type":40,"value":903}," 10\n",{"type":35,"tag":43,"props":905,"children":906},{},[907],{"type":40,"value":908},"Usage by API key:",{"type":35,"tag":117,"props":910,"children":912},{"className":119,"code":911,"language":121,"meta":122,"style":122},"npx tsx query-analytics.ts --metrics request_count,tokens_total --dimensions api_key_id --order-by request_count --limit 10\n",[913],{"type":35,"tag":94,"props":914,"children":915},{"__ignoreMap":122},[916],{"type":35,"tag":128,"props":917,"children":918},{"class":130,"line":131},[919,923,927,931,935,940,944,949,953,958,962],{"type":35,"tag":128,"props":920,"children":921},{"style":174},[922],{"type":40,"value":599},{"type":35,"tag":128,"props":924,"children":925},{"style":147},[926],{"type":40,"value":569},{"type":35,"tag":128,"props":928,"children":929},{"style":147},[930],{"type":40,"value":763},{"type":35,"tag":128,"props":932,"children":933},{"style":147},[934],{"type":40,"value":768},{"type":35,"tag":128,"props":936,"children":937},{"style":147},[938],{"type":40,"value":939}," request_count,tokens_total",{"type":35,"tag":128,"props":941,"children":942},{"style":147},[943],{"type":40,"value":878},{"type":35,"tag":128,"props":945,"children":946},{"style":147},[947],{"type":40,"value":948}," api_key_id",{"type":35,"tag":128,"props":950,"children":951},{"style":147},[952],{"type":40,"value":888},{"type":35,"tag":128,"props":954,"children":955},{"style":147},[956],{"type":40,"value":957}," request_count",{"type":35,"tag":128,"props":959,"children":960},{"style":147},[961],{"type":40,"value":897},{"type":35,"tag":128,"props":963,"children":964},{"style":900},[965],{"type":40,"value":903},{"type":35,"tag":43,"props":967,"children":968},{},[969],{"type":40,"value":970},"Latency by provider (limited to 31-day range):",{"type":35,"tag":117,"props":972,"children":974},{"className":119,"code":973,"language":121,"meta":122,"style":122},"npx tsx query-analytics.ts --metrics avg_latency,p90_latency --dimensions provider --order-by p90_latency\n",[975],{"type":35,"tag":94,"props":976,"children":977},{"__ignoreMap":122},[978],{"type":35,"tag":128,"props":979,"children":980},{"class":130,"line":131},[981,985,989,993,997,1002,1006,1011,1015],{"type":35,"tag":128,"props":982,"children":983},{"style":174},[984],{"type":40,"value":599},{"type":35,"tag":128,"props":986,"children":987},{"style":147},[988],{"type":40,"value":569},{"type":35,"tag":128,"props":990,"children":991},{"style":147},[992],{"type":40,"value":763},{"type":35,"tag":128,"props":994,"children":995},{"style":147},[996],{"type":40,"value":768},{"type":35,"tag":128,"props":998,"children":999},{"style":147},[1000],{"type":40,"value":1001}," avg_latency,p90_latency",{"type":35,"tag":128,"props":1003,"children":1004},{"style":147},[1005],{"type":40,"value":878},{"type":35,"tag":128,"props":1007,"children":1008},{"style":147},[1009],{"type":40,"value":1010}," provider",{"type":35,"tag":128,"props":1012,"children":1013},{"style":147},[1014],{"type":40,"value":888},{"type":35,"tag":128,"props":1016,"children":1017},{"style":147},[1018],{"type":40,"value":1019}," p90_latency\n",{"type":35,"tag":43,"props":1021,"children":1022},{},[1023],{"type":40,"value":1024},"Usage cost breakdown (credits, BYOK, upstream, cache, data logging, web search):",{"type":35,"tag":117,"props":1026,"children":1028},{"className":119,"code":1027,"language":121,"meta":122,"style":122},"npx tsx query-analytics.ts --metrics credits_usage,byok_usage,byok_fees,usage_upstream,usage_cache,usage_data,usage_web --granularity day\n",[1029],{"type":35,"tag":94,"props":1030,"children":1031},{"__ignoreMap":122},[1032],{"type":35,"tag":128,"props":1033,"children":1034},{"class":130,"line":131},[1035,1039,1043,1047,1051,1056,1060],{"type":35,"tag":128,"props":1036,"children":1037},{"style":174},[1038],{"type":40,"value":599},{"type":35,"tag":128,"props":1040,"children":1041},{"style":147},[1042],{"type":40,"value":569},{"type":35,"tag":128,"props":1044,"children":1045},{"style":147},[1046],{"type":40,"value":763},{"type":35,"tag":128,"props":1048,"children":1049},{"style":147},[1050],{"type":40,"value":768},{"type":35,"tag":128,"props":1052,"children":1053},{"style":147},[1054],{"type":40,"value":1055}," credits_usage,byok_usage,byok_fees,usage_upstream,usage_cache,usage_data,usage_web",{"type":35,"tag":128,"props":1057,"children":1058},{"style":147},[1059],{"type":40,"value":832},{"type":35,"tag":128,"props":1061,"children":1062},{"style":147},[1063],{"type":40,"value":837},{"type":35,"tag":49,"props":1065,"children":1067},{"id":1066},"common-query-templates",[1068],{"type":40,"value":1069},"Common Query Templates",{"type":35,"tag":117,"props":1071,"children":1073},{"className":119,"code":1072,"language":121,"meta":122,"style":122},"cd \u003Cskill-path>\u002Fscripts && npx tsx suggest-queries.ts\n",[1074],{"type":35,"tag":94,"props":1075,"children":1076},{"__ignoreMap":122},[1077],{"type":35,"tag":128,"props":1078,"children":1079},{"class":130,"line":131},[1080,1084,1088,1092,1096,1100,1104,1108,1112,1116],{"type":35,"tag":128,"props":1081,"children":1082},{"style":135},[1083],{"type":40,"value":138},{"type":35,"tag":128,"props":1085,"children":1086},{"style":141},[1087],{"type":40,"value":144},{"type":35,"tag":128,"props":1089,"children":1090},{"style":147},[1091],{"type":40,"value":150},{"type":35,"tag":128,"props":1093,"children":1094},{"style":153},[1095],{"type":40,"value":156},{"type":35,"tag":128,"props":1097,"children":1098},{"style":141},[1099],{"type":40,"value":161},{"type":35,"tag":128,"props":1101,"children":1102},{"style":147},[1103],{"type":40,"value":166},{"type":35,"tag":128,"props":1105,"children":1106},{"style":141},[1107],{"type":40,"value":171},{"type":35,"tag":128,"props":1109,"children":1110},{"style":174},[1111],{"type":40,"value":564},{"type":35,"tag":128,"props":1113,"children":1114},{"style":147},[1115],{"type":40,"value":569},{"type":35,"tag":128,"props":1117,"children":1118},{"style":147},[1119],{"type":40,"value":1120}," suggest-queries.ts\n",{"type":35,"tag":43,"props":1122,"children":1123},{},[1124],{"type":40,"value":1125},"Returns a list of pre-built query templates for common questions, each with:",{"type":35,"tag":56,"props":1127,"children":1128},{},[1129,1134,1139,1149],{"type":35,"tag":60,"props":1130,"children":1131},{},[1132],{"type":40,"value":1133},"The natural-language question it answers",{"type":35,"tag":60,"props":1135,"children":1136},{},[1137],{"type":40,"value":1138},"The query parameters (metrics, dimensions, filters, time range)",{"type":35,"tag":60,"props":1140,"children":1141},{},[1142,1144],{"type":40,"value":1143},"The CLI flags to pass to ",{"type":35,"tag":94,"props":1145,"children":1147},{"className":1146},[],[1148],{"type":40,"value":255},{"type":35,"tag":60,"props":1150,"children":1151},{},[1152],{"type":40,"value":1153},"Interpretation guidance (where applicable)",{"type":35,"tag":49,"props":1155,"children":1157},{"id":1156},"interpreting-results",[1158],{"type":40,"value":1159},"Interpreting Results",{"type":35,"tag":43,"props":1161,"children":1162},{},[1163],{"type":40,"value":1164},"The query endpoint returns an array of data rows. Each row is a flat object with keys matching the requested metrics and dimensions.",{"type":35,"tag":43,"props":1166,"children":1167},{},[1168],{"type":40,"value":1169},"When interpreting results for the user:",{"type":35,"tag":56,"props":1171,"children":1172},{},[1173,1290,1321,1345,1362,1379,1421,1477],{"type":35,"tag":60,"props":1174,"children":1175},{},[1176,1181,1183,1189,1190,1196,1197,1203,1204,1210,1211,1217,1218,1224,1225,1231,1232,1238,1239,1245,1246,1252,1253,1259,1260,1266,1267,1273,1275,1280,1282,1288],{"type":35,"tag":66,"props":1177,"children":1178},{},[1179],{"type":40,"value":1180},"Spend metrics",{"type":40,"value":1182}," (",{"type":35,"tag":94,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":40,"value":1188},"total_usage",{"type":40,"value":306},{"type":35,"tag":94,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":40,"value":1195},"credits_usage",{"type":40,"value":306},{"type":35,"tag":94,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":40,"value":1202},"openrouter_usage",{"type":40,"value":306},{"type":35,"tag":94,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":40,"value":1209},"byok_usage",{"type":40,"value":306},{"type":35,"tag":94,"props":1212,"children":1214},{"className":1213},[],[1215],{"type":40,"value":1216},"byok_fees",{"type":40,"value":306},{"type":35,"tag":94,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":40,"value":1223},"usage_upstream",{"type":40,"value":306},{"type":35,"tag":94,"props":1226,"children":1228},{"className":1227},[],[1229],{"type":40,"value":1230},"usage_cache",{"type":40,"value":306},{"type":35,"tag":94,"props":1233,"children":1235},{"className":1234},[],[1236],{"type":40,"value":1237},"usage_web",{"type":40,"value":306},{"type":35,"tag":94,"props":1240,"children":1242},{"className":1241},[],[1243],{"type":40,"value":1244},"usage_upstream_web",{"type":40,"value":306},{"type":35,"tag":94,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":40,"value":1251},"usage_file",{"type":40,"value":306},{"type":35,"tag":94,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":40,"value":1258},"usage_upstream_file",{"type":40,"value":306},{"type":35,"tag":94,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":40,"value":1265},"usage_web_fetch",{"type":40,"value":306},{"type":35,"tag":94,"props":1268,"children":1270},{"className":1269},[],[1271],{"type":40,"value":1272},"usage_upstream_web_fetch",{"type":40,"value":1274},") are in USD. ",{"type":35,"tag":94,"props":1276,"children":1278},{"className":1277},[],[1279],{"type":40,"value":1188},{"type":40,"value":1281}," includes BYOK inference cost. ",{"type":35,"tag":94,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":40,"value":1287},"usage_data",{"type":40,"value":1289}," is typically negative (a data logging discount)",{"type":35,"tag":60,"props":1291,"children":1292},{},[1293,1298,1299,1305,1306,1312,1313,1319],{"type":35,"tag":66,"props":1294,"children":1295},{},[1296],{"type":40,"value":1297},"Token counts",{"type":40,"value":1182},{"type":35,"tag":94,"props":1300,"children":1302},{"className":1301},[],[1303],{"type":40,"value":1304},"tokens_total",{"type":40,"value":306},{"type":35,"tag":94,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":40,"value":1311},"tokens_prompt",{"type":40,"value":306},{"type":35,"tag":94,"props":1314,"children":1316},{"className":1315},[],[1317],{"type":40,"value":1318},"tokens_completion",{"type":40,"value":1320},") are in native model tokens",{"type":35,"tag":60,"props":1322,"children":1323},{},[1324,1329,1330,1336,1337,1343],{"type":35,"tag":66,"props":1325,"children":1326},{},[1327],{"type":40,"value":1328},"Latency",{"type":40,"value":1182},{"type":35,"tag":94,"props":1331,"children":1333},{"className":1332},[],[1334],{"type":40,"value":1335},"avg_latency",{"type":40,"value":306},{"type":35,"tag":94,"props":1338,"children":1340},{"className":1339},[],[1341],{"type":40,"value":1342},"p50_latency",{"type":40,"value":1344},", etc.) is in milliseconds",{"type":35,"tag":60,"props":1346,"children":1347},{},[1348,1353,1354,1360],{"type":35,"tag":66,"props":1349,"children":1350},{},[1351],{"type":40,"value":1352},"Rates",{"type":40,"value":1182},{"type":35,"tag":94,"props":1355,"children":1357},{"className":1356},[],[1358],{"type":40,"value":1359},"cache_hit_rate",{"type":40,"value":1361},") are 0–1 ratios",{"type":35,"tag":60,"props":1363,"children":1364},{},[1365,1370,1371,1377],{"type":35,"tag":66,"props":1366,"children":1367},{},[1368],{"type":40,"value":1369},"Throughput",{"type":40,"value":1182},{"type":35,"tag":94,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":40,"value":1376},"avg_throughput",{"type":40,"value":1378},") is tokens per second",{"type":35,"tag":60,"props":1380,"children":1381},{},[1382,1384,1390,1392,1398,1400,1406,1407,1413,1414,1420],{"type":40,"value":1383},"When ",{"type":35,"tag":94,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":40,"value":1389},"granularity",{"type":40,"value":1391}," is set, rows include a ",{"type":35,"tag":94,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":40,"value":1397},"date__\u003Cgranularity>",{"type":40,"value":1399}," field for the time bucket (e.g., ",{"type":35,"tag":94,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":40,"value":1405},"date__day",{"type":40,"value":306},{"type":35,"tag":94,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":40,"value":1412},"date__hour",{"type":40,"value":306},{"type":35,"tag":94,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":40,"value":1419},"date__month",{"type":40,"value":321},{"type":35,"tag":60,"props":1422,"children":1423},{},[1424,1429,1431,1437,1438,1444,1445,1451,1453,1459,1461,1467,1469,1475],{"type":35,"tag":66,"props":1425,"children":1426},{},[1427],{"type":40,"value":1428},"Label resolution",{"type":40,"value":1430},": dimensions ",{"type":35,"tag":94,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":40,"value":1436},"api_key_id",{"type":40,"value":306},{"type":35,"tag":94,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":40,"value":1443},"app",{"type":40,"value":306},{"type":35,"tag":94,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":40,"value":1450},"user",{"type":40,"value":1452},", and ",{"type":35,"tag":94,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":40,"value":1458},"workspace",{"type":40,"value":1460}," have their raw IDs replaced with human-readable names (key name, app title, user name, workspace name) directly in the data rows; ",{"type":35,"tag":94,"props":1462,"children":1464},{"className":1463},[],[1465],{"type":40,"value":1466},"generation_id",{"type":40,"value":1468}," and ",{"type":35,"tag":94,"props":1470,"children":1472},{"className":1471},[],[1473],{"type":40,"value":1474},"session_id",{"type":40,"value":1476}," return raw values",{"type":35,"tag":60,"props":1478,"children":1479},{},[1480,1485,1487,1493,1495,1501,1503,1509,1511,1517,1519,1524],{"type":35,"tag":66,"props":1481,"children":1482},{},[1483],{"type":40,"value":1484},"Truncation",{"type":40,"value":1486},": when consuming output programmatically, check ",{"type":35,"tag":94,"props":1488,"children":1490},{"className":1489},[],[1491],{"type":40,"value":1492},"metadata.truncated",{"type":40,"value":1494},". If ",{"type":35,"tag":94,"props":1496,"children":1498},{"className":1497},[],[1499],{"type":40,"value":1500},"true",{"type":40,"value":1502},", the result was capped at ",{"type":35,"tag":94,"props":1504,"children":1506},{"className":1505},[],[1507],{"type":40,"value":1508},"--limit",{"type":40,"value":1510}," and is a ",{"type":35,"tag":1512,"props":1513,"children":1514},"em",{},[1515],{"type":40,"value":1516},"partial",{"type":40,"value":1518}," dataset — raise ",{"type":35,"tag":94,"props":1520,"children":1522},{"className":1521},[],[1523],{"type":40,"value":1508},{"type":40,"value":1525}," or paginate before reporting totals or rankings",{"type":35,"tag":786,"props":1527,"children":1529},{"id":1528},"cost-optimization-guidance",[1530],{"type":40,"value":1531},"Cost Optimization Guidance",{"type":35,"tag":43,"props":1533,"children":1534},{},[1535],{"type":40,"value":1536},"When the user asks \"How can I spend less?\" or similar:",{"type":35,"tag":449,"props":1538,"children":1539},{},[1540,1551,1564],{"type":35,"tag":60,"props":1541,"children":1542},{},[1543,1545],{"type":40,"value":1544},"Query top models by spend: ",{"type":35,"tag":94,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":40,"value":1550},"--metrics total_usage,tokens_total,cache_hit_rate,request_count --dimensions model --order-by total_usage --limit 10",{"type":35,"tag":60,"props":1552,"children":1553},{},[1554,1556,1562],{"type":40,"value":1555},"Query cost breakdown: ",{"type":35,"tag":94,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":40,"value":1561},"--metrics credits_usage,byok_usage,byok_fees,usage_upstream,usage_cache,usage_data,usage_web,usage_file --granularity day",{"type":40,"value":1563}," to see where spend goes",{"type":35,"tag":60,"props":1565,"children":1566},{},[1567,1569],{"type":40,"value":1568},"Look for:\n",{"type":35,"tag":56,"props":1570,"children":1571},{},[1572,1584,1589,1594,1607],{"type":35,"tag":60,"props":1573,"children":1574},{},[1575,1577,1582],{"type":40,"value":1576},"Models with high spend but low ",{"type":35,"tag":94,"props":1578,"children":1580},{"className":1579},[],[1581],{"type":40,"value":1359},{"type":40,"value":1583}," — prompt caching can help",{"type":35,"tag":60,"props":1585,"children":1586},{},[1587],{"type":40,"value":1588},"Expensive models that could be replaced by cheaper alternatives for specific tasks",{"type":35,"tag":60,"props":1590,"children":1591},{},[1592],{"type":40,"value":1593},"High token counts with low request counts — may indicate oversized prompts",{"type":35,"tag":60,"props":1595,"children":1596},{},[1597,1599,1605],{"type":40,"value":1598},"Models where ",{"type":35,"tag":94,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":40,"value":1604},"reasoning_tokens",{"type":40,"value":1606}," are a large fraction of total — consider disabling extended thinking if not needed",{"type":35,"tag":60,"props":1608,"children":1609},{},[1610,1612,1617,1619,1624,1626,1631],{"type":40,"value":1611},"High ",{"type":35,"tag":94,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":40,"value":1237},{"type":40,"value":1618}," or ",{"type":35,"tag":94,"props":1620,"children":1622},{"className":1621},[],[1623],{"type":40,"value":1251},{"type":40,"value":1625}," relative to ",{"type":35,"tag":94,"props":1627,"children":1629},{"className":1628},[],[1630],{"type":40,"value":1223},{"type":40,"value":1632}," — web search and file processing add-on costs may be significant",{"type":35,"tag":49,"props":1634,"children":1636},{"id":1635},"drilling-down-to-individual-generations",[1637],{"type":40,"value":1638},"Drilling Down to Individual Generations",{"type":35,"tag":43,"props":1640,"children":1641},{},[1642,1644,1649,1650,1655,1657,1662,1664,1669,1671,1677,1679,1684,1686,1692,1694,1700],{"type":40,"value":1643},"To inspect specific generations or sessions from your analytics results, add ",{"type":35,"tag":94,"props":1645,"children":1647},{"className":1646},[],[1648],{"type":40,"value":1466},{"type":40,"value":1618},{"type":35,"tag":94,"props":1651,"children":1653},{"className":1652},[],[1654],{"type":40,"value":1474},{"type":40,"value":1656}," as a dimension. Both are generations-only dimensions (31-day limit). ",{"type":35,"tag":94,"props":1658,"children":1660},{"className":1659},[],[1661],{"type":40,"value":1466},{"type":40,"value":1663}," returns the unique ID for each generation in the result set. ",{"type":35,"tag":94,"props":1665,"children":1667},{"className":1666},[],[1668],{"type":40,"value":1474},{"type":40,"value":1670}," groups and filters sessionless requests as the literal ",{"type":35,"tag":94,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":40,"value":1676},"none",{"type":40,"value":1678},": the ClickHouse column defaults to an empty string, and the query builder coalesces it to ",{"type":35,"tag":94,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":40,"value":1676},{"type":40,"value":1685},". Use ",{"type":35,"tag":94,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":40,"value":1691},"neq 'none'",{"type":40,"value":1693}," to exclude sessionless requests; filtering on ",{"type":35,"tag":94,"props":1695,"children":1697},{"className":1696},[],[1698],{"type":40,"value":1699},"''",{"type":40,"value":1701}," matches nothing.",{"type":35,"tag":117,"props":1703,"children":1705},{"className":119,"code":1704,"language":121,"meta":122,"style":122},"npx tsx query-analytics.ts --metrics total_usage,tokens_total --dimensions generation_id --order-by total_usage --limit 10\n",[1706],{"type":35,"tag":94,"props":1707,"children":1708},{"__ignoreMap":122},[1709],{"type":35,"tag":128,"props":1710,"children":1711},{"class":130,"line":131},[1712,1716,1720,1724,1728,1733,1737,1742,1746,1750,1754],{"type":35,"tag":128,"props":1713,"children":1714},{"style":174},[1715],{"type":40,"value":599},{"type":35,"tag":128,"props":1717,"children":1718},{"style":147},[1719],{"type":40,"value":569},{"type":35,"tag":128,"props":1721,"children":1722},{"style":147},[1723],{"type":40,"value":763},{"type":35,"tag":128,"props":1725,"children":1726},{"style":147},[1727],{"type":40,"value":768},{"type":35,"tag":128,"props":1729,"children":1730},{"style":147},[1731],{"type":40,"value":1732}," total_usage,tokens_total",{"type":35,"tag":128,"props":1734,"children":1735},{"style":147},[1736],{"type":40,"value":878},{"type":35,"tag":128,"props":1738,"children":1739},{"style":147},[1740],{"type":40,"value":1741}," generation_id",{"type":35,"tag":128,"props":1743,"children":1744},{"style":147},[1745],{"type":40,"value":888},{"type":35,"tag":128,"props":1747,"children":1748},{"style":147},[1749],{"type":40,"value":827},{"type":35,"tag":128,"props":1751,"children":1752},{"style":147},[1753],{"type":40,"value":897},{"type":35,"tag":128,"props":1755,"children":1756},{"style":900},[1757],{"type":40,"value":903},{"type":35,"tag":43,"props":1759,"children":1760},{},[1761,1763,1769,1771,1776],{"type":40,"value":1762},"Once you have a generation ID (e.g., ",{"type":35,"tag":94,"props":1764,"children":1766},{"className":1765},[],[1767],{"type":40,"value":1768},"gen-aBcDeFgHiJkLmNoPqRsT",{"type":40,"value":1770},"), use the ",{"type":35,"tag":94,"props":1772,"children":1774},{"className":1773},[],[1775],{"type":40,"value":367},{"type":40,"value":1777}," skill to get detailed information:",{"type":35,"tag":56,"props":1779,"children":1780},{},[1781,1795],{"type":35,"tag":60,"props":1782,"children":1783},{},[1784,1793],{"type":35,"tag":66,"props":1785,"children":1786},{},[1787],{"type":35,"tag":94,"props":1788,"children":1790},{"className":1789},[],[1791],{"type":40,"value":1792},"get-generation",{"type":40,"value":1794}," — Fetch full request metadata: cost breakdown, token counts, latency, provider routing chain, finish reason, and more",{"type":35,"tag":60,"props":1796,"children":1797},{},[1798,1807],{"type":35,"tag":66,"props":1799,"children":1800},{},[1801],{"type":35,"tag":94,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":40,"value":1806},"get-generation-content",{"type":40,"value":1808}," — Fetch the stored prompt and completion text (unless Zero Data Retention was enabled)",{"type":35,"tag":117,"props":1810,"children":1812},{"className":119,"code":1811,"language":121,"meta":122,"style":122},"cd \u003Copenrouter-generations-skill-path>\u002Fscripts\nnpx tsx get-generation.ts gen-aBcDeFgHiJkLmNoPqRsT\nnpx tsx get-generation-content.ts gen-aBcDeFgHiJkLmNoPqRsT\n",[1813],{"type":35,"tag":94,"props":1814,"children":1815},{"__ignoreMap":122},[1816,1845,1866],{"type":35,"tag":128,"props":1817,"children":1818},{"class":130,"line":131},[1819,1823,1827,1832,1836,1840],{"type":35,"tag":128,"props":1820,"children":1821},{"style":135},[1822],{"type":40,"value":138},{"type":35,"tag":128,"props":1824,"children":1825},{"style":141},[1826],{"type":40,"value":144},{"type":35,"tag":128,"props":1828,"children":1829},{"style":147},[1830],{"type":40,"value":1831},"openrouter-generations-skill-pat",{"type":35,"tag":128,"props":1833,"children":1834},{"style":153},[1835],{"type":40,"value":156},{"type":35,"tag":128,"props":1837,"children":1838},{"style":141},[1839],{"type":40,"value":161},{"type":35,"tag":128,"props":1841,"children":1842},{"style":147},[1843],{"type":40,"value":1844},"\u002Fscripts\n",{"type":35,"tag":128,"props":1846,"children":1847},{"class":130,"line":621},[1848,1852,1856,1861],{"type":35,"tag":128,"props":1849,"children":1850},{"style":174},[1851],{"type":40,"value":599},{"type":35,"tag":128,"props":1853,"children":1854},{"style":147},[1855],{"type":40,"value":569},{"type":35,"tag":128,"props":1857,"children":1858},{"style":147},[1859],{"type":40,"value":1860}," get-generation.ts",{"type":35,"tag":128,"props":1862,"children":1863},{"style":147},[1864],{"type":40,"value":1865}," gen-aBcDeFgHiJkLmNoPqRsT\n",{"type":35,"tag":128,"props":1867,"children":1868},{"class":130,"line":646},[1869,1873,1877,1882],{"type":35,"tag":128,"props":1870,"children":1871},{"style":174},[1872],{"type":40,"value":599},{"type":35,"tag":128,"props":1874,"children":1875},{"style":147},[1876],{"type":40,"value":569},{"type":35,"tag":128,"props":1878,"children":1879},{"style":147},[1880],{"type":40,"value":1881}," get-generation-content.ts",{"type":35,"tag":128,"props":1883,"children":1884},{"style":147},[1885],{"type":40,"value":1865},{"type":35,"tag":43,"props":1887,"children":1888},{},[1889],{"type":40,"value":1890},"This workflow is useful for identifying your most expensive or slowest requests via analytics, then inspecting the actual prompt\u002Fcompletion to understand why.",{"type":35,"tag":49,"props":1892,"children":1894},{"id":1893},"api-reference",[1895],{"type":40,"value":1896},"API Reference",{"type":35,"tag":43,"props":1898,"children":1899},{},[1900,1902,1908],{"type":40,"value":1901},"Both endpoints require a management key via ",{"type":35,"tag":94,"props":1903,"children":1905},{"className":1904},[],[1906],{"type":40,"value":1907},"Authorization: Bearer sk-or-v1-...",{"type":40,"value":1909},".",{"type":35,"tag":190,"props":1911,"children":1912},{},[1913,1934],{"type":35,"tag":194,"props":1914,"children":1915},{},[1916],{"type":35,"tag":198,"props":1917,"children":1918},{},[1919,1924,1929],{"type":35,"tag":202,"props":1920,"children":1921},{},[1922],{"type":40,"value":1923},"Endpoint",{"type":35,"tag":202,"props":1925,"children":1926},{},[1927],{"type":40,"value":1928},"Method",{"type":35,"tag":202,"props":1930,"children":1931},{},[1932],{"type":40,"value":1933},"Description",{"type":35,"tag":213,"props":1935,"children":1936},{},[1937,1959],{"type":35,"tag":198,"props":1938,"children":1939},{},[1940,1949,1954],{"type":35,"tag":220,"props":1941,"children":1942},{},[1943],{"type":35,"tag":94,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":40,"value":1948},"\u002Fapi\u002Fv1\u002Fanalytics\u002Fmeta",{"type":35,"tag":220,"props":1950,"children":1951},{},[1952],{"type":40,"value":1953},"GET",{"type":35,"tag":220,"props":1955,"children":1956},{},[1957],{"type":40,"value":1958},"Returns available metrics, dimensions, operators, granularities",{"type":35,"tag":198,"props":1960,"children":1961},{},[1962,1971,1976],{"type":35,"tag":220,"props":1963,"children":1964},{},[1965],{"type":35,"tag":94,"props":1966,"children":1968},{"className":1967},[],[1969],{"type":40,"value":1970},"\u002Fapi\u002Fv1\u002Fanalytics\u002Fquery",{"type":35,"tag":220,"props":1972,"children":1973},{},[1974],{"type":40,"value":1975},"POST",{"type":35,"tag":220,"props":1977,"children":1978},{},[1979],{"type":40,"value":1980},"Executes an analytics query and returns structured data",{"type":35,"tag":43,"props":1982,"children":1983},{},[1984,1986],{"type":40,"value":1985},"Full documentation: ",{"type":35,"tag":79,"props":1987,"children":1990},{"href":1988,"rel":1989},"https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fapi\u002Fapi-reference\u002Fanalytics",[83],[1991],{"type":40,"value":1988},{"type":35,"tag":1993,"props":1994,"children":1995},"style",{},[1996],{"type":40,"value":1997},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1999,"total":2135},[2000,2017,2027,2043,2057,2062,2070,2081,2093,2101,2112,2121],{"slug":2001,"name":2001,"fn":2002,"description":2003,"org":2004,"tags":2005,"stars":18,"repoUrl":19,"updatedAt":2016},"create-agent-tui","scaffold terminal agents with OpenRouter","Scaffolds a complete agent TUI in TypeScript using @openrouter\u002Fagent — like create-react-app for terminal agents. Generates a customizable terminal interface with three input styles, four tool display modes, ASCII banners, streaming output, session persistence, and configurable tools. Use when building an agent, creating a TUI, scaffolding an agent project, or building a coding assistant.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2006,2009,2012,2013],{"name":2007,"slug":2008,"type":14},"Agents","agents",{"name":2010,"slug":2011,"type":14},"CLI","cli",{"name":9,"slug":8,"type":14},{"name":2014,"slug":2015,"type":14},"TypeScript","typescript","2026-07-14T05:38:18.849741",{"slug":2018,"name":2018,"fn":2019,"description":2020,"org":2021,"tags":2022,"stars":18,"repoUrl":19,"updatedAt":2026},"create-headless-agent","scaffold headless agents with OpenRouter","Scaffolds a headless agent in TypeScript using @openrouter\u002Fagent and Bun — for CLI tools, API servers, queue workers, and pipelines. No terminal UI. Use when building a headless agent, programmatic agent, CLI tool that uses AI, batch agent, pipeline agent, API agent, agent without a UI, or agent service.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2023,2024,2025],{"name":2007,"slug":2008,"type":14},{"name":2010,"slug":2011,"type":14},{"name":2014,"slug":2015,"type":14},"2026-07-14T05:38:30.178029",{"slug":2028,"name":2028,"fn":2029,"description":2030,"org":2031,"tags":2032,"stars":18,"repoUrl":19,"updatedAt":2042},"open-responses","implement Open Responses-compliant APIs","This skill should be used when implementing, consuming, or debugging an Open Responses-compliant API — the open standard for multi-provider LLM interoperability. Covers protocol, items, state machines, streaming events, tools, the agentic loop pattern, and extensions. Triggers on: Open Responses, open-responses, \u002Fv1\u002Fresponses endpoint, multi-provider LLM API, Open Responses compliance.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2033,2036,2039],{"name":2034,"slug":2035,"type":14},"API Development","api-development",{"name":2037,"slug":2038,"type":14},"Interoperability","interoperability",{"name":2040,"slug":2041,"type":14},"LLM","llm","2026-07-14T05:38:13.153467",{"slug":2044,"name":2044,"fn":2045,"description":2046,"org":2047,"tags":2048,"stars":18,"repoUrl":19,"updatedAt":2056},"openrouter-agent-migration","migrate OpenRouter SDK to agent patterns","Migration guide from @openrouter\u002Fsdk to @openrouter\u002Fagent for callModel, tool(), stop conditions, and agent features. This skill should be used when code imports callModel, tool(), or stop conditions from @openrouter\u002Fsdk and needs to migrate to @openrouter\u002Fagent.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2049,2052,2055],{"name":2050,"slug":2051,"type":14},"Migration","migration",{"name":2053,"slug":2054,"type":14},"SDK","sdk",{"name":2014,"slug":2015,"type":14},"2026-07-14T05:38:28.914981",{"slug":4,"name":4,"fn":5,"description":6,"org":2058,"tags":2059,"stars":18,"repoUrl":19,"updatedAt":20},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2060,2061],{"name":16,"slug":17,"type":14},{"name":9,"slug":8,"type":14},{"slug":396,"name":396,"fn":2063,"description":2064,"org":2065,"tags":2066,"stars":18,"repoUrl":19,"updatedAt":2069},"execute analytics queries against OpenRouter","Construct and execute analytics queries against the OpenRouter API — full parameter reference for metrics, dimensions, filters, time ranges, ordering, and pagination. Use when building or debugging an analytics query, understanding the request\u002Fresponse shape, or handling query errors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2067,2068],{"name":16,"slug":17,"type":14},{"name":2034,"slug":2035,"type":14},"2026-07-14T05:38:26.402047",{"slug":704,"name":704,"fn":2071,"description":2072,"org":2073,"tags":2074,"stars":18,"repoUrl":19,"updatedAt":2080},"query OpenRouter analytics schema","Discover the OpenRouter analytics schema — available metrics, dimensions, filter operators, and granularities. Use when you need to know what analytics data is queryable, what dimensions you can break down by, or how to map a user's question to the right metric\u002Fdimension combination.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2075,2076,2077],{"name":16,"slug":17,"type":14},{"name":2040,"slug":2041,"type":14},{"name":2078,"slug":2079,"type":14},"Reporting","reporting","2026-07-14T05:38:32.721796",{"slug":2082,"name":2082,"fn":2083,"description":2084,"org":2085,"tags":2086,"stars":18,"repoUrl":19,"updatedAt":2092},"openrouter-benchmarks","query OpenRouter model benchmarks","Query OpenRouter's Benchmarks API for model benchmark rankings and scores. Use when the user asks for benchmark-backed model selection, model rankings by coding\u002Fintelligence\u002Fagentic ability, Artificial Analysis or Design Arena ELO\u002Fwin-rate results, benchmark citations, or wants to call GET \u002Fapi\u002Fv1\u002Fbenchmarks. Also use alongside openrouter-models when the user asks what model should power an app, product, workflow, or use case and benchmark evidence could inform or rule out part of the recommendation, including creative writing, editing, coding, design, agentic, or intelligence-heavy apps. Do not use for OpenRouter usage analytics, billing\u002Fspend analysis, generation metadata, provider uptime\u002Flatency, generic model pricing\u002Fcapability lookup without any selection or benchmark-relevance decision, or creating an evaluation suite for a local app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2087,2088,2091],{"name":16,"slug":17,"type":14},{"name":2089,"slug":2090,"type":14},"Benchmarking","benchmarking",{"name":2040,"slug":2041,"type":14},"2026-07-14T05:38:27.658475",{"slug":367,"name":367,"fn":2094,"description":2095,"org":2096,"tags":2097,"stars":18,"repoUrl":19,"updatedAt":2100},"retrieve metadata for OpenRouter generations","Retrieve detailed metadata and stored content for individual OpenRouter generations. Use when the user wants to inspect a specific request — its cost, latency, token usage, provider routing, or the actual prompt\u002Fcompletion text — or is debugging a failed or unexpected generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2098,2099],{"name":2040,"slug":2041,"type":14},{"name":9,"slug":8,"type":14},"2026-07-14T05:38:25.132801",{"slug":2102,"name":2102,"fn":2103,"description":2104,"org":2105,"tags":2106,"stars":18,"repoUrl":19,"updatedAt":2111},"openrouter-images","generate images with OpenRouter","Generate images from text prompts and edit existing images using OpenRouter's dedicated Image API. Use when the user asks to create, generate, or make an image, picture, or illustration from a description, or wants to edit, modify, transform, or alter an existing image with a text prompt.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2107,2110],{"name":2108,"slug":2109,"type":14},"Image Generation","image-generation",{"name":9,"slug":8,"type":14},"2026-07-14T05:38:21.393411",{"slug":2113,"name":2113,"fn":2114,"description":2115,"org":2116,"tags":2117,"stars":18,"repoUrl":19,"updatedAt":2120},"openrouter-models","query OpenRouter model metadata and pricing","Query OpenRouter for available AI models, pricing, capabilities, throughput, and provider performance. Use when the user asks about available OpenRouter models, model pricing, model context lengths, model capabilities, provider latency or uptime, throughput limits, supported parameters, wants to search\u002Ffilter\u002Fcompare models, or find the fastest provider for a model.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2118,2119],{"name":2040,"slug":2041,"type":14},{"name":9,"slug":8,"type":14},"2026-07-14T05:38:22.650307",{"slug":2122,"name":2122,"fn":2123,"description":2124,"org":2125,"tags":2126,"stars":18,"repoUrl":19,"updatedAt":2134},"openrouter-oauth","implement OpenRouter OAuth authentication","Implement \"Sign In with OpenRouter\" using OAuth PKCE — framework-agnostic, no SDK or client registration required. Use when the user wants to add OpenRouter login, authentication, sign-in buttons, OAuth, or AI model inference API keys for browser-based apps. No client registration, no backend, no secrets required.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2127,2130,2133],{"name":2128,"slug":2129,"type":14},"Auth","auth",{"name":2131,"slug":2132,"type":14},"OAuth","oauth",{"name":9,"slug":8,"type":14},"2026-07-14T05:38:20.116308",17,{"items":2137,"total":2135},[2138,2145,2151,2157,2163,2168,2173],{"slug":2001,"name":2001,"fn":2002,"description":2003,"org":2139,"tags":2140,"stars":18,"repoUrl":19,"updatedAt":2016},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2141,2142,2143,2144],{"name":2007,"slug":2008,"type":14},{"name":2010,"slug":2011,"type":14},{"name":9,"slug":8,"type":14},{"name":2014,"slug":2015,"type":14},{"slug":2018,"name":2018,"fn":2019,"description":2020,"org":2146,"tags":2147,"stars":18,"repoUrl":19,"updatedAt":2026},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2148,2149,2150],{"name":2007,"slug":2008,"type":14},{"name":2010,"slug":2011,"type":14},{"name":2014,"slug":2015,"type":14},{"slug":2028,"name":2028,"fn":2029,"description":2030,"org":2152,"tags":2153,"stars":18,"repoUrl":19,"updatedAt":2042},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2154,2155,2156],{"name":2034,"slug":2035,"type":14},{"name":2037,"slug":2038,"type":14},{"name":2040,"slug":2041,"type":14},{"slug":2044,"name":2044,"fn":2045,"description":2046,"org":2158,"tags":2159,"stars":18,"repoUrl":19,"updatedAt":2056},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2160,2161,2162],{"name":2050,"slug":2051,"type":14},{"name":2053,"slug":2054,"type":14},{"name":2014,"slug":2015,"type":14},{"slug":4,"name":4,"fn":5,"description":6,"org":2164,"tags":2165,"stars":18,"repoUrl":19,"updatedAt":20},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2166,2167],{"name":16,"slug":17,"type":14},{"name":9,"slug":8,"type":14},{"slug":396,"name":396,"fn":2063,"description":2064,"org":2169,"tags":2170,"stars":18,"repoUrl":19,"updatedAt":2069},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2171,2172],{"name":16,"slug":17,"type":14},{"name":2034,"slug":2035,"type":14},{"slug":704,"name":704,"fn":2071,"description":2072,"org":2174,"tags":2175,"stars":18,"repoUrl":19,"updatedAt":2080},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2176,2177,2178],{"name":16,"slug":17,"type":14},{"name":2040,"slug":2041,"type":14},{"name":2078,"slug":2079,"type":14}]