Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.garu.com.br/llms.txt

Use this file to discover all available pages before exploring further.

Visão Geral

Acontece: o cliente jura que não recebeu o webhook do pagamento, ou seu endpoint ficou meia hora fora do ar e perdeu uma rajada de eventos. A Garu guarda todo evento de webhook emitido — entregue ou não — e a partir da v0.10.3 você pode listar, inspecionar e reenviar qualquer um pela API, SDK, CLI ou direto pelo seu agente de IA. O botão “Reenviar” do dashboard sempre existiu; agora ele tem irmãos:
  • GET /api/webhook-events — lista com filtros (status, tipo de evento, endpoint).
  • GET /api/webhook-events/:id — detalhes de um evento (payload completo, tentativas, código HTTP da última resposta).
  • POST /api/webhook-events/:id/retry — reseta o evento para pending e dispara a entrega imediatamente.
Os três endpoints aceitam chave de API do seller (sk_test_… / sk_live_…) ou sessão JWT do dashboard. Use a chave de API para automação; o dashboard usa o JWT por baixo dos panos.

Status do evento

Toda entrega de webhook tem um destes três status:
StatusSignificado
pendingAguardando entrega ou retry agendado
successSeu endpoint respondeu 2xx
failedEsgotou as 6 tentativas (~26h36min) sem 2xx
É success, não delivered. Se você consumia delivered em alguma versão preview, ajuste — a API e os tipos do SDK usam success em todos os lugares.

Fluxo: listar com falha → escolher → reenviar

O caminho de feliz é sempre o mesmo: pegue os que falharam, abra um para inspecionar (opcional), reenvie. Quatro formas de fazer:
# 1. Liste os últimos eventos que falharam
curl "https://garu.com.br/api/webhook-events?status=failed&limit=5" \
  -H "Authorization: Bearer $GARU_API_KEY"

# 2. (Opcional) inspecione um evento específico
curl https://garu.com.br/api/webhook-events/42 \
  -H "Authorization: Bearer $GARU_API_KEY"

# 3. Reenvie
curl -X POST https://garu.com.br/api/webhook-events/42/retry \
  -H "Authorization: Bearer $GARU_API_KEY"

Limite de chamadas

O endpoint de reenvio tem rate limit de 20 requisições por minuto por IP. É o suficiente para reprocessar um lote considerável sem pesar nos seus endpoints — e impede que um script em loop infinito martele um receiver que está fora do ar.
Listou 200 eventos para reprocessar? Coloque um setTimeout/sleep curto entre os retries (≥ 3s entre chamadas mantém você bem abaixo do limite) ou processe em lotes de 20 por minuto.

O que acontece no reenvio

POST /api/webhook-events/:id/retry faz três coisas:
  1. Reseta o status para pending e zera o contador de tentativas falhas.
  2. Reenvia o mesmo payload — o evento original não muda; sua aplicação recebe exatamente o que receberia na primeira tentativa.
  3. Aplica a retry policy padrão se a entrega falhar de novo — 1min, 5min, 30min, 2h, 8h, 16h até failed permanente.
O id do evento (evt_…) não muda em retries. Se você implementa idempotência no seu receiver (e devia — veja Webhooks → Boas Práticas), o segundo recebimento do mesmo id deve ser tratado como duplicata. O reenvio aqui é deliberado: você está pedindo entrega de novo, não esperando um evento novo.

Quando reenviar (e quando não)

Janelas de indisponibilidade curtas (deploy, restart, k8s drain) frequentemente passam dos 26h da retry policy se forem aninhadas a outros incidentes. Reenviar é a forma de recuperar a fila sem precisar de plumbing manual.
Suporte clássico. Localiza o evento via filtro eventType + janela de tempo, confirma que o status está failed (ou success mas o cliente não processou), reenvia.
Reenviar duplica a notificação. Se sua idempotência estiver correta o reenvio é inofensivo, mas é trabalho à toa.
Se seu endpoint devolve 4xx por bug ou validação, o reenvio vai falhar de novo. Corrija o handler primeiro e depois reenvie.

Permissões

Por papel padrão da Garu:
  • Owner / Administrator / Developer: listar, ver e reenviar.
  • Support: listar e ver; reenvio depende de permissão webhook:edit.
  • View Only: somente listar e ver.
Chaves de API herdam as permissões do seller que as criou.

Próximos passos

API: Eventos de Webhook

Referência completa dos três endpoints

Códigos de falha

Roteie falhas de pagamento pelo enum normalizado

MCP Server

Reenvie webhooks pelo chat do seu agente

CLI

Faça tudo direto do terminal