Models

List available models, modalities, pricing, and regions.

GET /v1/models

List 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.

Query parameters

ParameterTypeDescription
detailbooleanInclude pricing, modality, region, provider, and route-kind info.
model_keystringFilter by logical model key such as glm-5.2 or gpt-oss-120b.
regionstringFilter by region (e.g. eu).
providerstringFilter by provider (e.g. tinfoil).
route_idstringFilter by any canonical or compatibility route ID.
typestringFilter by model type such as chat, embedding, or transcription.

Detail fields

When ?detail=true is set, each model entry includes a tresor block with:

  • model_key
  • route_kind
  • region
  • provider
  • type
  • pricing
  • precision when every backing concrete route agrees on the same precision value
  • prompt_caching when the route advertises prompt-caching support metadata
  • reasoning when the route advertises reasoning metadata

Pricing is modality-aware:

  • chat and embedding routes expose input_per_mtok and output_per_mtok
  • chat routes with prompt-caching-aware pricing can also expose cache_input_per_mtok
  • some providers may expose split cache pricing as cache_read_input_per_mtok and cache_write_input_per_mtok
  • unit-priced transcription routes expose billing_unit and unit_amount
  • token-priced transcription routes expose input_per_mtok and output_per_mtok, same as chat pricing

When 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 route
  • default_effort: the default effort Tresor uses for that concrete route when the caller omits reasoning

Published 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-120b
  • route_kind = region: one region-pinned, provider-free selector such as eu/gpt-oss-120b
  • route_kind = provider: one provider-pinned selector such as nearai/gemma-4-31b when that provider spans multiple regions for the model
  • route_kind = concrete: a fully pinned route such as global/redpill/gpt-oss-120b

Aggregate entries expose conservative metadata:

  • pricing.pricing_type = variable means the price is a ceiling across the concrete backing routes
  • precision is omitted when backing routes disagree or a backing route does not publish precision
  • reasoning.supported_efforts is the union across backing routes
  • reasoning.guaranteed_efforts is the intersection across backing routes
  • prompt_caching.supported and prompt_caching.verified stay true only when every backing concrete route supports and verifies prompt caching

Example 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"
    }
  }
}

Available models

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.

See also