POST no seu endpoint sempre que um desses eventos acontece: afiliado aprovado, conversão registrada, comissão paga, payout concluído, e assim por diante.
Cada evento assinado vira uma entrega assinada com HMAC, com retry exponencial e dead letter em caso de falha. O corpo entregue tem exatamente o mesmo shape do GET /events/{id}, então tudo o que você recebe via webhook também é consultável pela API.
Webhooks são o canal de push; o
GET /events é o canal de pull. Use os dois em conjunto: o webhook avisa em tempo real e a API permite recuperar qualquer evento perdido. A entrega é at-least-once: deduplique pelo id do evento (veja Assinatura).Criar um endpoint
Crie um endpoint comPOST /webhook-endpoints, informando a url de destino e a lista de tipos de evento que quer receber (subscribedEvents). A lista é validada contra a taxonomia da plataforma: um tipo desconhecido é rejeitado com 400 parameter_invalid.
string
required
URL HTTPS que receberá as entregas (
POST).string[]
required
Tipos de evento assinados. No mínimo 1 elemento, todos validados contra o catálogo de eventos. O tipo sintético
webhook.test não pode ser assinado.string
Texto livre opcional (máx. 500 caracteres).
201 inclui o campo secret em claro: esta é a única vez que ele aparece em texto puro. Guarde-o de forma segura; em qualquer outra response ou evento o segredo vem apenas mascarado, no campo maskedSecret (rwhs_***<últimos 4>).
GET /events.
Payload entregue
Cada entrega é umPOST cujo corpo é o envelope do evento, o mesmo shape retornado por GET /events/{id}. A entrega também carrega os headers Repass-Signature (assinatura HMAC) e content-type: application/json.
string
ID do evento (
evt_<ULID>). Use-o para deduplicar entregas repetidas.string
ID da organização dona do evento (
org_...).string
Tipo namespaced
recurso.ação (ex.: commission.paid). Veja o catálogo de eventos.integer
Versão do schema do payload daquele tipo. Hoje todos os tipos estão em
version: 1.string
Agregado a que o evento se refere (ex.:
commission).string
ID do agregado (ex.:
comm_...).object
Snapshot do fato: diff, entidade completa ou campos específicos, conforme o tipo. Dinheiro em centavos (inteiro), percentuais em basis points.
object
{ actor: { type, id }, source? }, onde actor.type é user, api_key ou system.string
Quando o fato ocorreu (ISO-8601).
string
Quando o evento foi gravado no store (ISO-8601).
2xx para confirmar o recebimento. Qualquer outra resposta (ou timeout de 10s) é tratada como falha e dispara o retry. Veja Retries e dead letter.
Gerenciar endpoints
- Listar
- Detalhar
- Atualizar
- Remover
GET /webhook-endpoints lista os endpoints da organização, paginado por cursor ULID em ordem decrescente. Secrets sempre mascarados.Authorization: Bearer rstr_...) e escopadas pela sua organização. Um endpoint de outra organização retorna 404, não 403. Para a referência completa de campos e respostas, veja a aba Referência da API.
Ciclo de vida do endpoint
- active (inicial): recebe eventos e tentativas de entrega.
- disabled: não recebe novos eventos; entregas em curso encerram sem retry e replay é recusado com
409 conflict. OdisabledReasonregistra a causa:manual(viaPATCH) oufailure_rate(auto-desativação). Veja Retries e dead letter para a regra de auto-desativação.
Rotacionar o secret
POST /webhook-endpoints/{endpointId}/rotate-secret gera um novo secret, retém o anterior e define uma graça de 24h (devolvida em previousSecretExpiresAt). Durante a graça, cada entrega é assinada com os dois secrets (dois v1=, o novo primeiro), para você migrar sem perder entregas. Após 24h, só o secret novo assina.
secret em claro. O secret atual fica mascarado em maskedSecret, e o fim da graça vem em previousSecretExpiresAt.
v1= no receptor: Assinatura.
Testar um endpoint
POST /webhook-endpoints/{endpointId}/test entrega uma mensagem sintética webhook.test, assinada como uma entrega normal, na hora (one-shot síncrono). Esse evento não é gravado no event store e a entrega tem eventId: null: sucesso vira succeeded, falha vai direto para dead_letter (sem entrar na fila de retry).
type: "webhook.test" e payload { "message": "Repass webhook test delivery" }. Use-o para validar conectividade e a verificação de assinatura antes de assinar eventos de produção.
Inspecionar e reenviar entregas
Cada tentativa de entrega fica registrada com request, response, status e latência por 30 dias. Dead letters ficam sem prazo, prontos para replay manual.GET /webhook-endpoints/{endpointId}/deliveries: log de entregas dos últimos 30 dias (cursor DESC). Filtro opcionalstatus(pending,attempting,succeeded,failed,dead_letter).GET /webhook-endpoints/{endpointId}/dead-letter: entregas exauridas aguardando replay manual (sem janela de 30 dias).POST /deliveries/{deliveryId}/replay: reenfileira uma entrega referenciando a original (202); exige o endpoint ativo (senão409 conflict).
pending que aponta para a original via replayOfId, processada com o cronograma de retry completo. Detalhes do cronograma, dead letter e auto-disable: Retries e dead letter.
Regras de negócio
Assinatura por endpoint e HMAC
Assinatura por endpoint e HMAC
Cada endpoint assina um subconjunto da taxonomia (validado contra o catálogo). A entrega leva o header
Repass-Signature: t=<unix>,v1=<hmac>, com HMAC-SHA256 sobre "{t}.{body}". O secret sai em claro apenas no create e no rotate-secret; em qualquer outro lugar vem mascarado. A rotação tem graça de 24h com assinatura dupla. Tolerância de replay sugerida: 5 minutos (validada pelo receptor). Veja Assinatura.Retry exponencial, dead letter e auto-disable
Retry exponencial, dead letter e auto-disable
Cronograma de 7 tentativas: 0s, 30s, 5m, 30m, 2h, 12h, 24h. Após a exaustão, a entrega vai para dead letter (consultável e replayável sem prazo). Um endpoint com taxa de falha ≥ 95% em uma janela de 72h (amostra mínima de 20 tentativas) é desativado automaticamente com
disabledReason: failure_rate. Veja Retries e dead letter.Log de entregas de 30 dias
Log de entregas de 30 dias
O log de entregas (request, response, status, latência) fica disponível por 30 dias. Dead letters não expiram, para permitir replay manual a qualquer momento.
Próximos passos
Assinatura
Como validar o header
Repass-Signature e deduplicar entregas.Retries e dead letter
Cronograma de retry, dead letter, replay e auto-disable.
Catálogo de eventos
Todos os tipos de evento que você pode assinar.
Eventos
O histórico de eventos da sua organização, consultável via API.