
Kimi K3 API
Moonshot's flagship Kimi model with a huge context window — for very long documents and multi-step agents. 1M-token context, streaming and an OpenAI-compatible endpoint, billed per token in prepaid credits — no subscription.
from $2.463 per 1M input tokens · $12.323 output
- Context window: 1M tokens
- Tool calling: yes (OpenAI tools)
- Thinking mode: no
Pricing
Billed per token: input (every message you send) and output (the reply, including reasoning) at separate rates. Credits are reserved when the request starts and settled to the actual usage when it ends.
| Tokens | Credits per 1M | USD per 1M |
|---|---|---|
| Input | 197.028 credits | $2.463 ≈ $0.0025 per 1K |
| Output | 985.815 credits | $12.323 ≈ $0.0123 per 1K |
USD figures are converted at the Scale pack rate; larger packs are cheaper per credit. See pricing for the full pack list.
What a 1M-token month costs
750,000 tokens input + 250,000 tokens output = 394.225 credits ≈ $4.928.
75/25 input/output mix, at the Scale pack rate. Reasoning tokens count as output.
List prices elsewhere
Publicly listed per-token prices for the same model at the vendor and other providers, read from their own pricing pages. Prices change without notice — follow the links for the current figure.
| Provider | Input $/1M | Output $/1M | Blended $/1M | Checked on |
|---|---|---|---|---|
| genmux API 197.028 / 985.815 credits · at the Scale pack rate | $2.463 | $12.323 | $4.928 | live |
| Moonshot AI Cache-miss/standard price; cache-hit input is $0.30. | $3.00 | $15.00 | $6.00 | 2026-09-06 |
18% below the Moonshot AI list price: $4.928 vs $6.00 per 1M tokens at a 75/25 input/output mix.
Blended = 75 % input + 25 % output. Our figure is in USD at the Scale pack rate for comparability; competitor list prices as checked on 2026-09-06.
At a glance
- Model id
- kimi-k3
- Capability
- text.chat
- Context window
- 1M tokens
- Max output
- 16,384 tokens
- Default max_tokens
- 2,048 tokens
- Thinking mode
- no
- Web search
- no
- Image input
- no
- Tool calling
- yes (OpenAI tools)
- Streaming
- yes (SSE)
- OpenAI SDK
- compatible (set base_url)
Quick start
Create a key in the dashboard, then call the OpenAI-compatible endpoint directly or through the official OpenAI SDK with a custom base_url. The usage block of every response carries the credits charged.
cURL
curl -s -X POST https://api.genmux.tech/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"kimi-k3","messages":[{"role":"system","content":"You are a concise assistant."},{"role":"user","content":"Explain idempotency keys in two sentences."}],"max_tokens":200}'{
"id": "0d8b6a3e-2f1c-4a5b-9c1d-7e2f3a4b5c6d",
"object": "chat.completion",
"created": 1756411279,
"model": "kimi-k3",
"choices": [
{"index": 0, "message": {"role": "assistant", "content": "…"}, "finish_reason": "stop"}
],
"usage": {"prompt_tokens": 31, "completion_tokens": 58, "total_tokens": 89, "cost": 0.063, "cost_source": "vendor"}
}cURL · streaming
curl -sN -X POST https://api.genmux.tech/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"kimi-k3","messages":[{"role":"system","content":"You are a concise assistant."},{"role":"user","content":"Explain idempotency keys in two sentences."}],"max_tokens":200,"stream":true}'data: {"id":"0d8b6a3e-…","object":"chat.completion.chunk","model":"kimi-k3","choices":[{"index":0,"delta":{"role":"assistant","content":"An"},"finish_reason":null}]}
data: {"id":"0d8b6a3e-…","object":"chat.completion.chunk","model":"kimi-k3","choices":[{"index":0,"delta":{"content":" idempotency"},"finish_reason":null}]}
…
data: {"id":"0d8b6a3e-…","object":"chat.completion.chunk","model":"kimi-k3","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"0d8b6a3e-…","object":"chat.completion.chunk","model":"kimi-k3","choices":[],"usage":{"prompt_tokens":31,"completion_tokens":58,"total_tokens":89,"cost":0.063,"cost_source":"estimated"}}
data: [DONE]Python · openai SDK
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.genmux.tech/v1", api_key=os.environ["API_KEY"])
completion = client.chat.completions.create(
model="kimi-k3",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain idempotency keys in two sentences."},
],
max_tokens=200,
)
print(completion.choices[0].message.content)
print(completion.usage.total_tokens, "tokens,", completion.usage.model_extra["cost"], "credits")Node.js · openai SDK
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.genmux.tech/v1", apiKey: process.env.API_KEY });
const completion = await client.chat.completions.create({
model: "kimi-k3",
messages: [
{ role: "system", content: "You are a concise assistant." },
{ role: "user", content: "Explain idempotency keys in two sentences." },
],
max_tokens: 200,
});
console.log(completion.choices[0].message.content);
console.log(completion.usage.total_tokens, "tokens,", completion.usage.cost, "credits");
// Streaming: the final chunk carries usage
const stream = await client.chat.completions.create({
model: "kimi-k3",
messages: [{ role: "user", content: "Explain idempotency keys in two sentences." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
if (chunk.usage) console.log(`\n${chunk.usage.total_tokens} tokens, ${chunk.usage.cost} credits`);
}Python · streaming, reading usage
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.genmux.tech/v1", api_key=os.environ["API_KEY"])
stream = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Explain idempotency keys in two sentences."}],
max_tokens=200,
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage: # the last chunk: token counts and the credits charged
print(f"\n{chunk.usage.total_tokens} tokens, {chunk.usage.model_extra['cost']} credits")Frequently asked questions
- What is the Kimi K3 API?
- Moonshot's flagship Kimi model with a huge context window — for very long documents and multi-step agents. Kimi K3 belongs to Moonshot's Kimi K3 family. The weights are published under the Modified MIT license, so the same model can be self-hosted; here it is served as a managed API. On genmux API it sits behind an OpenAI-compatible chat completions endpoint with a 1M-token context window, billed per token in prepaid credits.
- How much does Kimi K3 cost per 1M tokens?
- Input tokens cost 197.028 credits per 1M (about $2.463 at the Scale pack rate) and output tokens 985.815 credits per 1M (about $12.323). Every message in the request — system, user and earlier assistant turns — is input; the reply, including any reasoning, is output. A month of 750,000 tokens in and 250,000 tokens out comes to 394.225 credits, about $4.928. Credits are prepaid: no subscription and no per-seat fee.
- Which other models is Kimi K3 comparable to?
- The only Kimi tier in our catalogue; it stands out mainly for its exceptionally long context window. Every model in the catalogue is reachable through the same endpoint and key, so a comparison is a matter of changing the model field and reading the usage block of each response; GET /v1/models lists context windows, limits and prices side by side.
- When is Kimi K3 worth its price over a cheaper model?
- When the quality of the answer is the product: general chat and assistants, step-by-step reasoning, multi-step agent loops and long documents. Route the routine traffic — short classifications, drafts, extraction — to a cheaper model and keep Kimi K3 for the calls that need it. With one key and one request shape the split is a routing rule in your code, not a second integration.
- What are the context window and max_tokens limits of Kimi K3?
- 1M tokens of context, shared between the prompt and the completion. max_tokens caps the reply: the model accepts up to 16,384 and uses 2,048 when you omit the field. A prompt that leaves no room for a reply is rejected with 400 context_length_exceeded before anything is charged, and a reply cut off by the cap ends with finish_reason "length".
- Does Kimi K3 support streaming?
- Yes. Send "stream": true and the response is text/event-stream: one chat.completion.chunk per token on data: lines, then a final chunk with an empty choices array and a usage object — prompt_tokens, completion_tokens, total_tokens and cost, the credits charged — followed by data: [DONE]. Read usage from that last chunk; the OpenAI SDKs expose it as chunk.usage. If the upstream fails mid-stream you get a data: {"error": {...}} frame and then [DONE].
- Can I use the OpenAI SDK with Kimi K3?
- Yes. Point base_url at https://api.genmux.tech/v1, use your genmux API key as api_key and set model to "kimi-k3". Chat completions with system, user and assistant messages, streaming, max_tokens, temperature, top_p and stop work as in the SDK. Tools and function calling work as in the SDK too, and response_format json_object / json_schema is validated. n greater than 1 and logprobs are rejected with 400 unsupported_parameter rather than being silently ignored.
- Does Kimi K3 support tool calling for coding agents?
- Yes. Send tools and tool_choice as on the OpenAI API; the reply carries tool_calls (streamed as delta.tool_calls) and you return results as role: tool messages. Function calling is emulated by the api — the tools are rendered into the prompt and parsed back — so it works with OpenCode, Cline, Roo Code, Continue and any OpenAI SDK loop; tool definitions count as prompt tokens (about 40 per tool plus the schema). Configs and measured pass rates are on the coding agents page.
- What am I charged when a request fails or I abort a stream?
- Nothing when no tokens were produced: a rejected request, a 503 model_unavailable or a 502 upstream_error refunds the reservation in full. Credits are reserved for the estimated prompt plus min(max_tokens, 2,048) output tokens and settled to the actual usage when the call ends, so an unused reservation is released. If you close a stream early you pay only for the tokens generated up to that point.
- What are the rate limits, and how do API keys work?
- Each key has a requests-per-second limit (10 by default) and each account a cap on concurrent requests (20 by default); beyond either you get 429 rate_limited with a Retry-After header. Keys are created in the dashboard, shown once, and can carry an IP allowlist and an expiry date. One key works for every model in the catalogue, text and image alike.
- Do you store my prompts and completions?
- No. The generation record keeps a preview of the last user message (up to 200 characters), the number of messages, a SHA-256 hash of the messages, the token counts and the cost — never the messages or the reply themselves. GET /v1/generations/{id} returns that record so you can reconcile usage; the content exists only in your own process and at the model provider for the duration of the call.
- Can I use Kimi K3's output commercially?
- Yes. Under our terms of service you own the rights we can pass on to the text the model writes for you and may use it commercially, provided the prompts and the use comply with the terms and the model provider's usage policy. Read the terms before shipping anything customer-facing.
- How do I switch from Kimi K3 to another model?
- Change the model field — nothing else in the request changes, and the same key and balance apply. GET /v1/models lists every id with its context window, limits and prices, and marks which ones accept enable_thinking, web_search and images.
Keep reading
- Function calling on DeepSeek, Qwen and Doubao, emulated
How genmux gives OpenAI-style tools to DeepSeek, Qwen3 and Doubao when the upstream drops the tools field: prompt tags, tolerant parser, pass rates, JSON mode.
7 September 2026
- Thinking models: when to enable reasoning and what it costs
How enable_thinking works across genmux's chat models, why reasoning tokens are billed as output, and a worked example of what that does to your bill.
7 September 2026
- Streaming chat completions over SSE, cost in the last chunk
Parse genmux's server-sent event stream for chat completions in Python and Node, find the usage object in the final chunk, and handle mid-stream aborts.
7 September 2026
Other models
Same key, same request shape — switch by changing the model field.
Doubao Seed 2.0 Pro API
doubao-seed-2-proByteDance's flagship Doubao model with vision and web search — for complex reasoning and multimodal tasks.
$1.063 in · $5.10 out per 1M tokens
Doubao Seed 2.0 Code API
doubao-seed-2-codeDoubao's coding-tuned model with vision — for agentic coding, refactors and UI-from-screenshot tasks.
$1.063 in · $5.10 out per 1M tokens
Doubao Seed 2.0 Lite API
doubao-seed-2-liteMid-tier Doubao model with vision — general assistants and image-aware chat at a lower cost than Pro.
$0.213 in · $1.063 out per 1M tokens
Doubao Seed 2.0 Mini API
doubao-seed-2-miniThe cheapest Doubao model with vision — high-volume, latency-sensitive chat and simple image tasks.
$0.027 in · $0.85 out per 1M tokens
Claude Opus 5.5 API
claude-opus-5-5Anthropic's top Claude Opus model — strong reasoning and agentic coding with a large context window for complex, multi-step work.
$1.836 in · $9.18 out per 1M tokens
Claude Fable 5.1 API
claude-fable-5-1Anthropic's premium Claude model for long-form writing — polished drafting and editing with a large context window.
$21.25 in · $21.25 out per 1M tokens
Image models
The same key and balance also buy image generation: Nano Banana, Seedream, Qwen-Image, FLUX and more, billed per image.