> This page is for Model APIs.

> Sarvam Voice Agents (Samvaad) is a voice AI agent platform for Indian languages: build, test and deploy AI calling agents on your own phone numbers, from ₹3 a minute. Start here: https://docs.sarvam.ai/voice-agents/why-voice-agents.
> For clean Markdown of any page, append `.md` to the page URL.
> For a complete documentation index, see https://docs.sarvam.ai/llms.txt. For a section index, append `/llms.txt` to any section URL (for example https://docs.sarvam.ai/voice-agents/llms.txt).
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server.

# MiMo V2.6 Pro

> MiMo V2.6 Pro is an open-weight reasoning model with text, image, audio, and video input, a 1,048,576-token context window, tool calling, and structured output.

MiMo V2.6 Pro (checkpoint `MiMo-V2.6-Pro-MOPD`) is the larger model in the MiMo V2.6
family (1.02T total parameters, 42B active), served on Sarvam infrastructure as an
[open-weight model](/api/token-factory/models). It has a **1,048,576-token
context window** and shares its API behaviour with
[MiMo V2.6 Flash](/api/token-factory/models/mimo-v2.6-flash).

> **Note**
>
> MiMo V2.6 Pro is in **beta**. Its behaviour, limits, and availability may change before general availability. Beta models must be enabled for your API key; without access, requests return `400 invalid_request_error` ("This model is currently in beta"). [Contact us](/api/getting-started/help) to request access. See [Beta models](/api-reference/beta-apis).

## At a glance

|                    |                                                                                                                                    |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Model ID**       | `mimo-v2.6-pro`                                                                                                                    |
| **Parameters**     | 1.02T total, 42B active                                                                                                            |
| **Best for**       | Harder reasoning and agentic tasks over long text                                                                                  |
| **Context window** | 1,048,576 tokens                                                                                                                   |
| **Input → output** | Text + image + audio + video → text (video on chat only). See [Media input](#media-input)                                          |
| **Reasoning**      | On by default; can be turned off. See [Reasoning](#reasoning)                                                                      |
| **Tool calling**   | Supported, including `tool_choice: "required"` and parallel tool calls                                                             |
| **APIs**           | [`POST /v2/chat/completions`](/api-reference/chat/chat-completions-v2) and [`POST /v2/responses`](/api-reference/responses/create) |
| **Pricing**        | ₹40 input · ₹0.3 cached input · ₹80 output per 1M tokens; reasoning is billed as output ([Pricing](/api/getting-started/pricing))  |

## Key capabilities

#### Long context

Process up to 1,048,576 tokens across the prompt, reasoning, and generated output.

#### Reasoning on or off

Thinks by default; turn thinking off for faster, cheaper direct answers.

#### Image, audio, and video input

Send base64 images, audio, and video alongside text.

#### Tool calling

Use OpenAI-compatible `tools` and `tool_choice` for agentic workflows.

#### Structured output

Constrain answers with `response_format` JSON schemas.

#### Log probabilities

Request `logprobs` and `top_logprobs`, and `n` > 1 choices.

> **Tip**
>
> Moving from [OpenRouter](/api/token-factory/migrations/from-openrouter/overview), [Fireworks AI](/api/token-factory/migrations/from-fireworks/overview), or [Together AI](/api/token-factory/migrations/from-together/overview)? The migration guides map model IDs and request fields to Sarvam.

## Quickstart

#### Python

```python
from sarvamai import SarvamAI

client = SarvamAI(api_subscription_key="YOUR_SARVAM_API_KEY")

response = client.chat.completions_v2(
    model="mimo-v2.6-pro",
    messages=[
        {
            "role": "user",
            "content": "List three ways to reduce cold-start latency in a serverless API.",
        }
    ],
    max_tokens=2000,
)

print(response.choices[0].message.content)
```

#### JavaScript

```javascript
import { SarvamAIClient } from "sarvamai";

const client = new SarvamAIClient({
    apiSubscriptionKey: "YOUR_SARVAM_API_KEY",
});

async function main() {
    const response = await client.chat.completionsV2({
        model: "mimo-v2.6-pro",
        messages: [
            {
                role: "user",
                content: "List three ways to reduce cold-start latency in a serverless API.",
            },
        ],
        max_tokens: 2000,
    });

    console.log(response.choices[0].message.content);
}

main();
```

#### cURL

```bash
curl -X POST https://api.sarvam.ai/v2/chat/completions \
  -H "api-subscription-key: $SARVAM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mimo-v2.6-pro",
    "messages": [
      {
        "role": "user",
        "content": "List three ways to reduce cold-start latency in a serverless API."
      }
    ],
    "max_tokens": 2000
  }'
```

## Supported parameters

`model: "mimo-v2.6-pro"` on [Chat Completion V2](/api-reference/chat/chat-completions-v2)
and [Responses](/api-reference/responses/create). Full request/response schemas live on
those API reference pages; this table covers what's actually accepted for this model.

| Parameter                                             |                            Chat Completion V2                           |                                               Responses                                               |
| ----------------------------------------------------- | :---------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------: |
| Streaming (`stream`)                                  |                                                                         |                                                                                                       |
| Image input (base64)                                  |                                `image_url`                              |                                              `input_image`                                            |
| Audio input (base64)                                  |                       `input_audio` or `audio_url`                      |                                           `input_audio` only                                          |
| Video input (base64)                                  |                                `video_url`                              |                                                  `400`                                                |
| Tool calling (`tools`, `tool_choice`)                 |                                                                         |                                                                                                       |
| `parallel_tool_calls: false` enforced                 |                                                                         |                                                                                                       |
| Structured output (`response_format` / `text.format`) |                                                                         |                                                                                                       |
| Log probabilities (`logprobs`, `top_logprobs`)        |                                                                         |  send `top_logprobs` with `include: ["message.output_text.logprobs"]`; `logprobs: true` returns `400` |
| Multiple choices (`n` > 1)                            |                                                                         |                                       N/A — Responses has no `n`                                      |
| Reasoning control                                     | Any value but `"none"` just switches thinking on; doesn't change effort |                                 Same behaviour via `reasoning.effort`                                 |
| Turn reasoning off                                    |                        `reasoning_effort: "none"`                       |                                       `reasoning.effort: "none"`                                      |

## Reasoning

MiMo V2.6 Pro **thinks by default**. Thinking is either on or off: any effort value other than
`"none"` (`low`, `high`, `max`, and so on) only switches thinking on; it doesn't change how
much the model thinks.

Turn thinking off with any of:

| Setting                                            | Where                                                                                                                                     |
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `reasoning_effort: "none"`                         | [Chat Completion V2](/api-reference/chat/chat-completions-v2); `reasoning.effort: "none"` on [Responses](/api-reference/responses/create) |
| `thinking: {"type": "disabled"}`                   | Through `extra_body` in the SDKs                                                                                                          |
| `chat_template_kwargs: {"enable_thinking": false}` | Through `extra_body` in the SDKs                                                                                                          |

```python
response = client.chat.completions_v2(
    model="mimo-v2.6-pro",
    messages=[{"role": "user", "content": "What is 17 × 23?"}],
    extra_body={"thinking": {"type": "disabled"}},
    max_tokens=2000,
)
```

Read the reasoning trace from `choices[].message.reasoning_content` on chat. On Responses,
`output` starts with a `reasoning` item; read its `content[0].text` (`summary` is empty).
Reasoning tokens are billed as output tokens and count against `max_tokens` /
`max_output_tokens`.

## Tool calling

Pass OpenAI-compatible `tools`. `tool_choice` accepts `"auto"`, `"none"`, `"required"`, or a
named function (`{"type": "function", "function": {"name": "..."}}`). The model
can return several tool calls in one turn; set `parallel_tool_calls: false` to get at most one.

## Structured output

Pass a JSON schema in `response_format`:

```python
response = client.chat.completions_v2(
    model="mimo-v2.6-pro",
    messages=[{"role": "user", "content": "Give a city and its country."}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "city",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                    "country": {"type": "string"},
                },
                "required": ["city", "country"],
                "additionalProperties": False,
            },
        },
    },
    max_tokens=2000,
)
```

## Media input

MiMo V2.6 Pro accepts **images, audio, and video** alongside text. Send every file **inline as a
base64 data URI**; remote `http(s)` URLs return `400`.

| Input | Chat Completion V2                                                                                                     | Responses                                | Formats                         |
| ----- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------------------- |
| Image | `image_url` part                                                                                                       | `input_image` part                       | PNG, JPEG, WebP, GIF, BMP, TIFF |
| Audio | `input_audio` part (`data`, `format`: `wav` or `mp3`), or `audio_url` part with a data URI (WAV, MP3, FLAC, OGG, Opus) | `input_audio` part only (`wav` or `mp3`) | WAV, MP3, FLAC, OGG, Opus       |
| Video | `video_url` part with a data URI                                                                                       | Not supported                            | MP4                             |

```python
import base64

def data_uri(path, mime):
    with open(path, "rb") as f:
        return f"data:{mime};base64," + base64.b64encode(f.read()).decode()

with open("question.wav", "rb") as f:
    audio_b64 = base64.b64encode(f.read()).decode()

response = client.chat.completions_v2(
    model="mimo-v2.6-pro",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Answer the question in the audio, using the chart and the clip."},
                {"type": "image_url", "image_url": {"url": data_uri("chart.png", "image/png")}},
                {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}},
                {"type": "video_url", "video_url": {"url": data_uri("clip.mp4", "video/mp4")}},
            ],
        }
    ],
    max_tokens=2000,
)
```

**Thinking and audio:** when the latest user message contains audio, the model answers
without thinking by default. To think anyway, send
`chat_template_kwargs: {"enable_thinking": true}` (through `extra_body` in the SDKs). Audio in
earlier turns doesn't change the default.

**Limits:**

* Request body up to 40 MiB, including base64 media. Base64 adds about 33%, so about 30 MB of
  raw media fits in one request.
* Up to 999 files of each type per request.
* Images are resized to about 8.4 megapixels.
* Video is sampled to 32 frames. Resolution isn't capped: higher-resolution video, including 4K, is accepted and uses more tokens.
* Audio up to 10 minutes per file.

Media tokens are billed as input and reported in `usage.prompt_tokens_details` as
`image_tokens`, `audio_tokens`, and `video_tokens`.

## Known limitations

* Media must be inline base64; remote URLs return `400`. Video works on Chat Completion V2 only.
* Plain one-colour images are often described as "white" or "black".
* Reasoning and the final answer share the **`max_tokens`** / **`max_output_tokens`** budget.
* `stop` strings match the answer only, not the thinking.
* Set **`max_tokens`** explicitly. When it's omitted, generation isn't capped at a small
  default and long answers can run to tens of thousands of tokens.

## Limits and errors

| Area               | Limit or condition                                   | API response                                               | Recommended action                                                                          |
| ------------------ | ---------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| Output             | `max_tokens` exceeds 1,048,576                       | `400 invalid_request_error`                                | Set `max_tokens` within the context window.                                                 |
| Request size       | Request body exceeds 40 MiB (41,943,040 bytes)       | `413 invalid_request_error`, with the limit in the message | Send smaller or fewer media files. Base64 adds about 33%, so about 30 MB of raw media fits. |
| Media URL          | An image, audio, or video part uses an `http(s)` URL | `400 invalid_request_error`                                | Send the file inline as a base64 data URI.                                                  |
| Video on Responses | A Responses request includes video                   | `400 invalid_request_error`                                | Send video on Chat Completion V2.                                                           |
| Media count        | More than 999 files of one type in a request         | Request rejected                                           | Split the request.                                                                          |
| Reasoning          | Reasoning consumes the full `max_tokens` budget      | `200` with `finish_reason: "length"`                       | Raise `max_tokens` or lower the reasoning effort.                                           |
| Authentication     | API key is missing or invalid                        | `403 invalid_api_key_error`                                | Check the `api-subscription-key` header.                                                    |
| Model              | Model ID is unknown or unavailable                   | `404 not_found_error`                                      | Check the spelling; model IDs are case-sensitive.                                           |
| Quota              | No credits remain                                    | `402 insufficient_quota_error`                             | Add credits in the [dashboard](https://indus.sarvam.ai/billing?ref=docs).                   |
| Rate limit         | Request or concurrency limit is exceeded             | `429 rate_limit_exceeded_error`                            | Back off and retry.                                                                         |
| Availability       | Model remains overloaded after retries               | `503 model_overloaded`                                     | Retry later.                                                                                |