GET /v1/modelsList available models. This endpoint does not require authentication.
curl https://api.tresor.co/v1/models
Add ?detail=true to include pricing, modality, region, and reasoning information:
curl 'https://api.tresor.co/v1/models?detail=true'
If you use zsh, add quotes around URLs with query parameters so characters like ? and & are not treated as shell glob patterns.
If you are deciding whether to send model_id, region/model_id, provider/model_id, or region/provider/model_id, start with Routing. The short version: shorter selectors usually give Tresor more eligible routes and therefore higher availability.
| Parameter | Type | Description |
|---|---|---|
detail | boolean | Include pricing, modality, region, provider, and route-kind info. |
model_key | string | Filter by logical model key such as glm-5.2 or gpt-oss-120b. |
region | string | Filter by region (e.g. eu). |
provider | string | Filter by provider (e.g. tinfoil). |
route_id | string | Filter by any canonical or compatibility route ID. |
type | string | Filter by model type such as chat, embedding, or transcription. |
When ?detail=true is set, each model entry includes a tresor block with:
model_keyroute_kindregionprovidertypepricingprecision when every backing concrete route agrees on the same precision valueprompt_caching when the route advertises prompt-caching support metadatareasoning when the route advertises reasoning metadataPricing is modality-aware:
input_per_mtok and output_per_mtokcache_input_per_mtokcache_read_input_per_mtok and cache_write_input_per_mtokbilling_unit and unit_amountinput_per_mtok and output_per_mtok, same as chat pricingWhen present, prompt_caching describes whether the route supports prompt caching, whether that support is verified, whether it is enabled by default, and which billing mode the route uses.
When present, reasoning describes the centralized reasoning contract for that route:
supported_efforts: the exact verified effort ladder for that concrete routedefault_effort: the default effort Tresor uses for that concrete route when the caller omits reasoningPublished reasoning values use the canonical off spelling. Request-side none is still accepted as a compatibility alias for off.
The current GET /v1/models response is flat, but it contains more than concrete routes:
route_kind = logical: one provider-free, region-free selector such as gpt-oss-120broute_kind = region: one region-pinned, provider-free selector such as eu/gpt-oss-120broute_kind = provider: one provider-pinned selector such as nearai/gemma-4-31b when that provider spans multiple regions for the modelroute_kind = concrete: a fully pinned route such as global/redpill/gpt-oss-120bAggregate entries expose conservative metadata:
pricing.pricing_type = variable means the price is a ceiling across the concrete backing routesprecision is omitted when backing routes disagree or a backing route does not publish precisionreasoning.supported_efforts is the union across backing routesreasoning.guaranteed_efforts is the intersection across backing routesprompt_caching.supported and prompt_caching.verified stay true only when every backing concrete route supports and verifies prompt cachingExample logical aggregate entry:
{
"id": "gpt-oss-120b",
"object": "model",
"owned_by": "tresor",
"tresor": {
"model_key": "gpt-oss-120b",
"route_kind": "logical",
"type": "chat",
"pricing": {
"input_per_mtok": 0.52,
"output_per_mtok": 1.9,
"pricing_type": "variable",
"currency": "eur"
},
"reasoning": {
"supported_efforts": ["off", "low", "medium", "high"],
"guaranteed_efforts": ["off", "low"],
"default_effort": "off"
}
}
}
Example concrete transcription entry:
{
"id": "eu/privatemode/whisper-large-v3",
"object": "model",
"owned_by": "privatemode",
"tresor": {
"model_key": "whisper-large-v3",
"route_kind": "concrete",
"region": "eu",
"provider": "privatemode",
"type": "transcription",
"pricing": {
"billing_unit": "audio_minute",
"unit_amount": 0.014,
"currency": "eur"
}
}
}
Token-priced transcription routes return the same pricing shape as chat routes, with input_per_mtok and output_per_mtok populated instead of billing_unit and unit_amount.
Example chat entry with prompt-caching metadata:
{
"id": "eu/privatemode/gpt-oss-120b",
"object": "model",
"owned_by": "tresor",
"tresor": {
"model_key": "gpt-oss-120b",
"route_kind": "concrete",
"region": "eu",
"provider": "privatemode",
"type": "chat",
"pricing": {
"input_per_mtok": 0.43,
"cache_input_per_mtok": 0.04,
"output_per_mtok": 1.7,
"currency": "eur"
},
"prompt_caching": {
"supported": true,
"verified": true,
"default_enabled": true,
"billing_mode": "cached_aggregate"
}
}
}
Example chat entry with reasoning metadata:
{
"id": "global/nearai/glm-5.2",
"object": "model",
"owned_by": "tresor",
"tresor": {
"model_key": "glm-5.2",
"route_kind": "concrete",
"region": "global",
"provider": "nearai",
"type": "chat",
"pricing": {
"input_per_mtok": 1.4,
"cache_input_per_mtok": 0.3,
"output_per_mtok": 4.4,
"currency": "usd"
},
"reasoning": {
"supported_efforts": ["off", "low", "medium", "high"],
"default_effort": "off"
}
}
}
Use GET /v1/models for the canonical, up-to-date list — including pricing, region, provider, prompt-caching, and reasoning information when ?detail=true is set. The set of models changes over time; treat the live response as the source of truth.
If you want routes that support prompt caching, either inspect the prompt_caching block in GET /v1/models?detail=true or look for routes with a cached price in the live pricing catalog. See Prompt caching.