Event

trigger.activecampaign_event
TriggerCRM & salesconnection requiredruns in-engine

Registers a webhook in the tenant's ActiveCampaign account on publish and starts one run per delivery, verified against an HMAC-SHA256 signing header.

Start a run when ActiveCampaign raises an event (contact subscribed, tag added, deal updated…).

Connection

Required
Yes — the node will not save without one
Auth type
API key
Providers
ActiveCampaign
Secret shape
the ActiveCampaign API key (Api-Token)
Config it needs
account
Resolved by
config.connection_id, else node.connection_id
Note
The API key needs access to the webhooks endpoints; a key that can read contacts can still fail to publish. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to an https URL on port 443 — ActiveCampaign only delivers to 443 on https.

Configuration

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

FieldTypeRequiredDefaultConstraintsExample
events
Which ActiveCampaign events to subscribe to. One webhook carries all of them, so adding an event does not create a second subscription — but every one of them starts a run, so branch on `type` downstream.
arrayNo["subscribe"]1–25 characters; array of string—
sources
Who has to have caused the action for the webhook to fire: public (a contact), admin (one of your users), api (an API call) or system (an automation). All four by default — narrowing this is how a webhook quietly stops seeing half its events.
arrayNo["public","admin","api","system"]1–4 characters; array of string—
list_id
Restrict the webhook to one contact list, by its numeric id. Leave empty for the whole account; deal and account events ignore it.
numberNo—≥ 1—

Example configuration

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

{
  "events": [
    "subscribe"
  ],
  "sources": [
    "public",
    "admin",
    "api",
    "system"
  ]
}

Output

One shape.

activecampaign event

The flattened event. `payload` mirrors ActiveCampaign's own form parameters, whose keys depend on the event type, so the shape is open below the declared fields.

Extra keys beyond the ones listed can appear.

FieldTypeExample
type
The ActiveCampaign event name, e.g. subscribe or deal_update. Branch on this when the trigger subscribes to more than one event.
stringsubscribe
date_time
When ActiveCampaign ran the webhook, in the account's own format. Part of the idempotency key, so a duplicate delivery of one event reuses it.
string2026-09-10 09:14:22
initiated_from
Who caused the action: system, public or admin. This is the 'source' the subscription filters on, echoed back on the event.
stringpublic
initiated_by
The part of ActiveCampaign that raised it — a form, an automation, an API call. Free text from the vendor, useful for logging, not for branching.
stringsubscription form
list_id
The list the event belongs to, as a string. '0' on events that are not about a list at all (every deal and account event).
string3
contact_id
The contact this event is about, lifted out of contact[id]. Empty on deal, account and list events.
string1842
contact_email
That contact's email address, lifted out of contact[email]. Empty when the event carries no contact.
stringbuyer@example.com
deal_id
The deal this event is about, lifted out of deal[id]. Empty on every event that is not a deal_* event.
string—
account_id
The CRM account this event is about, lifted out of account[id]. Empty on every event that is not an account_* event.
string—
payload
The whole delivery, decoded from ActiveCampaign's form-encoded POST parameters into a nested object — contact[fields][7] reads as payload.contact.fields.7. Every value is a string, because that is what was on the wire.
object—
{
  "account_id": "",
  "contact_email": "buyer@example.com",
  "contact_id": "1842",
  "date_time": "2026-09-10 09:14:22",
  "deal_id": "",
  "initiated_by": "subscription form",
  "initiated_from": "public",
  "list_id": "3",
  "payload": {
    "contact": {
      "email": "buyer@example.com",
      "first_name": "Ada",
      "id": "1842",
      "last_name": "Lovelace",
      "tags": "vip, newsletter"
    },
    "date_time": "2026-09-10 09:14:22",
    "initiated_by": "subscription form",
    "initiated_from": "public",
    "list": "3",
    "type": "subscribe"
  },
  "type": "subscribe"
}

Notes

  • Publishing creates the webhook in ActiveCampaign; unpublishing, disabling or archiving deletes it, so a workflow that is off is off at the vendor too.
  • Every delivery is verified against an HMAC-SHA256 signature ActiveCampaign computes from a secret Mantle mints at registration and sends in the X-Mantle-Signature header; an unsigned or mis-signed POST is refused with 401.
  • ActiveCampaign never retries a delivery, and deactivates a webhook whose endpoint answers HTTP 410. It also guarantees only 'at least once' delivery, so a duplicate is possible — one run per event is enforced on the payload.
  • Deliveries arrive as form parameters, not JSON: payload.contact.fields.7 is how ActiveCampaign's contact[fields][7] reads once decoded, and every value is a string.

See Event run in a workflow.

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