Overview
Job Workflows are multi-step screening pipelines (e.g., questionnaire → standard interview → AI interviewer → meeting) attached to a job. Steps can also include AI practice interviewer and AI career coach — see Step Types for the full set. A workflow template (isTemplate: true) is a reusable definition you apply to one or more jobs or job families; applying it creates an assignment. A job’s effective workflow resolves the template that actually governs it (direct override > directly-applied template > job-family assignment > none). When you invite a candidate to a job, they are enrolled in the effective workflow and an enrollment with per-step state is created.
All workflow endpoints require the
jobWorkflow organization feature. Requests for organizations without it return 403 FORBIDDEN.Create Workflow Template
Create a reusable workflow template with an ordered list of steps. Endpoint:POST /qsi/gather/workflow-templates
- cURL
- JavaScript
- Python
List Workflow Templates
List all active workflow templates for the resolved team. Not paginated. Endpoint:GET /qsi/gather/workflow-templates
Override the team derived from the API key
Get Workflow Template
Retrieve a single workflow template with its steps and assignments. Endpoint:GET /qsi/gather/workflow-templates/{id}
UUID of the workflow template
Update Workflow Template
Update the name, description, messaging, or steps of an existing workflow template. Endpoint:PATCH /qsi/gather/workflow-templates/{id}
UUID of the workflow template to update
- cURL
- JavaScript
- Python
Archive Workflow Template
Archive (soft-delete) a workflow template. Archived templates are no longer returned in list responses. Endpoint:DELETE /qsi/gather/workflow-templates/{id}
UUID of the workflow template to archive
UUID of the acting user
Apply Workflow Template
Apply a workflow template to one or more jobs or job families, creating assignments. Endpoint:POST /qsi/gather/workflow-templates/{id}/apply
UUID of the workflow template to apply
- cURL
- JavaScript
- Python
Remove Workflow Template Assignment
Remove a workflow template assignment from a job or job family. Endpoint:DELETE /qsi/gather/workflow-template-assignments/{id}
UUID of the workflow template assignment to remove
Get Effective Workflow
Resolve the workflow that actually governs a job (direct override > directly-applied template > job-family assignment > none). Endpoint:GET /qsi/gather/jobs/{jobId}/effective-workflow
UUID of the job
When no workflow governs the job, the response still returns
200 with source: "none" and template: null (and no assignmentId). Check source before reading template.Set Workflow Override
Override a job’s workflow with a specific template, bypassing any job-family assignment. Endpoint:POST /qsi/gather/jobs/{jobId}/workflow-override
UUID of the job
- cURL
- JavaScript
- Python
Clear Workflow Override
Remove a job’s workflow override, reverting to the job-family assignment or no workflow. Endpoint:DELETE /qsi/gather/jobs/{jobId}/workflow-override
UUID of the job
Get Workflow Progress
List candidate enrollments and their per-step progress for a job, with pagination. Endpoint:GET /qsi/gather/jobs/{jobId}/workflow-progress
UUID of the job
Page number (default: 1)
Items per page (default: 25, max: 100)
List Workflow Resources
List all available artifacts (interviews, meetings, message groups, jobs, job families) that can be referenced when building workflow templates. Endpoint:GET /qsi/gather/workflow-resources
Override the team derived from the API key
Invite Candidate to Job
Enroll a candidate in a job’s effective workflow and send the first step’s invite. This endpoint creates or reuses a candidate record and creates a workflow enrollment. Endpoint:POST /qsi/gather/jobs/{jobId}/invite-candidate
UUID of the job to invite the candidate to
candidateId to reuse an existing candidate, or omit it and provide firstName, lastName, and at least one of email or phone to create a new one. A request that satisfies neither returns 400.
- cURL
- JavaScript
- Python
firstInviteUrl is the invite link for the candidate’s first workflow step. It is included when an invite URL is available and is omitted otherwise, so treat it as optional.Resend Workflow Step Invite
Resend the invite for a specific workflow enrollment step, advancing theinviteSentAt timestamp. This endpoint takes no request body.
Endpoint: POST /qsi/gather/workflow-enrollment-steps/{id}/resend-invite
UUID of the workflow enrollment step
Step Types
Workflow steps are one of:questionnaire, standard_interview, ai_interviewer, ai_practice_interviewer, ai_career_coach, meeting.
Workflow Sources
Two response fields share the namesource but describe different things — don’t conflate them when cross-referencing an assignment against an effective-workflow response:
assignment.source(on assignment objects in the Get Workflow Template and Apply Workflow Template responses) records how the assignment was created:job_template(template applied directly to a job),job_family(template applied to a job family), orjob_override(a job-level override).effectiveWorkflow.source(on the Get Effective Workflow response) records which rule won when resolving the job, in precedence order:job_override,job_template,job_family, ornone(no workflow governs the job).
Enrollment & Step Status
Enrollmentstatus: active, completed, failed, stopped.
Enrollment-step status: pending, invited, in_progress, completed, waiting_for_evaluation, passed, failed.
Clients should be prepared to handle any documented status value. The full valid sets are listed above; additional values may be introduced in future API versions.
Related Resources
Jobs
Create and manage jobs
Candidates
Create candidates to invite into workflows

