Conta
Solução de problemas
Soluções para os problemas mais comuns da API do api14: autenticação, saldo, acesso a modelos, limites de taxa, timeouts, streaming, CORS e base URL.
A maioria dos problemas aparece como um status HTTP e um code no corpo do erro. Encontre o código abaixo; Erros tem a lista completa. Requisições que falham (qualquer 4xx ou 5xx) nunca são cobradas.
{ "error": { "message": "...", "type": "authentication_error", "code": "invalid_api_key" } }
401 invalid_api_key
A chave está ausente, malformada ou revogada.
- Envie-a como
Authorization: Bearer sk-api14-.... Os SDKs da OpenAI fazem isso a partir deapiKey/api_key; com curl, confirme que$API14_API_KEYestá realmente definida no shell em que você executa o comando (echo ${API14_API_KEY:0:9}deve imprimirsk-api14-). - Cuidado com aspas ou quebras de linha sobrando quando a chave vem de um arquivo
.env. - Uma
OPENAI_API_KEYesquecida no ambiente pode sobrescrever a chave que você pretendia usar. Passe a chave explicitamente para descartar essa possibilidade. - Uma chave revogada falha imediatamente. As chaves são exibidas apenas uma vez, então, se você perdeu uma, crie uma nova em Chaves de API e revogue a antiga.
Veja Autenticação.
402 insufficient_balance
Seu saldo em USD é $0 ou (no caso de vídeo) está abaixo do custo estimado do job. As requisições ficam bloqueadas até você adicionar fundos; tentar de novo não ajuda.
- Consulte o saldo com
GET /creditsou em Cobrança. Veja Saldo e informações da chave. - Adicione fundos ou ative a recarga automática. Os planos adicionam uso incluído ao mesmo saldo todo mês. Veja Preços e cobrança.
- Em jobs de longa duração, trate esse código como fatal e pare, em vez de deixar as retentativas do SDK girando.
403 model_not_allowed ou plan_required
model_not_allowed: a chave tem uma lista de modelos permitidos que não inclui este id de modelo. Edite a lista da chave em Chaves de API ou use uma chave sem lista. Os sufixos de variante contam: confirme que o id exato que você envia está permitido.plan_required: seu plano não inclui esta categoria de modelo. Os planos padrão cobrem todas as categorias; confira seu plano na página de preços.
404 model_not_found ou not_found
model_not_found: o id do modelo é desconhecido, está desativado ou foi removido. Os ids incluem o prefixo do provedor:openai/gpt-5-mini, nãogpt-5-mini. Consulte o id exato comGET /modelsouGET /models/{id}(não precisa de chave). Veja Ids de modelos e variantes.not_found: o caminho não existe, ou o job de vídeo ou o id de geração não é seu. Isso geralmente indica uma base URL errada (veja abaixo). Uma consulta de geração logo depois de uma requisição também pode retornar404por alguns segundos, até o registro aparecer.
Base URL errada
A base URL é exatamente:
https://api14.com/api/v1
Erros comuns:
| Você definiu | Resultado |
|---|---|
https://api14.com/v1 ou https://api14.com | As requisições chegam ao site, não à API: respostas em HTML, 404 ou erros de CORS no navegador. |
https://api14.com/api/v1/chat/completions como base | O SDK acrescenta o caminho de novo. Defina apenas a base. |
https://api.openai.com/v1 (o padrão) | Sua chave do api14 é rejeitada pela OpenAI. Defina a base URL no código ou com OPENAI_BASE_URL. |
Particularidades de bibliotecas: ruby-openai adiciona v1 por conta própria, então seu uri_base é https://api14.com/api (Ruby); openai-go espera uma barra no final, https://api14.com/api/v1/ (Go).
429 rate_limited
Você excedeu o limite de requisições por minuto da sua chave ou plano (Free 5, Pro 100, Team 3,000, Enterprise 3,000+). A resposta inclui Retry-After: 60.
- Espere o
Retry-Aftere tente de novo com backoff exponencial e jitter. Os SDKs oficiais da OpenAI já fazem isso (duas tentativas por padrão; aumentemaxRetries/max_retries). - Para trabalho em massa, controle o ritmo das requisições em vez de disparar tudo de uma vez e coloque vários itens em uma requisição. Veja Guia: processamento em lote.
- Um 429 também pode vir do provedor upstream, especialmente nas variantes
:free. Use fallbacks de modelo ou roteamento de provedores para distribuir a carga.
429 daily_limit_reached
A chave atingiu seu limite diário de gasto em USD. Tentar de novo não ajuda até o próximo dia UTC. Aumente ou remova o limite em Chaves de API se o tráfego for esperado. Garanta que sua lógica de retentativa distingue este código de rate_limited; caso contrário, os jobs continuam tentando em vão. Veja Limites de taxa.
Timeouts
Modelos grandes, modelos de raciocínio e saídas longas podem levar minutos.
- Verifique o timeout do seu cliente. Os SDKs de Node e Python usam 10 minutos por padrão; outros clientes HTTP costumam ter padrões menores.
- Use streaming em gerações longas. Os tokens começam a chegar em segundos, e os timeouts de conexão ociosa em proxies e load balancers deixam de ser um problema. Veja Streaming.
- Defina
max_tokense, para modelos de raciocínio, um esforço de raciocínio menor. - Se você repassa as requisições por um servidor próprio, os timeouts do proxy dele (por exemplo
proxy_read_timeoutdo nginx, que por padrão é de 60 segundos) também se aplicam. - Um timeout do seu lado não cancela a geração upstream, que ainda pode ser cobrada. Use a consulta de geração com o id da requisição para conferir.
Streaming que desconecta ou para antes do fim
- Verifique
finish_reasonno último chunk."length"significa quemax_tokensfoi atingido;"error"significa que o provedor falhou no meio do stream, e o chunk traz um objetoerror. Tente de novo ou adicione fallbacks. - Proxies e plataformas serverless às vezes fazem buffer ou cortam respostas SSE. Desative o buffering (
X-Accel-Buffering: nono nginx) e verifique a duração máxima de resposta da plataforma. - Se você interpreta o stream por conta própria, ignore as linhas de comentário que começam com
:(keep-alives) e pare emdata: [DONE]. - Fechar a conexão antes do fim não cancela a cobrança: o provedor pode concluir a geração mesmo assim.
Erros de CORS e apps no navegador
Nunca coloque uma chave de API em código de navegador ou de app móvel. Qualquer pessoa pode lê-la na página e gastar seu saldo. Chame o api14 a partir do seu próprio backend e exponha ao navegador apenas o seu endpoint:
// server.js (Node / Express)
app.post("/api/chat", async (req, res) => {
const stream = await client.chat.completions.create({
model: "openai/gpt-5-mini",
messages: req.body.messages, // valide e limite esta entrada
stream: true,
});
for await (const chunk of stream) res.write(chunk.choices[0]?.delta?.content ?? "");
res.end();
});
Um erro de CORS no navegador durante o desenvolvimento geralmente é uma base URL errada (a requisição chegou ao site em vez da API) ou um cabeçalho de requisição personalizado que o preflight da API não permite; mover a chamada para o seu servidor resolve os dois casos.
Problemas de versão do SDK
- Python
openaianterior à 1.0 usaopenai.ChatCompletion.createeopenai.api_base. Atualize compip install -U openaie use o clienteOpenAI(base_url=..., api_key=...). chat.completions.parseausente: versões mais antigas 1.x/4.x só têmclient.beta.chat.completions.parse. Atualize o pacote.- Erros de parâmetro desconhecido vindos do SDK para campos do gateway (
provider,models,reasoning,plugins): passe-os comextra_bodyem Python, ou com a opção equivalente de corpo extra em outros SDKs. Veja Compatibilidade com o SDK da OpenAI. 400upstream com mensagem do provedor: o parâmetro não é aceito por esse modelo ou provedor. Verifique ossupported_parametersdo modelo em Modelos ou adicioneprovider: { "require_parameters": true }.