Gin / OpenRouter usage
OpenRouter usage by feature
OpenRouter reports token usage and spend by key, model and app. Here is how to see it per feature of your product, and track OpenRouter spend every day.
Short answer: OpenRouter’s Activity page shows spend, tokens and requests by model, provider, API key and app, and every API response carries a usage object with token counts and cost. It can’t split usage by feature, because it never sees which feature made the call. Use one key per feature, log usage with a feature tag, or wrap your client with Gin.
What OpenRouter shows you
- Activity page. Spend, tokens and request counts over time, filterable by model, provider, API key and app, with an export.
- Per response. The
usageobject: prompt and completion tokens, cached and reasoning tokens, and the cost of the call. - Per generation.
GET /api/v1/generation?id=…returns the stored stats for one call, including native token counts. - Per key.
GET /api/v1/keyreturns the current key’s usage and limit, which is handy for budget alerts.
OpenRouter token usage per feature: three ways
- One key per feature. Create a key for each feature, optionally with a credit limit, then filter the Activity page by key. Simple, but keys multiply and shared code paths blur.
- Log usage with a tag. Read
usagefrom every response and send it to your analytics with the feature name. - Wrap your client with Gin. One line, and every call is recorded by project and use case, with a free daily email.
// option 2: log usage per feature yourself
const res = await fetch('https://openrouter.ai/api/v1/chat/completions', { method: 'POST', headers, body });
const j = await res.json();
track('llm_call', { feature: 'digest', model: j.model, in: j.usage.prompt_tokens, out: j.usage.completion_tokens, usd: j.usage.cost });
// option 3: the same split, plus graded savings
const client = new OpenAI({ baseURL: 'https://openrouter.ai/api/v1', apiKey, fetch: gin({ useCase: 'digest' }) });
Track OpenRouter spend every morning
Once usage is split by feature, the useful view is a daily one: what each feature cost yesterday, what spiked, and which features a cheaper model could take over. That is Gin’s daily email.
Your daily email
Your AI bill, explained before coffee.
Every morning, to you and your team. Free forever, even if you never route a call.
- One big number. Yesterday’s AI spend and the trend this week.
- Spend by project · use case. Two weeks, stacked, so the feature that spiked stands out.
- What you could save. Counted only from cheaper models that passed grading on your calls.
- One line per use case. Passed and how much it saves, kept on your model, or still grading.
gin.Oct 7on AI yesterday · ▲ 26% this week
api · Support chatapi · Ticket triageweb · Summariesjobs · Code review
You could save
$417/mo
$934 → $517 a month
✓ 64% of spend passed grading on 212 of your calls
Graded on your calls
Acme · Dashboard · Unsubscribe
How grading works
Proven on your calls before anything moves.
Gin doesn’t route on a leaderboard or a hunch. Each use case earns a cheaper model by matching your own answers, or it stays where it is.
- 1 · Watch
Record real calls
One line wraps your AI client. Gin logs each call after it finishes, by project and use case. No latency added.
- 2 · Optimize
Replay and judge
Gin replays recent calls on cheaper models. A strict judge compares each answer with yours, in both orders, so position can’t tip the verdict.
- 3 · Route
Route what passed
A use case routes only when ≥90% of its replays come back the same or better. Any error falls back to your model.
api · Support chaton Claude Opus 5.5
- Claude Sonnet 5.5✓ 9/10−50%
- DeepSeek V4 Pro✗ 6/9—
→ Routes to Claude Sonnet 5.5: −50% on this use case.
web · Summarieson Claude Opus 5.5
- Claude Sonnet 5.5✗ 8/12—
- GLM 5.3 Flash✗ 5/12—
= Stays on your model. Nothing cheaper held up, so nothing changes.
Bars show the share of replays graded the same or better; the tick marks the 90% bar. Example ladders, illustrative.
Benchmarked
Measured against the routers you’d compare us to.
Gin beat Always-Opus quality (93.8% vs 89.5%) for 56% less. OpenRouter Auto (high) came closest: 89.5% for $5.45. OpenRouter Auto is cheaper ($0.42) but passed 74.7%.
| Router | Pass rate | $ / 1k | vs Opus |
|---|---|---|---|
| Gin | 93.8% +4.3 | $4.33 | −56% |
| OpenRouter Auto (high) | 89.5% +0.0 | $5.45 | −45% |
| Always Opus 5.5 | 89.5% | $9.87 | base |
| TypeSafe Jev Router | 86.4% −3.1 | $1.23 | −88% |
| OpenRouter Auto (medium) | 85.2% −4.3 | $2.15 | −78% |
| OpenRouter Auto | 74.7% −14.8 | $0.42 | −96% |
RouteBench 1.3 · 162 held-out tasks across 9 app workloads · run October 8, 2026 · 16 experimental variants on the full page. Gin’s routing was tuned with this benchmark in view, so its numbers are partly in-sample. Full RouteBench results and method →
Then lower the bill
With spend per feature in hand, move the expensive, easy features first. The fee isn’t the problem: OpenRouter adds about 5.5% when you buy credits, while the model you pick moves a feature’s cost 10× or more. See OpenRouter pricing, explained and how to reduce LLM costs safely.
FAQ
How do I see my OpenRouter usage?
The Activity page on openrouter.ai shows spend, tokens and requests over time by model, provider, key and app. Programmatically, each response includes a usage object with tokens and cost, and GET /api/v1/key returns usage for the current key.
Can OpenRouter show usage per feature?
Not directly. OpenRouter does not know which feature of your app made a call. Use a separate key per feature, log usage with a feature tag, or wrap your client with Gin, which records usage by project and use case.
Does Gin need a different OpenRouter key?
No. Gin works with your existing OpenRouter key. Watching records calls after they finish, and routing, if you turn it on, still bills your own key.