---
title: "Get AI model catalog"
method: GET
path: "/ai/models"
tags: ["AiModels"]
---

# Get AI model catalog

`GET /ai/models`

Returns the full model catalog, the curated picker lists (Kai agent, Kai Code cloud, Kai Code
OpenCode, transcription), and the per-runtime default model ids. Internal fields and markup metadata
are not exposed; customer-facing cost figures are pre-computed.

## Response `200`

Ok

- AiModelsPublicResponse
  - `models` AiModelPublicDto[], required — Full catalog (every entry, no filtering).
    - `id` string, required
    - `displayName` string, required
    - `shortLabel` string
    - `description` string
    - `provider` 'anthropic' | 'openai' | 'google' | 'xai' | 'openrouter' | 'mistral' | 'deepseek' | 'local', required
    - `contextWindow` number, double
    - `costPerMillionTokens` AiModelCost
      - `input` number, double, required
      - `cachedInput` number, double
      - `cacheWriteInput` number, double
      - `output` number, double, required
      - `longContextThreshold` number, double
      - `longInputMultiplier` number, double
      - `longOutputMultiplier` number, double
    - `capabilities` AiModelCapabilities
      - `chat` boolean
      - `vision` boolean
      - `tools` boolean
      - `streaming` boolean
      - `transcription` boolean
      - `reasoning` boolean
      - `minimalReasoning` boolean
      - `temperatureUnsupported` boolean — Anthropic models that reject `temperature` (claude-opus-4-8).
      - `thinkingAlwaysOn` boolean — Anthropic models whose thinking can't be turned off: `thinking: {type:'disabled'}` is a 400 at every effort level (Fable 5 / 5.1, Opus 5.5). Low effort is the only way to make them think less — see `claudeReasoningOptions`.
    - `pickers` AiModelPickers — Per-runtime UI-picker visibility. `kaiAgent` → Kai default support agent dropdown `kaiCodeCloud` → Kai Code cloud runtime model picker `kaiCodeOpenCode` → Kai Code desktop OpenCode runtime model picker Models excluded from every picker but still in the catalog are either subagent-only (e.g. Kimi K2.5) or special-purpose (transcription, Codex CLI) — they appear elsewhere via `capabilities.transcription` or via the static `staticModels` list of CLI-only runtimes.
      - `kaiAgent` boolean
      - `kaiCodeCloud` boolean
      - `kaiCodeOpenCode` boolean
    - `supportedEfforts` ModelEffort[]
    - `defaultEffort` 'low' | 'medium' | 'high' | 'extra_high' | 'max'
    - `subagentModelId` string
    - `aliases` string[]
    - `iconKey` 'anthropic' | 'openai' | 'google' | 'xai' | 'meta' | 'mistral' | 'cohere' | 'kimi' | 'minimax' | 'mimo' | 'qwen' | 'deepseek' | 'glm' | 'local'
    - `opencodeId` string
    - `variant1M` boolean
    - `averageCostPerAnswerUsd` string — Customer-facing average cost (USD) for a typical Kai support answer. Pre-multiplied by the Kai markup so the Frontend can render the figure without ever seeing the multiplier.
    - `billedCostPerMillionTokens` AiModelBilledCosts — Billed per-1M rates by where a model runs (`calculateTokenCost`: raw × `getMarkup`).
      - `kai` AiModelBilledCost, required — USD per 1M tokens as the customer's AI credits pay it (markup applied).
        - `input` number, double, required
        - `output` number, double, required
      - `agents` AiModelBilledCost, required — USD per 1M tokens as the customer's AI credits pay it (markup applied).
        - `input` number, double, required
        - `output` number, double, required
      - `kaiCode` AiModelBilledCost, required — USD per 1M tokens as the customer's AI credits pay it (markup applied).
        - `input` number, double, required
        - `output` number, double, required
  - `pickers` object, required — Curated picker lists (replaces FE iterate-and-filter logic).
    - `transcription` AiPickerOption[], required — STT models (transcription-capable).
      - `value` string, required — Value persisted on the project / session. Either an alias or a canonical id.
      - `label` string, required
    - `kaiCodeOpenCode` AiPickerOption[], required — Kai Code OpenCode (desktop) runtime model picker.
      - `value` string, required — Value persisted on the project / session. Either an alias or a canonical id.
      - `label` string, required
    - `kaiCodeCloud` AiPickerOption[], required — Kai Code cloud runtime model picker.
      - `value` string, required — Value persisted on the project / session. Either an alias or a canonical id.
      - `label` string, required
    - `kaiAgent` AiPickerOption[], required — Default Kai support agent dropdown.
      - `value` string, required — Value persisted on the project / session. Either an alias or a canonical id.
      - `label` string, required
  - `runtimeDefaults` RecordModelRuntimeString, required — Construct a type with a set of properties K of type T
    - `cloud` string
    - `opencode` string
    - `claudeCode` string
    - `codex` string

## Changes

- **2026-09-26** `0a92e15c9803` — 1 info
  - added the optional property `models/items/billedCostPerMillionTokens` to the response with the `200` status
- **2026-09-23** `40d470c9cb17` — 1 info
  - added the optional property `models/items/capabilities/thinkingAlwaysOn` to the response with the `200` status

[Change history](https://skmtc.dev/gleap/apis/gleap-server/changes/ai/models/get.md)

---

[API](https://skmtc.dev/gleap/apis/gleap-server.md) · [All operations](https://skmtc.dev/gleap/apis/gleap-server/llms.txt) · [OpenAPI document](https://skmtc.dev/gleap/apis/gleap-server/revisions/0a92e15c9803?raw)
