Os três valores necessários
Todo cliente compatível com OpenAI solicita as mesmas três coisas. Aqui estão elas para este serviço.
| Configuração | Valor |
|---|---|
| URL base | https://api.getcodexapi.com/v1 |
| Chave de API | Sua chave da página de chaves de API |
| Modelo | uncensored |
A chave é enviada como Authorization: Bearer YOUR_KEY. Os dois endpoints que você pode chamar são POST /v1/chat/completions e GET /v1/models. Este é um serviço independente executando um único modelo de pesos abertos, não o Codex da OpenAI, então não cole o endpoint da OpenAI ou uma chave da OpenAI na mesma configuração.
Verifique a conexão com curl
Antes de editar qualquer configuração de aplicativo, confirme se a chave e a URL funcionam a partir de um terminal. Listar modelos é a verificação mais barata, pois não requer prompt:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
Você deve receber uma lista JSON que inclua o modelo uncensored. Em seguida, envie uma conclusão real:
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."}]
}'
Se ambas as chamadas funcionarem, o problema em qualquer falha posterior está na configuração do seu cliente, não no serviço. Os cabeçalhos de resposta incluem X-Request-Id, que é útil para manter se você precisar rastrear uma chamada específica, e X-Balance-USD, que mostra seu crédito restante.
Python com o SDK OpenAI
O pacote oficial openai aceita a URL base no construtor do cliente. Nada mais no seu código muda.
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)
Se você preferir manter a configuração fora do código, o SDK também lê OPENAI_BASE_URL e OPENAI_API_KEY do ambiente:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
Com isso definido, OpenAI() sem argumentos os reconhece. Isso é útil porque muitas ferramentas de terceiros baseadas no SDK herdam as mesmas variáveis sem nenhuma alteração de código.
Node.js
O SDK JavaScript usa o mesmo nome de opção, escrito como 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 ?? "");
}
O streaming retorna como eventos enviados pelo servidor com stream: true, e o uso é incluído no final. Lembre-se de que uma requisição em streaming ocupa um dos seus slots de concorrência até que o streaming termine, então um streaming que você abandona sem fechar continua contando contra o limite.
Aplicativos com tela de configurações
Ferramentas de desktop e editores geralmente rotulam o campo de uma das três formas: "Base URL", "API Base" ou "endpoint compatível com OpenAI". Todos eles querem a mesma string. Algumas notas que economizam tempo:
- Escolha o tipo de provedor OpenAI ou "OpenAI compatível personalizado", não um específico de fornecedor.
- Digite o nome do modelo manualmente se o aplicativo tiver uma caixa de texto livre.
uncensoredé o ID exato. - Se o aplicativo tiver um botão "testar conexão", ele geralmente chama a lista de modelos, que esta API suporta.
- Alguns aplicativos armazenam em cache a lista de modelos de um provedor anterior. Remova a entrada antiga e adicione uma nova se a lista suspensa parecer errada.
Para um exemplo prático em um editor específico, consulte o guia de conexão do Cursor, ou a página da API de codificação para o panorama geral. A referência completa de parâmetros está na documentação da API.
Assim que a conexão funcionar, salve os valores exatos em algum lugar onde você possa encontrá-los novamente: a URL, o nome do modelo e a data em que criou a chave. Equipes frequentemente perdem uma hora depois com uma cópia da configuração que ainda contém um valor antigo. Um único arquivo de exemplo compartilhado no repositório, com um placeholder em vez da chave real, impede isso.
Erros comuns e correções
A URL termina como /v1/v1
Alguns clientes adicionam /v1 automaticamente. Se suas solicitações falharem e o log do cliente mostrar um caminho com /v1/v1/chat/completions, remova o /v1 da URL base que você inseriu. O inverso também acontece: um cliente que não o adiciona precisa dele na sua configuração. O log do caminho da solicitação resolve a questão rapidamente.
Você colocou o endpoint completo na URL base
A URL base termina em /v1. Não insira /chat/completions lá. O SDK adiciona o caminho para cada chamada.
Uma barra final ou um erro de digitação no host
A maioria dos SDKs tolera uma barra final, mas algumas ferramentas mais antigas constroem caminhos por concatenação simples e acabam com uma barra dupla. Remova-a se você vir respostas 404 estranhas.
Chave errada ou a chave de outro serviço
Uma chave da OpenAI não funcionará aqui, e a nossa não funcionará lá. Erros de autenticação quase sempre significam um problema de copiar e colar, como um caractere faltando ou um espaço no final.
Funciona no curl, mas não no seu aplicativo
Se o curl tiver sucesso e o aplicativo falhar com a mesma URL e chave, a diferença está no ambiente. Verifique se o aplicativo está atrás de um proxy ou dentro de um contêiner sem acesso de saída, se ele lê uma variável de ambiente mais antiga como um OPENAI_BASE_URL obsoleto deixado de outro projeto, e se um arquivo de configuração substitui o valor definido no código. Imprimir a URL final que o cliente chamará, logo antes da solicitação, resolve a maioria desses casos em um minuto.
HTTP 429
Isso significa que um limite foi atingido. O código de erro rate_limited refere-se a solicitações por minuto, e concurrency refere-se a muitas solicitações ao mesmo tempo. Uma chave completa permite 8 solicitações simultâneas e 300 por minuto; uma chave de teste permite 2 e 60. Em sobrecarga temporária, você também recebe um 429 com um cabeçalho Retry-After: 5, então aguarde cinco segundos e tente novamente.
LangChain e manter a URL em um só lugar
Frameworks baseados no cliente OpenAI usam os mesmos valores. Na integração OpenAI do LangChain, os argumentos são nomeados assim:
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)
Qualquer que seja o framework, não espalhe a URL pelo seu código. Coloque-a em uma única variável de ambiente ou arquivo de configurações e leia-a a partir daí. Dessa forma, mudar entre uma chave de teste e uma de produção, ou entre máquinas, significa alterar uma única linha. Isso também mantém as chaves fora do seu repositório: armazene a chave em uma variável de ambiente ou gerenciador de segredos, nunca em um arquivo confirmado.
Se você estava procurando o endpoint próprio da OpenAI para seus produtos Codex, este não é. Sua URL base e autenticação são documentadas pela OpenAI, então siga a documentação atual deles para isso. O endereço nesta página pertence a um serviço independente e aceita apenas chaves emitidas aqui.
O que você pode enviar após conectar
O endpoint suporta streaming, chamada de funções (tools, tool_choice, com resultados retornados como mensagens role: "tool") e modo JSON via response_format: {"type": "json_object"}. Os parâmetros temperature, top_p, stop, seed e as penalidades são repassados. A janela de contexto é de 100.000 tokens para prompt mais conclusão, e o corpo máximo da requisição é de 8 MB.
É apenas texto. Não há geração de imagem ou áudio, nem embeddings nem fine-tuning, então um recurso do cliente que dependa disso não funcionará com este Base URL. O uso é cobrado por token a $0.15 por 1M de entrada e $0.50 por 1M de saída; a página de preços tem exemplos práticos.
