Models

Discover, list, and pin models.

Webel routes across frontier and open-source models through one endpoint. You can let Webel choose (model: "auto") or pin a specific model by id — and there is an API to list exactly which ids are available right now.

Listing available models

GET /v1/models returns the live roster of model ids your key can use, in the OpenAI list shape — so OpenAI SDKs' built-in models.list() works unchanged:

curl https://api.webel.ai/v1/models \
  -H "Authorization: Bearer $WEBEL_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "claude-sonnet-5",
      "object": "model",
      "created": 1756000000,
      "owned_by": "anthropic",
      "label": "Claude Sonnet 5",
      "context_window": 200000,
      "supports_images": true,
      "supports_documents": true
    },
    {
      "id": "zai/glm-5.2",
      "object": "model",
      "created": 1756000000,
      "owned_by": "zai",
      "supports_images": true,
      "supports_documents": false
    }
  ]
}
  • data[].id is what you pin. Pass it as model on chat completions.
  • label, context_window, supports_images, supports_documents are Webel extensions (additive; standard clients ignore them). They mirror what the product's own model picker shows.
  • owned_by is the provider operating the model (e.g. anthropic, openai, crusoe, deepseek); webel when unspecified.
  • The same authentication applies as every other endpoint: a valid bearer key, room public API enabled. Errors follow the standard error envelope.
  • The list is sorted by id and is per-request stable; ids are lowercase with provider prefixes where routing requires them (e.g. zai/glm-5.2), or bare for first-party ids (e.g. claude-sonnet-5).

Why this list is always accurate

/v1/models is not a static page we update by hand — it reads the same live catalog the Webel product itself uses for its model picker, from the same graph. When a new model is added or an old one retired inside Webel, this endpoint reflects it on the next request. There is no second source of truth to drift out of date.

That is also why these docs deliberately do not enumerate model ids: any static list here could go stale. The endpoint is the contract.

Using an id: pin vs auto

  • Pin: pass "model": "<id-from-the-list>" — that exact model runs. The response echoes it back in model, and usage.model_selected_by is "pinned".
  • Auto: pass "model": "auto" (or omit) and Webel routes each request to the best fit. The response names the chosen model, and usage.model_selected_by is "auto". See the developers overview for why you might prefer this.

A pinned id that isn't currently selectable (retired, or never existed) fails fast with a bad-request error rather than silently substituting another model — check /v1/models if that ever happens.