Un endpoint de webhook es una URL en tu servidor a la que DynamiHost llama cuando ocurre algo en tu cuenta. Hoy el catálogo de eventos tiene un solo evento: scan.created, enviado en cada escaneo de tus códigos.

Configura uno

  1. Abre Webhooks en el panel y añade la URL de tu endpoint. Debe ser una dirección HTTPS pública.
  2. Guarda el secreto de firma mostrado para el endpoint. Lo necesitas para verificar que las entregas vienen realmente de DynamiHost.
  3. Usa el botón Probar para enviar una entrega de ejemplo y observar el registro de tu servidor.
Un endpoint de webhook con sus controles de secreto de firma y entregas recientes
Un endpoint de webhook con sus controles de secreto de firma y entregas recientes

Cómo es una entrega

http
POST /your-endpoint HTTP/1.1
Content-Type: application/json
x-dynamihost-event: scan.created
x-dynamihost-signature: 9f2c... (hex HMAC)

{"event": "scan.created", "timestamp": 1792400000, "data": { "...": "scan details" }}

Verifica la firma

La firma es el HMAC-SHA256 hexadecimal de timestamp + "." + raw body, con el secreto de firma de tu endpoint como clave. Verifícala antes de confiar en una entrega:

js
import { createHmac, timingSafeEqual } from "node:crypto";

function isGenuine(secret, timestamp, rawBody, header) {
  const expected = createHmac("sha256", secret)
    .update(timestamp + "." + rawBody, "utf8")
    .digest("hex");
  const a = Buffer.from(expected, "hex");
  const b = Buffer.from(header, "hex");
  return a.length === b.length && timingSafeEqual(a, b);
}

Verifica siempre contra el cuerpo sin procesar de la petición, exactamente como se recibió. Analizar y recodificar el JSON primero cambiará los bytes y todas las comprobaciones de firma fallarán.

Reintentos y desactivación automática

  • Las entregas fallidas (respuestas no 2xx, tiempos agotados, hosts inalcanzables) se reintentan con retrasos crecientes.
  • Un endpoint que sigue fallando se desactiva automáticamente tras 10 fallos consecutivos, y la cuenta es notificada por correo. Corrige el receptor y vuelve a activarlo desde la página Webhooks.
  • Rota el secreto de firma desde la misma página siempre que pueda haberse filtrado. El secreto antiguo deja de funcionar inmediatamente.
Responde a las entregas rápido y haz el trabajo lento después. Devuelve un 2xx en cuanto hayas almacenado el evento; los endpoints que procesan durante segundos son los que agotan el tiempo y se reintentan.