Models & catalog
Browse the BatchRouter model catalog — filter by operation, provider, and hosted tool, read per-provider pricing and capacity, and pick the right model.
The catalog is the source of truth for which models BatchRouter can route to, what each one costs per provider, and which hosted tools it supports. Read it before you quote or submit a batch so you reference a model id that actually exists and matches your operation, region, and privacy needs.
GET /v1/catalog/models is public and requires no authentication — call it from anywhere, including the browser, to discover available models.
List the catalog
The base call returns every model with its routing eligibility, context limits, and per-provider pricing.
curl https://api.batchrouter.com/v1/catalog/modelsThe response is { data: CatalogModel[], provider_count, pricing_updated_at }.
Filter the catalog
Narrow the list with up to three query parameters. They combine with AND.
| Parameter | Values | Filters to |
|---|---|---|
operation | responses, embeddings, vision | Models that support that operation type |
provider | a provider slug (e.g. openai, anthropic) | Models offered by that provider |
hosted_tool | web_search, python_execution, calculator, time, file_search, retrieval | Models whose offering advertises that first-class hosted tool |
For example, list responses-capable models that can run web search:
curl "https://api.batchrouter.com/v1/catalog/models?operation=responses&hosted_tool=web_search"hosted_tool filters on first-class hosted-tool metadata (the tools a provider exposes), which is separate from a model's general runtime capabilities. To fetch a single model by slug, use GET /v1/catalog/models/{slug}.
What a model entry exposes
Each CatalogModel describes the model once at the top level, then carries a provider_offerings array — one snapshot per provider that serves the model. The same model (for example, an open-weight model) can appear under several providers at different prices and in different regions; BatchRouter routes across all of them.
Top-level fields you'll use most:
model— the model id you pass asmodelto quotes and batches (for examplegpt-5.4-mini). It is the provider's own id for the model, so it can contain dots or slashes (meta-llama/Llama-3.3-70B-Instruct-Turbo).slug— a URL-safe form of the same model (gpt-5-4-mini), used only in the path ofGET /v1/catalog/models/{slug}. Do not pass it asmodel.display_name,provider— human label and the primary provider slug.operations— the operation types this model supports (responses,embeddings,vision).context_window,max_input_tokens,max_output_tokens— token limits.input_modalities— accepted inputs (text,image,document,audio,video).supports_file_uploads,accepted_file_types,max_file_size— whether you can reference files fromPOST /v1/files, the MIME types accepted, and the max upload size in bytes.hosted_tools— the hosted tools available with this model (the same enum as thehosted_toolfilter).is_available— whether the model is currently routable.
Each entry in provider_offerings is where per-provider routing detail lives:
- Pricing —
price(per-provider, provider-declared rates). The top-levelpricing_updated_attells you how fresh the price data is. - Capacity —
capacity_status(active,draining,paused),available_queue_items,available_queue_tokens, and acapacity_freshnessobject (fresh/stale_heartbeat/unknown). Lanes markedstale_heartbeatare not treated as live routable supply. - Regions — the offering's
regionstags. For a provider that declares the countries it runs inference in, every offering carries the same tags, derived from those countries: the countries themselves, pluseuwhen all of them are EU members. BatchRouter publishes this metadata; it is not an enforced residency guarantee. Theregion_unavailablecheck does not read this per-offering field. It compares yourallowed_regionswith what the provider declares for itself: see Region matching. - Data retention & privacy —
retention_days,supports_zdr(zero data retention),data_collection(allow/deny),training_use,privacy_tiers, andprivacy_terms_url. - Hosted tools & files —
hosted_tools,runtime_capabilities,accepted_file_types,supports_file_uploads. - Status —
status(active,paused,deprecated,disabled) andmetadata_verification_status(verified/unverified/undeclared).
Trimmed example
The shape below is illustrative and abridged — real responses contain more fields and many models. Always read live data from GET /v1/catalog/models; prices and capacity change frequently.
{
"data": [
{
"slug": "gpt-5-4-mini",
"model": "gpt-5.4-mini",
"display_name": "GPT-5.4 mini",
"provider": "openai",
"operations": ["responses", "vision"],
"context_window": 1000000,
"max_output_tokens": 128000,
"input_modalities": ["text", "image"],
"supports_file_uploads": true,
"accepted_file_types": ["image/*"],
"hosted_tools": ["web_search"],
"is_available": true,
"provider_offerings": [
{
"provider": "openai",
"provider_name": "OpenAI",
"task_type": "responses",
"context_window": 128000,
"price": { "currency": "usd", "input_per_mtok": "0.15", "output_per_mtok": "0.60" },
"capacity_status": "active",
"regions": ["global"],
"retention_days": 30,
"supports_zdr": false,
"hosted_tools": ["web_search"],
"status": "active"
}
]
}
],
"provider_count": 1,
"pricing_updated_at": "2026-06-17T09:00:00Z"
}Picking a model
BatchRouter accepts two ways to choose a model in a quote (POST /v1/quotes/model) or batch (POST /v1/batches):
-
Pin one model. Set
modelto a single model id when you need a specific model. BatchRouter still routes across every provider that offers that model and picks the cheapest eligible lane.{ "model": "gpt-5.4-mini" } -
Offer a fallback list. Set
modelsto an array of candidate model ids and BatchRouter picks the cheapest one that satisfies your constraints (capacity, region, privacy tier, required tools). Use this when several models would do and price is what matters.{ "models": ["gpt-5.4-mini", "claude-haiku-4-5", "Qwen/Qwen2.5-7B-Instruct"] }
The canonical item you'll quote against:
{"customer_item_id":"item-1","operation":"responses","model":"gpt-5.4-mini","input":{"messages":[{"role":"user","content":"Summarize: BatchRouter routes batch-AI workloads across providers."}]}}The ids above are live catalog models. The catalog changes, so list the currently routable ones with GET /v1/catalog/models?operation=responses and pass the model value of one of those entries.
Requiring hosted tools
If your workload needs a model that can call hosted tools, add required_tools to the quote or batch. BatchRouter only routes to lanes whose offering supports every requested tool; lanes that can't are returned with a tool_support rejection reason in quote_lanes.
{
"models": ["gpt-5.4-mini", "claude-haiku-4-5"],
"routing_mode": "cheapest",
"required_tools": ["web_search", "python_execution"]
}Valid tools are web_search, python_execution, calculator, time, file_search, and retrieval — the same set returned in each model's hosted_tools. To pre-filter the catalog to tool-capable models before you quote, combine required_tools with the catalog's hosted_tool query filter above.