Blank white background with no objects or features visible.

Hello, EMEA! TrueFoundry is growing our footprint across Europe, the Middle East, and Africa. Read more. →

TrueFoundry vs OpenRouter: Rate Limits, Budgets, Caching, and LLM Cost Control Compared (2026)

By Chintan Donda

Updated: November 5, 2026

Published: November 5, 2026

TL;DR:

OpenRouter optimises the price of a model; TrueFoundry optimises the governance of spend. OpenRouter rate limits are counted in requests and scale with your purchased credit balance, budgets are hard-stop only (HTTP 403, no warning first), caching is exact-match and scoped to a single API key, and there is no per-model or per-application budget. In exchange it does one thing better than any gateway we know of: price-weighted provider routing, on by default, with a price table it maintains because it is the seller.

  • OpenRouter's real wins: automatic cheapest-provider routing with a hard price ceiling, cache hits that do not count against provider rate limits, and exposure capped at your prepaid balance.
  • TrueFoundry's real wins: budgets in warn or enforce mode with alerts at 75/90/95/100%, limits by requests and tokens, per-model and per-app budgets, exact and semantic caching shared across every caller, and chargeback by team and cost centre.
  • Choose OpenRouter if your cost lever is shopping one model across providers and keys map one-to-one to apps.
  • Choose TrueFoundry if finance needs chargeback, teams need warning before they are blocked, or your cost strategy is routing simple requests to cheap models.
  • Neither forecasts spend or detects anomalies. Plan a FinOps tool on either side.

If you have hit OpenRouter rate limits, the reason is usually not traffic. OpenRouter limits requests per key and per account, and the headroom you get is indexed to how much credit you have purchased, so a low balance is a low rate limit. That is a billing property doing the job of an availability control, and it is the first clue that OpenRouter's cost model and a platform team's cost model are built for different people.

This post covers the cost control and optimization heading of our TrueFoundry vs OpenRouter series: rate limits, budgets and whether they warn or block, quotas and reset windows, cost-aware routing and how the price table is maintained, caching, and attribution for chargeback. It is written for the engineer who is being asked to reduce LLM API costs and the platform lead who has to report them, and every claim is drawn from the two vendors' public documentation. For where an LLM gateway sits in that picture, start with our primer.

At a glance

CapabilityTrueFoundryOpenRouter
Rate limitsRequests and tokens per minute, hour or day; per user, team, virtual account, model, metadataRequests only; indexed to credit balance
Budget modesEnforce (block) or warn-onlyHard stop only (HTTP 403)
Alert before block75 / 90 / 95 / 100% to email or SlackNot documented
Budget scopesUser, team, virtual account, model, provider account, metadataKey, member, workspace
CachingExact and semantic, shared across callersExact only, per API key, opt-in, beta
Cost-aware routingComplexity-based model tieringPrice-weighted provider selection by default
ChargebackPer team, cost centre, app via metadata headerPer key, workspace, model, provider; user tracking

How OpenRouter rate limits work, and why you hit them

OpenRouter rate-limits by requests, and the limits are tied to your balance. Free-model variants are capped at 20 requests per minute; accounts with under $10 in lifetime credit purchases get 50 free-model requests per day, rising permanently to 1,000 per day once $10 has been spent, and failed requests may still count against the cap. Beyond the free tier, free-model rate limits depend on purchased credits, so throughput headroom is a function of account balance rather than a published per-tenant quota. Token-based limits and concurrency limits are not documented. Rate limits are rejected immediately with no queuing.

Two consequences follow. First, an OpenRouter credit limit is both a spending control and an availability control: let the balance run low and the rate limit tightens with it; let it hit zero and traffic stops. Second, because credits sit at the account level while workspaces sit below, one workspace's traffic plausibly consumes headroom shared with every other workspace in the organisation, and nothing in the product fences that off.

TrueFoundry rate-limits by requests and by tokens, per minute, hour or day, with rules applied per user, team, virtual account, model or request metadata and first-matching-rule-wins semantics (rate limiting). Limits are independent of what you have paid us and of other teams' traffic, because the gateway holds the rules in memory and never consults a balance to serve a request. Concurrency limits are not documented on our side either; that is the one row where both products should be tested rather than read about. Our guide to rate limiting in an LLM gateway covers how to size the rules.

Figure 1: Applying LLM requests rate limiting rules in TrueFoundry.
Figure 2: Viewing rate limit summary in TrueFoundry.
Figure 3: Applying MCP tool calls rate limiting rules in TrueFoundry.

Budgets: hard stop vs warn-then-block

An OpenRouter budget lives at three levels. Per key, a credit limit with an optional daily, weekly or monthly reset at midnight UTC and auto-disable when the key exceeds it. Per member and per workspace, guardrails that enforce budgets, assignable to keys or members, with the account-level policy as a ceiling a workspace can only narrow. Workspace Budgets is a first-class feature with its own API, with intervals that nest (lifetime, monthly, weekly, daily), limits that must strictly decrease as the interval narrows, and an include_byok_in_budgets switch that decides whether bring-your-own-key inference counts.

Three design choices matter. Budgets never pool: the same daily budget guardrail applied to three members gives each of them that budget separately, and a request counts toward both the key's budget and the owning member's. Per model and per application have no direct mechanism; an app budget works only where the app is the key. And budgets are hard-stop, not alert: a warn-only mode is not documented, and a request over the limit returns HTTP 403, which is how a team usually discovers its budget is gone.

TrueFoundry Budget Limiting V2 defines rules scoped at tenant or team and filtered by users, teams, virtual accounts, models (concrete or virtual), provider accounts and request metadata via the X-TFY-METADATA header, so a per-app budget is a virtual account or a metadata tag away (budget limiting v2). Rules run in enforce mode (request blocked) or warn-only mode; multiple rules AND together; limits apply in aggregate or per user, per virtual account, per model or per metadata value; and periods are daily, weekly, monthly, quarterly or lifetime, stackable within one rule ($0.50 per day and $2 per quarter, any breach blocks). Milestone alerts fire at 75, 90, 95 and 100 per cent to email, Slack webhook or Slack bot. One gotcha we state plainly: tracking starts when the rule is created, not at the start of the period, so prior spend is not counted retroactively.

Figure 4: Applying budget limiting in TrueFoundry.
Figure 5: Monitoring user-level budget usage in TrueFoundry.

The practical difference: on TrueFoundry a team is warned at 75 per cent and can keep working past 100 per cent if the rule is warn-only; on OpenRouter the team finds out when requests start returning 403.

OpenRouter prompt caching vs semantic caching

Two different things are called caching here, and conflating them is the most common mistake we see in cost reviews.

Provider prompt caching is the model provider charging less for cached input tokens. OpenRouter passes it through and routes around it: a cache read costs roughly 0.1x to 0.5x of normal input pricing depending on provider, and session_id keeps a session sticky to the provider holding the warm cache. TrueFoundry passes provider prompt caching through as well, and our documentation explicitly frames combining it with gateway caching (caching). Neither vendor invented it; both let you keep it.

Gateway response caching is the gateway answering the request itself, with no provider call. OpenRouter Response Caching, currently in beta, is exact-match: two requests are identical only when they share the same API key, model, endpoint type, streaming mode and full request body. It is opt-in per request via the X-OpenRouter-Cache: true header, model-agnostic, covers chat completions, Responses, Messages and embeddings but not legacy completions, TTS, STT, rerank or video, and on a hit returns the response with no billing and no token consumption. Two properties deserve credit: cache hits do not count toward provider rate limits, and hits are visible in the Activity log. One property limits it: the OpenRouter cache is scoped to a single API key, so different keys under the same account do not share it, and a fleet of services each holding its own key gains nothing from each other's traffic. Semantic caching is not offered. In our own testing we measured a 100 per cent hit rate on identical re-requests, 58.5 ms on a hit against 2,866.8 ms on a miss, and a time-to-live between two and five minutes.

TrueFoundry offers both exact-match and semantic caching at the gateway, backed by Redis. A hit returns the full response with zero provider invocation and zero provider cost, across all providers, and the cache is shared across every caller rather than fenced per key, so the second team to ask a question benefits from the first. A semantic cache LLM strategy matters for the workloads where exact matching never hits: customer-support assistants, internal search, and any prompt template with a variable slot. We do not publish measured hit rates, because they depend entirely on your traffic; the right test is a week of your own prompts.

Cost-aware routing: cheapest provider vs cheapest model

With no routing directives set, OpenRouter already optimises for price in three steps: deprioritise providers that have seen significant outages in the last 30 seconds, pick among the stable ones from the lowest-cost candidates weighted by the inverse square of price, and hold the rest as fallbacks. Explicit controls layer on top: provider.sort: "price" or the :floor model-slug shortcut routes cheapest-first, :nitro routes for throughput, provider.max_price sets a hard ceiling in dollars per million tokens that composes with a sort, and provider.only, ignore and quantization preferences narrow the candidate set. The price table cannot go stale because OpenRouter is the seller: its price list is the price. Two honest limits: this is provider arbitrage for a given model, not model substitution, and price-sorted routing trades quality consistency, since cheaper providers may serve different quantizations of the same model.

TrueFoundry does not do price-table-driven provider arbitrage. What we do is complexity-based routing: the gateway classifies each request as simple, medium or complex and routes it to the model you configured for that tier, with sticky sessions, so you pick the cheap model per tier and the gateway picks the tier (auto routing). Around that sit weight-, latency- and priority-based load balancing across targets, and a virtual-model fallback chain that skips any target whose budget is exceeded, which works as a cost circuit breaker. Price data comes from an open-source catalogue plus private rates for negotiated contracts and fine-tuned models (cost tracking). So the honest sentence runs both ways: cheapest acceptable model, yes; cheapest provider for this model, no. How the two approaches fit into a routing design is covered in our LLM router explainer.

Figure 6: Routing configs for LLM requests routing in TrueFoundry.
Figure 7: Adding new routing config rules based on the weight, priority, and latency in TrueFoundry’s Routing Config.

Attribution and chargeback

Governing spend starts with knowing who spent it. TrueFoundry attributes cost and tokens per user, team, virtual account, model, provider account and arbitrary metadata keys; the X-TFY-METADATA header is the chargeback hook, so a request tagged with a cost-centre or application ID is reported under it, dashboards break spend down on every one of those dimensions, and the budget APIs expose usage and a top-spenders leaderboard (cost tracking, budgets API). The same gateway plane that enforces these rules in memory keeps overhead at roughly 3–4 ms and 350+ requests per second per vCPU across 1,000+ LLMs, so attribution is not something you pay for in latency. For the finance-facing side of this, see our guide to an LLM cost tracking solution.

OpenRouter attributes by key (with descriptive labels), workspace, model and provider; Activity and Logs are an account-level view with optional workspace filtering, usage: {include: true} returns per-request usage in the response body, Activity Export produces CSV or PDF grouped by model, key or member, and a User Tracking feature plus Custom Classifiers add per-user and per-category dimensions. Billing is one bill across all workspaces. Per-application or per-cost-centre attribution is achievable, natively through custom user IDs and classifiers or downstream through Broadcast metadata into your observability platform.

That is the shape of LLM cost optimization on each side. If the goal is to reduce LLM API costs for one application, OpenRouter's routing does the heavy lifting automatically. If the goal is to reduce them for an organisation, you need to know which team is spending, warn them before they are cut off, and route the easy requests to the cheap model, which is the TrueFoundry shape.

TrueFoundry vs OpenRouter: cost control head-to-head

TrueFoundry capabilities are from our documentation; OpenRouter capabilities reflect its publicly documented functionality at the time of writing.

CapabilityTrueFoundryOpenRouter
Rate limitsRequests and tokens per min / hour / day; per user, team, VA, model, metadataRequests; indexed to purchased credit balance; shared headroom across workspaces
Concurrency limitsNot documentedNot documented
Budget scopesTenant or team rules filtered by user, team, VA, model, provider account, metadataKey, member, workspace; no per-model or per-app
Budget modesEnforce (hard stop) or warn-onlyHard stop only (HTTP 403)
Alert before blockMilestones at 75 / 90 / 95 / 100%Not documented
Budget poolingAggregate or per-subject within one ruleNever pooled; each member and key separate
Reset windowsDaily, weekly, monthly, quarterly, lifetime; stackable; 00:00 UTCDaily, weekly, monthly, lifetime; midnight UTC
Cost-aware routingComplexity-based model tiering; weight / latency / priority balancing; budget-exceeded targets skippedPrice-weighted provider selection by default; :floor, :nitro, max_price, provider filters
Price tableOpen-source catalogue plus private ratesThe seller's own price list
Gateway cachingExact and semantic; shared across callers; RedisExact only; per-key; opt-in header; beta; 2–5 min measured TTL
Cache hits vs provider limitsZero provider calls on a hitZero provider calls on a hit; do not count against provider rate limits
Provider prompt cachingPassed through; combinable with gateway cachePassed through; session_id keeps the warm cache sticky
Attribution dimensionsUser, team, VA, model, provider account, metadata; leaderboardKey, workspace, model, provider; user tracking; classifiers; metadata via Broadcast
Forecasting / anomaly alertsNot documented (anomaly alerts on roadmap)Not documented
Overage on a budgetBlock (enforce) or allow with alert (warn)Block; zero balance stops all traffic

When to choose OpenRouter

  • Your main cost lever is the price of one model across providers, and you want that arbitrage done automatically with a hard price ceiling you set once.
  • Keys map one-to-one to applications, so a per-key budget is a per-app budget and the missing per-model scope does not matter to you.
  • A hard cap equal to your prepaid balance is the exposure model you prefer, and a 403 at the limit is acceptable because the limit is the point.

When to choose TrueFoundry

  • Finance needs chargeback by team and cost centre, and the metadata header plus dashboards is how you get it without a data pipeline.
  • Teams need to be warned before they are blocked, and some rules should never block at all.
  • Budgets must apply per model or per application across many callers, and rate limits must count tokens as well as requests.
  • Your cost strategy is model substitution (simple requests to the cheap model) rather than provider shopping, and you want a semantic cache shared across a fleet of services.

Neither vendor documents spend forecasting or anomaly detection; TrueFoundry lists anomaly alerts as “coming soon” on its agent-governance roadmap and OpenRouter has a Notifications feature whose alert types are not documented. Budget for a FinOps tool on either side, and see our guide to OpenRouter alternatives for the wider field.

Related reading

Conclusion

OpenRouter rate limits, budgets and caching are built for a developer watching one key: limits that follow the balance, budgets that stop rather than warn, a cache that belongs to the key, and in exchange the best automatic provider arbitrage in the market. TrueFoundry's cost controls are built for a platform team answering to finance: limits by requests and tokens, budgets that warn before they block and scope to teams, models and applications, a semantic cache shared across every caller, and chargeback by cost centre out of the box. Neither forecasts or detects anomalies, so plan for that on either side. The practical dividing line is whether the person reading the budget report is a developer or a finance partner.

To see budgets, limits and caching configured for a multi-team rollout, explore the TrueFoundry AI Gateway, or book a demo if you are sizing cost controls for production now.

Try now.

One gateway for all your models, MCP servers, and agents. No credit card needed.

Start free
Table of Contents

One Gateway for Every LLM, Agent and MCP Server

Book a 30-min with our AI expert

Book a Demo

The fastest way to build, govern and scale your AI

Book Demo
Summarize with
ChatGPT logo by OpenAI
Perplexity AI logo
Blurry red snowflake on white background, symmetrical frosty design with soft edges and abstract shape.

Discover More

No items found.
November 11, 2026
|
5 min read

TrueFoundry vs OpenRouter: Usage Tracking and Observability — Logs, Metrics, Tracing and Evals Compared (2026)

No items found.
What Is a Model Catalog? Governing Which LLMs Your Teams Can Use
November 11, 2026
|
5 min read

What Is a Model Catalog? Governing Which LLMs Your Teams Can Use

No items found.
Frontier Models Compared (Late 2026): GPT-6.1, Gemini 3.x, Claude, Grok
November 11, 2026
|
5 min read

Frontier Models Compared (Late 2026): GPT-6.1, Gemini 3.x, Claude, Grok

No items found.
November 11, 2026
|
5 min read

TrueFoundry vs OpenRouter: Security, Compliance, Guardrails, BYOK, SOC 2 and HIPAA Compared (2026)

No items found.
No items found.

Recent Blogs

Black left pointing arrow symbol on white background, directional indicator.
Black left pointing arrow symbol on white background, directional indicator.

Frequently asked questions

What are OpenRouter's rate limits?

OpenRouter limits by requests, not tokens, and the limits scale with your purchased credit balance. Free-model variants are capped at 20 requests per minute and 50 requests per day (1,000 per day once you have bought $10 of credits); paid headroom grows with your balance. Requests over the limit are rejected immediately with no queuing, and concurrency limits are not documented.

Does OpenRouter support semantic caching?

No. OpenRouter's Response Caching is exact-match only, opt-in per request, scoped to a single API key and currently in beta; it also passes through provider prompt caching. TrueFoundry offers exact-match and semantic caching at the gateway, shared across all callers, with zero provider cost on a hit.

Can I set a budget per team or per model on OpenRouter?

Per team only insofar as a workspace is a team: budgets attach to keys, members and workspaces, and they never pool. There is no per-model or per-application budget, and no warn-only mode; a breached budget returns HTTP 403. TrueFoundry budgets scope by user, team, virtual account, model, provider account or metadata tag, in enforce or warn mode.

How many LLMs does TrueFoundry support?

1,000+ LLMs through a single OpenAI-compatible API, with roughly 3–4 ms of added latency and 350+ requests per second on one vCPU. You switch models by changing the model name in the request, keeping the same URL and credentials.

What latency does the TrueFoundry AI Gateway add?

Roughly 3–4 ms of overhead. Rate limits, budgets and attribution are checked in memory on a stateless gateway plane with no database call in the request path, so cost controls do not become the bottleneck at production throughput.

Can I deploy TrueFoundry in my own VPC or on-prem?

Yes. TrueFoundry runs as managed SaaS, in hybrid mode with the gateway plane in your VPC, or fully self-hosted including air-gapped environments, on one control plane, and the budgets, limits and caching described here work the same way in every mode.

Take a quick product tour
Start Product Tour
Product Tour