Event

trigger.acuity_scheduling_event
TriggerBusiness appsconnection requiredruns in-engine

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.

FieldTypeRequiredDefaultConstraintsExample
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.
arrayNo["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.

FieldTypeExample
action
Acuity's own action word: scheduled, rescheduled, canceled, changed, or order.completed. Branch on this when the trigger subscribes to more than one.
stringscheduled
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.
stringappointment.scheduled
id
Id of the appointment (or, for order.completed, the order) the event is about. Feed it straight to acuity_scheduling.get_appointment.
string1234567890
calendar_id
Numeric id of the calendar the appointment sits on. Empty for order events.
string987654
appointment_type_id
Numeric id of the booked service or class. Empty for order events.
string13
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.