Workable API Directory

Workable is a cloud-based recruitment and HR platform built to run the day-to-day mechanics of hiring, job posting, applicant tracking, interview coordination, and related HR operations. Teams use it to keep sourcing, screening, and hiring workflows in one place, instead of juggling spreadsheets, inbox threads, and scattered tools.

Where Workable becomes especially useful is when you connect it to the rest of your stack, your careers site, assessment and background check providers, HRIS/payroll tools, BI dashboards, and internal systems. The Workable API gives you the plumbing for this: you can pull hiring data, push candidates into jobs, move them through stages, trigger events via webhooks, and keep your systems in sync without manual effort.

Key highlights of Workable APIs

  1. Push candidates into the right job pipeline automatically
    Create candidates against a job shortcode, map them to the correct stage, and reduce recruiter admin time.
  2. Move, disqualify, revert, and tag candidates from external systems
    If your workflow starts in a sourcing tool or internal referral portal, you can still control candidate lifecycle actions in Workable.
  3. Trigger assessments, interviews, and background checks programmatically
    Create assessment/check/interview requests and track results through callback URLs, no “copy-paste into vendor portals”.
  4. Stream hiring activity for visibility and audit trails
    Pull job activity streams to understand who did what, when, useful for compliance, leadership reporting, and debugging process bottlenecks.
  5. Build dynamic application forms that match Workable’s job configuration
    Use the application form and questions endpoints to render the correct form on a custom careers experience.
  6. Support multi-stakeholder hiring teams cleanly
    Fetch job members, recruiters, and combined hiring teams to align roles, responsibilities, and permissions in your internal tooling.
  7. Use subscriptions/webhooks to reduce polling and keep systems fresh
    Subscribe to event notifications instead of hammering the API every few minutes.
  8. Scale with structured account-level objects
    Pull departments, legal entities, work schedules, custom attributes, so downstream HR ops and analytics don’t run on half-baked data.

Workable API Endpoints

Candidate Management

  • POST https://${BASE_URL}/assessments : The Create Candidate Assessment API allows Workable to create an assessment for a candidate by sending a POST request to the Assessments Provider. The request must include an authorization header with a Bearer token, and a JSON body containing the test ID, job title, callback URL, and candidate information. The Assessments Provider responds with a 201 status and an assessment ID. This ID can be used to track the assessment status and results. The API facilitates the integration between Workable and the Assessments Provider, enabling seamless candidate assessment management.
  • POST https://${BASE_URL}/checks : This API endpoint allows Workable to create a background check request for a candidate by sending a POST request to the Background Check Provider. The request must include an authorization header with a Bearer token, and a JSON body containing the package ID, job title, callback URL, candidate information, and optional preferences. Upon successful creation, the API returns a 201 status with a background check ID. The callback URL is used by the Background Check Provider to publish the results once the background check is completed.
  • POST https://${BASE_URL}/interviews : This API endpoint allows Workable to create an interview invitation for a candidate using a Video Interview Provider. The POST request is sent to the /interviews endpoint with a payload containing the interview template ID, job details, callback URL, candidate information, and optional preferences. The request must include an Authorization header with a Bearer token for authentication. Upon successful creation, the API responds with a 201 status and an interview ID. The callback URL is used by the Video Interview Provider to publish interview results back to Workable.
  • POST https://subdomain.workable.com/spi/v3/employee_events : The Employee Events Notification API is used to notify an SPI Client about various employee-related events such as creation, update, onboarding completion, and publication. When an event occurs, the Workable SPI sends a notification to the SPI Client with relevant employee data. The API requires a POST request with headers for content type and authorization. The request body includes details about the employee and the event type. The response indicates the success or failure of the event processing.
  • POST https://workable.readme.io/docs/job-candidates-show : The Candidate Events API is triggered when an event related to a candidate occurs. It provides detailed information about the candidate, including personal details, education, experience, and social profiles. The API accepts a payload containing candidate data, event type, and event metadata. The response includes the same data structure, confirming the event details. This API is useful for tracking candidate progress and managing recruitment workflows.
  • POST https://workable.readme.io/page/assessment-providers : The Assessments & Video Interviews API allows Assessment Providers, Video Interview Providers, and Background Check Providers to integrate their services with Workable. This API enables providers to inject assessments, video interviews, and background check results directly into a candidate's timeline on Workable. The API requires an Authorization header with a bearer token for authentication and a Content-Type header. The request body must include the candidate's unique identifier, the type of assessment or interview, the provider's name, and optionally, the results of the assessment or interview. The response includes the status and a message indicating the success or failure of the integration.
  • POST https://{subdomain}.workable.com/spi/v3/candidates/{id}/comments : This API creates a attachment for an application using comments API.
  • POST https://{subdomain}.workable.com/spi/v3/candidates/{id}/copy : This API endpoint allows you to copy a candidate to another job within the Workable platform. It requires a POST request to the specified URL with the candidate's ID and the target job's shortcode. The request must include a Bearer token for authorization. The body of the request should contain the member ID performing the action, the target job shortcode, and optionally the target stage. Upon success, it returns the ID and URL of the newly created candidate. If the request fails, it returns an error message.
  • POST https://{subdomain}.workable.com/spi/v3/candidates/{id}/disqualify : This API disqualifies a candidate using the POST method. It requires the 'w_candidates' scope and is accessible with all token types. The endpoint is 'https://{subdomain}.workable.com/spi/v3/candidates/{id}/disqualify'. The request must include the Authorization header with a Bearer token, and the Content-Type and Accept headers set to 'application/json'. The path parameters include 'subdomain' for the account subdomain and 'id' for the candidate's id. The body must include 'member_id', the id of the member performing the disqualification, and optionally 'disqualification_reason'. The response can be a 200 status code with an empty body for success, a 401 status code with an error message for unauthorized access, or a 404 status code with an error message if the candidate is not found.
  • POST https://{subdomain}.workable.com/spi/v3/candidates/{id}/move : This API endpoint allows moving a candidate to another stage in the hiring process. It requires the 'w_candidates' scope and is accessible with all token types. The endpoint is 'https://{subdomain}.workable.com/spi/v3/candidates/{id}/move' and uses the POST method. The request optionally includes the target_stage to move the candidate to. If the hiring plan is enabled and the candidate is being moved to the 'hired' stage, additional requisition information may be required. The response will be empty on success, or contain an error message if the request fails.
  • POST https://{subdomain}.workable.com/spi/v3/candidates/{id}/ratings : This API creates a rating for a candidate. It requires the 'w_candidates' scope and is accessible with all token types. The endpoint requires a subdomain and candidate ID as path parameters. The request body must include the member ID of the person performing the rating, and optionally a comment and score. The API returns a 201 status code on success, a 401 status code if unauthorized, and a 404 status code if the candidate is not found.
  • POST https://{subdomain}.workable.com/spi/v3/candidates/{id}/relocate : This API endpoint relocates a candidate to another job within the Workable platform. It requires the 'w_candidates' scope and is accessible with all token types. The request must include the subdomain and candidate ID as path parameters, and the member ID, target job shortcode, and optionally the target stage in the request body. The response will include the new candidate's ID and URL if successful, or an error message if not.
  • POST https://{subdomain}.workable.com/spi/v3/candidates/{id}/revert : This API reverts a candidate's disqualification in the Workable system. It requires the 'w_candidates' scope and is accessible with all token types. The request must include the account subdomain and candidate's id as path parameters, and the member_id of the person performing the action in the request body. The request headers must include 'Content-Type' as 'application/json', 'Authorization' with a Bearer token, and 'Accept' as 'application/json'. A successful request returns a 201 status code with no content. If the request is unauthorized, a 401 status code with an error message is returned. If the candidate is not found, a 404 status code with an error message is returned.
  • PUT https://{subdomain}.workable.com/spi/v3/candidates/{id}/tags : This API updates the tags of a candidate in the Workable system. It requires the 'w_candidates' scope and can be accessed with all token types. The API endpoint is 'https://{subdomain}.workable.com/spi/v3/candidates/{id}/tags'. The request must include the 'Content-Type', 'Authorization', and 'Accept' headers. The 'subdomain' and 'id' are required path parameters. The request body must contain a 'tags' array, which will replace the candidate's current tags. If the array is empty, all tags will be removed. A successful request returns a 202 status code with the updated tags. If unauthorized, a 401 status code with an error message is returned. If the candidate is not found, a 404 status code with an error message is returned.
  • PATCH https://{subdomain}.workable.com/spi/v3/candidates/{id}/update_custom_attribute_value : This API endpoint allows updating a custom attribute value for a candidate in the Workable system. It requires the 'r_jobs' scope and is accessible with all token types. The endpoint URL is structured with a subdomain and candidate ID as path parameters. The request must include an Authorization header with a Bearer token, and the Content-Type and Accept headers set to 'application/json'. The request body varies based on the type of custom attribute being updated, such as boolean, short text, free text, numeric, file (base64 or URL), date, dropdown, or multiple choice. The response includes detailed candidate information if successful, or an error message if unauthorized or not found.

Job Management

  • GET https://<subdomain>.workable.com/spi/v3/jobs : The Partner Token Integration for Workable API allows third-party providers to access specific endpoints using a Partner Token. This token is used for authorization and is associated with specific scopes determined during integration development. To use this API, the request must include headers for Content-Type, Authorization with the Partner Token, and X-WORKABLE-CLIENT-ID with the Client ID (UID). The API endpoint retrieves jobs filtered by their state, such as 'published'. The response includes a list of job objects with details like job ID, title, and state.
  • GET https://{subdomain}.workable.com/spi/v3/jobs : This API endpoint retrieves a collection of jobs associated with your account from Workable. It requires the 'r_jobs' scope and is accessible with all token types. The endpoint supports various query parameters to filter the jobs based on state, creation date, update date, and more. The response includes an array of job objects, each containing details such as job ID, title, department, location, and salary. The response also includes paging information to navigate through multiple pages of results.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode} : The Get Job Details API retrieves detailed information about a specific job using its shortcode. It requires an authorization bearer token with the 'r_jobs' scope. The API endpoint is 'https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}', where 'shortcode' is a required path parameter representing the job's unique code. The response includes comprehensive job details such as the job's title, state, department, location, description, requirements, benefits, employment type, industry, function, experience, education, keywords, and salary information. The API returns a JSON object with all these details, and it can respond with error messages if the request is unauthorized or if the job is not found.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/activities : The Get Job Activity Stream API retrieves the activity stream of a specified job using its shortcode. It requires the 'r_candidates' scope and is accessible with all token types. The API endpoint is 'https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/activities'. The request must include a Bearer token in the Authorization header. The 'shortcode' path parameter is required to specify the job. Optional query parameters include 'limit' to specify the number of activities per page, 'since_id' to filter activities with an ID greater than or equal to the specified ID, and 'max_id' to filter activities with an ID less than or equal to the specified ID. The response includes an array of activities, each containing details such as action, stage name, creation timestamp, candidate information, member information, and activity body. Possible response status codes include 200 (success), 401 (not authorized), and 404 (not found).
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/application_form : This API endpoint retrieves the application form details for a specified job using the job's shortcode. It requires a Bearer token for authorization and the 'r_jobs' scope. The endpoint returns a JSON object containing two arrays: 'form_fields' and 'questions'. The 'form_fields' array includes details about each form field, such as key, label, type, and whether it is required. The 'questions' array includes details about each question, such as id, body, type, and whether an answer is required. This API is useful for building dynamic application forms that adhere to the rules defined in the Job Editor's 'Application Form' tab.
  • POST https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/candidates : This API endpoint allows you to create a candidate for a specific job in Workable. It is useful for integrating custom application forms, migrating existing candidates, or integrating with other systems. The API requires a POST request to the specified URL with a JSON body containing candidate details such as name, email, headline, summary, and more. You can also include additional information like education, experience, skills, social profiles, and a resume. The 'sourced' flag determines if the candidate is considered as uploaded or applied. The response includes the status of the creation and details of the created candidate.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/combined_members_recruiters : This API endpoint retrieves a combined list of account members and external recruiters associated with a specific job, identified by its shortcode. It requires an authorization bearer token and the job's shortcode as a path parameter. The response includes details about each member, such as their ID, name, headline, email, role, and collaboration role within the hiring team, as well as a list of external recruiters with their ID, name, and email address. If the request is unauthorized or the job is not found, an error message is returned.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/custom_attributes : This API endpoint retrieves a collection of custom attributes relevant to a specific job identified by its shortcode. The request requires a Bearer token for authorization and the job's shortcode as a path parameter. The response includes an array of custom attributes, each with details such as id, type, label, hint, and choices for multiple_choice types. The API returns a 200 status code with the custom attributes on success, and error messages with status codes 401 or 404 for unauthorized or not found errors, respectively.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/members : This API endpoint retrieves a collection of account members associated with a specific job, identified by its shortcode. It requires an authorization bearer token with the 'r_jobs' scope. The endpoint returns details about each member, including their ID, name, headline, email, role, and collaboration role within the hiring team. The roles are defined at the account level and include admin, simple, recruiter, and reviewer. The collaboration roles are specific to the job and include admin, recruiting_admin, hiring_manager, simple, reviewer, and recruiter. The API returns a 200 status code with member details on success, a 401 status code if not authorized, and a 404 status code if the job is not found.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/questions : The Get Job Questions API retrieves a list of questions associated with a specific job identified by its shortcode. This API requires the 'r_jobs' scope and is accessible with all token types. The request must include an Authorization header with a Bearer token and a Content-Type header set to 'application/json'. The endpoint returns a JSON array of questions, each containing details such as the question's ID, body, type, and whether it is required. Additional fields may include choices for dropdown or multiple choice questions, supported file types, and maximum file size for file upload questions. The API can return a 401 status code if not authorized or a 404 status code if the job is not found.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/recruiters : This API endpoint retrieves a collection of external recruiters associated with a specific job in your account. It requires a valid Bearer token for authorization and the job's shortcode as a path parameter. The response includes a list of recruiters, each with an ID, name, and email address. If the request is unauthorized or the job is not found, an error message is returned.
  • GET https://{subdomain}.workable.com/spi/v3/jobs/{shortcode}/stages : This API endpoint retrieves a collection of recruitment pipeline stages for a specific job identified by its shortcode. It requires an authorization bearer token with the 'r_jobs' scope. The response includes details of each stage such as its unique slug, name, type, and position in the pipeline. Possible response status codes include 200 for success, 401 for unauthorized access, and 404 if the job is not found.

Account Management

  • GET https://api.workable.com : The Workable API provides access to recruiting data, allowing users to extract information about their account, hiring members, pipeline stages, jobs, scheduled events, and job or candidate activities. It also enables managing candidates by fetching, creating, updating, and executing various actions on them. Additionally, it allows managing employees by listing, getting information, creating, and updating employee records and documents. The API does not support CORS and uses different resource IDs for non-disclosure reasons.
  • GET https://app.merge.dev/signup : The 'Integrate with Workable via Merge' API allows developers to seamlessly integrate their applications with Workable using Merge's Unified API for Applicant Tracking Systems. This API provides a standardized data model to facilitate data exchange between your product and various platforms, including HRIS/Payroll, ATS, Accounting, CRM, and more. Merge handles the integration process end-to-end, offering tools for data sync control, webhook configuration, and issue resolution. Key features include easy onboarding through Merge Link, continuous real-time data syncing, bi-directional data flow, and access to custom fields. Developers can manage integrations using a comprehensive suite of tools provided by Merge. To get started, sign up for a free account or schedule a demo to explore how Merge can support your integration needs.
  • GET https://workable.com/spi/v3/accounts : This API endpoint retrieves a collection of all accounts that the authenticated user has access to. It requires the 'r_jobs' scope and is accessible with all token types. The request must include an Authorization header with a Bearer token and a Content-Type header set to 'application/json'. The response includes a list of accounts, each with details such as id, name, subdomain, description, summary, and website URL. If the request is unauthorized, a 401 status code with an error message is returned.
  • GET https://workable.com/spi/v3/accounts/{subdomain} : The Get Account Details API retrieves information about a specific account using the subdomain as a path parameter. It requires an authorization bearer token with the 'r_jobs' scope. The response includes details such as the account's unique ID, name, subdomain, description, summary, and website URL. If the request is unauthorized or the account is not found, appropriate error messages are returned.
  • GET https://www.workable.com/api/accounts/{subdomain} : This API endpoint retrieves a collection of public jobs for a specified account on Workable. The endpoint requires a path parameter 'subdomain' which is the account's subdomain. An optional query parameter 'details' can be included to fetch job descriptions. The response includes the account's name, description, and a list of public jobs. Each job contains detailed information such as title, code, location, department, telecommuting status, publication date, URLs, description, employment type, industry, function, experience, and education requirements. A 404 status code is returned if the account is not found.
  • GET https://www.workable.com/api/accounts/{subdomain}/departments : This API endpoint retrieves a collection of departments for the public jobs of a specified account. The request requires a path parameter 'subdomain' which is the account subdomain. The response includes a list of departments, each containing the department's name, the number of public jobs in that department, and a URL. If the account is not found, a 404 status code is returned with an error message.
  • GET https://www.workable.com/api/accounts/{subdomain}/locations : This API endpoint retrieves a collection of locations where public jobs are available for a specified account. The request requires a path parameter 'subdomain' which is the account's subdomain. The response includes a list of locations, each with a 2-letter country code, the name of the country, the count of public jobs in that country, and a URL for location-specific jobs. If the account is not found, a 404 status code is returned with an error message.
  • GET https://{subdomain}.workable.com/spi/v3/custom_attributes : This API endpoint retrieves a collection of custom attributes associated with an account. It requires the 'r_jobs' scope and is accessible with all token types. The endpoint URL is 'https://{subdomain}.workable.com/spi/v3/custom_attributes', where 'subdomain' is a required path parameter representing the account's subdomain. The request must include an 'Authorization' header with a Bearer token and a 'Content-Type' header set to 'application/json'. The response includes an array of custom attributes, each with details such as 'id', 'type', 'enabled', 'label', 'hint', and for multiple_choice types, 'choices' with 'id', 'body', 'hint', and 'translations'. Possible response status codes include 200 (success), 401 (not authorized), and 404 (not found).
  • GET https://{subdomain}.workable.com/spi/v3/departments : This API endpoint retrieves a collection of departments associated with your account. It requires the 'r_account' scope, which can be enabled through the Integrations section in the Settings menu. The endpoint is accessible for accounts with Employee Management features enabled. The request must include a Bearer token in the Authorization header and the account subdomain as a path parameter. The response returns a list of departments, each with an 'id', 'name', 'parent_id', and 'archived' status. If the request is unauthorized, a 401 status code with an error message is returned. If the endpoint is not found, a 404 status code with an error message is returned.
  • GET https://{subdomain}.workable.com/spi/v3/legal_entities : This API endpoint retrieves a collection of legal entities associated with your account. It requires the 'r_account' scope, which can be enabled through the Integrations section in the Settings menu. The endpoint is accessible only for accounts with Employee Management features enabled. The request must include a Bearer token for authorization and specify the account subdomain as a path parameter. The response includes an array of legal entities, each with details such as id, name, legal_name, type, parent_id, and display_name. The API returns a 200 status code with the list of entities on success, a 401 status code if not authorized, and a 404 status code if the resource is not found.
  • GET https://{subdomain}.workable.com/spi/v3/members : The Get Account Members API retrieves a collection of members associated with your account. It requires the 'r_jobs' scope and can be accessed using account or user tokens. The API endpoint is 'https://{subdomain}.workable.com/spi/v3/members'. The request must include an Authorization header with a Bearer token and a Content-Type header set to 'application/json'. Optional query parameters include 'limit', 'since_id', 'max_id', 'role', and 'shortcode' to filter the results. The response includes a list of members with details such as 'id', 'name', 'headline', 'email', 'role', and 'hris_role'. Possible roles include 'admin', 'simple', and 'reviewer', while hris roles include 'hris_admin' and 'hris_employee'. The API returns a 200 status code on success, and error messages for 401 (Not authorized) and 404 (Not found) status codes.
  • GET https://{subdomain}.workable.com/spi/v3/work_schedules : The Get Account Work Schedules API endpoint retrieves a collection of work schedules associated with a specific account. It requires the 'r_account' scope for authorization, which can be enabled through the Integrations section in the Settings menu. The endpoint is accessed via a GET request to 'https://{subdomain}.workable.com/spi/v3/work_schedules', where 'subdomain' is a required path parameter representing the account subdomain. The request must include an Authorization header with a Bearer token and an 'accept' header specifying 'application/json'. The response is a JSON array of work schedule objects, each containing an 'id', 'name', 'status', 'work_days', 'week_starts_on', and 'work_hours'. The 'work_days' field is an array detailing the work hours and intervals for each day of the week. The API returns a 200 status code with the work schedules on success, a 401 status code if not authorized, and a 404 status code if the resource is not found.

Offer Management

  • GET https://{subdomain}.workable.com/spi/v3/offers/{id} : The Get Offer Details API retrieves detailed information about a specific offer using its ID. The API requires a GET request to the endpoint https://{subdomain}.workable.com/spi/v3/offers/{id} with a Bearer token for authorization. The path parameter 'id' is required to specify the offer ID. The response includes details such as candidate information, offer creation date, document variables, related documents, and the state of the offer. The API returns a JSON object with requisition details, including job, department, location, hiring manager, salary range, employment type, and approval groups. In case of errors, it returns appropriate error messages such as 'Not authorized' or 'Not found'.
  • PATCH https://{subdomain}.workable.com/spi/v3/offers/{id}/approve : The Approve Offer API allows users to approve an offer that is in a compatible state. This API requires the 'w_offers' scope and is accessible only with user tokens. The endpoint is 'https://{subdomain}.workable.com/spi/v3/offers/{id}/approve' and uses the PATCH method. The request must include the 'Authorization' header with a Bearer token and the 'Content-Type' header set to 'application/json'. The 'id' path parameter is required to specify the offer to be approved. The response includes a JSON representation of the offer, detailing requisitions, job information, department, location, hiring manager, owner, salary range, employment type, requisition attributes, and approval groups. Possible error responses include 'Not authorized' (401) and 'Not found' (404).
  • PATCH https://{subdomain}.workable.com/spi/v3/offers/{id}/reject : The 'Reject an Offer' API allows users to reject an offer that is in a compatible state. It requires the 'w_offers' scope and is accessible only with user tokens. The API endpoint is 'https://{subdomain}.workable.com/spi/v3/offers/{id}/reject' and uses the PATCH method. The request must include an Authorization header with a Bearer token and a Content-Type header set to 'application/json'. The path parameter 'id' is required to specify the offer ID. The request body can optionally include a 'rejection_reason'. The response returns a JSON representation of the offer, including details such as candidate information, offer state, document variables, and related documents. Possible response status codes include 200 (success), 401 (not authorized), and 404 (not found).

Requisition Management

  • POST https://{subdomain}.workable.com/spi/v3/requisitions : The Create Requisition API allows users to create a new requisition in the system. It requires a POST request to the specified endpoint with the necessary authorization header. The request must include the subdomain as a path parameter and a JSON body containing details such as the requisition code, owner ID, hiring manager ID, job title, and plan date. Optional fields include job ID, department ID, location details, employment type, experience, salary range, and custom attributes. The response returns a JSON object with the requisition details, including job, department, location, hiring manager, owner, salary range, employment type, reason, state, requisition attributes, and approval groups. The API requires the 'w_requisitions' scope and is accessible with user tokens only.
  • GET https://{subdomain}.workable.com/spi/v3/requisitions/{code} : The Get Requisition Details API retrieves detailed information about a specific requisition identified by its code. It requires a Bearer token for authorization and returns a comprehensive JSON object containing details such as job information, department, location, hiring manager, owner, salary range, employment type, and more. The API also provides information on requisition attributes and approval groups. The response includes the requisition's state, reason, and other relevant details. In case of errors, it returns appropriate error messages.
  • PATCH https://{subdomain}.workable.com/spi/v3/requisitions/{code}/approve : The Approve Requisition API allows users to approve a requisition that is in a compatible state. This API requires the 'w_requisitions' scope and is accessible with user tokens only. The endpoint is 'https://{subdomain}.workable.com/spi/v3/requisitions/{code}/approve' and uses the PATCH method. The request must include an Authorization header with a Bearer token and a Content-Type header set to 'application/json'. The path parameter 'code' is required and specifies the code of the requisition to be approved. Upon successful approval, the API returns a full requisition JSON object containing details such as job, department, location, hiring manager, owner, plan date, salary range, employment type, reason, state, requisition attributes, and approval groups. Possible response status codes include 200 (success), 401 (not authorized), and 404 (not found).
  • PATCH https://{subdomain}.workable.com/spi/v3/requisitions/{code}/reject : The 'Reject a Requisition' API allows users to reject a requisition that is in a compatible state. This API requires the 'w_requisitions' scope and is accessible with user tokens only. The endpoint is 'https://{subdomain}.workable.com/spi/v3/requisitions/{code}/reject' and uses the PATCH method. The request must include a Bearer token for authorization and the requisition code as a path parameter. An optional rejection reason can be provided in the request body. Upon successful rejection, the API returns the full requisition JSON object, which includes details such as job, department, location, hiring manager, owner, plan date, salary range, employment type, reason, state, requisition attributes, and approval groups. If the request fails, an error message is returned.
  • PATCH https://{subdomain}.workable.com/spi/v3/requisitions/{id} : The Update Requisition API allows users to update an existing requisition in the Workable system. This API requires a PATCH request to the endpoint https://{subdomain}.workable.com/spi/v3/requisitions/{id} with the necessary authorization header. The path parameters include the subdomain and the requisition ID. The request body can include various fields such as owner_id, hiring_manager_id, location details, employment type, experience, salary details, reason, notes, plan date, and custom attributes. The response returns the full requisition JSON object, including details like job, department, location, hiring manager, owner, salary range, employment type, reason, state, requisition attributes, and approval groups. The API requires the 'w_requisitions' scope and is accessible with user tokens only.

Subscription Management

  • POST https://{subdomain}.workable.com/spi/v3/subscriptions : This API allows you to subscribe to specific events in the Workable system by registering your service with a target URL. The request requires a Bearer token for authorization and includes a subdomain path parameter. The body of the request must specify a target URL and an event type, with optional arguments for further filtering. The response will include the subscription ID if successful, or an error message if not.
  • DELETE https://{subdomain}.workable.com/spi/v3/subscriptions/{id} : This API endpoint allows users to unsubscribe from an event by deleting a subscription. It requires the 'r_candidates' or 'r_employees' scope and is accessible with all token types. The endpoint is used to delete obsolete subscriptions, especially for third-party integrations. The request must include the account subdomain and the ID of the webhook subscription as path parameters. The request headers must include 'Content-Type', 'Authorization', and 'Accept'. A successful request returns a 200 status code with an empty body. If the authorization fails, a 401 status code with an error message is returned. If the subscription is not found, a 404 status code with an error message is returned.

Time Off Management

  • GET https://{subdomain}.workable.com/spi/v3/timeoff/balances : The Get Time Off Balances API endpoint retrieves a collection of time off balances for all time off categories for a specific employee. It requires the 'r_timeoff' scope, which can be enabled through the Integrations section in the Settings menu. The endpoint requires a Bearer token for authorization and accepts an optional 'employee_id' query parameter if an account level token is used. The response includes details such as available units, units carried over, units used, and whether the category has unlimited time off, along with category ID, tracking unit, name, and description.
  • GET https://{subdomain}.workable.com/spi/v3/timeoff/categories : The List Time Off Categories API endpoint retrieves all time off categories configured for a specific account. It requires the 'r_timeoff' scope, which can be enabled through the Integrations section in the Settings menu. The endpoint requires a Bearer token for authorization and the account subdomain as a path parameter. The response includes a collection of time off categories, each with a unique identifier, name, type (either 'paid' or 'unpaid'), and a description. Possible response status codes include 200 for success, 401 for unauthorized access, and 404 if the resource is not found.
  • POST https://{subdomain}.workable.com/spi/v3/timeoff/requests : This API endpoint allows users to create a new time off request. It requires a user-level token with the 'w_timeoff' scope for authorization. The request body must include the category_id, from_date, and to_date as required fields. Optional fields include half_days, which is an array of objects specifying half days, and a note with a maximum of 140 characters. The response will include details of the created time off request, such as the id, dates, state, and category name. If the request is unauthorized or the endpoint is not found, appropriate error messages will be returned.

FAQs

1) What’s the fastest way to start integrating with Workable?

Start with the basics: list jobs, fetch job details, and create candidates into a job pipeline. That gives you immediate value and a clear data model for the rest.

2) Do I need webhooks, or can I just poll the API?

If you want reliable “near real-time” updates without burning rate limits, use subscriptions/webhooks. Polling is fine for low-volume use cases, but it doesn’t scale cleanly.

3) How do I build a custom application form that matches Workable?

Use the application form and questions endpoints for the job shortcode, and render those fields exactly. This avoids drift between what Workable expects and what your form captures.

4) What’s the cleanest way to automate candidate progression through stages?

Create the candidate, then use the move endpoint to route them based on events (assessment complete, interview submitted, hiring manager review, etc.). Keep your stage mapping in one config file so it’s maintainable.

5) How do I sync hiring team access and accountability?

Pull job members, recruiters, and combined members/recruiters so your internal tooling knows who’s on the loop, and who should approve, review, or act.

6) What should I track for debugging and audit?

Track request IDs, timestamps, the candidate/job identifiers you used, and webhook delivery outcomes. Most integration “mystery bugs” are just missing correlation across systems.

7) Can I integrate Workable with multiple HR tools without building everything from scratch?

Yes, but you’ll end up maintaining auth, mappings, webhooks, retries, and edge cases across every connector. That’s the real cost, engineering time and operational drag.

Get started with Workable API integration using Knit

If you want quick and seamless access to Workable APIs without spending weeks on authentication, authorization, retries, and ongoing maintenance, use Knit. Integrate once with Knit, and standardize how you connect to Workable, so your team focuses on shipping workflows, not babysitting integrations.

#1 in Ease of Integrations

Trusted by businesses to streamline and simplify integrations seamlessly with GetKnit.