Guía

Eventos durables y webhooks firmados

Cada cambio relevante produce un evento con objetivo de retención de 90 días; la eliminación TTL es eventual. Los webhooks se entregan al menos una vez: deduplica siempre.

Suscribirse

Registra hasta 20 URLs públicas HTTPS en el puerto 443 y hasta 30 tipos por suscripción. No se aceptan direcciones privadas, loopback, link-local ni destinos que resuelvan hacia ellas. Usa tipos específicos o *. El secreto whsec_… se muestra al crear o rotar y la rotación entra en vigor inmediatamente.

Verificar una entrega

Moku envía Moku-Event-Id, Moku-Delivery-Id y Moku-Signature: t=<unix>,v1=<hex>. Calcula HMAC-SHA256 con el secreto completo sobre timestamp + "." + cuerpo_crudo, compara en tiempo constante y rechaza timestamps antiguos.

const signed = timestamp + "." + rawBody;
const expected = createHmac("sha256", signingSecret)
  .update(signed)
  .digest("hex");
timingSafeEqual(Buffer.from(expected), Buffer.from(receivedV1));

El cuerpo del evento contiene metadatos del recurso, no su snapshot completo; consulta el endpoint del recurso para obtener el estado actual.

Entrega y reintentos

Reproducir y consultar el resultado

POST /vendors/{vendor_id}/events/{event_id}/replay responde 202 Accepted cuando el trabajo quedó guardado, no cuando terminó la entrega. Guarda replay_id y consulta:

GET /vendors/{vendor_id}/events/{event_id}/replays/{replay_id}

Necesitas webhooks.write para iniciar y webhooks.read para consultar. El estado avanza entre queued, running, completed o failed. total es null hasta seleccionar los destinos. Los contadores delivered, failed y skipped permiten distinguir resultados parciales; una suscripción eliminada o desactivada se omite.

Cada POST crea una reproducción nueva. Si pierdes la respuesta, no asumas que el primer intento falló: repetirlo puede duplicar entregas.

Tipos publicados en v1