Die Kimi K3.1 Pro API läuft unter https://api.moonshot.ai/v1 mit den Modell-IDs kimi-k3.1-pro und kimi-k3.1-pro-highspeed. Sie spricht drei Wire-Formate: OpenAI Chat Completions, die Responses API und Anthropic Messages – die SDKs, die Sie bereits verwenden, funktionieren also mit einer geänderten Base-URL. Das Modell wird nach einer Mindestaufladung von 1 $ freigeschaltet.
Dies ist die Referenz für Produktionscode. Für Ihren ersten Aufruf, Streaming und die Einrichtung mit Codex oder Claude Code lesen Sie So verwenden Sie Kimi K3.1 Pro; zu den Kosten siehe Kimi K3.1 Pro Preise. Die Fakten stammen aus Moonshots K3.1 Pro Quickstart und den verlinkten Dokumenten, gelesen am 24. Oktober 2026.
Kimi K3.1 Pro Responses API, Anthropic API und Chat Completions
Moonshot stellt K3.1 Pro über drei API-Oberflächen bereit. Wählen Sie diejenige, die Ihre Client-Bibliothek oder Ihr Agent bereits spricht; Modell, Schlüssel und Abrechnung sind bei allen drei identisch.
| Oberfläche | Format | Endpoint | Typischer Client |
|---|---|---|---|
| Chat Completions | OpenAI | https://api.moonshot.ai/v1/chat/completions |
openai SDK, die meisten Frameworks |
| Responses API | OpenAI Responses | https://api.moonshot.ai/v1/responses |
Codex (wire_api = "responses") |
| Messages API | Anthropic | https://api.moonshot.ai/anthropic/v1/messages |
Anthropic SDK, Claude Code |
Sie unterscheiden sich darin, wie Sie die Cache-TTL festlegen und wo die Nutzung landet (siehe Caching unten). Sie kommen von K3? Unser Kimi K3 API-Leitfaden gilt weiterhin; K3.1 Pro ist ein nachtrainiertes K3 mit demselben Kontext von 1.048.576 Token.
Kimi K3.1 Pro API-Schlüssel: freischalten und Zugriff prüfen
Sie benötigen ein aufgeladenes Konto und einen Schlüssel aus dem richtigen Produkt. Vier Schritte:
- Laden Sie mindestens 1 $ auf der Kimi API-Plattform auf. K3.1 Pro ist ein Flaggschiffmodell und wird erst nach einer erfolgreichen Aufladung freigeschaltet.
- Erstellen Sie einen Schlüssel in der API-Schlüssel-Konsole und exportieren Sie ihn als
MOONSHOT_API_KEY. - Bestätigen Sie mit
GET /v1/models, dass das Modell für diesen Schlüssel sichtbar ist. - Rufen Sie
kimi-k3.1-proaus dem Code auf.
curl https://api.moonshot.ai/v1/models \
--header "Authorization: Bearer $MOONSHOT_API_KEY" | grep -o '"kimi-k3.1-pro[^"]*"'
Wenn das Modell nicht aufgeführt ist, beheben Sie das zuerst. Kimi API, Kimi Code und Kimi Membership sind separate Produkte: Ein Kimi Code-Schlüssel funktioniert nicht am API-Endpoint, und eine Mitgliedschaft wird nicht zu API-Guthaben.
Anfrageparameter, die für K3.1 Pro wichtig sind
Die meisten OpenAI-Parameter verhalten sich wie erwartet. Diese hier weichen ab oder sorgen für Überraschungen:
| Parameter | Wissenswertes |
|---|---|
reasoning_effort |
Feld auf oberster Ebene: "low", "high" oder "max" (Standard "max"). Das Denken ist immer aktiv. |
thinking |
Nicht senden. K3.1 Pro unterstützt es nicht; verwenden Sie stattdessen reasoning_effort. |
max_completion_tokens |
Standard ist 131072. Die maximale Ausgabe ist 1.048.576 minus Ihre Prompt-Token. |
response_format |
json_schema mit strict: true. Parsen Sie nur message.content, niemals reasoning_content. |
partial |
Setzen Sie "partial": true auf eine letzte Assistant-Nachricht, um von einem Präfix aus fortzufahren. |
tool_choice |
"required" erzwingt mindestens einen Tool-Aufruf; "auto" lässt das Modell entscheiden. |
prompt_cache_options |
{"mode": "implicit", "ttl": "5m" or "1h"} bei Chat Completions und Responses. |
Reasoning-Token zählen zu Ihrer Nutzung, verwenden Sie also "low" für Klassifizierung und Extraktion. Preserved Thinking ist immer aktiv, daher geht jede Assistant-Nachricht mit intaktem reasoning_content zurück (Leitfaden zu Thinking-Modellen).
Kimi K3.1 Pro Tool-Calling: eine vollständige Schleife in Python
Eine Produktions-Tool-Schleife auf K3.1 Pro folgt vier Regeln aus Moonshots Docs:
- Erzwingen Sie im ersten Durchgang einen Tool-Aufruf mit
tool_choice="required"und wechseln Sie dann zu"auto". - Hängen Sie die vollständige Assistant-Nachricht an, einschließlich
reasoning_contentundtool_calls. - Senden Sie eine
tool-Nachricht protool_call_id. - Begrenzen Sie die Anzahl der Durchgänge, damit ein verwirrtes Modell nicht endlos schleifen kann.
import json, os
from openai import OpenAI
client = OpenAI(api_key=os.environ["MOONSHOT_API_KEY"],
base_url="https://api.moonshot.ai/v1")
TOOLS = [{"type": "function", "function": {
"name": "get_order_status",
"description": "Look up an order's shipping status by ID",
"parameters": {"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"]}}}]
def get_order_status(order_id):
return {"order_id": order_id, "status": "shipped"}
messages = [{"role": "user", "content": "Where is order A-1042?"}]
tool_choice = "required"
for _ in range(8): # hard cap on turns
resp = client.chat.completions.create(
model="kimi-k3.1-pro", reasoning_effort="high",
messages=messages, tools=TOOLS, tool_choice=tool_choice)
msg = resp.choices[0].message
messages.append(msg) # whole message, not msg.content
if not msg.tool_calls:
print(msg.content)
break
for call in msg.tool_calls:
result = get_order_status(**json.loads(call.function.arguments))
messages.append({"role": "tool", "tool_call_id": call.id,
"content": json.dumps(result)})
tool_choice = "auto"
Der klassische Bug ist, msg.content statt msg anzuhängen, wodurch tool_calls und reasoning_content verloren gehen.
Tool-Calling im großen Maßstab mit search_tools
Wenn Ihr Agent Dutzende oder Hunderte von Tools hat, senden Sie nicht bei jeder Anfrage jede Definition mit. Moonshots Best Practice für K3 Tool-Calling empfiehlt diesen Ablauf:
- Deklarieren Sie eine
search_tools-Funktion (die Ihr Backend implementiert) plus einige Kern-Tools. - Setzen Sie
tool_choice: "required"im ersten Durchgang, damit das Modell abruft, bevor es antwortet. - Injizieren Sie die passenden Tool-Definitionen über eine
system-Nachricht, die eintools-Feld trägt. - Lassen Sie das Modell in späteren Durchgängen die geladenen Tools aufrufen, wobei
tool_choicewieder auf"auto"steht.
# after search_tools returns ["create_github_pr"]
messages.append({"role": "system",
"tools": [CATALOG["create_github_pr"]]})
Injizierte Definitionen verwenden das tools-Format auf oberster Ebene und gelten ab dieser Nachricht. Der Server behält sie nicht, behalten Sie die Nachricht also in späteren Anfragen bei. Weder das Ändern von tool_choice noch das Anhängen einer Definition bricht den Prefix-Cache.
Bild- und Videoeingabe
K3.1 Pro akzeptiert Bilder und Videos zusammen mit Text und gibt Text zurück. Machen Sie content zu einem Array aus Teilen: einem image_url-Teil (das Quickstart-Beispiel sendet eine Base64-Daten-URL und merkt an, dass öffentliche Bild-URLs nicht unterstützt werden) oder einem video_url-Teil, der auf eine hochgeladene Datei mit einer ms://-ID verweist.
from pathlib import Path
video = client.files.create(file=Path("demo.mp4"), purpose="video")
content = [{"type": "video_url", "video_url": {"url": f"ms://{video.id}"}},
{"type": "text", "text": "Summarize this video."}]
Übergeben Sie content als User-Nachricht und löschen Sie die Datei mit client.files.delete(video.id), wenn Sie fertig sind.
Context-Caching im Code
Caching erfolgt automatisch für wiederholte Präfixe mit einer Standard-TTL von 5 Minuten. Cache-Treffer werden mit 0,20 $ pro Million Token abgerechnet gegenüber 2,00 $ für nicht gecachte Eingabe, und ein Schreibvorgang mit 1 Stunde kostet 4,00 $ gegenüber 2,00 $ für 5 Minuten. Bei einem Präfix von 1 Mio. Token amortisiert sich die 1-Stunden-TTL nach zwei Treffern.
Setzen Sie stabilen Inhalt an den Anfang (System-Prompt, Tool-Definitionen, Docs), veränderlichen Inhalt ans Ende und keine Zeitstempel ins Präfix. Beim openai SDK übergeben Sie die TTL über extra_body:
resp = client.chat.completions.create(
model="kimi-k3.1-pro",
messages=[{"role": "system", "content": DOCS},
{"role": "user", "content": question}],
extra_body={"prompt_cache_options": {"mode": "implicit", "ttl": "1h"}},
)
d = resp.usage.prompt_tokens_details
print(resp.usage.prompt_tokens, d.cached_tokens,
getattr(d, "cache_write_tokens", 0))
Die Anthropic API legt die TTL mit einem cache_control-Feld auf oberster Ebene fest; Marker innerhalb von Nachrichten werden ignoriert:
curl https://api.moonshot.ai/anthropic/v1/messages \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $MOONSHOT_API_KEY" \
--data '{"model": "kimi-k3.1-pro", "max_tokens": 256,
"cache_control": {"type": "ephemeral", "ttl": "1h"},
"messages": [{"role": "user", "content": "Hello"}]}'
Wo die Cache-Nutzung angezeigt wird, hängt von der Oberfläche ab:
| Oberfläche | Cache-Lesen | Cache-Schreiben |
|---|---|---|
| Chat Completions | usage.prompt_tokens_details.cached_tokens |
usage.prompt_tokens_details.cache_write_tokens |
| Responses | usage.input_tokens_details.cached_tokens |
usage.input_tokens_details.cache_write_tokens |
| Messages | usage.cache_read_input_tokens |
usage.cache_creation_input_tokens |
Beim Streaming von Chat Completions setzen Sie stream_options.include_usage=true, um die Nutzung im letzten Chunk zu erhalten. Jeder Treffer erneuert die TTL, die beim ersten Schreiben festgelegt wird. Vollständige Regeln: der Leitfaden zum Context-Caching.
Kimi K3.1 Pro API-Fehler und Lösungen
Die meisten Fehler fallen in sechs Muster. Prüfen Sie bei jeder 429 error.type, denn die Lösung hängt davon ab.
| Symptom | Ursache | Lösung |
|---|---|---|
| 401 oder 404 | Falscher Produktschlüssel, Regionsabweichung, kein Guthaben oder falscher Modellname | Verwenden Sie einen Kimi API-Schlüssel, prüfen Sie das Guthaben, bestätigen Sie das Modell in GET /v1/models, löschen Sie veraltete Umgebungsvariablen und Proxys |
429 engine_overloaded_error |
Serverkapazität | Warten Sie gemäß Retry-After, verwenden Sie Backoff, senken Sie die Parallelität. Eine Aufladung hilft nicht. |
429 rate_limit_reached_error |
Ihre Organisation hat Parallelität, RPM, TPM oder TPD erreicht | Drosseln Sie oder steigen Sie in einen höheren Tarif auf |
429 exceeded_current_quota_error |
Geringes Guthaben, überfälliges Konto oder abgelaufener Gutschein | Prüfen Sie die Balance-API und laden Sie auf |
finish_reason: "length" |
Ausgabe hat max_completion_tokens erreicht |
Erhöhen Sie das Limit oder fahren Sie im Partial-Modus fort |
| Dasselbe Tool wird immer wieder aufgerufen | Fehlerhaftes Nachrichten-Layout | Hängen Sie die Nachricht unverändert an, gleichen Sie jede tool_call_id ab, setzen Sie gestreamte tool_calls vollständig zusammen und fügen Sie dann eine clientseitige Wiederholungserkennung hinzu |
Achten Sie auf Wiederholungsversuche. Das OpenAI SDK wiederholt standardmäßig 2-mal bei Verbindungsfehlern, 408, 409, 429 und 5xx, sodass aus einem Aufruf drei Anfragen gegen Ihr RPM werden können. Senken Sie in einem niedrigen Tarif die max_retries des Clients und verwenden Sie selbst Backoff anhand von error.type. Durch eine 429 unterbrochene Anfragen werden nicht berechnet.
Wenn ein Drittanbieter-Agent fehlschlägt, rufen Sie die API direkt mit demselben Schlüssel, Endpoint und Modell auf. Wenn das funktioniert, liegt das Problem beim Tool. Siehe die Troubleshooting-Seite und die Fehlercodes.
Kimi K3.1 Pro Rate Limits nach Tarif
Ihre kumulative Aufladung bestimmt Ihren Tarif auf der Limits-Seite:
| Tarif | Kumulative Aufladung | Parallelität | RPM | TPM |
|---|---|---|---|---|
| Tier0 | 1 $ | 1 | 3 | 500.000 (1,5 Mio. pro Tag) |
| Tier1 | 10 $ | 15 | 100 | 2.000.000 |
| Tier2 | 20 $ | 40 | 100 | 3.000.000 |
| Tier3 | 100 $ | 50 | 200 | 3.000.000 |
| Tier4 | 1.000 $ | 60 | 200 | 4.000.000 |
| Tier5 | 3.000 $ | 100 | 300 | 5.000.000 |
Tier0 erlaubt 3 Anfragen pro Minute, und jeder Durchgang einer Tool-Schleife ist eine Anfrage. Ein Agent-Lauf mit fünf Durchgängen überschreitet in diesem Tarif bereits eine Minute, planen Sie also 10 $ kumulativ ein, bevor Sie Agents ernsthaft testen.
Contract-Testing der Kimi API mit der Apidog CLI
Ein Contract-Test fängt den Tag ab, an dem Ihre Tool-Schleife keine tool_calls mehr zurückbekommt. Lassen Sie Ihren Coding-Agenten ihn mit der Apidog CLI erstellen. Einmal installieren und anmelden:
npm install -g apidog-cli@latest
apidog login --with-token <YOUR_TOKEN>
apidog skill install
Dann prompten Sie Claude Code, Codex oder welchen Agenten Sie auch verwenden:
In Apidog project <projectId>, create an environment for https://api.moonshot.ai/v1
and an endpoint for POST /chat/completions. Add a test case that sends model
kimi-k3.1-pro, reasoning_effort "low", one get_order_status tool and
tool_choice "required". Assert status 200 and that choices[0].message.tool_calls
is non-empty. Run it and report failures.
Der Agent liest das Schema, validiert seine Payload und führt den Testfall aus:
apidog environment create kimi-prod --project <projectId> --base-url https://api.moonshot.ai/v1
apidog endpoint create --project <projectId> --file ./endpoint.json
apidog cli-schema get test-case-create
apidog cli-schema validate test-case-create --file case.json
apidog test-case create --project <projectId> --file case.json
apidog run --test-case <caseId> --project <projectId> -e <envId> -r cli,json
Testfälle benötigen eine gültige Kategorie; apidog test-case category --project <projectId> listet sie auf. Sobald der Lauf erfolgreich ist, tauschen Sie -r cli,json gegen -r junit mit --out-dir aus, und dieselbe Prüfung sichert Ihre CI ab, wie unser Apidog CLI CI/CD-Leitfaden zeigt. Das Agent-Setup finden Sie unter Apidog CLI in Claude Code. Der kostenlose Plan von Apidog deckt bis zu 4 Nutzer ab.
FAQ
Wie lautet die Base-URL für die Kimi K3.1 Pro API?
https://api.moonshot.ai/v1 für Chat Completions und die Responses API sowie https://api.moonshot.ai/anthropic für die Anthropic-kompatible Messages API.
Unterstützt die Kimi K3.1 Pro API den Parameter thinking?
Nein. Das Denken ist immer aktiv. Steuern Sie es mit dem Feld reasoning_effort auf oberster Ebene ("low", "high" oder "max").
Warum bekomme ich direkt nach dem Aufladen eine 429?
Lesen Sie error.type. engine_overloaded_error ist Serverkapazität, und eine Aufladung behebt das nicht. rate_limit_reached_error bedeutet die Limits Ihres Tarifs, und Tier0 erlaubt nur 3 RPM.
Wie erkenne ich, ob das Caching funktioniert?
Ein Cache-Lese-Feld ungleich null in usage bedeutet einen Treffer: prompt_tokens_details.cached_tokens bei Chat Completions oder cache_read_input_tokens bei Messages.
Gibt es einen kostenlosen Tarif für die Kimi K3.1 Pro API?
Nein. Die API erfordert eine Mindestaufladung von 1 $. Der kostenlose Chat in der Kimi-App ist der 0-$-Weg, beschrieben unter So verwenden Sie Kimi K3.1 Pro kostenlos. Hintergrundinformationen zum Modell finden Sie unter Was Kimi K3.1 Pro ist.
