A GoPag API utiliza códigos de status HTTP padronizados e retorna detalhes adicionais no corpo da resposta seguindo o padrão RFC 7807 (Problem Details).
Estrutura de Erro
Todas as respostas de erro seguem este formato:
{"type":"https://httpstatuses.com/400","title":"Bad Request","status":400,"detail":"Field payment_type is required","trace_id":"a1b2c3"}
Campos
Campo
Tipo
Descrição
type
string
URI que identifica o tipo de erro
title
string
Resumo legível do erro
status
integer
Código de status HTTP
detail
string
Descrição detalhada do erro
trace_id
string
ID único para rastreamento (6 caracteres)
Códigos de Status HTTP
2xx - Sucesso
200 OK
Requisição bem-sucedida.
201 Created
Recurso criado com sucesso.
4xx - Erros do Cliente
400 Bad Request
Requisição inválida ou mal formatada.
Exemplos:
Causas comuns:
Campo obrigatório ausente
Formato de campo inválido (ex: ID não hexadecimal de 32 chars)
Campos inesperados na requisição
Valor fora do intervalo permitido
Tipo de dado incorreto
Solução:
Verifique os campos obrigatórios
Valide formatos antes de enviar
Remova campos não documentados
Consulte a documentação do endpoint
401 Unauthorized
Não autenticado ou credenciais inválidas.
Exemplos:
Causas comuns:
Token OAuth expirado (após 1 hora)
Token inválido ou ausente
certSerialNumber não corresponde ao marketplace_id
Tentando acessar seller de outro marketplace
Certificado mTLS inválido
Solução:
Obtenha um novo token OAuth 2.0
Verifique o marketplace_id na URL
Confirme que o seller pertence ao seu marketplace
Valide seu certificado mTLS
403 Forbidden
Autenticado, mas sem permissão para acessar o recurso.
Causas comuns:
Tentando acessar recursos de outro marketplace
Permissões insuficientes no client_id
Solução:
Verifique se o recurso pertence ao seu marketplace
Entre em contato com suporte para revisar permissões
404 Not Found
Recurso não encontrado.
Causas comuns:
ID incorreto na URL
Recurso foi deletado
Recurso pertence a outro marketplace
Solução:
Verifique o ID do recurso
Confirme que o recurso existe
Verifique se está usando o marketplace_id correto
429 Too Many Requests
Rate limit excedido.
Solução:
Adicione cache de respostas
Otimize número de requisições
Entre em contato com o suporte
5xx - Erros do Servidor
500 Internal Server Error
Erro interno do servidor.
Causas comuns:
Erro inesperado no servidor
Falha na comunicação com gateway de pagamento
Solução:
Tente novamente após alguns segundos
Se persistir, reporte usando o trace_id
501 Not Implemented
Funcionalidade ainda não implementada.
Causas comuns:
Usando payment_locale que ainda não está ativo (PINPAD, MPOS, Tap to Pay, Link Payment)
Solução:
Use payment_locale: "api" (ou omita o campo)
Aguarde disponibilidade da funcionalidade
Entre em contato com suporte para roadmap
502 Bad Gateway
Erro na comunicação com serviço externo.
Causas comuns:
Gateway de pagamento indisponível
Timeout na comunicação
Erro de rede
Solução:
Tente novamente após alguns segundos
Implemente retry com backoff exponencial
Se persistir, reporte o trace_id
503 Service Unavailable
Serviço temporariamente indisponível.
Causas comuns:
Manutenção programada
Alta carga no sistema
Solução:
Aguarde e tente novamente
Respeite o header Retry-After
Erros Específicos de Negócio
Validação de Transação
Erro do Gateway de Pagamento
Quando o gateway retorna erro, a API repassa a mensagem:
Tratamento de Erros - Melhores Práticas
1. Sempre Verifique o Status HTTP
2. Log do Trace ID
3. Mensagens Amigáveis para Usuário
Trace ID para Suporte
Sempre que reportar um problema ao suporte, inclua:
O trace_id permite que nossa equipe rastreie o que aconteceu de forma facilitada.
{
"type": "https://httpstatuses.com/400",
"title": "Bad Request",
"status": 400,
"detail": "Field installment_plan.number_installments must be between 1 and 12",
"trace_id": "b1c2d3"
}
catch (error) {
console.error('API Error:', {
status: error.status,
detail: error.detail,
trace_id: error.trace_id, // IMPORTANTE para suporte
timestamp: new Date().toISOString()
});
// Enviar para sistema de monitoramento
sendToMonitoring({
type: 'api_error',
trace_id: error.trace_id,
details: error
});
}
function getUserFriendlyMessage(error) {
switch (error.status) {
case 400:
return 'Verifique os dados informados e tente novamente.';
case 401:
return 'Sessão expirada. Faça login novamente.';
case 404:
return 'Recurso não encontrado.';
case 429:
return 'Muitas requisições. Aguarde um momento.';
case 500:
case 502:
case 503:
return 'Erro temporário. Tente novamente em instantes.';
default:
return 'Ocorreu um erro inesperado.';
}
}