Webhooks

Eventos en tiempo real desde tu tenant a tus sistemas externos. Firmados HMAC-SHA256, retry exponential backoff.

Modelo

Eventos estándar

Crear un endpoint

  1. Superadmin abre tenant detail → Webhooks
  2. Form: URL HTTP(S), events (CSV con keys o *)
  3. Submit → response revela el secret una sola vez
  4. Guardar el secret en tu backend antes de cerrar

Verificar firma

Cada delivery incluye headers:

Validación en tu backend

import crypto from 'crypto';

function verifyVertixWebhook(rawBody, signatureHeader, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader),
  );
}

Importante: usa timingSafeEqual para evitar timing attacks. Compara el body RAW (no parseado).

Reintentos

Si tu endpoint responde non-2xx o timeout (10s), Vertix reintenta con exponential backoff:

Idempotencia

Tu handler debe ser idempotente: usa X-Vertix-Delivery-Id como dedup key. El mismo evento puede llegar 2+ veces si tu acuse fallo intermitentemente.

Disable / pause

UI permite Pausar (no entrega nuevos events) sin borrar el endpoint, o Eliminar (cascade de deliveries). Si failure_count sube alto, considera revisar tu backend o disable temporal.

Cron job dispatcher

Endpoint /api/cron/webhooks procesa pending deliveries. Auth: Authorization: Bearer <CRON_SECRET>. Recomendado ejecutar cada 60s desde Coolify scheduled task.

Ver también