Skip to main content
Courier delivers ten event types. Every one arrives as { "type": "...", "data": {...} }.

How it works

Courier may add event types. Ignore any type your handler does not recognize. Do not treat it as an error.

Payload shape

For message:updated, data is the same object the returns. It includes any metadata you sent (trace_id, tags, event, utm):
The id is Courier’s message id, the same value the Messages API uses.

Limits & behavior

  • No timestamp in the body. The send time is on the courier-signature header, not inside data.
  • message:updated fires on every status change. One message produces several events, so make your handler idempotent.
  • Every destination gets every type. Filter on type yourself. See .

FAQ

One per status change. A delivered and opened email produces several message:updated events, so key your handler on the message id and the status.
data carries the metadata from your send, including trace_id, tags, event, and utm.