Saltar al contenido
Docs · Webhooks

Webhooks de lifecycle.

Recibe notificaciones HTTPS cuando un mensaje se encola, se envía, se difiere, rebota, genera queja o se sella. La entrega es best-effort y no bloquea la cadena de evidencia.

  1. 01eventos

    Tipos de evento

    Suscríbete a eventos concretos o a * (todos). Cada entrega es un POST JSON a tu URL.

    email.queuedemail.sentemail.deferredemail.bouncedemail.complainedemail.sealed*
  2. 02POST /v1/webhooks

    Crear el endpoint

    La respuesta incluye secret una sola vez. Guárdalo fuera de mailack: con él verificas Mailack-Signature. En el portal, el flujo es el mismo (secret visible al crear).

    POST /v1/webhooks
    curl -s -X POST "$MAILACK_API_URL/v1/webhooks" \
      -H "Authorization: Bearer $MAILACK_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "url": "https://api.suempresa.mx/hooks/mailack",
        "events": ["email.queued","email.sent","email.bounced","email.sealed"],
        "description": "ERP"
      }' | jq .
    
    # Guarda "secret" de la respuesta: solo se muestra una vez.
  3. 03firma

    Mailack-Signature

    Cada POST lleva headers Mailack-Event, Mailack-Signature (sha256=<hex> HMAC-SHA256 del body crudo) y Mailack-Webhook-Id. Responde 2xx para marcarlo como éxito.

    Content-Typeapplication/json
    Mailack-Eventemail.sent
    Mailack-Signaturesha256=<hmac-hex>
    User-Agentmailack-webhooks/1.0
    verificación HMAC
    # Node.js — verificar Mailack-Signature
    const crypto = require("crypto");
    
    function verify(secret, rawBody, signatureHeader) {
      const expected = "sha256=" + crypto
        .createHmac("sha256", secret)
        .update(rawBody)
        .digest("hex");
      return crypto.timingSafeEqual(
        Buffer.from(expected),
        Buffer.from(signatureHeader || "")
      );
    }
  4. 04payload

    Cuerpo del evento

    Forma fija: type, created_at (RFC 3339) y data (mapa con message_id y metadatos del evento). No dependas de campos no documentados.

    typeemail.sent
    created_at2026-08-06T12:00:00Z
    data.message_iduuid del mensaje
  5. 05ping

    Probar el endpoint

    POST /v1/webhooks/{id}/ping (o el botón Probar del portal) envía un evento sintético para validar URL y firma sin esperar tráfico real.

    La entrega es asíncrona y best-effort: un fallo en tu endpoint no revierte el envío ni el sellado NOM-151.

Siguiente: plantillas

Reutiliza subject y cuerpo con variables en cada envío.