Event
Registers one Acuity webhook per chosen event at publish and starts one run per delivery, verified against Acuity's base64 HMAC signature. Emits {action, event, id, calendar_id, appointment_type_id, payload}.
Start a run when an Acuity Scheduling appointment is booked, rescheduled, canceled or changed.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- Username & password
- Providers
- Acuity Scheduling
- Secret shape
- {"user_id", "api_key"}
- Resolved by
- config.connection_id, else node.connection_id
- Note
- The numeric user id and API key from Acuity → Settings → Integrations → API. The API key is also the shared secret every delivery is signed with, so rotating it in Acuity means republishing here. Publishing needs MANTLE_APP_PUBLIC_BASE_URL set — it is the address Acuity calls back on, and Acuity accepts only port 443 or 80.
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 notifications to subscribe to. One Acuity webhook is registered per event and deleted again when the workflow is unpublished or disabled. appointment.changed is a catch-all that also fires for the other three. | array | No | ["appointment.scheduled"] | 1–5 characters; array of string | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"events": [
"appointment.scheduled"
]
}Output
One shape.
acuity event
A flat envelope over Acuity's form-encoded notification. The appointment itself is not included — Acuity sends only ids, so read it with acuity_scheduling.get_appointment.
| Field | Type | Example |
|---|---|---|
action Acuity's own action word: scheduled, rescheduled, canceled, changed, or order.completed. Branch on this when the trigger subscribes to more than one. | string | scheduled |
event The same thing named the way you subscribed to it, e.g. appointment.scheduled. Acuity uses two vocabularies; both are here so a condition can be written against either. | string | appointment.scheduled |
id Id of the appointment (or, for order.completed, the order) the event is about. Feed it straight to acuity_scheduling.get_appointment. | string | 1234567890 |
calendar_id Numeric id of the calendar the appointment sits on. Empty for order events. | string | 987654 |
appointment_type_id Numeric id of the booked service or class. Empty for order events. | string | 13 |
payload Acuity's form body decoded verbatim, for anything the fields above do not lift out. Acuity sends only these four keys today. | object | — |
{
"action": "scheduled",
"appointment_type_id": "13",
"calendar_id": "987654",
"event": "appointment.scheduled",
"id": "1234567890",
"payload": {
"action": "scheduled",
"appointmentTypeID": "13",
"calendarID": "987654",
"id": "1234567890"
}
}Notes
- Publishing creates the subscriptions in Acuity; unpublishing, disabling or archiving deletes them. A workflow that is off is off at Acuity too.
- Every delivery is verified against the account API key before any run starts; an unsigned or mis-signed POST is refused with 401.
- Acuity retries a failed delivery nine times over 24 hours with the same body, and one run is started for that body however many times it arrives.
- An Acuity account may hold at most 25 webhooks in total; this trigger uses one per chosen event.
- Acuity disables a webhook that has been failing for five days. Republish to recreate it.
See Event run in a workflow.
In a technical demo we add the Acuity Scheduling connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.