Webhooks. Real-time events, delivered reliably.
Endpoints de webhook por workspace recebem eventos de clique, conversão e gerenciamento de links com assinaturas HMAC-SHA256. Retries automáticos com backoff exponencial. O modo SIEM transmite eventos para sua plataforma de segurança.
- 10+ event types — clicks, conversions, domain changes
- HMAC-SHA256 signature on every delivery
- 72-hour exponential-backoff retry
- Delivery log with one-click replay
Event types
10+ event types out of the box
Subscribe per endpoint — receive only the events you care about. High-volume click events ship in a 5-second batched window by default; raw-click mode delivers per-click for stream processors.
- link.clicked
Every redirect click. Batched (5s window) or raw-click mode.
- link.created
A new short link was created in the workspace.
- link.updated
Link metadata, target URL, or rules changed.
- link.deleted
Link removed — update any downstream references.
- domain.verified
Custom domain passed DNS verification.
- conversion.attributed
Revenue event matched to a click via Stripe or Shopify.
- campaign.completed
Campaign reached its end date or click cap.
- member.invited
Workspace member added or SCIM-provisioned.
Plus link.expired, link.click_cap_reached, domain.ssl_issued, and more — see the full event catalog.
Delivery guarantees
Exponential backoff. 72-hour window.
A non-2xx response or a 30-second timeout triggers automatic retries: 30 s → 2 min → 10 min → 30 min → 2 h → 8 h → 24 h → 48 h. After 72 hours the delivery is permanently failed and removed from the queue — but still in the delivery log for manual replay.
- 30-second response timeoutReturn 200 immediately; process async if your handler is slow.
- 8 retry attempts over 72 hoursExponential backoff — no avalanche effect on restart.
- Auto-pause after 30 consecutive failuresWorkspace admin notified by email. Resume from dashboard.
- One-click replay from logOriginal payload, same event_id — receiver must be idempotent.
| Event | Endpoint | Status | Latency | Time | |
|---|---|---|---|---|---|
link.clicked | api.acme.com/wh | 200 | 142ms | 14:04:31 | |
link.created | api.acme.com/wh | 200 | 88ms | 14:03:19 | |
conversion.attributed | logs.acme.com | 500 | 30001ms | 14:02:01 | |
domain.verified | api.acme.com/wh | 200 | 67ms | 13:58:44 | |
link.deleted | logs.acme.com | timeout | 30000ms | 13:55:12 |
Delivery log
Full log. Filter, inspect, replay.
Every attempt is logged: event ID, event type, endpoint URL, HTTP status, response body (up to 4 KB), and latency. Retention is 30 days on Pro, 90 days on Business.
- Filter by event type, endpoint, status, and date range
- Failed entries show full request body for debugging
- Replay sends original payload — same event_id
- API: POST /v1/webhooks/deliveries/:id/replay
- SIEM mode: structured JSON with 7-day retry guarantee
What you can do
- Eventos de clique, conversão, link e domínio
- Assinatura de requisição HMAC-SHA256
- Retries automáticos — até 72 horas
- Modo SIEM para encaminhamento de eventos de segurança
- Filtragem de tópico por tipo de evento
- Log de entrega de webhook com replay
O que os webhooks do Elido entregam e como funciona a entrega
Os webhooks são tão úteis quanto sua confiabilidade. As seções abaixo cobrem garantias de entrega, verificação de assinatura, comportamento de retry e modo SIEM.
Eventos de clique, eventos de conversão, eventos de ciclo de vida de link e eventos de domínio — configuráveis por endpoint
Cada endpoint de webhook pode se inscrever em um ou mais tipos de eventos: click.created (todo clique de redirect), conversion.created (evento de conversão recebido do Stripe, Shopify ou endpoint customizado), link.created, link.updated, link.deleted, link.expired, link.click_cap_reached, domain.verified, domain.ssl_issued, domain.ssl_error, workspace.member.added, workspace.member.removed. Eventos de clique de alto volume podem ser ruidosos — por padrão, webhooks click.created são enviados com uma janela de agregação de 5 segundos (entrega em lote, até 100 eventos por payload). Se precisar de entrega em tempo real por clique (ex.: alimentar um processador de stream), ative o modo raw-click no endpoint; observe que isso pode produzir milhares de requisições por minuto para workspaces movimentados e deve ser ativado apenas para endpoints que conseguem lidar com esse throughput.
Cada requisição é assinada com HMAC-SHA256 — verifique o cabeçalho X-Elido-Signature antes de processar
O Elido assina cada corpo de requisição de webhook com HMAC-SHA256 usando o segredo compartilhado configurado no endpoint. A assinatura é incluída no cabeçalho X-Elido-Signature como 'sha256=<hex_digest>'. Para verificar: compute HMAC-SHA256 sobre o corpo bruto da requisição usando o segredo compartilhado, compare o resultado ao valor do cabeçalho usando uma função de comparação em tempo constante (para evitar ataques de timing). Nunca processe um payload de webhook antes de verificar a assinatura. O segredo é exibido uma vez na criação do endpoint; rotacione-o no painel com uma janela de sobreposição sem tempo de inatividade (o segredo antigo permanece válido por 15 minutos após a geração de um novo). Exemplos de código para verificação de assinatura em Node.js, Python e Go estão no guia de webhooks em /docs/guides/webhooks.
Retries automáticos com backoff exponencial — até 72 horas antes que uma entrega seja marcada como falhou
Se um endpoint retornar um código de status não-2xx ou atingir timeout (timeout de resposta de 30 segundos), o Elido tenta a entrega novamente com backoff exponencial: 30 segundos, 2 minutos, 10 minutos, 30 minutos, 2 horas, 8 horas, 24 horas, 48 horas. Após a janela de 72 horas, a entrega é marcada como definitivamente falhou e removida da fila de retry. As entregas com falha aparecem no log de entrega de webhook com o código de status HTTP final (ou 'timeout'). Você pode fazer replay de qualquer entrega com falha pelo painel ou API (POST /v1/webhooks/deliveries/:id/replay) — útil para recuperar um lote de eventos após uma interrupção no sistema de destino. Endpoints que retornam 5xx em mais de 30 entregas consecutivas são pausados automaticamente e o administrador do workspace é notificado por e-mail. Retome o endpoint pelo painel assim que o problema subjacente for corrigido.
O modo SIEM transmite eventos de auditoria do workspace para Splunk, Datadog ou qualquer endpoint de ingestão de logs HTTPS
O modo SIEM é uma configuração especial de webhook para encaminhamento de eventos de segurança. Em vez de eventos de aplicação (cliques, conversões), o modo SIEM entrega eventos de auditoria do workspace: logins SSO, logins com falha, criação/rotação/exclusão de chaves de API, eventos de provisionamento SCIM, alterações de função, rotações de segredo de webhook e ações de administrador (exclusão de links, exportações em massa). O formato do payload é JSON estruturado com um schema padrão (timestamp, actor, action, target, workspace_id, ip_address, user_agent) projetado para ingestão em plataformas SIEM comuns. Webhooks SIEM têm garantia de entrega com até 7 dias de retry e são assinados separadamente dos webhooks de aplicação. Integrações testadas: Splunk HTTP Event Collector (HEC), Datadog Logs API, Elastic Logstash HTTP input e qualquer endpoint HTTPS genérico de log. O modo SIEM é um recurso exclusivo do Business.
Log de entrega completo com corpo da requisição, código de resposta e replay com um clique para entregas com falha
Cada tentativa de entrega de webhook é registrada: ID do evento, tipo do evento, URL do endpoint, timestamp da entrega, código de status HTTP, corpo da resposta (até 4KB) e latência. O log de entrega é consultável por tipo de evento, endpoint, intervalo de datas e status (entregue, tentando novamente, falhou). As entregas com falha incluem o corpo completo da requisição para que você possa inspecionar o evento que falhou sem fazer replay. Replay: POST /v1/webhooks/deliveries/:id/replay envia o payload original (não um novo evento) para o endpoint — é necessário idempotência no seu receptor. A retenção do log de entrega é de 30 dias no Pro, 90 dias no Business. Para auditoria permanente de eventos de webhook, configure um endpoint SIEM ou ative a exportação agendada do log de auditoria.
Equipes de engenharia usando webhooks do Elido em produção
Os nomes são exemplos — estudos de caso reais de clientes serão publicados aqui conforme disponíveis.
“Consumimos webhooks click.created em modo lote para popular nosso próprio pipeline de analytics. A verificação de assinatura HMAC e o log de entrega com replay nos pouparam horas depurando uma interrupção parcial — fizemos replay do lote de eventos perdidos pelo painel sem precisar reconstruir o evento a partir da fonte.”
“O modo SIEM transmitindo eventos de auditoria do workspace para nosso Splunk HEC foi o recurso enterprise que nossa equipe de InfoSec exigia. Eventos de login SSO e rotações de chaves de API no Splunk, com o schema correto, significaram que conseguimos correlacionar eventos de acesso do Elido com nossas regras de alerta SIEM em um dia após a configuração.”
“Os webhooks link.expired acionam nosso fluxo de trabalho interno para atualizar o banco de dados de materiais impressos — quando um link de QR code expira, nossa equipe de operações recebe automaticamente uma tarefa para atualizar a etiqueta física. Zero monitoramento manual de estados de expiração de links.”
Webhooks do Elido vs Bitly vs Short.io
Nem o Bitly nem o Short.io oferecem webhooks de saída com assinatura HMAC e garantias de retry. Esta comparação é honesta sobre a diferença.
| Feature | Elido | Bitly | Short.io |
|---|---|---|---|
| Webhooks de saída | Sim — endpoints por workspace, inscrição por tipo de evento | Não disponível | Sim — webhook básico por clique |
| Assinatura HMAC-SHA256 | Sim — toda entrega assinada, exemplos de código fornecidos | Não aplicável | Parcial — cabeçalho de assinatura presente, sem documentação |
| Retries automáticos | Sim — backoff exponencial, janela de 72 horas | Não aplicável | Sem retries — fire and forget |
| Log de entrega com replay | Sim — 30 dias Pro, 90 dias Business, replay com um clique | Não aplicável | Sem log de entrega |
| Modo de eventos de auditoria SIEM | Sim — Business, JSON estruturado para ingestão SIEM | Não disponível | Não disponível |
| Pausa automática do endpoint em falha | Sim — pausado após 30 falhas consecutivas, admin notificado | Não aplicável | Não disponível |
| Tipos de eventos | Clique, conversão, ciclo de vida de link, domínio, eventos de auditoria | Não aplicável | Apenas clique |
Perguntas sobre webhooks
Como verifico a assinatura HMAC-SHA256?
Leia o corpo bruto da requisição como bytes (antes de qualquer parsing de JSON), compute HMAC-SHA256 sobre os bytes brutos usando o segredo compartilhado do seu endpoint, codifique o resultado em base16 (hex) e compare-o ao valor no cabeçalho X-Elido-Signature após remover o prefixo 'sha256='. Use uma função de comparação em tempo constante (ex.: hmac.compare_digest em Python, crypto.timingSafeEqual em Node.js) para evitar ataques de timing. Nunca compare a assinatura com um operador de igualdade de string padrão. Exemplos de código para Node.js, Python e Go estão em /docs/guides/webhooks#verification.
O que meu receptor de webhook deve retornar?
Retorne HTTP 200 (ou qualquer código de status 2xx) dentro de 30 segundos. O corpo da resposta é ignorado — você pode retornar um corpo vazio ou { ok: true }. Se seu processamento levar mais de 30 segundos, retorne 200 imediatamente e processe o evento de forma assíncrona (enfileire em uma fila interna, retorne 200, processe fora do caminho da requisição). Retornar 4xx é tratado da mesma forma que 5xx para fins de retry — ambos acionam um retry. Retorne 200 mesmo que o evento não seja relevante para sua integração (ex.: um evento link.created que você não precisa) para evitar retries desnecessários.
Como funciona a idempotência para eventos de webhook?
Todo payload de webhook inclui um campo event_id (UUID). Use-o como chave de idempotência no seu receptor: se você receber o mesmo event_id duas vezes (devido a um retry após uma falha parcial), processe-o apenas uma vez. Armazene os event_IDs recebidos em uma tabela de deduplicação com TTL de pelo menos 72 horas (a janela de retry). O payload de retry é idêntico ao original — mesmo event_id, mesmo corpo — portanto, uma simples verificação 'já vi esse event_id?' é suficiente.
Por que meu endpoint está sendo pausado automaticamente?
Os endpoints são pausados automaticamente após 30 falhas de entrega consecutivas (não-2xx ou timeout). Isso evita que o Elido bombardeie indefinidamente um endpoint com problema. Corrija o problema subjacente (geralmente: a URL do endpoint mudou, o servidor está inativo, ou o timeout de 30 segundos está sendo excedido devido ao processamento lento), depois retome o endpoint no painel. Após retomado, o Elido não faz replay automático dos eventos que foram ignorados durante a pausa — faça o replay manualmente pelo log de entrega se precisar recuperar esses eventos.
Posso receber eventos de clique em tempo real para cada clique individual?
Sim — ative o modo raw-click no endpoint. No modo raw-click, o Elido entrega eventos click.created individualmente sem janela de lote, em até 2 segundos após o clique. Esteja ciente de que um workspace movimentado pode produzir milhares de eventos por minuto no modo raw-click; certifique-se de que seu receptor consegue lidar com o throughput. Para a maioria dos casos de uso de analytics, a agregação em lote padrão de 5 segundos (até 100 cliques por payload) é suficiente e produz muito menos requisições HTTP.
Qual é o limite de tamanho de payload para eventos de webhook?
Payloads de eventos individuais ficam abaixo de 10KB. Payloads de cliques em lote (modo padrão) podem conter até 100 eventos por lote, com um limite total de tamanho de payload de 100KB. Se um lote exceder 100KB, ele é dividido em múltiplas entregas automaticamente. Campos de metadados grandes em cliques (ex.: URLs de referrer longas) são truncados em 2KB por campo. Se seu receptor impõe um limite estrito de tamanho de payload, configure o modo raw-click (um evento por entrega) em vez do modo lote.
Existe uma forma de testar webhooks localmente durante o desenvolvimento?
Use uma ferramenta como ngrok, Cloudflare Tunnel ou localtunnel para expor seu servidor local com uma URL HTTPS pública e, em seguida, registre essa URL como um endpoint de webhook no seu workspace de teste. Alternativamente, use o botão de test-fire de webhook no painel para enviar um payload de amostra para qualquer tipo de evento a um endpoint registrado sem acionar um evento real. O CLI do Elido (elido webhook test --event click.created --endpoint https://...) também funciona para testes locais via script.
O que acontece com os eventos de webhook durante uma janela de manutenção planejada?
Os eventos gerados durante uma janela de manutenção são enfileirados no Redpanda e entregues após o término da janela de manutenção. A página de status do Elido (status.elido.app) anuncia janelas de manutenção planejadas com antecedência. O SLA de entrega de webhook exclui janelas de manutenção anunciadas. Para a janela de manutenção típica de 30 a 60 minutos, a janela de retry de 72 horas significa que nenhum evento é perdido permanentemente — eles são entregues na ordem em que foram gerados assim que o endpoint estiver acessível novamente.
Keep reading
O complemento síncrono de API aos webhooks assíncronos — crie e consulte links programaticamente.
Receba eventos de conversão via webhooks do Stripe e Shopify — o lado de webhook de entrada.
O modo SIEM entrega eventos de auditoria do workspace — logins SSO, provisionamento SCIM, alterações de função.
Eventos de clique no ClickHouse — a alternativa de consulta ao recebimento de cliques via webhook.
Pronto para experimentar?
Comece no plano gratuito, faça o upgrade quando precisar de um domínio personalizado.