Skip to content

🔔 Webhooks

Os Webhooks são notificações automáticas enviadas pela FastGivr via POST HTTPS para o seu servidor sempre que ocorre uma alteração de status em suas cobranças ou saques. Eles eliminam a necessidade de consultar repetidamente a API (polling), economizando processamento e banda.


📡 Lista de Eventos Disponíveis

Ao cadastrar uma URL de webhook no painel administrativo, você pode escolher escutar os seguintes eventos:

Nome do EventoGatilho de DisparoAção Recomendada
charge.paidPagamento confirmado com sucesso (Pix, Cartão, Boleto).Liberar serviço / Despachar produto.
charge.failedTransação recusada ou boleto vencido sem pagamento.Notificar cliente e ofertar nova via.
chargeback.createdContestação aberta pelo cliente final junto ao banco emissor.Suspender provisoriamente o serviço.
withdrawal.successSaque da conta virtual creditado com sucesso no banco de destino.Atualizar fluxo contábil interno.
withdrawal.failedSaque recusado pela instituição de destino ou chave Pix inválida.Estornar o saldo para a conta FastGivr.

🔒 Validação de Assinatura (X-FastGivr-Signature)

Para garantir que a notificação foi enviada pela FastGivr e não por um invasor simulando requisições, todas as requisições de Webhook contêm um cabeçalho HTTP de segurança:

X-FastGivr-Signature: <ASSINATURA_HMAC_SHA256>

Como Validar a Assinatura (Exemplo em Node.js/TypeScript)

A assinatura é calculada gerando um hash HMAC-SHA256 do corpo bruto da requisição (raw request body) utilizando o Segredo do Webhook (disponível na tela de configuração de webhook do portal) como chave secreta.

typescript
import crypto from 'crypto';
import { Request, Response } from 'express';

export function handleWebhook(req: Request, res: Response) {
  const secret = process.env.FASTGIVR_WEBHOOK_SECRET!; // Seu Segredo do Webhook
  const signature = req.headers['x-fastgivr-signature'] as string;
  
  // O corpo da requisição DEVE ser lido como string bruta (Raw Body)
  const rawBody = JSON.stringify(req.body);
  
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
    
  if (signature !== expectedSignature) {
    return res.status(401).send('Assinatura Inválida');
  }
  
  // Assinatura válida! Processar evento de forma assíncrona
  const event = req.body.event;
  console.log(`Evento recebido: ${event}`);
  
  return res.status(200).send('Recebido');
}

⏳ Política de Retentativas (Retry Policy)

Caso o seu servidor de webhook esteja temporariamente fora do ar ou retorne códigos HTTP diferentes de 2xx (como 500, 503, ou 408), a FastGivr adota uma política rígida de retentativas automáticas baseada em Intervalos Crescentes (Exponential Backoff):

  • 1ª Retentativa: 5 minutos após a falha original.
  • 2ª Retentativa: 15 minutos após a última falha.
  • 3ª Retentativa: 30 minutos após a última falha.
  • 4ª Retentativa: 1 hora após a última falha.
  • 5ª Retentativa: 4 horas após a última falha.
  • 6ª e Última Retentativa: 12 horas após a última falha.

Se após 6 tentativas o seu servidor continuar inacessível, a notificação é marcada como Falha Permanente no painel.


📄 Exemplo de Payload: charge.paid

Abaixo está o formato padrão enviado pela FastGivr em eventos de confirmação de pagamento:

json
{
  "event": "charge.paid",
  "created_at": "2026-05-18T15:10:00.000000Z",
  "data": {
    "id": "chg_9a8b7c6d5e",
    "amount": 150.00,
    "net_amount": 147.51,
    "fee": 2.49,
    "payment_method": "boleto",
    "status": "paid",
    "payer": {
      "name": "Cliente de Teste FastGivr",
      "document": "12345678909",
      "email": "cliente@teste.com"
    },
    "metadata": {
      "order_id": "ped_998822",
      "origin": "e-commerce"
    }
  }
}

FastGivr API Documentation