Skip to content

Respostas e erros

A API usa o status HTTP para indicar o resultado e JSON para respostas estruturadas. Algumas operações de exclusão ou ação podem responder sem body; confirme a resposta de cada endpoint na referência da API.

Status mais frequentes

StatusSignificadoComportamento recomendado
200 OKLeitura ou alteração concluída.Consuma o schema de resposta.
201 CreatedRecurso criado.Persista o identificador retornado.
204 No ContentAção concluída sem payload.Não tente interpretar JSON.
400 Bad RequestCampo inválido ou header de executor ausente/malformado.Corrija a requisição; não faça retry automático.
401 Unauthorizedkeyapi ausente ou inválida.Recarregue o secret ou rotacione a chave.
402 Payment RequiredPlano da conta vencido ou indisponível.Regularize a conta antes de repetir.
403 ForbiddenExecutor inválido, sem permissão ou fora do escopo.Revise o usuário executor e a conta.
404 Not FoundRota ou recurso não encontrado no escopo da conta.Confirme path e identificador.
409 ConflictEstado atual impede a operação.Releia o recurso antes de decidir.
413 Payload Too LargeUpload excedeu o limite do ambiente.Reduza ou compacte o arquivo.
415 Unsupported Media TypeContent-Type incompatível.Use JSON ou multipart conforme o endpoint.
422 Unprocessable EntityEstrutura válida, mas regra de negócio rejeitada.Exiba a mensagem e ajuste os dados.
429 Too Many RequestsLimite do token atingido.Aguarde Retry-After.
5xxFalha temporária do serviço ou dependência.Faça retry limitado com jitter.

Corpo de erro

Erros de validação e execução usam a estrutura anunciada no OpenAPI. Quando o erro for produzido pela camada HTTP, espere ao menos estes conceitos:

json
{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Descrição do campo ou regra inválida"
}
CampoTipoDescrição
statusCodeintegerMesmo status enviado na linha HTTP.
errorstringCategoria curta e legível do erro.
messagestring ou estrutura documentadaMotivo específico; pode ser localizado pelo serviço.

O endpoint pode acrescentar dados específicos. Não use o texto de message como identificador estável de lógica: prefira status e campos explicitamente descritos no contrato.

Retry seguro

Faça retry automático apenas em 429, timeouts e erros transitórios 5xx.

js
const retryable = response.status === 429 || response.status >= 500;
const retryAfter = Number(response.headers.get('retry-after') ?? 0);

Use backoff exponencial com jitter e um número máximo de tentativas. Operações de escrita não anunciam uma chave de idempotência global; antes de repetir POST, confirme se a primeira tentativa produziu efeito para evitar mensagens ou recursos duplicados.

Validação local

  • envie datas e identificadores no formato indicado pelo schema;
  • respeite enum, minLength, maxLength, mínimo e máximo;
  • não envie null quando o campo for apenas opcional;
  • ajuste Content-Type ao body real;
  • trate respostas vazias antes de chamar response.json().

Diagnóstico sem expor credenciais

Registre método, path, status, duração e um identificador interno da operação. Nunca registre keyapi, conteúdo sensível de mensagens ou dados pessoais sem uma política explícita de mascaramento e retenção. Preserve x-underchat-user-id apenas quando houver uma finalidade legítima de auditoria.

API pública para integrações seguras e rastreáveis.