[
  {
    "id": "kimi-k3",
    "displayName": "Kimi K3",
    "family": "kimi-k3",
    "contextTokens": 1048576,
    "maxOutputTokens": 1048576,
    "capabilities": {
      "text": true,
      "vision": true,
      "audioInput": false,
      "audioOutput": false,
      "imageGeneration": false,
      "video": true,
      "reasoning": true,
      "tools": true,
      "structuredOutput": true,
      "streaming": true,
      "files": "file-extract-to-system-message",
      "webSearch": "formulas-or-responses-only"
    },
    "parameters": {
      "temperature": false,
      "topP": false,
      "topK": false,
      "maxTokens": true,
      "reasoningEffort": ["low", "high", "max"],
      "thinkingBudget": false,
      "stop": true,
      "seed": "accepted-undocumented",
      "frequencyPenalty": false,
      "presencePenalty": false
    },
    "pricing": {
      "inputPerMillion": 3.0,
      "cachedInputPerMillion": 0.3,
      "outputPerMillion": 15.0,
      "longContextThresholdTokens": null,
      "longContextInputPerMillion": null,
      "longContextCachedInputPerMillion": null,
      "longContextOutputPerMillion": null,
      "imageInputPerMillionTokens": 3.0,
      "webSearchPerCall": 0.005,
      "batchInputPerMillion": null,
      "batchCachedInputPerMillion": null,
      "batchOutputPerMillion": null
    },
    "status": "active",
    "aliases": [],
    "notes": "Flagship (2.8T params, 1M context). Thinking always on per docs (/models: supports_thinking_type 'only'); reasoning_effort low|high|max, default max ('medium' also accepted). UNDOCUMENTED (probed): thinking:{type:'disabled'} and reasoning_effort:'none' return 200 with no reasoning. temperature fixed 1, top_p fixed 0.95, n=1, penalties 0 (any other value -> 400 'invalid temperature: only 1 is allowed for this model'). logprobs -> 400 'only false is allowed'. tool_choice 'required' OK, forcing a specific function -> 400 (thinking). max_completion_tokens default 131072, documented max 1048576 (API accepts 2000000 without error -> clamp client-side). Hidden system prompt ~95 tokens. Builtin $web_search is BROKEN on this model (step 2 -> 400 'tokenization failed'): use official tools (GET /v1/formulas/moonshot/web-search:latest/tools + POST .../fibers, encrypted_output as tool content) or /v1/responses tools:[{type:'web_search'}] (no annotations, URL inline; ~7.9k input tokens per search). Dynamic tool loading (system message with tools) K3-only. Also available on /v1/responses and /anthropic/v1/messages. Batch price not published for K3."
  },
  {
    "id": "kimi-k2.7-code",
    "displayName": "Kimi K2.7 Code",
    "family": "kimi-k2.7-code",
    "contextTokens": 262144,
    "maxOutputTokens": 32768,
    "capabilities": {
      "text": true,
      "vision": true,
      "audioInput": false,
      "audioOutput": false,
      "imageGeneration": false,
      "video": true,
      "reasoning": true,
      "tools": true,
      "structuredOutput": true,
      "streaming": true,
      "files": "file-extract-to-system-message",
      "webSearch": true
    },
    "parameters": {
      "temperature": false,
      "topP": false,
      "topK": false,
      "maxTokens": true,
      "reasoningEffort": false,
      "thinkingBudget": false,
      "stop": true,
      "seed": "accepted-undocumented",
      "frequencyPenalty": false,
      "presencePenalty": false
    },
    "pricing": {
      "inputPerMillion": 0.95,
      "cachedInputPerMillion": 0.19,
      "outputPerMillion": 4.0,
      "longContextThresholdTokens": null,
      "longContextInputPerMillion": null,
      "longContextCachedInputPerMillion": null,
      "longContextOutputPerMillion": null,
      "imageInputPerMillionTokens": 0.95,
      "webSearchPerCall": 0.005,
      "batchInputPerMillion": 0.57,
      "batchCachedInputPerMillion": 0.114,
      "batchOutputPerMillion": 2.4
    },
    "status": "active",
    "aliases": [],
    "notes": "Coding model, 256k context. Thinking ALWAYS on: thinking:{type:'disabled'} and reasoning_effort:'none' -> 400 'invalid thinking: only type=enabled is allowed for this model'; only {type:'enabled', keep:'all'} meaningful (Preserved Thinking always on -> replay reasoning_content on assistant messages; omission is tolerated by the API, probed). reasoning_effort low|medium|high|max silently accepted (no documented effect). Fixed temperature 1 / top_p 0.95 / n 1 / penalties 0. logprobs accepted. tool_choice 'required' and forced function -> 400 with thinking. json_object + strict json_schema reliable (docs: most stable model for structured output). Default max output 32768 (docs); API does not validate larger values. $web_search builtin round trip works (probed, ~9.3k prompt tokens for one search)."
  },
  {
    "id": "kimi-k2.7-code-highspeed",
    "displayName": "Kimi K2.7 Code (High-Speed)",
    "family": "kimi-k2.7-code",
    "contextTokens": 262144,
    "maxOutputTokens": 32768,
    "capabilities": {
      "text": true,
      "vision": true,
      "audioInput": false,
      "audioOutput": false,
      "imageGeneration": false,
      "video": true,
      "reasoning": true,
      "tools": true,
      "structuredOutput": true,
      "streaming": true,
      "files": "file-extract-to-system-message",
      "webSearch": null
    },
    "parameters": {
      "temperature": false,
      "topP": false,
      "topK": false,
      "maxTokens": true,
      "reasoningEffort": false,
      "thinkingBudget": false,
      "stop": true,
      "seed": "accepted-undocumented",
      "frequencyPenalty": false,
      "presencePenalty": false
    },
    "pricing": {
      "inputPerMillion": 1.9,
      "cachedInputPerMillion": 0.38,
      "outputPerMillion": 8.0,
      "longContextThresholdTokens": null,
      "longContextInputPerMillion": null,
      "longContextCachedInputPerMillion": null,
      "longContextOutputPerMillion": null,
      "imageInputPerMillionTokens": 1.9,
      "webSearchPerCall": 0.005,
      "batchInputPerMillion": null,
      "batchCachedInputPerMillion": null,
      "batchOutputPerMillion": null
    },
    "status": "active",
    "aliases": [],
    "notes": "Same model/behaviour as kimi-k2.7-code served at ~180 tok/s (up to 260 tok/s short context), exactly 2x the price. Thinking always on (disabled -> 400), fixed sampling params, tool_choice required/function -> 400. logprobs: every attempt returned 429 engine_overloaded_error (8/8) -> treat as unsupported, never send. Fastest probe latency (~1 s for a trivial prompt). $web_search not probed on this variant (works on kimi-k2.7-code). Batch pricing not listed."
  },
  {
    "id": "kimi-k2.6",
    "displayName": "Kimi K2.6",
    "family": "kimi-k2.6",
    "contextTokens": 262144,
    "maxOutputTokens": 32768,
    "capabilities": {
      "text": true,
      "vision": true,
      "audioInput": false,
      "audioOutput": false,
      "imageGeneration": false,
      "video": true,
      "reasoning": "switchable",
      "tools": true,
      "structuredOutput": "unreliable-json-schema-with-thinking",
      "streaming": true,
      "files": "file-extract-to-system-message",
      "webSearch": true
    },
    "parameters": {
      "temperature": false,
      "topP": false,
      "topK": false,
      "maxTokens": true,
      "reasoningEffort": false,
      "thinkingBudget": false,
      "stop": true,
      "seed": "accepted-undocumented",
      "frequencyPenalty": false,
      "presencePenalty": false
    },
    "pricing": {
      "inputPerMillion": 0.95,
      "cachedInputPerMillion": 0.16,
      "outputPerMillion": 4.0,
      "longContextThresholdTokens": null,
      "longContextInputPerMillion": null,
      "longContextCachedInputPerMillion": null,
      "longContextOutputPerMillion": null,
      "imageInputPerMillionTokens": 0.95,
      "webSearchPerCall": 0.005,
      "batchInputPerMillion": 0.57,
      "batchCachedInputPerMillion": 0.1,
      "batchOutputPerMillion": 2.4
    },
    "status": "active",
    "aliases": [],
    "notes": "General model, 256k context, text+image+video. The only model with a documented thinking switch: thinking:{type:'enabled'} (default, temp fixed 1.0) | {type:'disabled'} (temp fixed 0.6) | {type:'enabled', keep:'all'} (Preserved Thinking). reasoning_effort is undocumented here but accepted: low|medium|high|max no visible effect, 'none' disables thinking (probed). Fixed sampling params (400 otherwise). With thinking: tool_choice 'required' and forced function -> 400; with thinking disabled forced function works. json_object reliable; strict json_schema returned prose twice with thinking on and JSON preceded by ~300 blank lines with thinking off -> validate client-side (docs: 'occasionally unstable with complex schemas'). $web_search builtin round trip works (probed, ~7.3k prompt tokens per search) even with thinking on (docs claim incompatibility). Partial mode works (probed, non-thinking). Also answers on /v1/responses although docs list K3 only. Cheapest cache-hit price. Hidden prompt ~17 tokens."
  }
]
