Event
Registers one Autopilot REST Hook per chosen event at publish and starts one run per delivery. Emits {event, contact_id, email, list_id, segment_id, contact}.
Start a run when Autopilot fires a REST Hook (contact added, updated, unsubscribed, or moved in or out of a list or segment).
Connection
- Required
- Yes — the node will not save without one
- Auth type
- API key
- Providers
- Autopilot
- Secret shape
- the Autopilot API key (sent as the autopilotapikey header)
- Resolved by
- config.connection_id, else node.connection_id
- Note
- The same API key the autopilot.* action nodes use — Autopilot has one key per account and no per-scope keys, so a key that can read contacts can register REST Hooks. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a URL Autopilot can reach.
Configuration
1 field, none 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 |
|---|---|---|---|---|---|
events Which Autopilot events to subscribe to. One REST Hook is registered per event and deleted again when the workflow is unpublished or disabled. Autopilot accepts only the seven listed here. | array | No | ["contact_added"] | 1–7 characters; array of string | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"events": [
"contact_added"
]
}Output
One shape.
autopilot event
The flattened REST Hook delivery. `contact` holds Autopilot's own field names and its keys depend on the contact, so the shape is open below the declared fields.
Extra keys beyond the ones listed can appear.
| Field | Type | Example |
|---|---|---|
event The Autopilot event key that fired — one of contact_added, contact_updated, contact_unsubscribed, contact_added_to_list, contact_removed_from_list, contact_entered_segment, contact_left_segment. Branch on this when the trigger subscribes to more than one. | string | contact_added |
contact_id Autopilot's contact id (person_…). Every autopilot.* node accepts it wherever it accepts an email address. | string | person_ED75BA78-2405-4564-B24C-F2B8F936C7C6 |
email The contact's Email, lifted out of the record. Autopilot de-duplicates contacts on this, so it is the value to match on downstream. Empty for a contact created without one. | string | trgreyson@gmail.com |
list_id The contact list the event is about (contactlist_…). Only contact_added_to_list and contact_removed_from_list carry one; empty on every other event. | string | — |
segment_id The segment the event is about. Only contact_entered_segment and contact_left_segment carry one; empty on every other event. | string | — |
contact Autopilot's contact record, with its own field names (FirstName, MailingPostalCode, owner_name, unsubscribed, custom…) exactly as sent. Which keys are present depends on what the contact has set, which is why this shape is open. | object | — |
payload The delivery body exactly as Autopilot sent it, for anything the fields above do not lift out. | object | — |
{
"contact": {
"Company": "Greyson Designs",
"Email": "trgreyson@gmail.com",
"FirstName": "Tom",
"LastName": "Greyson",
"Status": "Nurture",
"custom": {
"integer--Smog--Level": 4
},
"unsubscribed": false
},
"contact_id": "person_ED75BA78-2405-4564-B24C-F2B8F936C7C6",
"email": "trgreyson@gmail.com",
"event": "contact_added",
"list_id": "",
"payload": {
"contact": {
"Email": "trgreyson@gmail.com",
"FirstName": "Tom"
},
"contact_id": "person_ED75BA78-2405-4564-B24C-F2B8F936C7C6",
"event": "contact_added"
},
"segment_id": ""
}Notes
- Publishing registers the REST Hooks in Autopilot; unpublishing, disabling or archiving deletes them. A workflow that is off is off at Autopilot too.
- Autopilot signs nothing — it documents no signature header and no shared secret — so the callback URL's unguessable id is the only thing protecting this endpoint. Treat the emitted contact as untrusted input.
- Autopilot sends no delivery id, so the run's idempotency key is a digest of the delivery body. Two separate events with byte-identical bodies inside 24 hours therefore start one run, not two.
- A spreadsheet import or a Salesforce sync can fire tens of thousands of contact_added / contact_updated events in a burst — each one starts a run.
- Autopilot gives up after 5 retries with an incremental backoff and deletes a hook that answers 410 Gone; publish again to re-register one it dropped.
See Event run in a workflow.
In a technical demo we add the Autopilot connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.