Webhooks. Real-time events, delivered reliably.
Los puntos finales de webhook por espacio de trabajo reciben eventos de clics, conversiones y gestión de enlaces con firmas HMAC-SHA256. Reintentos automáticos con retroceso exponencial. El modo SIEM transmite eventos a su plataforma de seguridad.
- 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 clics, conversiones, enlaces y dominios
- Firma de solicitudes HMAC-SHA256
- Reintentos automáticos — hasta 72 horas
- Modo SIEM para el reenvío de eventos de seguridad
- Filtrado de temas por tipo de evento
- Registro de entrega de webhooks con reenvío (replay)
Qué entregan los webhooks de Elido y cómo funciona la entrega
Los webhooks solo son útiles si son fiables. Las siguientes secciones cubren las garantías de entrega, la verificación de firmas, el comportamiento de reintento y el modo SIEM.
Eventos de clics, conversiones, ciclo de vida de enlaces y dominios — configurables por punto final
Cada punto final de webhook puede suscribirse a uno o más tipos de eventos: click.created (cada clic de redirección), conversion.created (evento de conversión recibido de Stripe, Shopify o un punto final personalizado), 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. Los eventos de clics de alto volumen pueden generar mucho ruido; por defecto, los webhooks click.created se envían con una ventana de agregación de 5 segundos (entrega por lotes, hasta 100 eventos por carga útil). Si necesita una entrega por clic en tiempo real (por ejemplo, para alimentar un procesador de flujo), active el modo raw-click en el punto final; tenga en cuenta que esto puede producir miles de solicitudes por minuto para espacios de trabajo con mucho tráfico y solo debe activarse para puntos finales que puedan manejar tal caudal.
Cada solicitud se firma con HMAC-SHA256 — verifique el encabezado X-Elido-Signature antes de procesarla
Elido firma cada cuerpo de solicitud de webhook con HMAC-SHA256 utilizando el secreto compartido configurado en el punto final. La firma se incluye en el encabezado X-Elido-Signature como 'sha256=<hex_digest>'. Para verificar: calcule el HMAC-SHA256 sobre el cuerpo bruto de la solicitud utilizando el secreto compartido y compare el resultado con el valor del encabezado mediante una función de comparación de tiempo constante (para evitar ataques de tiempo). Nunca procese una carga útil de webhook antes de verificar la firma. El secreto se muestra una sola vez al crear el punto final; rótelo en el panel de control con una ventana de solapamiento de tiempo de inactividad cero (el secreto antiguo sigue siendo válido durante 15 minutos después de generar uno nuevo). Encontrará ejemplos de código para la verificación de firmas en Node.js, Python y Go en la guía de webhooks en /docs/guides/webhooks.
Reintentos automáticos con retroceso exponencial — hasta 72 horas antes de marcar una entrega como fallida
Si un punto final devuelve un código de estado que no es 2xx o se agota el tiempo de espera (tiempo de respuesta de 30 segundos), Elido reintenta la entrega con un retroceso exponencial: 30 segundos, 2 minutos, 10 minutos, 30 minutos, 2 horas, 8 horas, 24 horas, 48 horas. Tras la ventana de 72 horas, la entrega se marca como permanentemente fallida y se elimina de la cola de reintentos. Las entregas fallidas aparecen en el registro de entregas de webhooks con el código de estado HTTP final (o 'timeout'). Puede reenviar cualquier entrega fallida desde el panel de control o la API (POST /v1/webhooks/deliveries/:id/replay), lo cual es útil para recuperar un lote de eventos tras una interrupción en el sistema de destino. Los puntos finales que devuelven 5xx durante más de 30 entregas consecutivas se pausan automáticamente y se notifica al administrador del espacio de trabajo por correo electrónico. Reanude el punto final desde el panel de control una vez solucionado el problema subyacente.
El modo SIEM transmite eventos de auditoría del espacio de trabajo a Splunk, Datadog o cualquier punto final de ingestión de registros HTTPS
El modo SIEM es una configuración especial de webhook para el reenvío de eventos de seguridad. En lugar de eventos de aplicación (clics, conversiones), el modo SIEM entrega eventos de auditoría del espacio de trabajo: inicios de sesión SSO, inicios de sesión fallidos, creación/rotación/eliminación de claves API, eventos de aprovisionamiento SCIM, cambios de rol, rotaciones de secretos de webhooks y acciones de administración (eliminación de enlaces, exportaciones masivas). El formato de la carga útil es JSON estructurado con un esquema estándar (marca de tiempo, actor, acción, objetivo, workspace_id, ip_address, user_agent) diseñado para su ingestión en plataformas SIEM comunes. Los webhooks SIEM tienen entrega garantizada con reintento de hasta 7 días y se firman por separado de los webhooks de aplicación. Integraciones probadas: Splunk HTTP Event Collector (HEC), Datadog Logs API, entrada HTTP de Elastic Logstash y cualquier punto final de registro HTTPS genérico. El modo SIEM es una función exclusiva de Business.
Registro de entrega completo con cuerpo de solicitud, código de respuesta y reenvío con un solo clic para entregas fallidas
Se registra cada intento de entrega de webhook: ID del evento, tipo de evento, URL del punto final, marca de tiempo de la entrega, código de estado HTTP, cuerpo de la respuesta (hasta 4 KB) y latencia. El registro de entregas se puede consultar por tipo de evento, punto final, rango de fechas y estado (entregado, reintentando, fallido). Las entregas fallidas incluyen el cuerpo completo de la solicitud para que pueda inspeccionar el evento que falló sin necesidad de reenviarlo. Reenvío: POST /v1/webhooks/deliveries/:id/replay envía la carga útil original (no un evento nuevo) al punto final; se requiere idempotencia en su receptor. La retención del registro de entregas es de 30 días en Pro y 90 días en Business. Para una auditoría permanente de los eventos de webhook, configure un punto final SIEM o active la exportación programada del registro de auditoría.
Equipos de ingeniería que utilizan los webhooks de Elido en producción
Los nombres son marcadores de posición — los casos de estudio de clientes reales se publicarán aquí a medida que se lancen.
“Consumimos webhooks click.created en modo por lotes para alimentar nuestro propio flujo de análisis. La verificación de la firma HMAC y el registro de entregas con reenvío nos ahorraron horas de depuración durante una interrupción parcial: reenviamos el lote de eventos perdidos desde el panel de control sin tener que reconstruir el evento desde el origen.”
“El modo SIEM que transmite eventos de auditoría del espacio de trabajo a nuestro Splunk HEC era la característica empresarial que nuestro equipo de InfoSec requería. Tener los eventos de inicio de sesión SSO y las rotaciones de claves API en Splunk, con el esquema correcto, nos permitió correlacionar los eventos de acceso de Elido con nuestras reglas de alerta SIEM en un solo día tras la configuración.”
“Los webhooks link.expired activan nuestro flujo de trabajo interno para actualizar la base de datos de materiales impresos: cuando caduca un enlace de código QR, nuestro equipo de operaciones recibe una tarea automática para actualizar la etiqueta física. Cero monitorización manual de los estados de caducidad de los enlaces.”
Webhooks de Elido vs Bitly vs Short.io
Ni Bitly ni Short.io ofrecen webhooks de salida con firma HMAC y garantías de reintento. Esta comparación es sincera sobre la diferencia.
| Feature | Elido | Bitly | Short.io |
|---|---|---|---|
| Webhooks de salida | Sí — puntos finales por espacio de trabajo, suscripción por tipo de evento | No disponible | Sí — webhook básico al hacer clic |
| Firma HMAC-SHA256 | Sí — cada entrega firmada, ejemplos de código incluidos | No aplicable | Parcial — encabezado de firma presente, no documentado |
| Reintentos automáticos | Sí — retroceso exponencial, ventana de 72 horas | No aplicable | Sin reintentos — enviar y olvidar |
| Registro de entrega con reenvío | Sí — 30 días Pro, 90 días Business, reenvío con un clic | No aplicable | Sin registro de entregas |
| Modo de eventos de auditoría SIEM | Sí — Business, JSON estructurado para ingestión SIEM | No disponible | No disponible |
| Pausa automática del punto final por fallo | Sí — pausado tras 30 fallos consecutivos, administrador notificado | No aplicable | No disponible |
| Tipos de eventos | Clic, conversión, ciclo de vida del enlace, dominio, eventos de auditoría | No aplicable | Solo clics |
Preguntas sobre webhooks
¿Cómo verifico la firma HMAC-SHA256?
Lea el cuerpo bruto de la solicitud como bytes (antes de cualquier procesamiento JSON), calcule el HMAC-SHA256 sobre los bytes brutos utilizando el secreto compartido de su punto final, codifique el resultado en base16 (hexadecimal) y compárelo con el valor del encabezado X-Elido-Signature tras quitar el prefijo 'sha256='. Utilice una función de comparación de tiempo constante (por ejemplo, hmac.compare_digest en Python, crypto.timingSafeEqual en Node.js) para evitar ataques de tiempo. Nunca compare la firma con un operador de igualdad de cadenas estándar. Encontrará ejemplos de código para Node.js, Python y Go en /docs/guides/webhooks#verification.
¿Qué debe devolver mi receptor de webhooks?
Devuelva HTTP 200 (o cualquier código de estado 2xx) en un plazo de 30 segundos. El cuerpo de la respuesta se ignora; puede devolver un cuerpo vacío o { ok: true }. Si su procesamiento tarda más de 30 segundos, devuelva 200 inmediatamente y procese el evento de forma asíncrona (añádalo a una cola interna, devuelva 200 y procéselo fuera de la ruta de la solicitud). Devolver 4xx se trata igual que 5xx a efectos de reintento: ambos activan un reintento. Devuelva 200 incluso si el evento no es relevante para su integración (por ejemplo, un evento link.created que no necesita) para evitar reintentos innecesarios.
¿Cómo funciona la idempotencia para los eventos de webhook?
Cada carga útil de webhook incluye un campo event_id (UUID). Utilice este campo como clave de idempotencia en su receptor: si recibe el mismo event_id dos veces (debido a un reintento tras un fallo parcial), procéselo solo una vez. Almacene los ID de los eventos recibidos en una tabla de deduplicación con un TTL de al menos 72 horas (la ventana de reintento). La carga útil del reintento es idéntica a la original —mismo event_id, mismo cuerpo—, por lo que una simple comprobación de '¿ya he visto este event_id?' es suficiente.
¿Por qué se ha pausado mi punto final automáticamente?
Los puntos finales se pausan automáticamente tras 30 fallos de entrega consecutivos (no 2xx o tiempo de espera agotado). Esto evita que Elido sature un punto final defectuoso indefinidamente. Corrija el problema subyacente (normalmente: la URL del punto final cambió, el servidor está caído o se supera el tiempo de espera de 30 segundos debido a un procesamiento lento) y luego reanude el punto final en el panel de control. Una vez reanudado, Elido no reenvía automáticamente los eventos que se omitieron durante la pausa; reenvíelos manualmente desde el registro de entregas si necesita recuperar esos eventos.
¿Puedo recibir eventos de clic en tiempo real por cada clic individual?
Sí, active el modo raw-click en el punto final. En este modo, Elido entrega los eventos click.created individualmente, sin ventana de agregación, en los 2 segundos siguientes al clic. Tenga en cuenta que un espacio de trabajo con mucho tráfico puede generar miles de eventos por minuto en modo raw-click; asegúrese de que su receptor pueda manejar ese volumen. Para la mayoría de los casos de uso analítico, la agregación predeterminada de 5 segundos (hasta 100 clics por carga útil) es suficiente y genera muchas menos solicitudes HTTP.
¿Cuál es el límite de tamaño de la carga útil para los eventos de webhook?
Las cargas útiles de eventos individuales son inferiores a 10 KB. Las cargas útiles de clics por lotes (modo predeterminado) pueden contener hasta 100 eventos por lote, con un límite máximo de tamaño de carga útil de 100 KB. Si un lote supera los 100 KB, se divide automáticamente en varias entregas. Los campos de metadatos de gran tamaño en los clics (por ejemplo, URLs de remitente largas) se truncan a 2 KB por campo. Si su receptor impone un límite estricto al tamaño de la carga útil, configure el modo raw-click (un evento por entrega) en lugar del modo por lotes.
¿Hay alguna forma de probar los webhooks localmente durante el desarrollo?
Utilice una herramienta como ngrok, Cloudflare Tunnel o localtunnel para exponer su servidor local con una URL HTTPS pública y, a continuación, registre esa URL como un punto final de webhook en su espacio de trabajo de prueba. Alternativamente, utilice el botón de prueba de envío de webhooks en el panel de control para enviar una carga útil de muestra de cualquier tipo de evento a un punto final registrado sin activar un evento real. La Elido CLI (elido webhook test --event click.created --endpoint https://...) también funciona para pruebas locales mediante scripts.
¿Qué ocurre con los eventos de webhook durante una ventana de mantenimiento planificada?
Los eventos generados durante una ventana de mantenimiento se ponen en cola en Redpanda y se entregan una vez finalizado el mantenimiento. La página de estado de Elido (status.elido.app) anuncia las ventanas de mantenimiento planificadas con antelación. El SLA de entrega de webhooks excluye las ventanas de mantenimiento anunciadas. Para una ventana de mantenimiento típica de 30 a 60 minutos, el margen de reintento de 72 horas garantiza que no se pierda ningún evento de forma permanente: se entregarán en el orden en que se generaron una vez que el punto final sea alcanzable de nuevo.
Keep reading
El complemento de API síncrona a los webhooks asíncronos: cree y consulte enlaces mediante programación.
Reciba eventos de conversión a través de webhooks desde Stripe y Shopify: la vertiente de webhooks entrantes.
El modo SIEM entrega eventos de auditoría del espacio de trabajo: inicios de sesión SSO, aprovisionamiento SCIM, cambios de roles.
Eventos de clic en ClickHouse: la alternativa mediante consultas a la recepción de clics vía webhook.
¿Listo para probarlo?
Empieza con el plan gratuito, actualiza cuando necesites un dominio personalizado.