Guias/Integração

Erros e códigos HTTP

Envelope de erro, status comuns e como tratar cada caso.

Formato

{
  "data": null,
  "error": {
    "code": "validation_error",
    "message": "amount deve ser maior que zero",
    "status": 400
  },
  "request_id": "req_01HZ…"
}

Programe contra o code. A message é escrita para humano e pode mudar sem aviso.

Status

StatusSignificadoO que fazer
400Corpo inválidoCorrija o campo apontado. Repetir igual não resolve
401Chave ausente ou inválidaConfira o header e o ambiente da chave
403Sem permissão na rotaAjuste as permissões da chave no painel
404Recurso não existe nessa contaConfira o ID e o ambiente
409Conflito de estadoO recurso já mudou de estado. Consulte antes de agir
422Regra de negócio barrouSaldo insuficiente, limite, chave PIX inválida
429Limite de requisiçõesEspere e repita com backoff
5xxFalha do nosso ladoRepita com backoff. Guarde o request_id

Repetir com cuidado

Só repita automaticamente 429 e 5xx, com backoff exponencial e um teto de tentativas. Em toda repetição de rota que cria alguma coisa, reenvie a mesma chave de idempotência — senão você cria o recurso duas vezes.

async function comRetentativa<T>(chamada: () => Promise<Response>, tentativas = 4): Promise<Response> {
  let ultima: Response | null = null;
 
  for (let i = 0; i < tentativas; i++) {
    const resposta = await chamada();
    if (resposta.status !== 429 && resposta.status < 500) return resposta;
 
    ultima = resposta;
    await new Promise((r) => setTimeout(r, 2 ** i * 500 + Math.random() * 200));
  }
 
  return ultima!;
}

Dica

Registre request_id, status e error.code em toda chamada que falhar. É o suficiente para o suporte reconstruir o caso.

Precisa de ajuda? Fale com o suporte
© 2026 KyvoPay