Die Moonshot API bleibt OpenAI-kompatibel, doch 2026 haben sich zwei Dinge geändert: Der Konsolenzugang ist auf die Kimi-API-Plattform umgezogen, und die gesamte moonshot-v1-Reihe wurde am 31. August abgeschaltet. Alte Projekte, die ihre Konfiguration unverändert übernehmen, erhalten häufig keine 401, sondern 404 model_not_found. Dieser Artikel folgt dem Ablauf „Seite wählen – Modell wählen – Aufruf zum Laufen bringen – migrieren“. Modelle und Preise richten sich nach den Modellpreisen.

Hinweis: Moonshot und Kimi sind Marken ihrer jeweiligen Inhaber; dieser Artikel dient ausschließlich der technischen Anbindung. Modellliste, Kontextlängen und Parameterregeln können sich ändern; maßgeblich ist die aktuelle offizielle Dokumentation.

1. Der Zugang hat sich geändert, die API-Domain nicht

platform.moonshot.cn leitet inzwischen auf platform.kimi.com weiter, die internationale Seite platform.moonshot.ai auf platform.kimi.ai. Konsole, Konto, Guthaben und Keys werden auf der Kimi-API-Plattform verwaltet.

Die API-Anfragedomain bleibt unverändert: China https://api.moonshot.cn, international https://api.moonshot.ai. Ein Key der China-Seite gehört nur zur China-Domain, international entsprechend. Ist base_url im Code nicht gesetzt, geht die Anfrage möglicherweise an OpenAI oder einen anderen Anbieter; typische Folge ist model_not_found. Merken Sie sich „Konsolenadresse“ und „API-Adresse“ getrennt, dann bleibt die Migration übersichtlich.

2. Drei kompatible Protokolle und ihre Base URLs

  • OpenAI Chat Completions: Base URL https://api.moonshot.cn/v1, Pfad /chat/completions.
  • OpenAI Responses: gleiche Base URL, Pfad /responses.
  • Anthropic Messages: Base URL https://api.moonshot.cn/anthropic, Pfad /v1/messages.
  • Modellliste: GET https://api.moonshot.cn/v1/models.

Auf der internationalen Seite wird die Domain zu api.moonshot.ai, die Pfade bleiben. Beim OpenAI SDK wird base_url bis /v1 angegeben; das SDK ergänzt den Schnittstellenpfad selbst. curl benötigt den vollständigen Pfad. Der Anthropic-Zugang hat kein /v1-Suffix, anders als der OpenAI-Zugang. Laut Dokumentation sind OpenAI SDK ab 1.0.0 sowie Python 3.8+ oder Node.js 18+ erforderlich.

3. Die aktuelle Modellfamilie auswählen

Modellname Kontext Geeignete Aufgaben Hinweis
kimi-k3 1M Komplexe Schlussfolgerungen, lange Dokumente, Agenten, Wissensarbeit Standard für reasoning_effort ist max
kimi-k2.7-code 256K Codegenerierung, Repository-Fragen, Coding-Agenten Thinking dauerhaft aktiv, reasoning_effort nicht unterstützt
kimi-k2.7-code-highspeed 256K Vervollständigung mit niedriger Latenz, interaktives Coding Schnellversion desselben Modells, schnellere Ausgabe
kimi-k2.6 256K Allgemeine Dialoge, Extraktion, Multimodalität Unterstützt Thinking- und Nicht-Thinking-Modus

Bei Unsicherheit zuerst kimi-k3 wählen; für einfache Klassifikation und formatiertes Extrahieren ist kimi-k2.6 oft passender; für Codeaufgaben kommt die K2.7-Code-Reihe in Frage.

Die größte Stolperfalle sind Sampling-Parameter. Die Temperatur ist derzeit fest: 1,0 bei K3 und K2.7 Code; bei K2.6 im Thinking-Modus 1,0, im Nicht-Thinking-Modus 0,6. temperature nicht explizit senden, ein abweichender Wert erzeugt einen Fehler. Auch top_p ist fest auf 0,95 gesetzt und sollte nicht angepasst werden.

4. Erster Aufruf mit curl

export MOONSHOT_API_KEY="Ihr-Schluessel"

curl "https://api.moonshot.cn/v1/chat/completions" \
  -H "Authorization: Bearer $MOONSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k3",
    "messages": [
      {"role": "user", "content": "Antworte nur mit: Anbindung erfolgreich"}
    ],
    "max_completion_tokens": 64
  }'

Eine 200 mit erwartetem Inhalt zeigt, dass Key, Seite, Modellname und Pfad stimmen. Bei 401 zuerst prüfen, ob Seite und Key zusammenpassen; bei 404 Modellname, /v1 und eine mögliche Abschaltung prüfen; bei 400 die Fehlermeldung auf Kontext- oder Ausgabelimits prüfen. Manche Integrationen stellen zusätzliche Anforderungen an den Modellnamen; Claude Code benötigt möglicherweise kimi-k3[1m]. Maßgeblich ist die jeweilige Integrationsdokumentation.

5. Python SDK und Streaming

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["MOONSHOT_API_KEY"],
    base_url="https://api.moonshot.cn/v1",
)

stream = client.chat.completions.create(
    model="kimi-k3",
    messages=[{"role": "user", "content": "Nennen Sie in drei Punkten, für welche Teams ein API-Gateway geeignet ist"}],
    max_completion_tokens=512,
    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="")
    if chunk.usage:
        print("\nVerbrauch:", chunk.usage)

Streaming-Antworten sind SSE; jede Zeile beginnt mit data: und endet mit data: [DONE]. Mit include_usage kommt vor dem Ende ein weiterer Block mit leerem choices und nur usage. Bei einem Verbindungsabbruch kann dieser Block fehlen; in der Produktion muss serverseitig separat abgerechnet werden.

Bei mehrstufigen Dialogen und Tool-Aufrufen ist der Denkinhalt zu beachten. Bei K3 steht das Ergebnis in reasoning_content, K2.x hat ein ähnliches Feld; bei der Rückgabe der Assistant-Nachricht sollte es unverändert mitgeführt werden. K3 steuert die Intensität über das Top-Level-Feld reasoning_effort; bei K2.x wird thinking über extra_body übergeben. Beide nicht gleichzeitig senden.

6. Migration von moonshot-v1

Die alten Modelle sind abgeschaltet; weitere Aufrufe liefern model_not_found. Die aktuellen Entsprechungen, maßgeblich ist die offizielle Modellliste:

Altes Modell Empfohlener Ersatz Hinweis zur Migration
moonshot-v1-8k/32k/128k/auto kimi-k2.6 oder kimi-k3 Keine Unterscheidung mehr nach 8K/32K/128K
moonshot-v1-*-vision-preview kimi-k3 oder kimi-k2.6 Bilder als image_url-Inhaltsblock
kimi-k2-Reihe kimi-k3 Am 25.05.2026 abgeschaltet
kimi-k2.5 kimi-k3 Am 31.08.2026 abgeschaltet
kimi-latest kimi-k3 Am 28.01.2026 abgeschaltet

Migrationsschritte:

  1. Code und Konfiguration global nach alten Modellnamen und base_url durchsuchen und eine Ersetzungstabelle anlegen.
  2. base_url ändern und China- oder internationale Seite bestätigen; bei Seitenwechsel auch den Key tauschen.
  3. Modellnamen ersetzen, standardmäßig kimi-k3; für kostensensible kurze Aufgaben kimi-k2.6 prüfen.
  4. max_tokens durch max_completion_tokens ersetzen. K3 nutzt standardmäßig 131072; die Ausgabegrenze ist 1048576 minus Eingabelänge. Bei K2 liegt das Limit bei etwa 256K minus Eingabelänge.
  5. Eigenes temperature und top_p entfernen und die festen Modellwerte verwenden.
  6. Alte thinking-Einstellungen auf K3s reasoning_effort umstellen; bei K2.x thinking über extra_body senden.
  7. Multimodale Inhalte auf text-, image_url- und video_url-Blöcke umstellen.
  8. Streaming-Anfragen um stream_options={"include_usage": True} ergänzen.
  9. Dieselben echten Aufgaben als Regression laufen lassen, Qualität, Latenz, finish_reason und Verbrauch erfassen, dann schrittweise ausrollen und einen Rückfallschalter behalten.

Nicht in einem Schritt vollständig umstellen: zuerst Testumgebung, dann risikoarme Dienste, zuletzt kritische Pfade; jeder Schritt muss rückholbar sein.

7. Checkliste vor dem Produktivstart

  • Mit demselben Key GET /v1/models aufrufen und prüfen, ob das Zielmodell in der Liste steht.
  • Eine minimale nicht-streamende Anfrage senden und 200 sowie korrekten Inhalt bestätigen.
  • Eine Streaming-Anfrage senden und inkrementelle Inhalte sowie abschließendes usage prüfen.
  • finish_reason kontrollieren: normaler Abschluss ist stop, Erreichen des Ausgabelimits ist length.
  • Mit einem festen Evaluationsset Qualität, Latenz und Token-Verbrauch vor und nach der Migration vergleichen.
  • 429-Backoff, Timeouts und Retry-Obergrenzen testen, damit automatische SDK-Wiederholungen die Parallelität nicht aufblähen.
  • In Protokollen Zeitpunkt, Modellname, Statuscode und Verbrauch erfassen, um Fehlersuche und Abgleich zu ermöglichen.

8. Häufige Fehlermeldungen

  • 401 invalid_authentication_error: Key ungültig oder gelöscht, oder China- und internationale Keys gemischt. Keys der offenen Plattform und von Kimi Code sind ebenfalls nicht austauschbar.
  • 403 permission_denied_error: Die IP-Whitelist enthält die aktuelle Ausgangs-IP nicht, oder die Projektberechtigung fehlt.
  • 404 model_not_found: base_url zeigt nicht auf Moonshot, der Modellname ist falsch, ein abgeschaltetes Modell wird aufgerufen oder /v1 fehlt im Pfad.
  • 400 invalid_request_error: Eingabe plus Ausgabelimit überschreiten den Kontext, oder ein nicht unterstützter Parameter wie eine eigene Temperatur wurde übergeben.
  • 400 content_filter: Eingabe oder Ausgabe löst die Inhaltsrichtlinie aus; Prompt oder Material anpassen.
  • 429: engine_overloaded_error bedeutet serverseitige Überlast; rate_limit_reached_error ist eine Organisationsgrenze; exceeded_current_quota_error deutet meist auf zu wenig Guthaben.
  • 504 oder Verbindungs-Timeout: Nicht-streamende lange Anfragen warten zu lange; lange Texte und Agentenaufgaben möglichst streamen.

Das OpenAI SDK wiederholt fehlgeschlagene Anfragen standardmäßig zweimal; ein Aufruf kann also drei Anfragen erzeugen. Bei Konten mit niedrigem Kontingent zuerst Wiederholungen und Parallelität senken, dann das Kontingent prüfen.

Häufige Fragen

Lässt sich moonshot-v1 weiterhin nutzen?

Nein. Die gesamte moonshot-v1-Reihe wurde am 31. August 2026 abgeschaltet; Aufrufe liefern model_not_found. Bitte auf kimi-k3 oder kimi-k2.6 migrieren.

Bis zu welcher Ebene wird die Base URL angegeben?

Beim OpenAI SDK https://api.moonshot.cn/v1, ohne /chat/completions; bei curl den vollständigen Pfad /v1/chat/completions; beim Anthropic SDK https://api.moonshot.cn/anthropic.

Warum erzeugt die Übergabe von temperature einen Fehler?

Die Temperatur der aktuellen Modelle ist fest: 1,0 bei K3 und K2.7 Code, bei K2.6 je nach Thinking-Modus. Keine eigenen Werte senden; auch top_p ist fest auf 0,95 gesetzt.

Kann ein Key der China-Seite die internationale Seite aufrufen?

Nein. Konten, Guthaben und Keys beider Seiten sind regional getrennt; eine Mischung liefert meist 401. Beim Seitenwechsel müssen Key, Base URL und Modellname gemeinsam geändert werden.

Warum fehlt nach dem Streaming das usage-Feld?

stream_options={"include_usage": True} muss ausdrücklich gesetzt werden. Auch dann kann der letzte Block bei einem Verbindungsabbruch fehlen; in der Produktion serverseitig separat zählen.

Nächste Schritte

Legen Sie im ZSQH AI Gateway einen Test-Key an und führen Sie je eine echte Aufgabe mit kimi-k3 und kimi-k2.6 aus. Erst nach bestätigter Kette in die Produktion gehen. Verfügbare Modelle und Abrechnung richten sich nach den Modellpreisen.

Verwandte Artikel: