Entrar no painel
Índice

(14) Referência

Erros

A forma de um erro, os códigos HTTP e os códigos estáveis da API.

A forma de um erro

Um erro da API tem sempre o mesmo corpo: um código estável em erro, para o teu programa decidir, e uma explicação em português em mensagem, para mostrar a uma pessoa (ou para o registo). No 422 dados_invalidos vem ainda campos, com uma mensagem por campo.

422 Unprocessable Entity
{
  "erro": "dados_invalidos",
  "mensagem": "Há campos por corrigir.",
  "campos": {
    "amount": "Em AOA o valor é em kwanzas inteiros (múltiplo de 100 unidades menores): os gateways angolanos não cobram cêntimos."
  }
}

Decide pelo erro, e nunca pelo texto da mensagem, que pode ser reescrito. Os códigos não mudam de significado; quando aparecer um novo, trata-o como o código HTTP diz.

Os códigos HTTP

HTTPQuer dizerRepetir?
2xxFeito. 201 quando criou alguma coisa.Não é preciso
400O pedido está mal formado.Só depois de o corrigir
401A chave falta ou não serve.Não, até trocar a chave
403A chave serve, mas o comerciante não autorizou o que se pede (uma comissão de plataforma).Não, até haver autorização
404O recurso não existe para esta chave e este modo. Uma rota que não existe responde 404 em texto simples, sem JSON.Não
409O estado do recurso não deixa fazer isto.Não
422Os dados estão bem formados mas não servem.Só depois de os corrigir
500, 503Falha do nosso lado.Sim, com a mesma Idempotency-Key

Os códigos estáveis

HTTPerroQuando
400pedido_invalidoO corpo não é JSON, passa de 64 KB, ou traz um campo que não existe.
400idempotencia_em_faltaUm POST sem o cabeçalho Idempotency-Key.
400idempotencia_invalidaO Idempotency-Key passa de 255 carateres.
401sem_chaveSem Authorization: Bearer, ou com um valor que não começa por sk_test_ nem sk_live_.
401chave_invalidaA chave não existe, foi revogada, ou deixou de servir depois de uma rotação.
403plataforma_nao_autorizadaA sessão pede platform_fee e o comerciante da chave não autorizou essa plataforma.
404sessao_nao_existeNão há sessão com esse id para esta chave (o modo conta).
404pagamento_nao_existeNão há pagamento com esse id para esta chave.
404estorno_nao_existeNão há estorno com esse id para esta chave.
404subscricao_nao_existeNão há subscrição com esse id para esta chave.
404cupao_nao_existeNão há cupão com esse id neste comerciante e neste modo.
409pagamento_nao_pagoPediste um estorno de um pagamento que não está confirmado.
409pagamento_ja_estornadoO pagamento já foi todo estornado.
409subscricao_terminadaA subscrição já terminou: não há nada a cancelar, nem página do cliente a abrir.
409codigo_repetidoJá há um cupão com este código, neste modo.
422dados_invalidosHá campos por corrigir: o objeto campos tem uma mensagem por campo.
422idempotencia_reutilizadaA mesma Idempotency-Key com outro corpo, ou noutra rota.
422moeda_sem_gatewayNão há gateway para cobrar nesta moeda, por estes métodos, neste modo.
422metodo_sem_gatewayPediste em payment_methods um método que não tem gateway neste modo e nesta moeda.
422comissao_acima_do_maximoA comissão da plataforma passa o máximo que o comerciante autorizou.
422comissao_invalidaA comissão da plataforma é zero, negativa, da própria plataforma, ou deixava o comerciante sem líquido.
422cupao_invalidoO coupon da sessão não existe, está desativado, expirado ou esgotado, é de outra moeda, ou não desconta neste valor.
422estorno_acima_do_cobradoO estorno passa o que resta do pagamento. A mensagem diz quanto resta.
500erro_internoUma falha nossa. Nada ficou feito a meio; repete com a mesma Idempotency-Key.
503indisponivelNão foi possível validar a chave agora. Repete daqui a pouco.

Nos SDK

Uma recusa da API chega como um erro com o estado HTTP, o código e a mensagem: *vibra.Error em Go (lê-se com errors.As, e o código está em Code) e VibraError em JavaScript (status, code, userMessage, fields; compara com ErrorCodes). Os SDK repetem sozinhos os 429, 500, 502, 503, 504 e as falhas de rede, com a mesma Idempotency-Key; um 4xx nunca se repete.