Pular para o conteúdo principal

Respostas de erro

Vale para toda a API. Os erros chegam em um destes dois formatos:

{ "status": "error", "message": "descricao do erro" }
{ "detail": "descricao do erro", "code": "codigo_do_erro" }
HTTPQuando aconteceRepetir a chamada?
400Campo obrigatório ausente, formato incorreto, valor inválido ou campo não editávelNão — corrija o pedido
401Token ausente, expirado ou inválidoDepois de renovar o token
403O recurso pertence a outro lojistaNão
404Recurso não encontrado — a mensagem diz qual (Subscription not found, Charge not found, Online sale not found)Não
409Operação incompatível com o estado do recursoNão — consulte o recurso
422Cartão recusado pelo adquirente na tokenização. code: "CARD_REJECTED" e motivo em denialCom outro cartão
429Tentativas de login demais. Ver AutenticaçãoDepois de ~1 minuto
502Falha de comunicação com o adquirente — timeout, rede ou erro interno dele. Não é recusa de cartãoSim
observação

400 é sobre o seu pedido, 409 é sobre o recurso, 422 é sobre o cartão, 502 é sobre o adquirente. 502 é a única resposta em que vale repetir a mesma chamada.

As mensagens de 400 dizem o problema em texto direto (por exemplo, endDate precedes nextDueDate ou payerName excede 100 caracteres), sem prefixos internos. Use o código HTTP para decidir e a mensagem para registrar.

Sobre gateway_error

Alguns 502 da pré-captura trazem gateway_error com o retorno bruto do adquirente, para diagnóstico. O formato desse campo não é contrato — pode mudar sem aviso. Não faça parse dele: registre o trace_id e trate como 502.

Erros de validação trazem a lista dos campos:

{ "status": "error", "message": "Campos obrigatórios ausentes", "missing": ["cvv", "cardHolder"] }
{ "status": "error", "message": "Campos não editáveis", "rejectedFields": ["payerName"] }

Cartão recusado (422):

{
"status": "error",
"code": "CARD_REJECTED",
"message": "Card rejected",
"denial": { "code": "57", "message": "Card Expired" }
}

O denial.message vem sempre preenchido. Se o adquirente não informar motivo, vem "Cartão recusado pelo adquirente sem motivo informado".

Rastreando uma chamada. Toda resposta traz o cabeçalho X-Trace-Id, e os erros repetem o mesmo valor no corpo:

{
"status": "error",
"message": "Venda não está pré-capturada",
"trace_id": "aabbccdd0102030405060708090a0b0c"
}

Ao abrir um chamado, informe o trace_id.