Skip to content

Erros

Todas as respostas de erro seguem o mesmo formato:

{
  "erro": "CODIGO_DO_ERRO",
  "mensagem": "Descrição legível do problema.",
  "detalhe": "Informação adicional opcional."
}

Códigos HTTP

StatusSignificado geral
400Requisição malformada ou campo inválido
401Credenciais ausentes ou inválidas
403Sem permissão para o recurso
404Recurso não encontrado
409Conflito de estado (pedido já confirmado, chave duplicada)
422Dados válidos sintaticamente, mas inválidos semanticamente
429Rate limit atingido
5xxErro interno da plataforma Movvia

Catálogo de erros de aplicação

CódigoStatus HTTPCausaAção recomendada
PARCEIRO_ID_AUSENTE400Header x-parceiro-id não enviadoIncluir o header em todas as requisições
PLACA_INVALIDA422Formato de placa não reconhecidoValidar formato Mercosul (ABC1D23) ou antigo (ABC1234)
PLACA_JA_CADASTRADA409Placa já existe na base do parceiroConsultar GET /placas/{placa} antes de cadastrar
TRANSACAO_NAO_ENCONTRADA404transacaoId não existe ou não pertence ao parceiroVerificar o ID; revisar logs de webhook
PEDIDO_JA_CONFIRMADO409Tentativa de confirmar pedido já em estado terminalVerificar estado via GET /pedidos/{id}
PEDIDO_EXPIRADO409Pedido passou de 48h sem confirmaçãoCriar novo pedido
IDEMPOTENCY_CONFLICT409Mesma idempotencyKey com payload diferenteUsar chave diferente para a nova operação
RATE_LIMIT_EXCEEDED429Limite de requisições atingidoAguardar X-RateLimit-Reset e retentar
CREDENCIAL_INVALIDA401Authorization incorretoVerificar codificação Base64 das credenciais

Erros 5xx

Erros de servidor (500, 502, 503, 504) são transitórios. Sempre implemente retry com backoff:

  • Aguarde 1s, 5s, 30s entre tentativas.
  • Monitore a status page para incidentes em andamento.
  • Erros 5xx não consomem a idempotencyKey — reenviar com a mesma chave é seguro.

Validação de placa

Placas aceitas:

Mercosul: [A-Z]{3}[0-9][A-Z][0-9]{2}   → ABC1D23
Antigo:   [A-Z]{3}[0-9]{4}              → ABC1234

Validação em Node:

function placaValida(placa: string): boolean {
  return /^[A-Z]{3}[0-9][A-Z][0-9]{2}$/.test(placa) ||
         /^[A-Z]{3}[0-9]{4}$/.test(placa);
}
Logging

Logue sempre o campo erro (não apenas o status HTTP) para facilitar triagem. O código de erro identifica a causa exata sem precisar analisar a mensagem em texto livre.