Entrega webhooks sin fallar
Avise a otro sistema de un evento y asegúrese de que se entera, incluso ante un error 500 o una espera agotada de cinco segundos: cada entrega va firmada, se reintenta con pausas crecientes y, si se agotan los intentos, se aparta con los detalles. Pague por uso, sin suscripción.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
firmados, reintentados, con cola
Por qué una entrega necesita más de un intento
Todo producto que trabaja con otros sistemas acaba teniendo que llamar a la dirección de otra aplicación y confiar en que la llamada llegue. Lanzar esa llamada es una línea de código; que sobreviva a un receptor que se reinicia, a un error 500 o a una espera agotada de cinco segundos es donde los equipos pierden una semana sin darse cuenta. La versión sencilla, un solo intento y sin reintentos, falla en silencio al primer corte de red. Esta herramienta es la capa de entrega que los equipos reconstruyen una y otra vez: usted indica la dirección de destino, el contenido y las cabeceras extra que necesite, y ella firma el mensaje, lo entrega y sigue intentándolo si el otro lado no responde bien.
Cómo se protege cada entrega
Cada entrega lleva una firma hecha con un secreto compartido, para que el receptor confirme que el contenido viene de usted y no se alteró por el camino. Si el destino responde con un error o no contesta a tiempo, el intento se repite tras pausas crecientes, lo que da margen a un sistema que se reinicia. Cuando se agotan todos los intentos, la llamada no se descarta: se aparta y se le devuelve con los detalles de la última respuesta. Un error común es un receptor que no comprueba la firma, lo que deja la puerta abierta a llamadas falsificadas.
Preguntas frecuentes
¿Cómo sabe el sistema receptor que el mensaje viene de mí?
Cada entrega lleva una firma hecha con un secreto compartido. El receptor la comprueba para confirmar que el contenido viene realmente de usted y que no se alteró por el camino, de modo que puede rechazar llamadas falsificadas.
¿Qué pasa si el otro sistema está caído o responde lento?
Si el destino responde con un error o no responde a tiempo, la entrega se reintenta tras pausas cada vez más largas. Así un sistema que se está reiniciando tiene margen para recuperarse en lugar de perder el mensaje al primer tropiezo.
¿Y si fallan todos los intentos?
La llamada no se pierde. Agotados los intentos, se aparta y se le informa con los detalles de la última respuesta, para que corrija la causa y vuelva a enviarla en lugar de descubrir el hueco semanas después.
¿Por qué no enviar la llamada desde mi propio código?
Enviarla es una línea de código; que sobreviva a un receptor que se reinicia, a un error 500 o a una espera de cinco segundos es donde los equipos pierden una semana sin darse cuenta. Aquí tiene reintentos, firma y un lugar para los fallos sin construirlos.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/notify/webhook \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hook"}'const res = await fetch("https://api.kit.forhosting.com/notify/webhook", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com/hook"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/notify/webhook",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com/hook"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/notify/webhook", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com/hook"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com/hook"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/notify/webhook", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"url": "https://example.com/hook"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "notify.webhook",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Disparar un webhook es una línea de código; que sobreviva a un endpoint inestable, un error 500 o un timeout de cinco segundos es donde los equipos pierden una semana en silencio. Este endpoint toma el payload que le da, lo firma, lo entrega con reintentos y le avisa con claridad si no pudo.
La parte de los webhooks que nadie quiere construir dos veces
Todo producto que se integra con el mundo exterior termina necesitando llamar a la URL de otro y confiar en que la llamada llegue. La versión ingenua — un solo POST HTTP sin reintento — falla en silencio en cuanto el receptor se reinicia o hay una falla de red momentánea. notify.webhook es la capa de entrega que los equipos reinventan una y otra vez: espera exponencial, cabeceras de firma, y un lugar donde caen las llamadas que de verdad no se pudieron entregar.
Qué hace una llamada al endpoint
Si el destino responde con un estado fuera del rango 2xx o se agota el tiempo de espera, la entrega se reintenta según un calendario de espera creciente; si se agotan los intentos, la llamada fallida pasa a una cola de fallos y se le reporta con los detalles de la respuesta en vez de desaparecer. POST /notify/webhook recibe una URL destino, un cuerpo JSON y cabeceras personalizadas opcionales, y luego intenta la entrega con una firma HMAC adjunta para que el receptor pueda verificar que el payload realmente vino de ti y no fue alterado en tránsito.
La firma tiene una historia que vale la pena respetar
Firmar el payload de los webhooks se volvió un estándar de facto porque los primeros sistemas de webhooks no tenían forma de probar que un callback no había sido falsificado por un tercero que adivinó la URL. Generamos una firma por cada entrega usando un secreto que usted controla, siguiendo el mismo patrón de cabecera y hash que la mayoría de los consumidores de webhooks modernos ya saben verificar, así que integrar del lado receptor toma minutos, no una revisión de especificación.
Dónde encaja dentro de un flujo más grande
Encadénelo después de una decisión de enrutamiento de alertas, o úselo como el tramo saliente de una tarea que necesita avisar a un sistema aguas abajo en cuanto el trabajo termina. Como la entrega es asíncrona y se rastrea por task_id, puede disparar un webhook desde dentro de otra automatización — un evento de pago, una compilación terminada, el envío de un formulario — sin bloquearse esperando el tiempo de respuesta del receptor.
Qué ves cuando termina
Cada intento queda registrado con su estado HTTP, latencia y un extracto del cuerpo de respuesta, así que una entrega fallida no es un misterio: obtiene el mismo detalle que hubiera mostrado un comando curl. El estado final, exitoso o en cola de fallos, llega mediante su propio webhook firmado o un enlace firmado válido por 24 horas, según lo que hayas configurado para los resultados de este endpoint.
Casos de integración
Avisar a un sistema aguas abajo al terminar
Un trabajo de exportación por lotes termina y publica un webhook hacia el ERP del cliente para que su inventario se actualice sin que nadie consulte el estado manualmente.
Conectar sistemas antiguos que no pueden consultar
Una herramienta interna vieja que solo acepta llamadas HTTP entrantes recibe notificaciones confiables de pedidos nuevos, con reintentos que cubren sus caídas ocasionales.
Enlace con integraciones de terceros
Una aplicación de marketplace transmite eventos de pedidos al webhook propio del comerciante, con verificación de firma para que el comerciante confíe en el payload.
Difusión de un evento a varios servicios
Un solo evento interno dispara llamadas de webhook a tres endpoints de socios distintos en paralelo, cada uno rastreado y reintentado por separado.
Preguntas técnicas
¿Cómo firma las solicitudes esta api de entrega de webhooks?
Cada entrega incluye una cabecera de firma HMAC calculada a partir de su secreto configurado y el cuerpo del payload, para que el receptor pueda verificar la autenticidad antes de confiar en los datos.
¿Cuántos reintentos ocurren antes de dar por fallido un webhook?
Las entregas fallidas se reintentan automáticamente hasta tres veces con espera creciente; después la llamada pasa a la cola de fallos con los detalles completos de la respuesta, y nunca se cobra.
¿notify.webhook es gratis?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuánto cuesta una entrega de webhook?
Son 0.002 dólares fijos por cada solicitud POST /notify/webhook, ya sea que la entrega tenga éxito en el primer intento o tras reintentos, sin cargo extra por cada reintento.
¿Puedo enviar cabeceras personalizadas con el webhook?
Sí, puede adjuntar cualquier cabecera personalizada junto a la cabecera de firma automática, útil para tokens de autenticación que espera el endpoint receptor.
¿Qué pasa con los webhooks que nunca se entregan?
Quedan en un estado de cola de fallos que puede inspeccionar en el resultado de la tarea, con el último estado y cuerpo de respuesta incluidos para que pueda depurar el lado receptor.
¿Puedo usar esto para entrega masiva de webhooks?
Sí, cada llamada es una tarea asíncrona independiente, así que puede disparar muchas en paralelo desde un ciclo o un trabajo por lotes sin que se bloqueen entre sí.
¿Se conservan los datos del payload después de la entrega?
No, los payloads y los registros de entrega se eliminan tras el período de retención indicado y nunca se usan para entrenar modelos.