Event
Registers a webhook on one Mailchimp audience at publish and starts one run per delivery, verified against Mailchimp's signature. Emits {type, fired_at, list_id, id, email, data}.
Start a run when a Mailchimp audience changes — a subscribe, unsubscribe, profile update, cleaned address or sent campaign.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- API key
- Providers
- Mailchimp
- Secret shape
- the Mailchimp API key, '<key>-<datacenter>' (e.g. …-us21)
- Resolved by
- config.connection_id, else node.connection_id
- Note
- The data-centre suffix on the key is what picks the API host, so a key without it cannot register anything. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set — it is the address Mailchimp calls back on.
Configuration
3 fields, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
list_id The audience to watch. A Mailchimp webhook belongs to one audience — find the id under Audience → Settings → Audience name and defaults, or with mailchimp.list_lists. | string | Yes | — | matches ^[A-Za-z0-9_-]{1,64}$ | a6b5da1054 |
events Which audience changes start a run. All of them live on one webhook, which is deleted again when the workflow is unpublished or disabled. The sms_ events only fire on accounts with SMS enabled. | array | No | ["subscribe"] | 1–10 characters; array of string | — |
sources Whose change counts: user (the contact themselves), admin (someone in the Mailchimp UI), api (any integration, including this workflow). Leave api off if the same workflow also writes to this audience, or it will re-trigger itself. | array | No | ["user","admin","api"] | 1–3 characters; array of string | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"events": [
"subscribe"
],
"list_id": "a6b5da1054",
"sources": [
"user",
"admin",
"api"
]
}Output
One shape.
mailchimp event
A flat envelope over Mailchimp's form-encoded notification, with its own data block decoded under `data`. Which keys `data` carries depends on `type`.
| Field | Type | Example |
|---|---|---|
type The Mailchimp event: subscribe, unsubscribe, profile, cleaned, upemail, campaign (or their sms_ counterparts). Branch on this when the trigger subscribes to more than one. | string | subscribe |
fired_at When Mailchimp raised the event, as it formats it (UTC, 'YYYY-MM-DD HH:MM:SS'). Part of what makes two changes to one contact distinct runs. | string | 2026-09-01 09:15:04 |
list_id The audience the event happened on — the same id this trigger is registered against. | string | a6b5da1054 |
id Mailchimp's id for the thing the event is about: the contact's web id on member events, the campaign id on a campaign event. | string | 8a25ff1d98 |
email The contact's address, or the new address on an upemail event. Empty on a campaign event. | string | ada@example.com |
data Mailchimp's own data block, decoded from its bracketed form encoding — merges, email_type, ip_opt on a subscribe; subject and status on a campaign; old_email and new_email on an upemail. Its keys depend on type. | object | — |
{
"data": {
"email": "ada@example.com",
"email_type": "html",
"id": "8a25ff1d98",
"ip_opt": "198.51.100.24",
"list_id": "a6b5da1054",
"merges": {
"EMAIL": "ada@example.com",
"FNAME": "Ada",
"LNAME": "Lovelace"
}
},
"email": "ada@example.com",
"fired_at": "2026-09-01 09:15:04",
"id": "8a25ff1d98",
"list_id": "a6b5da1054",
"type": "subscribe"
}Notes
- Publishing creates the webhook on the audience; unpublishing, disabling or archiving deletes it. A workflow that is off is off at Mailchimp too.
- Each delivery is verified against Mailchimp's signature over '{timestamp}.{body}' and refused outside a 5-minute window.
- Mailchimp retries a failed delivery at increasing intervals over 75 minutes; a retry joins the run it already started instead of starting a second.
- The signing secret is shown once, at creation. If a webhook is recreated by hand in Mailchimp this trigger will not know its secret — republish instead.
See Event run in a workflow.
In a technical demo we add the Mailchimp connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.