Tokia

Codigos de erro

Toda resposta de erro do Tokia segue um formato previsivel. Existem dois schemas, dependendo do tipo de endpoint:

  • Proxy /v1/* (chamadas a modelos de IA) — formato OpenAI-compatible
  • REST (dashboard, billing, keys) — formato Tokia simplificado

Erros do proxy /v1/*

Erros das chamadas a modelos de IA seguem o formato OpenAI:

json
{
  "error": {
    "type": "rate_limit_exceeded",
    "message": "Muitas requisicoes simultaneas. Aguarde alguns segundos e tente novamente.",
    "code": "rate_limit_exceeded"
  }
}

Tokia normaliza todos os erros dos provedores em categorias fixas. A mensagem e em pt-BR e sempre acionavel, nunca vaza nome do provedor ou detalhe interno.

HTTPtype / codeQuando aconteceO que fazer
400invalid_requestParametro invalido (model inexistente, max_tokens absurdo, messages malformado).Verificar payload contra /v1/chat/completions.
401authentication_failedAPI key Tokia invalida, revogada, expirada, ou sem acesso ao modelo solicitado.Recriar key em /dashboard/keys incluindo o modelo desejado.
402request_exceeds_balanceO custo maximo estimado da requisicao (prompt + max_tokens + imagens) excede o saldo disponivel.Reduza max_tokens, encurte o prompt, ou adicione saldo.
404model_not_foundID do modelo nao existe no catalogo Tokia. A resposta inclui did_you_mean com sugestoes.Ver lista atual em /docs/models.
422image_input_not_boundedNao conseguimos limitar o custo de imagens neste modelo.Use um modelo de visao listado no catalogo ou envie so texto.
429rate_limit_exceededThrottling Tokia (default 100 req/min/IP) ou limite do modelo.Backoff exponencial, esperar 1-2s e retentar. Le header retry-after.
429api_key_rate_limitedLimite por API key (default 120 req/min) atingido.Crie 2a API key em /dashboard/keys para paralelizar carga, ou backoff lendo x-ratelimit-reset.
403ip_blocked_by_allowlistIP do cliente nao esta na allowlist desta key.Adicionar IP em /dashboard/keys - editar key - IP allowlist.
502upstream_errorFalha temporaria na infraestrutura Tokia ou no provedor de IA.Retentar em alguns segundos. Se persistir, contatar suporte.
503service_unavailableModelo temporariamente indisponivel (manutencao, recarga em curso).Retentar em alguns minutos. Tokia ja foi notificada automaticamente.
503cost_guard_unavailableNao conseguimos confirmar o custo maximo da requisicao (saldo, cambio ou tabela de precos indisponiveis). Por seguranca, a requisicao nao e enviada ao provedor.Retentar em instantes. Se persistir, contatar suporte.
503model_without_priceO modelo ainda nao tem preco publicado no gateway; a Tokia nao envia requisicoes cujo custo nao consegue calcular.Escolher outro modelo ou contatar suporte.

Erros REST (dashboard / billing / keys)

Endpoints REST da API Tokia (/api-keys, /topups, /payment-methods, /me/profile etc.) usam formato simplificado:

json
{
  "error": "cpf_required",
  "details": "Preencha CPF/CNPJ no profile antes de fazer top-up."
}

Codigos HTTP seguem convencao REST. Abaixo, os codigos de erro mais comuns por status HTTP.

400 Bad Request

CodigoSignificado
cpf_requiredProfile sem CPF/CNPJ. Cliente precisa preencher em PUT /me/profile antes de fazer top-up ou cadastrar cartao.
invalid_cpf_cnpj_formatFormato invalido (nao tem 11 ou 14 digitos).
invalid_cpf_cnpj_checksumDigitos verificadores nao batem.
amount must be number between 20 and 5000Valor de top-up fora do intervalo. Minimo R$ 20, maximo R$ 5.000.
name must be 3-50 charsNome de API key invalido.
no_valid_modelsLista model_ids[] passada nao tem nenhum ID valido do catalogo.
card_rejectedO processador de pagamentos rejeitou o cartao (recusado, expirado, dados incorretos).
missing_card_or_holder_infoPOST /payment-methods sem campos obrigatorios.

401 Unauthorized

CodigoSignificado
(sem corpo)Token Bearer ausente ou invalido. Verifique header Authorization.
invalid_tokenWebhook do processador de pagamentos com token errado (nao afeta clientes).
invalid_signatureWebhook de autenticacao com HMAC invalido (nao afeta clientes).

402 Payment Required

CodigoSignificado
request_exceeds_balanceSaldo insuficiente para cobrir o custo maximo estimado. Veja como o saldo funciona.

403 Forbidden

CodigoSignificado
forbiddenEndpoint admin sem permissao. Cliente normal ve 403; admins precisam estar na allowlist.
key_model_access_deniedAPI key nao tem o modelo solicitado em sua lista permitida. Crie nova key incluindo o modelo.

404 Not Found

CodigoSignificado
key_not_foundDELETE /api-keys/:id com id que nao pertence ao user.
payment_method_not_foundDELETE /payment-methods/:id com id invalido.
profile_not_foundGET /me/profile antes do profile ser criado no primeiro login.

500 Internal Server Error

Erro inesperado Tokia. Reporte para contato@usetokia.com com timestamp + request_id (do header x-tokia-request-id da response).

Headers uteis

Toda resposta de /v1/* retorna headers extras para debug e controle de fluxo:

HeaderQuando aparecePara que serve
x-tokia-request-idToda respostaUUID unico da chamada. Inclua em suporte. Cliente pode enviar o proprio header para correlacao ponta-a-ponta.
x-tokia-max-tokens-appliedQuando max_tokens e omitidoMostra o valor de max_tokens que o Tokia aplicou automaticamente (default 4.096).
x-ratelimit-limitToda respostaQuantos requests por minuto a key pode fazer.
x-ratelimit-remainingToda respostaQuantos requests ainda cabem na janela atual.
x-ratelimit-resetToda respostaUnix timestamp (segundos) quando o contador zera.
retry-afterSo em 429Segundos ate poder retentar.

Padrao de retry recomendado

Para erros retentaveis (429 e 5xx), use backoff exponencial com jitter. Exemplo em TypeScript:

ts
async function retryableFetch(url: string, opts: RequestInit, max = 5) {
  for (let attempt = 0; attempt < max; attempt++) {
    const r = await fetch(url, opts);
    if (r.status === 429 || r.status >= 500) {
      const retryAfter = Number(r.headers.get("retry-after")) || 1;
      const wait = retryAfter * 1000 * Math.pow(2, attempt);
      const jitter = Math.random() * 500;
      await new Promise((ok) => setTimeout(ok, Math.min(wait + jitter, 30_000)));
      continue;
    }
    return r;
  }
  throw new Error("Tokia: max retries exceeded");
}

Erros 400, 401, 402, 403, 404 e 422 sao definitivos — retentar sem corrigir o request nao vai ajudar.