Die drei Werte, die du benötigst
Jeder OpenAI-kompatible Client fragt dieselben drei Dinge ab. Hier sind sie für diesen Dienst.
| Einstellung | Wert |
|---|---|
| Base-URL | https://api.getcodexapi.com/v1 |
| API-Schlüssel | Dein Schlüssel von der API-Schlüssel-Seite |
| Modell | uncensored |
Der Schlüssel wird als Authorization: Bearer YOUR_KEY gesendet. Die beiden Endpunkte, die du aufrufen kannst, sind POST /v1/chat/completions und GET /v1/models. Dies ist ein unabhängiger Dienst, der ein Open-Weight-Modell ausführt, nicht der Codex von OpenAI. Füge daher nicht den Endpunkt von OpenAI oder einen OpenAI-Schlüssel in dieselbe Einstellung ein.
Überprüfe die Verbindung mit curl
Bevor du eine App-Konfiguration änderst, bestätige, dass Schlüssel und URL aus einem Terminal funktionieren. Das Auflisten von Modellen ist die günstigste Prüfung, da kein Prompt erforderlich ist:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
Du solltest eine JSON-Liste erhalten, die das Modell uncensored enthält. Sende dann eine echte Vervollständigung:
curl https://api.getcodexapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Say hello in five words."}]
}'
Wenn beide Aufrufe funktionieren, liegt das Problem bei späteren Fehlern in deiner Client-Konfiguration, nicht beim Dienst. Die Antwort-Header enthalten X-Request-Id, was nützlich ist, um einen bestimmten Aufruf nachzuverfolgen, und X-Balance-USD, das dein verbleibendes Guthaben anzeigt.
Python mit dem OpenAI SDK
Das offizielle openai-Paket nimmt die Base-URL im Client-Konstruktor auf. Nichts anderes an deinem Code ändert sich.
from openai import OpenAI
client = OpenAI(
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_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."},
],
)
print(resp.choices[0].message.content)
Wenn du die Konfiguration lieber außerhalb des Codes halten möchtest, liest das SDK auch OPENAI_BASE_URL und OPENAI_API_KEY aus der Umgebung:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
Mit diesen Einstellungen nimmt OpenAI() ohne Argumente sie auf. Das ist praktisch, da viele Drittanbieter-Tools, die auf dem SDK basieren, dieselben Variablen erben, ohne dass Code geändert werden muss.
Node.js
Das JavaScript SDK verwendet denselben Optionsnamen, geschrieben als baseURL.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getcodexapi.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Write a haiku about version control." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Das Streaming erfolgt über Server-Sent Events mit stream: true, und die Nutzung wird am Ende angegeben. Beachte, dass eine gestreamte Anfrage einen deiner Parallelitäts-Slots belegt, bis der Stream endet. Ein abgebrochener Stream zählt weiterhin gegen das Limit.
Apps mit einem Einstellungsbildschirm
Desktop-Tools und Editoren bezeichnen das Feld meist auf eine von drei Arten: „Base URL“, „API Base“ oder „OpenAI-compatible endpoint“. Alle benötigen denselben String. Einige Hinweise, die Zeit sparen:
- Wähle den OpenAI- oder „benutzerdefinierten OpenAI-kompatiblen“ Anbietertyp, nicht einen herstellerspezifischen.
- Gib den Modellnamen manuell ein, wenn die App eine Freitextbox hat.
uncensoredist die exakte ID. - Wenn die App eine Schaltfläche „Verbindung testen“ hat, ruft sie normalerweise die Modellliste auf, die diese API unterstützt.
- Einige Apps zwischenspeichern die Modellliste eines vorherigen Anbieters. Entferne den alten Eintrag und füge einen neuen hinzu, wenn das Dropdown falsch aussieht.
Für ein durchgearbeitetes Beispiel in einem bestimmten Editor sieh dir die Anleitung zum Verbinden von Cursor an oder die Coding-API-Seite für das Gesamtbild. Die vollständige Parameterreferenz findest du in den API-Dokumenten.
Sobald die Verbindung funktioniert, speichere die genauen Werte irgendwo, wo du sie wiederfindest: die URL, den Modellnamen und das Datum, an dem du den Schlüssel erstellt hast. Teams verlieren oft später eine Stunde an einer Kopie der Konfiguration, die noch einen alten Wert enthält. Eine einzige gemeinsam genutzte Beispiel-Datei im Repository mit einem Platzhalter statt des echten Schlüssels verhindert das.
Häufige Fehler und Lösungen
Die URL endet als /v1/v1
Einige Clients hängen /v1 automatisch an. Wenn deine Anfragen fehlschlagen und das Client-Protokoll einen Pfad mit /v1/v1/chat/completions zeigt, entferne das /v1 aus der Base-URL, die du eingegeben hast. Das Gegenteil passiert auch: Ein Client, der es nicht hinzufügt, benötigt es in deiner Einstellung. Das Protokoll des Anfragepfads klärt die Frage schnell.
Du hast den vollständigen Endpunkt in die Base-URL eingegeben
Die Base-URL endet bei /v1. Gib dort nicht /chat/completions ein. Das SDK fügt den Pfad für jeden Aufruf hinzu.
Ein abschließender Slash oder ein Tippfehler im Host
Die meisten SDKs tolerieren einen abschließenden Slash, aber einige ältere Tools bauen Pfade durch einfache Verkettung und enden mit einem doppelten Slash. Entferne ihn, wenn du seltsame 404-Antworten siehst.
Falscher Schlüssel oder der Schlüssel eines anderen Dienstes
Ein OpenAI-Schlüssel funktioniert hier nicht, und unserer funktioniert dort nicht. API-Schlüsselsfehler bedeuten fast immer ein Copy-Paste-Problem, wie ein fehlendes Zeichen oder ein Leerzeichen am Ende.
Es funktioniert in curl, aber nicht in deiner App
Wenn curl erfolgreich ist und die Anwendung mit derselben URL und demselben Schlüssel fehlschlägt, liegt der Unterschied in der Umgebung. Prüfe, ob die App hinter einem Proxy läuft oder in einem Container ohne ausgehenden Zugriff, ob sie eine ältere Umgebungsvariable wie einen veralteten OPENAI_BASE_URL aus einem anderen Projekt liest und ob eine Konfigurationsdatei den Wert überschreibt, den du im Code festgelegt hast. Das Ausdrucken der finalen URL, die der Client aufrufen wird, direkt vor der Anfrage, klärt die meisten dieser Fälle innerhalb einer Minute.
HTTP 429
Das bedeutet, dass ein Limit erreicht wurde. Der Fehlercode rate_limited bezieht sich auf Anfragen pro Minute, und concurrency auf zu viele gleichzeitige Anfragen. Ein vollständiger Schlüssel erlaubt 8 gleichzeitige Anfragen und 300 pro Minute; ein Test-Schlüssel erlaubt 2 und 60. Bei temporärer Überlastung erhältst du auch einen 429-Fehler mit einem Retry-After: 5-Header. Warte fünf Sekunden und versuche es erneut.
LangChain und die URL an einem Ort halten
Frameworks, die auf dem OpenAI-Client basieren, verwenden dieselben Werte. In LangChains OpenAI-Integration heißen die Argumente so:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
print(llm.invoke("Name three uses of a base URL.").content)
Egal welches Framework du verwendest, verteile die URL nicht im gesamten Code. Speichere sie in einer einzigen Umgebungsvariable oder einer einzigen Konfigurationsdatei und lese sie von dort. So musst du beim Wechsel zwischen einem Test-Schlüssel und einem Produktions-Schlüssel oder zwischen Maschinen nur eine einzige Zeile ändern. So bleiben die Schlüssel auch außerhalb deines Repositorys: Speichere den Schlüssel in einer Umgebungsvariable oder einem Secrets-Manager, niemals in einer festgeschriebenen Datei.
Wenn du nach dem eigenen Endpunkt von OpenAI für seine Codex-Produkte gesucht hast, bist du hier falsch. Die Basis-URL und die API-Schlüssel von OpenAI werden von OpenAI dokumentiert. Folge daher deren aktueller Dokumentation dafür. Die Adresse auf dieser Seite gehört zu einem unabhängigen Dienst und akzeptiert nur Schlüssel, die hier ausgestellt wurden.
Was du nach der Verbindung senden kannst
Der Endpunkt unterstützt Streaming, Tool Calling (tools, tool_choice, mit Ergebnissen als role: "tool"-Nachrichten) und den JSON-Modus über response_format: {"type": "json_object"}. Die Parameter temperature, top_p, stop, seed und die Strafen werden durchgereicht. Das Kontextfenster umfasst 100.000 Token für Prompt plus Completion, und der maximale Anforderungstext beträgt 8 MB.
Es ist nur Text. Es gibt keine Bild- oder Audio-Generierung, keine Embeddings und kein Fine-Tuning. Eine Client-Funktion, die davon abhängt, funktioniert also nicht mit dieser Basis-URL. Die Nutzung wird pro Token abgerechnet: $0,15 pro 1 Mio. Input-Token und $0,50 pro 1 Mio. Output-Token. Die Preisseite enthält funktionierende Beispiele.
