Erros
UberLLM retorna envelopes de erro no estilo OpenAI para que o tratamento de erros existente funcione inalterado:
{
"error": {
"code": "insufficient_credits",
"message": "Your credit balance is too low to serve this request.",
"type": "insufficient_credits"
}
}
Superfície de inferência (/v1/*)
| HTTP | code |
Significado | O que fazer |
|---|---|---|---|
| 402 | insufficient_credits |
Seu saldo pré-pago não cobre a reserva da requisição. | Recarregue em Dashboard → Créditos. |
| 402 | key_spend_cap_exceeded |
Esta chave atingiu seu limite de gastos configurado (diário / mensal / vitalício). | Aumente ou remova o limite da chave, ou use outra chave. |
| 400 | invalid_request |
O corpo da requisição não pôde ser analisado, ou o modelo rejeitou a requisição (a mensagem diz o porquê). | Corrija a requisição; ela não será retentada. |
| 413 | request_too_large |
O corpo da requisição tem mais de 10 MB (na maioria das vezes, imagens enviadas como base64). | Envie imagens como links https://, ou encurte a conversa. Nada foi cobrado. |
| 404 | model_not_found |
O ID model não está disponível. Um prefixo uberllm/ na frente está ok: uberllm/deepseek/deepseek-v4.1-flash alcança deepseek/deepseek-v4.1-flash. |
Verifique GET /v1/models; corrija o ID. |
| 400 | context_length_exceeded |
O prompt é mais longo do que o modelo aceita, seja quem for que o venda. Em /v1/chat/completions sem uma lista models, o modelo mais próximo que o aceita responde em vez disso (o model da resposta o nomeia); este erro ocorre quando nenhum modelo o aceita, ou em /v1/messages. A mensagem fornece ambos os tamanhos e nomeia os modelos que o aceitam. |
Envie menos, ou escolha um modelo que a mensagem nomeia. Nada foi cobrado. |
| 400 | tools_not_supported |
A requisição envia tools e o modelo não pode chamá-los, seja quem for que o venda. Mesma regra de substituição acima. A mensagem nomeia os modelos que podem. |
Envie sem ferramentas, ou escolha um modelo que a mensagem nomeia. Nada foi cobrado. |
| 400 | max_price_exceeded |
Ninguém vende o modelo dentro do seu provider.max_price agora (e nenhum modelo em models poderia aceitá-lo). |
Aumente max_price, tente mais tarde, ou nomeie outros modelos. Nada foi cobrado. |
| 400 | unsupported_routing_option |
Uma opção provider que UberLLM não pode aplicar (a mensagem a nomeia). |
Omita-a; veja Modelos e roteamento. |
| 400 | invalid_metadata |
metadata não é um objeto de até 16 valores de texto. |
Corrija as tags; números devem estar entre aspas. |
| 400 | unknown_capability |
Um alias best-price: / fastest: não nomeia nenhum trabalho. |
Use um de chat, image, image-edit, text-to-video, image-to-video, music, speech, transcription. |
| 400 | wrong_endpoint |
O modelo (ou alias) faz um trabalho que esta rota não faz: um modelo de imagem, vídeo, música, fala ou transcrição enviado para /v1/chat/completions ou /v1/messages, um modelo de chat enviado para uma rota de mídia, ou fala e transcrição trocadas. A mensagem nomeia a rota correta. Recusado antes de qualquer execução; nada é cobrado, e a Atividade o lista como recusado. |
Envie para a rota que a mensagem nomeia (também em endpoints em /v1/models/{id}). |
| 503 | no_timing_data |
fastest: foi solicitado antes que houvesse requisições suficientes cronometradas para comparar modelos. |
Use best-price: ou nomeie um modelo. |
| 429 | rate_limited |
Esta chave excedeu seu limite de requisições por minuto, ou o marketplace continuou a aplicar limite de taxa após retentativas automáticas. | Espere e tente novamente com jitter; aumente o limite de taxa da chave. |
| 503 | no_available_provider |
Ninguém pode servir esse modelo agora, mesmo após retentativas automáticas (nenhum vendedor, todos os vendedores falhando ou muito lentos para iniciar, ou suas opções provider não deixaram nada para rotear), ou um alias best-price: / fastest: não encontrou nenhum modelo disponível para o trabalho agora. A mensagem nomeia o modelo ou o trabalho. Isso também cobre um vendedor cuja própria conta de provedor falhou: UberLLM tenta outros vendedores e nunca repassa o erro desse vendedor como se sua chave estivesse errada. |
Tente novamente em breve ou escolha outro modelo. Nada foi cobrado. |
| 503 | service_unavailable |
Um problema temporário do lado da UberLLM. | Tente novamente em alguns minutos. |
Requisições de imagem, vídeo e música adicionam alguns códigos próprios (image_required,
invalid_image_url (um link de imagem de origem que não leva a uma imagem),
max_cost_too_low, idempotency_key_reused, artifact_expired); veja
Criar um vídeo ou imagem.
Uma requisição de chat recusada ou falha aparece em Dashboard → Atividade com a
mensagem que lhe foi enviada. Respostas de chat, imagem, vídeo, música, fala e transcrição
carregam um cabeçalho X-Request-Id com o mesmo ID de sua linha de Atividade,
incluindo erros.
As retentativas acontecem para você antes que um erro seja retornado: até 4 tentativas, apenas antes do primeiro byte de conteúdo. Veja Modelos e roteamento.
Reservas e abortos
UberLLM reserva um custo estimado antes de fazer o proxy e liquida com base no uso real depois. Se uma requisição falha, aborta, ou você se desconecta no meio do streaming, a reserva não utilizada é liberada — você é cobrado apenas pelo conteúdo realmente produzido. Streams abortados são reconciliados a partir de uma estimativa do tokenizador e sinalizados em Dashboard → Atividade.
Limitação de taxa
Limites de taxa por chave são aplicados com uma janela fixa. Na superfície de inferência, as verificações de limite de taxa falham fechadas — se o UberLLM não conseguir verificar seu limite, a requisição é rejeitada em vez de ser atendida sem medição. Defina (ou aumente) o limite de requisições por minuto de uma chave em Dashboard → API keys.
Toda resposta autenticada /v1/* contém a janela atual da chave:
| Cabeçalho | Significado |
|---|---|
X-RateLimit-Limit |
Requisições que esta chave pode enviar por minuto |
X-RateLimit-Remaining |
Requisições restantes no minuto atual |
X-RateLimit-Reset |
Quando a janela recomeça (segundos Unix) |
Retry-After |
Em um 429 deste limite: segundos para esperar antes de tentar novamente |
Diminua a velocidade quando X-RateLimit-Remaining se aproximar de 0. Os cabeçalhos são omitidos quando
a janela não pode ser lida.
API do Vendedor (/api/v1/seller/*)
Estes usam códigos REST padrão:
| HTTP | code |
Significado |
|---|---|---|
| 400 | invalid_request |
Falha na validação (ex: endpoint_url não-https, preços ausentes para absolute, multiplier fora de 0 < m ≤ 1.5). A mensagem indica o campo. |
| 400 | model_not_in_catalog |
model_id não é um modelo de catálogo conhecido. |
| 401 | unauthorized |
JWT do painel ausente ou inválido. |
| 404 | seller_not_found |
Nenhum vendedor para sua organização — ligue para POST /api/v1/seller/register primeiro. |
| 404 | offer_not_found |
Nenhuma oferta com esse ID sob seu vendedor. |
| 409 | invalid_status_transition |
Mudança de status ilegal — ex: retomar uma oferta delisted (deslistada é terminal). |
Nota: uma sondagem de validação falha não é uma resposta de erro. A oferta é
criada/atualizada com sucesso e retornada com status: "paused" e um
last_probe_error explicando o porquê — corrija o endpoint e PATCH-a de volta para
active para re-sondar. Veja Sellers.
Erros de autenticação
| HTTP | Significado |
|---|---|
| 401 | Cabeçalho Authorization ausente/inválido. Chaves de inferência são Bearer ull_...; endpoints de painel usam seu JWT de conta. |
| 403 | A chave é válida, mas não possui o escopo necessário (por exemplo, uma chave somente de inferência chamando um endpoint de painel). |