Models
Request
Returns all available models with pricing, context lengths, and capabilities. OpenRouter-compatible format.
No authentication required.
Pricing is in per-token strings (multiply by 1M for $/1M tokens rate). Cached for 60 seconds.
curl $SURPLUS_BASE_URL/models
{
"data": [
{
"id": "claude-opus-4.6",
"name": "Claude Opus 4.6",
"context_length": 200000,
"max_completion_tokens": 32000,
"pricing": {
"prompt": "0.000015",
"completion": "0.000075"
},
"architecture": {
"input_modalities": ["text"],
"output_modalities": ["text"]
},
"supported_parameters": ["temperature", "top_p", "tools", "stream"],
"top_provider": {
"max_completion_tokens": 32000
}
}
]
}Reading Capabilities
GET /v1/models is the capability surface for everything that varies by model. Three fields carry it:
| Field | Carries |
|---|---|
architecture.input_modalities | What the model accepts: text, image, video, file, audio |
supported_features | Coarse capability labels: vision, file_input, reasoning, tools, streaming, prompt_caching, and others |
supported_parameters | The request knobs the model takes, including reasoning_effort, reasoning, tools. Note that include_reasoning appears on many rows but is always stripped on the chat wire (Reasoning Controls) |
architecture.input_modalitiesCarries · What the model accepts: text, image, video, file, audiosupported_featuresCarries · Coarse capability labels: vision, file_input, reasoning, tools, streaming, prompt_caching, and otherssupported_parametersCarries · The request knobs the model takes, including reasoning_effort, reasoning, tools. Note that include_reasoning appears on many rows but is always stripped on the chat wire (Reasoning Controls)Check input_modalities and supported_features together for image input. They disagree on a
meaningful number of rows (claude-opus-5 declares vision while its input_modalities still reads
["text"]), and the router treats a model as image-capable when either says so.
# Models that accept image input, by either signal curl -s $SURPLUS_BASE_URL/models \ | jq -r '.data[] | select(((.architecture.input_modalities // []) | index("image")) or ((.supported_features // []) | index("vision"))) | .id' # Models that accept a reasoning-effort setting curl -s $SURPLUS_BASE_URL/models \ | jq -r '.data[] | select((.supported_parameters // []) | index("reasoning_effort")) | .id'
These values describe the model, not the individual seller offer that serves a given request. See Media Inputs, Reasoning Controls, and Provider & Model Verification.
Provider Allowlist
The curated provider allowlist, unauthenticated and cached for 5 minutes. Each entry carries id, name,
base_url, host, trusted, and a cost_reference_url pointing at that provider's own published pricing.
trusted is the flag the default trusted-only routing preference filters on.
Current Counts
Catalog size and the number of models with live offers both change as models are onboarded and seller liquidity moves. Use the endpoint response as the source of truth — this page prints no snapshot.