The Pareto Router (openrouter/pareto-code) is a way to have OpenRouter always pick a strong coding model for your needs without committing to a specific one. You express a single min_coding_score preference between 0 and 1, and the router routes your request to a coding model that meets that bar.
The Pareto Router is tuned for coding use cases. It maintains a curated shortlist of strong coding models currently available on OpenRouter, ranked by their Artificial Analysis coding percentile (an integer between 0 and 100 that captures how a model ranks within AA’s benchmarked coding field). Your min_coding_score picks the tier of models you want to route to. Within the chosen tier the router selects the cheapest model that is currently available (or the fastest, when you request the :nitro variant).
The name comes from Pareto efficiency: the goal is to give you a strong coder without overspending. The exact shortlist evolves over time as new models land and benchmarks shift.
Set your model to openrouter/pareto-code and optionally pass the pareto-router plugin to control the minimum coding score:
Instead of passing the pareto-router plugin on every API request, you can configure a default min_coding_score in the dashboard:
0 and 1openrouter/pareto-codeOnce enabled, the configured min_coding_score is automatically applied to every request that uses openrouter/pareto-code, without needing to include the plugins array in your API calls.
You can still override the default on a per-request basis by passing the pareto-router plugin in your request’s plugins array. To prevent per-request overrides, enable “Prevent overrides” in the plugin configuration.
min_coding_score parametermin_coding_score is an optional number between 0 and 1, where 1 is best. The router maps it to one of three quality tiers, and each tier corresponds to a percentile band on Artificial Analysis coding scores.
If you omit min_coding_score, the router defaults to the strongest available coders. Within a tier, the router picks the cheapest available model, or the fastest by p50 throughput when you request the :nitro variant.
The router resolves a primary coding model plus up to two same-tier fallbacks. The primary is what serves your request. The fallbacks only fire on transient provider errors or rate limits, they do not load-balance traffic. If the entire tier has no models currently published on OpenRouter, the router steps into a neighboring tier instead. The response model field always reports the concrete model that handled the request.
Because the scoring axis is a percentile within AA’s benchmarked coding field, the capability bar implied by a given min_coding_score shifts as the frontier moves. A new strong release can push existing models down a percentile band, so min_coding_score=0.66 always means “top of the current field” rather than “above an absolute capability score”.
The response includes the model field showing which coding model was actually used:
min_coding_score value is mapped to one of three tiers (high, medium, low) using the thresholds in the table above.:nitro variant. The top entry becomes the primary model and the next two are kept as same-tier fallbacks.The Pareto Router pins both the selected model and provider so that subsequent requests in the same conversation route to the same place. This ensures consistent behavior within a conversation and maximizes prompt cache hits.
Stickiness applies at two levels:
session_id): When you include a session_id, stickiness kicks in on the first successful response — even before cache usage is observed. This is recommended for multi-turn coding sessions and agent workflows where you want consistent routing from the start.In both cases, the cache expires after 5 minutes of inactivity. Each successful request resets the timer. If the cached provider returns an error, the cache is not updated, allowing the next request to be re-routed.
For full details on how sticky routing works, cache key granularity, and the x-session-id header, see Provider Sticky Routing.
session_idThe Pareto Router selects a model based on coding score and cost — different requests could resolve to different models as the shortlist evolves. Session stickiness pins the model selection — not just the provider — so your multi-turn coding session stays on the same model throughout. This prevents mid-conversation model switches that could lead to inconsistent code style or lost prompt cache.
The Pareto Router itself adds no fee. You pay only for the underlying model that handles the request. Because model selection varies across the shortlist, per-request cost will vary too. Use a lower min_coding_score when cost is the primary concern.
openrouter/pareto-code is tuned for coding tasks. For other use cases, use a different router or choose a specific model.min_coding_score, the same model is selected deterministically (sorted by price). However, the selected model may change when the underlying shortlist is updated (e.g. new models are added, benchmarks shift, or the percentile bands rebucket as the AA field evolves). Within a conversation, session stickiness keeps your requests on the same model and provider to maximize cache hits.min_coding_score is the only router parameter. You can’t directly cap cost or latency per request.