OpenRouter models (group op)
The op group gives access to the chat models in the OpenRouter catalog. A model name is op/<author>/<model>, for example op/openai/gpt-4o-mini. Requests and responses are OpenAI-compatible: POST /v1/chat/completions (see Chat).
The request body is passed to OpenRouter as it is, so the parameters of a model are described in the OpenRouter documentation: Parameters and Provider routing. This page covers only what is different here: how to find a model and its providers, what is supported and what is not.
Finding a model
GET /v1/modelsreturns every model on sale with prices in credits. OpenRouter models start withop/.- Names are the same as on openrouter.ai/models; only the
op/prefix is added. - Free variants (
…:free) are on sale too, but only while the API balance is above zero: see Chat. - A suffix works only where that variant is a separate entry of the catalog (as
:freeis). The OpenRouter shortcut suffixes:nitro,:floorand:onlinedo not work: the answer is404 model_not_found. Useprovider.sortinstead of:nitroand:floor(below).
Providers of a model: list and prices
One model is usually run by several providers that differ in price, numeric precision and speed. The list with prices in credits:
curl https://api.6io.io/v1/models/op/meta-llama/llama-3.3-70b-instruct/providers \
-H "Authorization: Bearer sixio_sk_..."Response (shortened):
{
"id": "op/meta-llama/llama-3.3-70b-instruct",
"name": "Meta: Llama 3.3 70B Instruct",
"context": 131072,
"pricing": {"currency": "credits", "prompt_per_million": "9.480000000000", "completion_per_million": "30.810000000000", "request": "0.000000000000"},
"providers": [
{
"name": "DeepInfra",
"tag": "deepinfra/turbo",
"quantization": "fp8",
"context": 131072,
"max_output": 16384,
"uptime_30m": 99.8,
"default": true,
"pricing": {"currency": "credits", "prompt_per_million": "9.480000000000", "completion_per_million": "30.810000000000", "request": "0.000000000000"}
}
]
}- Providers are listed from the cheapest.
default: truemarks the one a request goes to first when you do not choose a provider. tagis what goes intoprovider.order,onlyandignore. A short name (deepinfra) matches all variants of that provider (deepinfra/turbo).quantizationis the numeric precision (fp8,fp16,bf16,int4…),uptime_30mis the availability over the last 30 minutes, in percent.- This works for
op/models only.vn/has no provider list: Venice runs its own models.
The same data is in the console: the Models tab, click a model.
Choosing a provider
Without a choice, a request goes to the cheapest provider with precision fp8 or better (fp8, mxfp8, fp16, bf16, fp32), and to the next cheapest one if that fails. Closed models do not state a precision, so no precision filter is added for them.
Your own choice is the provider field of the request body, in the OpenRouter format:
{
"model": "op/meta-llama/llama-3.3-70b-instruct",
"messages": [{"role": "user", "content": "Hello"}],
"provider": {"order": ["novita", "deepinfra"], "allow_fallbacks": false}
}provider field |
What it does |
|---|---|
order |
which providers to try, and in what order |
only |
only these providers |
ignore |
every provider except these |
allow_fallbacks |
false: do not move on to other providers when the chosen ones are unavailable |
quantizations |
allowed precision: int4, int8, fp4, fp6, fp8, fp16, bf16, fp32, unknown and the others in the OpenRouter docs |
sort |
how to rank providers: price, throughput or latency (more below) |
require_parameters |
true: only providers that support every parameter of the request |
data_collection |
deny: only providers that do not store your data |
zdr |
true: only providers with zero data retention |
max_price |
price ceiling (prompt, completion, request, image); in OpenRouter's units and dollars, not in credits, see their documentation |
preferred_min_throughput, preferred_max_latency |
preferred speed and latency (a soft condition) |
How provider is handled here:
- If you set neither
sortnororder, we addsort: "price". - If you set none of
quantizations,onlyandorder, we add a filter for precision fp8 or better (only when the model has such a provider). - Everything else is passed on as it is.
- The reserve is calculated with the prices of the provider the request goes to first. When that is not known in advance (for example,
orderis set), the highest price among the suitable providers is used. The actual cost is always what is charged.
Examples:
{"provider": {"sort": "throughput"}}
{"provider": {"sort": "latency"}}
{"provider": {"only": ["deepinfra"], "allow_fallbacks": false}}
{"provider": {"quantizations": ["fp16", "bf16"]}}
{"provider": {"ignore": ["novita"]}}Sorting
"sort": "price": the cheapest provider (already the default here). OpenRouter's:floorsuffix does the same."sort": "throughput": the fastest in tokens per second. OpenRouter's:nitrosuffix does the same."sort": "latency": the lowest time to the first token.- The object form
{"sort": {"by": "throughput", "partition": "none"}}is accepted too:partitionsays whether providers are ranked inside each model or all together. It matters only with several models, and themodelsfield is not supported here, so a string is usually enough.
Plugins and web search
Not supported yet. These requests are refused before any charge with 400 unsupported_parameter:
- the
pluginsfield (web search{"id": "web"}, PDF parsing and the other OpenRouter plugins); - the
web_search_optionsfield (the:onlinemodel suffix gives404 model_not_found); - OpenRouter server tools in
tools: typesopenrouter:…; - the
modelsfield (a list of fallback models) andpreset.
The reason is money. Web search and plugins cost extra on top of the tokens (per OpenRouter's documentation, Exa search is currently $0.007 per request plus $0.001 for each result beyond ten), and that amount is not part of the reserve. Until it is, such requests cannot be accepted.
What you can do now:
- search the web yourself and put the text you found into
messages; - use plain function calling (
toolsof typefunction): it works as in OpenAI; - instead of
models, send the request withprovider.orderandallow_fallbacks, and retry with another model in your own code on failure.
What works as in OpenRouter
All other request parameters are passed on as they are: temperature, top_p, max_tokens, stop, tools and tool_choice, response_format (structured output), reasoning and more. Which of them a given model and provider understand is shown by GET https://openrouter.ai/api/v1/models/<author>/<model>/endpoints (the supported_parameters field) or the model page on openrouter.ai.
Money
The price in credits is calculated from the provider's cost (usage.cost in the response); see Balance and prices. Free models and provider errors are covered in Chat and Retries and failures.