Kimi Code API-URL: Basis-URL-Einrichtung für OpenAI-Clients
Die Kimi Code API-URL, die du für diesen Dienst benötigst, ist https://api.kimicode.cc/v1. Setze dies in jedem OpenAI-Client als Basis-URL ein, füge deinen Schlüssel hinzu und verwende die Modell-ID uncensored.
Aktualisiert

Die URL und was jeder Teil bedeutet
Wenn du nach der kimi code api url suchst, suchst du vielleicht nach der Adresse von Kimis eigenem Dienst. Dafür verwende die Dokumentation des Anbieters, da ich dafür nicht haften kann. Diese Seite bietet etwas anderes: eine gehostete, OpenAI-kompatible API vor einem Open-Weight-Modell, betrieben von einem unabhängigen Anbieter. Seine Adresse ist:
https://api.kimicode.cc/v1
Diese Zeichenkette ist die Basis-URL. Sie ist der Teil, den jede Anfrage gemeinsam hat. Das SDK fügt den Rest hinzu. Wenn du chat.completions.create aufrufst, sendet die OpenAI-Bibliothek einen POST an https://api.kimicode.cc/v1/chat/completions. Die Modellliste befindet sich unter https://api.kimicode.cc/v1/models und erfordert einen GET.
Das sind die einzigen Methoden, die diese API bedient: POST /v1/chat/completions und GET /v1/models. Wenn du nach Endpunkten für Bilder, Audio oder Embeddings gesucht hast, existieren diese hier nicht. Es ist eine Text-API.
Drei Einstellungen sind wichtig, und nichts anderes muss in deinem bestehenden OpenAI-Code geändert werden: die Basis-URL, der API-Schlüssel und die Modell-ID uncensored.
Warum eine Basis-URL der einzige Schalter ist
OpenAI-ähnliche Clients sind um eine Idee aufgebaut: Das Anfrageformat ist festgelegt, und der Host ist eine Einstellung. Die Bibliothek hat einen Standard-Host, der auf den ursprünglichen Anbieter verweist. Wenn du ihn durch eine andere Basis-URL ersetzt, geht derselbe Anfragekörper woanders hin. Nichts in deinen Prompts, Nachrichten-Arrays oder der Antwortanalyse muss sich ändern.
Deshalb besteht eine Migration von einem anderen OpenAI-kompatiblen Anbieter meist aus drei Änderungen: der Basis-URL, dem Schlüssel und dem Modellnamen. Die Felder in der Antwort, wie choices, message, finish_reason und usage, haben die gleichen Namen, sodass der Code, der sie liest, weiterhin funktioniert.
Es erklärt auch die seltsamen Fehler, auf die man stößt. Wenn ein Tool eine „Server-URL“ verlangt und du nur den Host einfügst, fehlt der Pfad. Wenn ein Tool einen „vollständigen Endpunkt“ verlangt und du die Basis-URL einfügst, geht die Anfrage an die falsche Stelle. Wenn ein Einstellungsbildschirm unklar ist, versuche zuerst die Basis-URL und lies den zurückgegebenen Statuscode. Die Schnellstartanleitung in der Dokumentation durchläuft dieselbe Migration mit einem weiteren Beispiel.
Umgebungsvariablen für Tools, die du nicht bearbeiten kannst
Viele Befehlszeilen-Tools und Frameworks erstellen einen OpenAI-Client, ohne dass du den Konstruktor berühren musst. Sie lesen normalerweise die Standard-Umgebungsvariablen, sodass deren Einstellung ausreicht:
export OPENAI_BASE_URL="https://api.kimicode.cc/v1"
export OPENAI_API_KEY="YOUR_KEY"
Einige ältere Tools suchen nach OPENAI_API_BASE, also versuche den zweiten Namen, wenn ein Tool den ersten Namen ignoriert. Nach dem Festlegen starte das Tool in derselben Shell-Sitzung, da Variablen, die in einem anderen Terminalfenster festgelegt wurden, nicht geteilt werden.
Das Tool benötigt weiterhin einen Modellnamen. Wenn es ein gehostetes Modell hart codiert, suche nach einer Flagge oder einer Konfigurationszeile, die es festlegt, und verwende uncensored. Wenn es nicht geändert werden kann, ist das Tool nicht geeignet, und ein kleines Skript wie die oben genannten ist ein besserer Weg.
Hole zuerst einen Schlüssel
Anfragen werden mit einem Header vom Format Authorization: Bearer YOUR_KEY authentifiziert. Jedes offizielle SDK erstellt diesen Header für dich aus dem Argument api_key. Du kannst den Schlüssel erstellen, nachdem du dich mit Google oder mit einer E-Mail und einem Passwort angemeldet hast.
Neue Konten können mit einem Klick auf der API-Schlüssel-Seite $0,50 an Prepaid-Guthaben beanspruchen. Es wird keine Karte benötigt und es gilt 7 Tage lang. Das reicht, um jedes Beispiel unten mehrfach auszuführen. Trial-Schlüssel erlauben 2 parallele Anfragen und 60 Anfragen pro Minute, also führe die Beispiele nacheinander aus.
Speichere den Schlüssel in einer Umgebungsvariablen statt in Quelldateien. Ein in ein öffentliches Repository committeter Schlüssel wird innerhalb weniger Stunden von jemand anderem gefunden und benutzt, und das darin enthaltene Guthaben gehört dir.
Erste Anfrage in curl
Curl ist der schnellste Weg, um zu beweisen, dass die URL funktioniert, weil es jede Bibliothek aus dem Bild entfernt. Wenn dieser Aufruf erfolgreich ist, liegt jedes Problem, dem du später begegnst, an deiner Client-Konfiguration.
export KIMICODE_KEY="YOUR_KEY"
curl https://api.kimicode.cc/v1/models -H "Authorization: Bearer $KIMICODE_KEY"
curl https://api.kimicode.cc/v1/chat/completions -H "Authorization: Bearer $KIMICODE_KEY" -H "Content-Type: application/json" -d '{
"model": "uncensored",
"messages": [
{"role": "user", "content": "Say hello in five words."}
]
}'
Der erste Aufruf gibt die Modellliste zurück, die uncensored enthalten sollte. Der zweite gibt ein Standard-Chat-Vervollständigungsobjekt zurück. Schau dir die Antwort-Header mit curl -i an, und du siehst X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests und X-RateLimit-Limit-Concurrency. Behalte die Request-ID, wenn du jemals Support wegen eines bestimmten Aufrufs kontaktierst.
Python mit dem OpenAI SDK
Installiere die Bibliothek mit pip install openai und ändere dann zwei Argumente im Client-Konstruktor.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.kimicode.cc/v1",
api_key=os.environ["KIMICODE_KEY"],
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a base URL is in two sentences."},
],
temperature=0.7,
)
print(resp.choices[0].message.content)
print(resp.usage)
Parameter wie temperature, top_p, stop, seed und die Häufigkeits- und Präsenzstrafen werden an das Modell weitergegeben. Der Wert max_tokens ist optional. Ohne ihn kann die Vervollständigung alles verwenden, was vom 100.000-Token-Fenster übrig ist, was den Prompt und die Vervollständigung zusammen umfasst.
Das SDK liest auch zwei Umgebungsvariablen, wenn du keine Argumente übergibst: OPENAI_BASE_URL und OPENAI_API_KEY. Das ist nützlich für Tools, die du nicht bearbeiten kannst. Setze beide, starte das Tool, und es spricht diese API an.
Node, Streaming und JSON-Modus
Die Node-Einrichtung spiegelt Python wider. Installiere mit npm install openai.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.kimicode.cc/v1",
apiKey: process.env.KIMICODE_KEY,
});
// Streaming over SSE
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [{ role: "user", content: "Write a four-line poem about routers." }],
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
// JSON mode
const json = await client.chat.completions.create({
model: "uncensored",
response_format: { type: "json_object" },
messages: [
{ role: "system", content: "Reply with a JSON object only." },
{ role: "user", content: "Give me keys name and port for a local dev server." },
],
});
console.log(JSON.parse(json.choices[0].message.content));
Streaming nutzt Server-Sent Events und die Nutzung wird am Ende des Streams gemeldet. Eine gestreamte Anfrage belegt ihren Slot für parallele Anfragen, bis der Stream endet, also blockiert ein Client, der einen Stream öffnet und ihn nie liest, einen Slot. Im JSON-Modus weist du das Modell im Prompt trotzdem an, in JSON zu antworten. Das Flag beschränkt das Ausgabeformat, aber eine klare Anweisung liefert dir bessere Feldnamen.
Function Calling
Tools verwenden die übliche OpenAI-Struktur: eine Liste tools, eine optionale tool_choice und Tool-Ergebnisse, die als Nachrichten mit role: "tool" zurückgesendet werden. Beim Streaming kommen die tool_calls stückweise über Chunks an.
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://api.kimicode.cc/v1", api_key=os.environ["KIMICODE_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_port",
"description": "Look up the port of a named local service",
"parameters": {
"type": "object",
"properties": {"service": {"type": "string"}},
"required": ["service"],
},
},
}]
messages = [{"role": "user", "content": "Which port does the api service use?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"service": "api", "port": 8080}),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
Behandle Argumente vom Modell als nicht vertrauenswürdig. Validiere sie, bevor du etwas ausführst. Das Modell kann einen Tool-Aufruf überspringen oder ihn mit einem falschen Feld aufrufen, wie jedes Modell kann, also halte einen Fallback-Pfad in deiner Schleife bereit.
Wenn die URL fehlschlägt
Die meisten Fehlerfälle fallen in eine kurze Liste.
- 404 Not Found. Der Pfad ist falsch. Häufige Ursachen: Die Basis-URL wurde auf
https://api.kimicode.ccohne/v1oder aufhttps://api.kimicode.cc/v1/chat/completionsgesetzt, sodass der Client den Pfad zweimal anhängt. Verwende genau die oben genannte Basis-URL. - 401 Unauthorized. Der Schlüssel fehlt, enthält ein unerwartetes Leerzeichen oder eine neue Zeile, oder der Header ist kein Bearer-Token. Gib die Länge der Variable aus, um sie zu prüfen.
- 429 mit Code
rate_limited. Du hast das pro Minute geltende Limit überschritten: 300 Anfragen für einen Vollschlüssel, 60 für einen Trial-Schlüssel. - 429 mit Code
concurrency. Zu viele Anfragen gleichzeitig: 8 für einen Vollschlüssel, 2 für einen Test-Schlüssel. - 429 mit einem
Retry-After: 5Header. Temporäre Überlastung. Warte fünf Sekunden und wiederhole die Anfrage. - Anfrage zu groß. Das Body-Limit beträgt 8 MB, und der Prompt plus die Completion müssen 100.000 Token passen.
Eine Retry-Schleife, die Retry-After beachtet und bei den anderen beiden Codes mit Verzögerung reagiert, behandelt fast alles. Die Kosten pro Aufruf sind gering; die Preisseite enthält die Token-Raten, und der Dokumentations-Quickstart zeigt die Migrationsschritte von einem anderen OpenAI-ähnlichen Anbieter.
Retries und Produktionsgewohnheiten
Sobald der erste Aufruf funktioniert, füge vor der Veröffentlichung einen Retry-Wrapper hinzu. Beachte den Retry-After-Header, wenn er vorhanden ist, und verzögere andernfalls mit einer kurzen zufälligen Verzögerung.
import os, time, random
from openai import OpenAI, RateLimitError
client = OpenAI(base_url="https://api.kimicode.cc/v1", api_key=os.environ["KIMICODE_KEY"])
def ask(messages, tries=5):
for attempt in range(tries):
try:
return client.chat.completions.create(model="uncensored", messages=messages)
except RateLimitError as err:
retry_after = 5
if getattr(err, "response", None) is not None:
retry_after = int(err.response.headers.get("retry-after", 5))
time.sleep(retry_after + random.random())
raise RuntimeError("still rate limited after retries")
Begrenze deine eigene Concurrency, um sie an deinen Schlüssel anzupassen: ein Thread-Pool mit 8 für einen Vollschlüssel, 2 für einen Trial-Schlüssel. Das verhindert den concurrency-Fehler von vornherein und hält dich auch innerhalb des Limits von 300 Anfragen pro Minute, wenn jeder Aufruf mehr als ein paar Sekunden dauert.
Denke schließlich daran, dass du pro Token zahlst. Logge das usage-Objekt für jeden Aufruf und beobachte den X-Balance-USD-Header. Bei $0,15 pro 1M Input-Token und $0,50 pro 1M Output-Token kostet ein typischer Chat-Turn nur einen Bruchteil eines Cents, aber Schleifen und lange Historien summieren sich, und das Log zeigt dir, wo.
Weitere Anleitungen
Fragen und Antworten
Was ist die Basis-URL für diese API?
https://api.kimicode.cc/v1. Setze es als Basis-URL in jedem OpenAI-kompatiblen Client und überlasse den Pfad danach an die Bibliothek.
Welche Modell-ID sende ich?
Sende uncensored als Modellwert. Du kannst dies bestätigen, indem du GET /v1/models mit deinem Schlüssel aufrufst.
Kann ich den offiziellen Kimi-Endpunkt mit meinem Schlüssel von hier verwenden?
Nein. Dies ist ein separater Dienst mit eigenen Schlüsseln und einem Open-Weight-Modell, nicht die offizielle API eines Anbieters. Schlüssel werden in keine der beiden Richtungen übernommen.
Warum erhalte ich bei Chat-Vervollständigungen einen 404-Fehler?
Die Basis-URL enthält wahrscheinlich nicht /v1 oder bereits /chat/completions. Verwende https://api.kimicode.cc/v1 und nichts mehr.
Dein Schlüssel ist nur ein Formular entfernt
Erstelle ein Konto, kopiere den Schlüssel, ändere die Basis-URL. Das ist die gesamte Einrichtung.
API-Schlüssel erhalten