Pular para o conteúdo principal
Todas as respostas da API Safefy seguem um formato consistente, facilitando o tratamento de sucesso e erro.

Formato de sucesso

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "Pending",
    "amount": 1000
  },
  "message": "Transação criada com sucesso"
}

Formato de erro

{
  "data": null,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "O campo 'amount' deve ser maior que zero"
  }
}

Códigos HTTP

CódigoSignificado
200Sucesso
201Recurso criado
400Erro de validação
401Não autenticado
403Não autorizado
404Recurso não encontrado
409Conflito (ex: externalId duplicado)
429Rate limit excedido
500Erro interno do servidor

Códigos de erro

CódigoDescrição
VALIDATION_ERRORCampos inválidos ou ausentes
AUTHENTICATION_REQUIREDToken não fornecido
INVALID_TOKENToken inválido ou expirado
FORBIDDENIP não autorizado ou sem permissão
NOT_FOUNDRecurso não encontrado
DUPLICATE_EXTERNAL_IDexternalId já existe
INSUFFICIENT_BALANCESaldo insuficiente para saque
RATE_LIMIT_EXCEEDEDMuitas requisições
INTERNAL_ERRORErro interno

Tratando erros

try {
  const response = await fetch('https://api-payment.safefypay.com.br/v1/transactions', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  });
  
  const result = await response.json();
  
  if (result.error) {
    // Trata o erro baseado no codigo
    switch (result.error.code) {
      case 'VALIDATION_ERROR':
        console.error('Dados inválidos:', result.error.message);
        break;
      case 'INVALID_TOKEN':
        // Renova o token e tenta novamente
        break;
      default:
        console.error('Erro:', result.error.message);
    }
  } else {
    // Sucesso
    console.log('Transação criada:', result.data);
  }
} catch (error) {
  console.error('Erro de rede:', error);
}

Rate limiting

Quando você excede o limite de requisições, a API retorna 429 com o header Retry-After:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Limite de requisições excedido. Tente novamente em 60 segundos."
  }
}
Use o header Retry-After para saber quando pode tentar novamente.