De drie waarden die je nodig hebt
Elke OpenAI-compatible client vraagt om dezelfde drie dingen. Hier zijn ze voor deze service.
| Instelling | Waarde |
|---|---|
| Basis-URL | https://api.getcodexapi.com/v1 |
| API-sleutel | Je sleutel van de API-sleutelpagina |
| Model | uncensored |
De sleutel wordt verstuurd als Authorization: Bearer YOUR_KEY. De twee endpoints die je kunt aanroepen zijn POST /v1/chat/completions en GET /v1/models. Dit is een onafhankelijke service die één open-weight model draait, niet OpenAI's Codex, dus plak niet het endpoint van OpenAI of een OpenAI-sleutel in dezelfde instelling.
Controleer de verbinding met curl
Voordat je app-configuratie aanpast, controleer of de sleutel en URL werken vanuit een terminal. Modellen opvragen is de goedkoopste check, omdat dit geen prompt nodig heeft:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
Je zou een JSON-lijst moeten krijgen die het model uncensored bevat. Stuur daarna een echte completion:
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."}]
}'
Als beide verzoeken werken, zit het probleem bij een latere fout in je clientconfiguratie, niet bij de service. Response headers bevatten X-Request-Id, wat handig is om bij te houden als je ooit een specifiek verzoek wilt traceren, en X-Balance-USD, dat je resterende tegoed toont.
Python met de OpenAI SDK
Het officiële openai-pakket neemt de basis-URL mee in de clientconstructor. Niets anders aan je code verandert.
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)
Als je de configuratie liever buiten de code houdt, leest de SDK ook OPENAI_BASE_URL en OPENAI_API_KEY uit de omgeving:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
Met die instellingen pikt OpenAI() zonder argumenten ze op. Dit is handig omdat veel third-party tools die op de SDK zijn gebouwd dezelfde variabelen overnemen zonder code-aanpassingen.
Node.js
De JavaScript SDK gebruikt dezelfde optienaam, gespeld 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 ?? "");
}
Streaming komt terug als server-sent events met stream: true, en usage is inbegrepen aan het einde. Houd er rekening mee dat een gestreamd verzoek één van je concurrency-slots vasthoudt tot de stream klaar is, dus een stream die je zonder sluiten verlaat, telt nog steeds mee tegen de limiet.
Apps met een instellingenscherm
Desktoptools en editors labelen het veld meestal op één van drie manieren: "Base URL", "API Base" of "OpenAI-compatible endpoint". Ze willen allemaal dezelfde string. Een paar tips die tijd besparen:
- Kies het OpenAI- of "custom OpenAI-compatible" provider-type, niet een vendor-specifieke.
- Typ de modelnaam handmatig als de app een vrije tekstbox heeft.
uncensoredis de exacte ID. - Als de app een "test connection"-knop heeft, roept deze meestal de modellenlijst op, wat deze API ondersteunt.
- Sommige apps cachen de modellenlijst van een vorige provider. Verwijder de oude invoer en voeg een nieuwe toe als de dropdown verkeerd lijkt.
Voor een werkend voorbeeld in een specifieke editor, zie de handleiding over het verbinden van Cursor, of de coding API-pagina voor het algemene beeld. De volledige parameterreferentie staat in de API-documentatie.
Zodra de verbinding werkt, bewaar de exacte waarden dan ergens waar je ze weer kunt vinden: de URL, de modelnaam en de datum waarop je de sleutel hebt aangemaakt. Teams verliezen vaak een uur later aan een kopie van de configuratie die nog een oude waarde bevat. Een enkel gedeeld voorbeeldbestand in de repository, met een placeholder in plaats van de echte sleutel, voorkomt dit.
Veelgemaakte fouten en oplossingen
De URL eindigt als /v1/v1
Sommige clients voegen /v1 zelf toe. Als je verzoeken falen en het clientlogboek toont een pad met /v1/v1/chat/completions, verwijder dan de /v1 uit de basis-URL die je hebt ingevoerd. Het omgekeerde gebeurt ook: een client die het niet toevoegt, heeft het nodig in je instellingen. Het logboek van het verzoekpad lost de vraag snel op.
Je hebt het volledige endpoint in de basis-URL gezet
De basis-URL stopt bij /v1. Voer daar geen /chat/completions in. De SDK voegt het pad toe voor elke aanroep.
Een trailing slash of een typefout in de host
De meeste SDK's tolereren een trailing slash, maar een paar oudere tools bouwen paden door gewone concatenatie en eindigen met een dubbele slash. Verwijder hem als je vreemde 404-responses ziet.
Verkeerde sleutel, of de sleutel van een andere service
Een OpenAI-sleutel werkt hier niet, en onze werkt daar niet. API-sleutelfouten betekenen bijna altijd een kopieer-plakfout, zoals een missend teken of een spatie aan het einde.
Het werkt in curl maar niet in je app
Als curl slaagt en de applicatie faalt met dezelfde URL en sleutel, zit het verschil in de omgeving. Controleer of de app achter een proxy draait of in een container zonder outbound-toegang, of hij een oudere omgevingsvariabele leest zoals een verouderde OPENAI_BASE_URL die over is van een ander project, en of een configuratiebestand de waarde overschrijft die je in code hebt ingesteld. Het afdrukken van de definitieve URL die de client zal aanroepen, net voordat het verzoek gebeurt, lost de meeste van deze gevallen binnen een minuut op.
HTTP 429
Dit betekent dat een limiet is bereikt. De error code rate_limited is requests per minute, en concurrency is te veel requests tegelijk. Een volledige sleutel staat 8 gelijktijdige requests toe en 300 per minuut; een trial key staat 2 en 60 toe. Bij tijdelijke overload krijg je ook een 429 met een Retry-After: 5-header, dus wacht vijf seconden en probeer het opnieuw.
LangChain en de URL op één plek houden
Frameworks die op de OpenAI-client zijn gebouwd, nemen dezelfde waarden over. In LangChain's OpenAI-integratie zijn de argumenten als volgt genoemd:
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)
Wat het framework ook is, verspreid de URL niet door je code. Zet hem in één omgevingsvariabele of één configuratiebestand en lees hem daarvandaan. Op die manier betekent schakelen tussen een testsleutel en een productiesleutel, of tussen machines, slechts één regel wijzigen. Het houdt sleutels ook buiten je repository: sla de sleutel op in een omgevingsvariabele of een secrets manager, nooit in een vastgelegd bestand.
Als je op zoek was naar het eigen endpoint van OpenAI voor zijn Codex-producten, dan is dit het niet. Hun basis-URL en authenticatie worden gedocumenteerd door OpenAI, dus volg hun huidige documentatie daarvoor. Het adres op deze pagina behoort tot een onafhankelijke service en accepteert alleen sleutels die hier zijn uitgegeven.
Wat je kunt versturen zodra je verbonden bent
Het endpoint ondersteunt streaming, tool calling (tools, tool_choice, met resultaten teruggegeven als role: "tool"-berichten), en JSON-modus via response_format: {"type": "json_object"}. De parameters temperature, top_p, stop, seed en de straffen worden doorgegeven. Het contextvenster is 100.000 tokens voor prompt plus completion, en de maximale request body is 8 MB.
Het is alleen tekst. Er is geen beeld- of audiogeneratie, geen embeddings en geen fine-tuning, dus een clientfunctie die daarvan afhankelijk is, werkt niet met deze base URL. Gebruik wordt gefactureerd per token tegen $0,15 per 1M input en $0,50 per 1M output; de prijzenpagina bevat werkvoorbeelden.
