Workable
Workable node reference - all 43 operations, the credential it needs, and a worked example.
Workable ATS SPI v3 (Recruiting & Meetings). 43 operations: jobs (list, get, stages, questions, application form, hiring team, recruiters, custom attributes, activities); candidates (list, get, activities, files, offer, create on a job or in the talent pool, update, move, copy, relocate, disqualify, revert, comment, tags, ratings, custom attribute values); account, members, recruiters, pipeline stages, disqualification reasons, departments, legal entities, custom attributes, permission sets and collaboration permissions; events; webhook subscriptions.
Credential: Workable API credential - see Credentials.
Scopes
Each operation below lists the scope it needs. Scopes are fixed on the access token when it is generated, under Settings -> Integrations -> API access tokens. Workable has no incremental consent: the scope set is chosen once at creation, so a call that needs a scope the token does not carry can only be fixed by minting a new token. The API answers both a bad token and a missing scope with the same {"error":"Not authorized"}, which is why naming the scope is the whole of the diagnosis. Two further gates are not scopes at all and read as a 404 rather than a refusal: the Hiring Plan (requisitions) and the separate Workable HR product (employees, time off, time tracking, reviews). If a run fails with a permission error, the node names the missing scope in the error - grant it and re-run; you do not need to rebuild the workflow.
Operations (43)
Jobs
| Operation | What it does | Scope |
|---|---|---|
listJobs | List jobs | r_jobs |
getJob | Get job | r_jobs |
listJobStages | List a job's pipeline stages | r_jobs |
listJobQuestions | List a job's application questions | r_jobs |
getApplicationForm | Get a job's application form | r_jobs |
listJobMembers | List a job's hiring team | r_jobs |
listJobRecruiters | List a job's external recruiters | r_jobs |
listJobCustomAttributes | List a job's custom attributes | r_jobs |
listJobActivities | List a job's activity stream | r_candidates |
Candidates — read
| Operation | What it does | Scope |
|---|---|---|
listCandidates | List candidates | r_candidates |
getCandidate | Get candidate | r_candidates |
listCandidateActivities | List a candidate's activity stream | r_candidates |
listCandidateFiles | List a candidate's files | (any valid token — Workable documents no required scope for candidate files) |
getCandidateOffer | Get a candidate's offer | r_candidates |
Candidates — write
| Operation | What it does | Scope |
|---|---|---|
createCandidate | Create candidate on a job | w_candidates |
createTalentPoolCandidate | Create candidate in the talent pool | w_candidates |
updateCandidate | Update candidate | w_candidates |
moveCandidate | Move candidate to a stage | w_candidates |
copyCandidate | Copy candidate to another job | w_candidates |
relocateCandidate | Relocate candidate to another job | w_candidates |
disqualifyCandidate | Disqualify candidate | w_candidates |
revertDisqualification | Revert a disqualification | w_candidates |
addComment | Comment on a candidate | w_candidates or w_comments |
updateTags | Replace a candidate's tags | w_candidates |
createRating | Rate a candidate | w_candidates |
updateRating | Update a candidate's evaluation | w_candidates |
updateCustomAttributeValue | Set a candidate custom attribute | r_jobs |
Account, members & pipeline
| Operation | What it does | Scope |
|---|---|---|
listAccounts | List accounts | r_jobs |
getAccount | Get account | r_jobs |
listMembers | List members | r_jobs (account tokens and user tokens only) |
listRecruiters | List external recruiters | r_jobs (account tokens and user tokens only) |
listStages | List account pipeline stages | r_jobs |
listDisqualificationReasons | List disqualification reasons | r_jobs |
listDepartments | List departments | r_account |
listLegalEntities | List legal entities | r_account |
listCustomAttributes | List custom attributes | r_jobs |
listPermissionSets | List permission sets | r_account |
listCollaborationPermissions | Get collaboration permissions | r_jobs |
Events
| Operation | What it does | Scope |
|---|---|---|
listEvents | List events | r_jobs (account tokens and user tokens only) |
getEvent | Get event | r_jobs (account tokens and user tokens only) |
Webhook subscriptions
| Operation | What it does | Scope |
|---|---|---|
listSubscriptions | List webhook subscriptions | r_candidates or r_employees |
createSubscription | Create webhook subscription | r_candidates or r_employees |
deleteSubscription | Delete webhook subscription | r_candidates or r_employees |
Example
Move a candidate to the next stage
The action an ATS integration exists to perform. Stage names are per-account, not a fixed enum — read them with listJobStages for the job in question rather than hardcoding a string that will not match another account's pipeline.
Set Operation to moveCandidate, then fill in:
| Field | Value | Notes |
|---|---|---|
candidateId | {{ myTrigger.candidateId }} | The candidate to move |
stage | {{ stages.[1].slug }} | The target stage's slug, from listJobStages — stage names are per-account |
Sets {{moved.candidateId}} and {{moved.stage}}.