Event

trigger.workable_event
TriggerBusiness appsconnection requiredruns in-engine

Registers a subscription in the tenant's Workable account on publish and starts one run per delivered event, verified against Workable's signature.

Start a run when Workable raises an event (candidate, employee, job).

Connection

Required
Yes — the node will not save without one
Auth type
Bearer token
Providers
Workable
Secret shape
the Workable SPI access token
Config it needs
subdomain
Resolved by
config.connection_id, else node.connection_id
Note
The token needs the r_candidates scope for candidate events and r_employees for employee ones. It is also the key Workable signs deliveries with, so rotating it invalidates the signature until the workflow is published again. Publishing needs MANTLE_APP_PUBLIC_BASE_URL set to an https URL Workable can reach.

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
event
The Workable event to subscribe to. One subscription carries exactly one event — add a second trigger for a second event.
stringNocandidate_createdone of "candidate_created", "candidate_deleted", "candidate_moved", "employee_created", "employee_updated", "employee_published", "job_deleted", "onboarding_completed", "timeoff_updated"—
job_shortcode
Only receive candidate events for this job, e.g. GROOV005. Leave empty for every job. Workable's employee-side events ignore it.
stringNo—≤ 64 characters—
stage_slug
Only receive candidate events for this pipeline stage, e.g. hired. Leave empty for every stage. Workable's employee-side events ignore it.
stringNo—≤ 64 characters—

Example configuration

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

{
  "event": "candidate_created"
}

Output

One shape.

workable event

The flattened Workable event. data's own keys vary by resource_type, so the shape is open below the declared fields.

Extra keys beyond the ones listed can appear.

FieldTypeExample
id
Workable's event identifier. Also the idempotency key: Workable retries anything that does not answer 200 and repeats this id, so a retry joins the run it already started. The ingress remembers a key for 24 hours.
string1b1c8399
event_type
The event that fired, e.g. candidate_created. One subscription carries one event, so this is the event this trigger subscribed to.
stringcandidate_created
resource_type
What the payload is — candidate, employee or job.
stringcandidate
fired_at
When Workable raised the event, as an ISO-8601 UTC string. Not the delivery time, and not a reliable idempotency key — use id.
string2024-05-30T12:00:00Z
resource_id
The candidate/employee/job id, lifted out of data so the next node can fetch the full record without digging.
string3fc9a80f
account_subdomain
The Workable account the event came from, when the payload names one. Useful where one workflow serves several accounts.
stringgroove-tech
data
The resource itself, as Workable sent it. Its keys depend on resource_type — a candidate carries name/email/stage/job, an employee carries employment fields. Workable sends the resource's state at *delivery* time, which can be newer than when the event fired.
object—
payload
The envelope exactly as Workable sent it, for anything the fields above do not lift out.
object—
{
  "account_subdomain": "groove-tech",
  "data": {
    "account": {
      "name": "Groove Tech",
      "subdomain": "groove-tech"
    },
    "email": "jj_botha@example.com",
    "id": "3fc9a80f",
    "job": {
      "shortcode": "GROOV005",
      "title": "Office Manager"
    },
    "name": "Jj Botha",
    "profile_url": "https://groove-tech.workable.com/backend/jobs/376/candidates/107",
    "stage": "Applied"
  },
  "event_type": "candidate_created",
  "fired_at": "2024-05-30T12:00:00Z",
  "id": "1b1c8399",
  "payload": {
    "event_type": "candidate_created",
    "id": "1b1c8399"
  },
  "resource_id": "3fc9a80f",
  "resource_type": "candidate"
}

Notes

  • Publishing creates the subscription in Workable; unpublishing, disabling or archiving deletes it. A workflow that is off is off at Workable too.
  • Workable allows one subscription per target URL, so two workflows never collide — each gets its own callback.
  • Subscriptions expire (Workable's own example is one year). The renewal sweep re-registers before that, which produces a new subscription id.
  • Workable sends the resource's state at delivery time, not at the moment the event fired, so a candidate moved twice quickly may arrive already in the second stage.

See Event run in a workflow.

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