Event

trigger.brevo_event
TriggerEmailconnection requiredruns in-engine

Registers a webhook in the tenant's Brevo account on publish and starts one run per delivered event. Emits {event, email, message_id, date, ts_event, payload}.

Start a run when Brevo reports an email event (delivered, bounced, opened, unsubscribed…).

Connection

Required
Yes — the node will not save without one
Auth type
API key
Providers
Brevo
Secret shape
the Brevo v3 API key
Resolved by
config.connection_id, else node.connection_id
Note
The key needs webhook write access. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a URL Brevo can reach — it is the address the webhook is created against.

Configuration

2 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
webhook_type
Which stream to subscribe to: transactional covers messages sent through the API, marketing covers campaigns and contact-list changes. They are separate webhooks at Brevo and accept different event names.
stringNotransactionalone of "transactional", "marketing"—
events
Which Brevo events start a run. Every chosen event lives on one webhook, which is deleted again when the workflow is unpublished or disabled. The names a transactional webhook accepts are not the same as a marketing one's.
arrayNo["delivered"]1–16 characters; array of string—

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "events": [
    "delivered"
  ],
  "webhook_type": "transactional"
}

Output

One shape.

brevo event

A flat envelope over Brevo's event body. Which extra keys `payload` carries depends on the event — a click has `link`, a bounce has `reason`, a marketing event has `camp_id`.

FieldTypeExample
event
The Brevo event name, e.g. delivered, hardBounce, opened, listAddition. Branch on this when the trigger subscribes to more than one.
stringdelivered
email
The contact the event is about.
stringbuyer@example.com
message_id
Brevo's internal message id. The same value appears on every event for one message, so it joins a bounce back to the send that caused it — but it does not identify the event.
string<201798300811.5787683@relay.domain.com>
webhook_id
Brevo's `id` field, which is the id of the webhook itself and is the same on every delivery to this URL. Present for support tickets, not for deduplication.
string12345
date
When Brevo raised the event, in the account's CET/CEST wall clock, as Brevo formats it. Use ts_event when you need an unambiguous instant.
string2026-09-01 09:15:04
ts_event
The same instant as a UTC epoch-seconds timestamp, or null when Brevo sent neither ts_event nor ts.
number1788253904
payload
Brevo's event body exactly as it arrived, for the per-event keys the fields above do not lift out (subject, tags, link, reason, camp_id…).
object—
{
  "date": "2026-09-01 09:15:04",
  "email": "buyer@example.com",
  "event": "delivered",
  "message_id": "<201798300811.5787683@relay.domain.com>",
  "payload": {
    "date": "2026-09-01 09:15:04",
    "email": "buyer@example.com",
    "event": "delivered",
    "id": 12345,
    "message-id": "<201798300811.5787683@relay.domain.com>",
    "subject": "Your receipt",
    "tags": [
      "receipts"
    ],
    "ts_event": 1788253904
  },
  "ts_event": 1788253904,
  "webhook_id": "12345"
}

Notes

  • Publishing creates the webhook in Brevo; unpublishing, disabling or archiving deletes it. A workflow that is off is off at Brevo too.
  • Brevo does not sign its deliveries. This trigger registers a random token as a custom header on the webhook and refuses any delivery that does not carry it, so the callback URL alone is not enough to start a run.
  • Because Brevo sends no event id, a redelivery is recognised by the event body itself; two events that differ only in when they happened are told apart by Brevo's own ts_event.
  • An account may hold at most 40 marketing and transactional webhooks in total; this trigger uses one per published workflow.

See Event run in a workflow.

In a technical demo we add the Brevo connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.