API do Kimi K3: como obter uma chave e fazer a primeira chamada
Como acessar a API do Kimi K3: obtenha a chave, chame kimi-k3 com o SDK da OpenAI, esforço de raciocínio, streaming, imagens e os erros mais comuns no início.
Ler em MarkdownPara chamar o Kimi K3, você precisa de uma chave de API de uma plataforma que o ofereça e de uma solicitação com model definido como kimi-k3. A Moonshot AI o oferece na sua própria Kimi API Platform, onde o modelo é liberado após a primeira recarga. A SeedRouter o oferece com uma única chave, com pagamento por uso, no formato de solicitação oficial: aponte o SDK da OpenAI para https://api.seedrouter.ai/v1 e mantenha seu código.
Este guia usa a SeedRouter; os corpos das solicitações são os mesmos da API do próprio Kimi.
Como obter uma chave de API do Kimi K3?
- Entre na SeedRouter e abra API keys.
- Crie uma chave e copie-a; ela é mostrada uma única vez.
- Adicione crédito quando precisar. Contas novas começam com um pequeno saldo gratuito, e não há assinatura.
Guarde a chave em uma variável de ambiente como SEEDROUTER_API_KEY e use-a apenas em código do lado do servidor.
Como chamar o Kimi K3 em Python?
O Kimi K3 usa o formato Chat Completions, então o pacote oficial openai funciona como está:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SEEDROUTER_API_KEY"],
base_url="https://api.seedrouter.ai/v1",
)
completion = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Explain context caching in one sentence."}],
)
print(completion.choices[0].message.content)A resposta vem em content. O Kimi K3 raciocina antes de responder, e esse raciocínio volta em reasoning_content na mesma mensagem.
Como chamá-lo em Node.js ou cURL?
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.SEEDROUTER_API_KEY,
baseURL: "https://api.seedrouter.ai/v1",
});
const completion = await client.chat.completions.create({
model: "kimi-k3",
messages: [{ role: "user", content: "Explain context caching in one sentence." }],
});
console.log(completion.choices[0].message.content);curl https://api.seedrouter.ai/v1/chat/completions \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "kimi-k3", "messages": [{"role": "user", "content": "Explain context caching in one sentence."}]}'A mesma chave também atende a Responses API (/v1/responses) e o formato Anthropic Messages (/v1/messages) para kimi-k3.
Como definir o esforço de raciocínio?
O Kimi K3 sempre raciocina; não é possível desativar isso. reasoning_effort define quanto ele pensa antes de responder:
completion = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Find the bug: def avg(xs): return sum(xs) / len(xs)"}],
reasoning_effort="high",
)| Valor | Use para |
|---|---|
low | Passos rápidos e simples |
high | A maior parte do trabalho de código e análise |
max (padrão) | Os problemas mais difíceis |
Os tokens de raciocínio são cobrados como saída e contam para max_completion_tokens, cujo padrão é 131.072 e que vai até 1.048.576. No nosso teste com a mesma pergunta, low usou 25 tokens de saída e max usou 146.
Como receber a resposta em streaming?
Adicione stream=True. O raciocínio chega primeiro em delta.reasoning_content, depois a resposta em delta.content. Peça stream_options={"include_usage": True} para receber a contagem de tokens no último chunk:
stream = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Write a haiku about latency."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)Posso enviar imagens?
Sim, como data URIs em base64. O Kimi K3 não aceita URLs públicas de imagem; o seu quickstart diz: "Vision input does not support public image URLs" (a entrada de visão não aceita URLs públicas de imagem):
import base64
with open("chart.png", "rb") as f:
image = base64.b64encode(f.read()).decode()
completion = client.chat.completions.create(
model="kimi-k3",
messages=[{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image}"}},
{"type": "text", "text": "What does this chart show?"},
],
}],
)Quais erros esperar?
| Erro | Causa | Solução |
|---|---|---|
400 em temperature, top_p, n ou uma penalidade | O Kimi K3 os fixa (1,0, 0,95, 1, 0) | Deixe-os de fora |
400 em reasoning_effort | Um valor diferente de low, high ou max | Use um dos três |
| 400 em uma imagem | Uma URL pública em vez de um data URI | Envie a imagem em base64 |
| 401 | Chave ausente ou errada | Verifique o cabeçalho Authorization |
Os erros retornam {"error": {"code": ..., "message": "..."}}, e uma solicitação que falha não é cobrada.
Perguntas frequentes
A API do Kimi K3 é compatível com a OpenAI?
Sim. O Kimi K3 aceita os formatos Chat Completions e Responses, então o SDK da OpenAI funciona trocando apenas a URL base e o modelo. Ele também aceita o formato Anthropic Messages.
Preciso de uma conta na Moonshot para usar o Kimi K3?
Não na SeedRouter. Você entra na SeedRouter, cria uma chave lá e paga com o seu saldo da SeedRouter.
Quanto custa uma solicitação ao Kimi K3?
Ela é cobrada por token de entrada e de saída. O guia de preços do Kimi K3 traz as taxas ao vivo e exemplos calculados.
Onde está a lista completa de parâmetros?
A referência da API do Kimi K3 lista todos os campos, e a página do Kimi K3 tem um playground e os preços ao vivo.



