Webhooks
Refera te avisa quando algo acontece.
Cadastra uma URL no dashboard e escolhe quais eventos quer receber. A gente entrega via POST com corpo JSON + assinatura HMAC-SHA256 no cabeçalho.
Eventos disponíveis
partner.created— novo parceiro entrou no programa.conversion.recorded— conversão registrada.commission.available— comissão nasceu (venda ou conversion).withdrawal.requested— vendedor pediu PIX.withdrawal.status_changed— saque foi aprovado/pago/rejeitado.
Headers enviados
http
POST /seu-endpoint HTTP/1.1
Content-Type: application/json
X-Refera-Event: commission.available
X-Refera-Signature: sha256=8f2a...
User-Agent: Refera-Webhook/1.0Verificando a assinatura
Cada endpoint tem um secret que você recebeu ao criar o webhook. Assine o corpo RAW e compare em constant-time:
node·verify-signature.ts
import { createHmac, timingSafeEqual } from 'node:crypto'
export function verifyReferaSignature(rawBody: string, header: string, secret: string) {
const expected = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex')
const a = Buffer.from(expected)
const b = Buffer.from(header)
return a.length === b.length && timingSafeEqual(a, b)
}Retry policy
Hoje é fire-and-forget — a Refera tenta uma vez, timeout de 5s. Se seu endpoint estiver fora, o evento se perde. Recomendamos idempotência no seu lado (guardar {event_id} se você quer garantia). Vamos adicionar retry com backoff em breve.
Payload exemplo
json
{
"event": "commission.available",
"event_id": "evt_01HXY...",
"created_at": "2026-08-06T14:38:20Z",
"tenant_id": "5e7bde52-...",
"data": {
"commission_id": "d1b78e05-...",
"partner_id": "278ddb3b-...",
"amount_brl": 14.99,
"source_sale_id": "a8f2c341-..."
}
}