[Moonshot AI](/ai-gateway/models/labs/moonshotai)

# Kimi K2 Instruct

Kimi K2 Instruct is Moonshot AI's Mixture-of-Experts (MoE) language model with one trillion total parameters and 32 billion active per forward pass, a context window of 131.1K tokens, available through AI Gateway via Novita AI. Your use is subject to Moonshot AI's [Terms](https://platform.moonshot.ai/docs/agreement/modeluse.en-US) & [Privacy](https://platform.moonshot.ai/docs/agreement/userprivacy.en-US) Policies.

Tool Use

[Use with AI Gateway](https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%3Futm_source%3Dgateway-model-page%26utm_campaign%3Dai-gateway-models&title=Get+Started+with+Vercel+AI+Gateway) [View docs](https://vercel.com/docs/ai-gateway)

AI SDKChat CompletionsMessagesResponses

```
1import { streamText } from 'ai'
2

3const result = streamText({
4  model: 'moonshotai/kimi-k2',
5  prompt: 'Why is the sky blue?'
6})
```

[Read docs](https://vercel.com/docs/ai-gateway/sdks-and-apis/ai-sdk)

[Overview](/ai-gateway/models/kimi-k2) [API](/ai-gateway/models/kimi-k2/api) [About](/ai-gateway/models/kimi-k2/about) [Providers](/ai-gateway/models/kimi-k2/providers) [Throughput](/ai-gateway/models/kimi-k2/throughput) [Latency](/ai-gateway/models/kimi-k2/latency) [Uptime](/ai-gateway/models/kimi-k2/uptime) [Status](/ai-gateway/models/kimi-k2/status) [Similar](/ai-gateway/models/kimi-k2/similar) [FAQ](/ai-gateway/models/kimi-k2/faq)

## Getting started

Call Kimi K2 Instruct through AI Gateway with the AI SDK `generateText` and `streamText` functions, or through the OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages APIs by changing the base URL. AI Gateway authenticates the request and routes it to an available provider.

Install the AI SDK (`pnpm add ai dotenv`), create an API key from the [API Keys page](/d?to=%2F%5Bteam%5D%2F%7E%2Fai-gateway%2Fapi-keys&title=AI+Gateway+API+Keys), and set it as `AI_GATEWAY_API_KEY` in your environment. Full setup is covered in the [text generation quickstart](/docs/ai-gateway/getting-started/text).

index.ts

```
1import { generateText } from 'ai';
2import 'dotenv/config';
3

4async function main() {
5  const result = await generateText({
6    model: 'moonshotai/kimi-k2',
7    prompt: 'Why is the sky blue?',
8  });
9

10  console.log(result.text);
11}
12

13main().catch(console.error);
```

## Top-level parameters

The same Kimi K2 Instruct request in each API format AI Gateway supports.

top-level-params.ts

4async function main() {
5  const result = await generateText({
6    model: 'moonshotai/kimi-k2',
7    system: 'You are a concise technical assistant.',
8    prompt: 'Summarize the tradeoffs between static generation and SSR.',
9    maxOutputTokens: 1024,
10    temperature: 0.5,
11  });
12

13  console.log(result.text);
14}
15

16main().catch(console.error);
```

Standard parameters like `prompt`, `messages`, `temperature`, and `tools` work as documented in the AI SDK docs. These are the parameters with model-specific behavior.

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `model` | `string` | Yes | Model ID in the form `creator/model`, e.g. `moonshotai/kimi-k2`. AI Gateway routes the request to an available provider. |
| `maxOutputTokens` | `number` | No | Hard cap on generated tokens. Kimi K2 Instruct supports up to `131,072` output tokens. |
| `providerOptions` | `Record<string, JSONValue>` | No | AI Gateway routing options under `gateway`, plus any provider-native options under the provider’s own namespace — see the table below. |

## Input limits

| Input | Formats | Sources | Max count | Max size | Limits |
| --- | --- | --- | --- | --- | --- |
| Text | — | — | — | — | Prompt and response share the 131K-token context window |

## Provider options

Set AI Gateway routing options under `providerOptions.gateway`. For provider-specific options, pass them under the provider’s namespace as documented by the AI SDK.

Learn more in the [AI SDK moonshotai provider docs](https://ai-sdk.dev/providers/ai-sdk-providers/moonshotai).

provider-options.ts

4async function main() {
5  const result = await generateText({
6    model: 'moonshotai/kimi-k2',
7    prompt: 'Why is the sky blue?',
8    providerOptions: {
9      gateway: {
10        only: ['novita'],
11      },
12    },
13  });
14

15  console.log(result.text);
16}
17

18main().catch(console.error);
```

These AI Gateway routing options apply to every model. Provider-specific options pass through under the provider’s own namespace (for example `providerOptions.anthropic`) exactly as documented by the AI SDK.

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `providerOptions.gateway.only` | `string[]` | No | Restrict routing to these provider slugs. Requests fail over only within the listed providers. |
| `providerOptions.gateway.order` | `string[]` | No | Preferred provider order. Listed providers are tried first; unlisted providers remain available as fallbacks. |
| `providerOptions.gateway.sort` | `'cost' \| 'ttft' \| 'tps'` | No | Rank candidate providers by price, time to first token, or tokens per second instead of the default routing order. |
| `providerOptions.gateway.zeroDataRetention` | `boolean` | No | Route only to providers with a zero-data-retention policy for this model. |

### Routing across providers

AI Gateway serves the same model through multiple providers and fails over automatically. `order` expresses a preference while keeping every provider eligible; `only` is a hard allowlist — if none of the listed providers are available the request fails instead of falling back.

Options under a provider's own namespace (for example `providerOptions.anthropic`) are forwarded to that provider with the request. Providers ignore option namespaces that don't apply to them, so it is safe to set provider options alongside `gateway` routing options.

## Tool calling

Expose tools the model can call. Define each tool’s inputs with a Zod schema.

tool-calling.ts

```
1import { generateText, tool } from 'ai';
2import { z } from 'zod';
3import 'dotenv/config';
4

5async function main() {
6  const result = await generateText({
7    model: 'moonshotai/kimi-k2',
8    prompt: 'What is the weather in San Francisco?',
9    tools: {
10      getWeather: tool({
11        description: 'Get the current weather for a location',
12        inputSchema: z.object({ location: z.string() }),
13        execute: async ({ location }) => ({ location, temperatureC: 18 }),
14      }),
15    },
16  });
17

18  console.log(result.text);
19}
20

21main().catch(console.error);
```