Dashboard · Webhooks

Payload & envelope

Every delivery has Macro request headers plus a JSON body. Choose envelope, message-only, or a custom template.

API version
Current payload schema: api_version: "2026-07-06" (also sent as X-Macro-Api-Version).

Request headers

NameTypeDescription
Content-TypeheaderAlways application/json (unless you override payload content type).
X-Macro-TriggerheaderTrigger id, e.g. content.published.
X-Macro-EventheaderSame as trigger (legacy alias).
X-Macro-Event-IdheaderUnique event id — use for idempotency.
X-Macro-Delivery-IdheaderUnique delivery attempt id.
X-Macro-TimestampheaderUnix seconds when the request was signed.
X-Macro-Api-VersionheaderPayload schema version (2026-07-06).
X-Macro-Signatureheadersha256= + HMAC-SHA256 of {timestamp}.{rawBody}.

Envelope shape (default)

With payloadMode: "envelope" (default), the body is a Macro event object. Prefer trigger over the legacy alias type. Integration-specific fields live under message.

envelope.json
{
  "id": "evt_…",
  "object": "event",
  "api_version": "2026-07-06",
  "created": "2026-07-06T12:00:00.000Z",
  "livemode": true,
  "trigger": "content.published",
  "type": "content.published",
  "message": {
    "websiteId": "69a6190c-94bd-465b-ae2f-6356bb320151",
    "paths": ["/", "/contact.html"],
    "encodedSlugs": ["home", "contact"],
    "locale": "en",
    "publishedAt": "2026-07-06T12:00:00.000Z"
  }
}

Payload modes

NameTypeDescription
envelopedefaultFull Macro event object (id, object, api_version, created, livemode, trigger, type, message).
messagemodeBody is only the trigger-specific message object.
custommodeRender payloadTemplate with {{…}} placeholders against the envelope.
Message-only mode

Sends JSON.stringify(envelope.message) as the body. Useful when your receiver already expects a flat publish payload (paths, locale, …) without the Macro wrapper.

Custom templates

Provide payloadTemplate with mustache-style placeholders. Supported keys include trigger, eventId, created, api_version, livemode, json envelope, json message, dotted message.*, and envelope.* — wrap each key in double curly braces as shown below.

template.txt
{
  "event": "{{trigger}}",
  "paths": {{json message}}
}
Custom headers

Optional newline KEY=value lines. You cannot override Macro system headers (Content-Type, X-Macro-*). System headers always win on merge.

Sample message: content.published

json
{
  "websiteId": "69a6190c-94bd-465b-ae2f-6356bb320151",
  "paths": ["/", "/contact.html"],
  "encodedSlugs": ["home", "contact"],
  "locale": "en",
  "publishedAt": "2026-07-06T12:00:00.000Z"
}

HTTP methods

Deliveries use POST by default. You may set PUT or PATCH when creating or editing the endpoint if your receiver requires it.