---
title: "Get AI model catalog"
url: https://docs.gleap.ai/en/reference/rest-api/get-models
method: GET
path: "/ai/models"
api: "API Reference"
tag: "AiModels"
operationId: "GetModels"
updatedAt: "2026-11-01T18:40:15.677Z"
language: en
---

# Get AI model catalog

`GET https://api.gleap.io/v3/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.

## Example request

```bash
curl --request GET \
  --url https://api.gleap.io/v3/ai/models
```

## Responses

### 200 (`application/json`)

Ok

- `models` (object[], required): Full catalog (every entry, no filtering).
  - `id` (string, required)
  - `displayName` (string, required)
  - `shortLabel` (string)
  - `description` (string)
  - `provider` (enum<string>, required): One of: `anthropic`, `openai`, `google`, `xai`, `openrouter`, `mistral`, `deepseek`, `local`.
  - `contextWindow` (number<double>)
  - `costPerMillionTokens` (object): Effective raw rate per 1M tokens. Always populated for catalog entries (pure-alias tiers resolve theirs from the backing model).
    - `input` (number<double>, required)
    - `cachedInput` (number<double>)
    - `cacheWriteInput` (number<double>): Prompt-cache write rate for the default 5-minute TTL (Anthropic: 1.25× input).
    - `cacheWrite1hInput` (number<double>): Prompt-cache write rate for the 1-hour TTL (Anthropic `ttl: '1h'`: 2× input). `getModelCost` fills it in as 2× `input` for Anthropic models that don't set it; every other provider has no 1h tier and prices a 1h bucket at the 5-minute write rate.
    - `output` (number<double>, required)
    - `longContextThreshold` (number<double>)
    - `longInputMultiplier` (number<double>)
    - `longOutputMultiplier` (number<double>)
  - `capabilities` (object)
    - `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, claude-haiku-5-5).
    - `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` (object): 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` (enum<string>[])
  - `defaultEffort` (enum<string>): One of: `low`, `medium`, `high`, `extra_high`, `max`.
  - `subagentModelId` (string)
  - `aliases` (string[])
  - `iconKey` (enum<string>): One of: `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` (object): What Gleap bills per 1M tokens for this model, by where it runs (effective raw rate × that usage type's markup). Pickers show these; `costPerMillionTokens` stays the raw provider rate.
    - `kai` (object, required): Kai support answers (`kai` markup).
      - `input` (number<double>, required)
      - `output` (number<double>, required)
    - `agents` (object, required): Custom agents, Kai Resolve and its code investigations, Kai Copilot (default markup).
      - `input` (number<double>, required)
      - `output` (number<double>, required)
    - `kaiCode` (object, required): Kai Code cloud sessions (`gleapcode` markup).
      - `input` (number<double>, required)
      - `output` (number<double>, required)
- `pickers` (object, required): Curated picker lists (replaces FE iterate-and-filter logic).
  - `transcription` (object[], 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` (object[], 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` (object[], 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` (object[], 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` (object, required): Per-runtime default modelId.
  - `codex` (string)
  - `cloud` (string)
  - `opencode` (string)
  - `claudeCode` (string)

```json
{
  "models": [
    {
      "id": "string",
      "displayName": "string",
      "shortLabel": "string",
      "description": "string",
      "provider": "anthropic",
      "contextWindow": 0,
      "costPerMillionTokens": {
        "input": 0,
        "cachedInput": 0,
        "cacheWriteInput": 0,
        "cacheWrite1hInput": 0,
        "output": 0,
        "longContextThreshold": 0,
        "longInputMultiplier": 0,
        "longOutputMultiplier": 0
      },
      "capabilities": {
        "chat": true,
        "vision": true,
        "tools": true,
        "streaming": true,
        "transcription": true,
        "reasoning": true,
        "minimalReasoning": true,
        "temperatureUnsupported": true,
        "thinkingAlwaysOn": true
      },
      "pickers": {
        "kaiAgent": true,
        "kaiCodeCloud": true,
        "kaiCodeOpenCode": true
      },
      "supportedEfforts": [
        "low"
      ],
      "defaultEffort": "low",
      "subagentModelId": "string",
      "aliases": [
        "string"
      ],
      "iconKey": "anthropic",
      "opencodeId": "string",
      "variant1M": true,
      "averageCostPerAnswerUsd": "string",
      "billedCostPerMillionTokens": {
        "kai": {
          "input": 0,
          "output": 0
        },
        "agents": {
          "input": 0,
          "output": 0
        },
        "kaiCode": {
          "input": 0,
          "output": 0
        }
      }
    }
  ],
  "pickers": {
    "transcription": [
      {
        "value": "string",
        "label": "string"
      }
    ],
    "kaiCodeOpenCode": [
      {
        "value": "string",
        "label": "string"
      }
    ],
    "kaiCodeCloud": [
      {
        "value": "string",
        "label": "string"
      }
    ],
    "kaiAgent": [
      {
        "value": "string",
        "label": "string"
      }
    ]
  },
  "runtimeDefaults": {
    "codex": "string",
    "cloud": "string",
    "opencode": "string",
    "claudeCode": "string"
  }
}
```
