> ## Documentation Index
> Fetch the complete documentation index at: https://platform.kimi.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Thinking Effort

Kimi K3 always reasons and configures **reasoning effort** with the top-level `reasoning_effort` field. The only supported value is currently `"max"`.

<Note>
  K3 always reasons and may return `reasoning_content`; more reasoning-effort levels are coming soon.
</Note>

## Set the reasoning effort

Set `reasoning_effort` at the top level of the request:

```json theme={null}
{
  "model": "kimi-k3",
  "messages": [{"role": "user", "content": "Derive the general formula for this sequence: 1, 4, 9, 25, 64, ..."}],
  "reasoning_effort": "max"
}
```

When migrating from K2.x to K3, set the reasoning level with the top-level `reasoning_effort: "max"` field.

<Tabs>
  <Tab title="curl">
    ```bash theme={null}
    $ curl https://api.moonshot.ai/v1/chat/completions \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $MOONSHOT_API_KEY" \
        -d '{
            "model": "kimi-k3",
            "messages": [
                {
                    "role": "user",
                    "content": "Derive the general formula for this sequence: 1, 4, 9, 25, 64, ..."
                }
            ],
            "reasoning_effort": "max"
        }'
    ```
  </Tab>

  <Tab title="python">
    ```python theme={null}
    import os
    from openai import OpenAI

    client = OpenAI(
        api_key=os.environ["MOONSHOT_API_KEY"],
        base_url="https://api.moonshot.ai/v1",
    )

    completion = client.chat.completions.create(
        model="kimi-k3",
        messages=[
            {"role": "user", "content": "Derive the general formula for this sequence: 1, 4, 9, 25, 64, ..."},
        ],
        reasoning_effort="max",
    )

    message = completion.choices[0].message
    if hasattr(message, "reasoning_content"):
        print(getattr(message, "reasoning_content"))
    print(message.content)
    ```
  </Tab>
</Tabs>

## Stay compatible with OpenAI via reasoning\_effort

If your code already uses OpenAI's `reasoning_effort` field, you do not need to rename it; K3 currently accepts only `"max"`. K3 always reasons and may return `reasoning_content`.

## Fields

| Field              | Type   | Required | Description                                                                           |
| ------------------ | ------ | -------- | ------------------------------------------------------------------------------------- |
| `reasoning_effort` | string | No       | K3's top-level reasoning-effort field; the only supported value is currently `"max"`. |

For multi-turn conversations and tool calls, K3 requires the complete assistant message returned by the API to be passed back to `messages` as-is, including `reasoning_content` and `tool_calls`.

## Notes

* Models differ in their support for `thinking` sub-fields and their defaults (for example, `kimi-k2.6` does not support `thinking.effort`, and `thinking.keep` does not preserve historical reasoning by default). See the [Model Parameter Reference](/api/models-overview);
* Lower `effort` levels, once available, will reduce `reasoning_content` token consumption and response latency — a good fit for lightweight tasks such as classification, rewriting, and simple Q\&A. For now, `max` is the only available level.

<Danger>
  **Switching `effort` currently does not affect prefix-cache hits.** Thinking effort currently supports only the `max` level. Once more levels are available, switching levels may invalidate the cache, so it is still recommended to decide on the `effort` level before the conversation starts and avoid switching it mid-session.
</Danger>

## Related reading

* [Kimi K3 API Tool Calling Best Practices](/guide/kimi-k3-tool-calling-best-practice): thinking-effort trade-offs in tool-calling scenarios
* [Thinking Mode](/guide/use-kimi-k2-thinking-model): per-model thinking behavior and Preserved Thinking
* [Model Parameter Reference](/api/models-overview): parameter differences across models
