Manage jobs
Jobs are the core unit of the ATS pipeline. Each job represents an open or draft position and must have at least one team, one location, and one employment type before it can receive applications.
Before creating a job, complete the Getting started guide to retrieve the required reference IDs.
Job lifecycle
A job moves through the following statuses:
Jobs are opened and closed in the Deel application. The API supports creating jobs and reading their status.
Create a job
Use POST /ats/jobs to create a new job. Provide a title, at least one team_id, at least one location_id, and at least one employment_type_id.
Store the returned job.id. You will need it when creating applications.
The job_employment_types[].id field (the join record ID, e.g. jet_01hxyz333bcd) is different from the employment_type.id. When creating applications, use the job_employment_type_id (the join record ID), not the employment type ID directly.
List and filter jobs
Use GET /ats/jobs to retrieve jobs. You can filter by status, location, team, employment type, or department.
Available filters:
Retrieve job postings
Job postings are the published representations of jobs on job boards. Retrieve them to sync listing data with an external system.
You can also retrieve postings for a specific job board:
Job posting sources include: INTERNAL_CAREER_PAGE, EXTERNAL_CAREER_PAGE, and LINKEDIN.
Job postings are read-only via the API. No endpoint exists to create, publish, or unpublish a posting, and Deel provides no embeddable widget. Use the Deel application to manage job board publications.
Best practices
- Retrieve reference IDs fresh at startup: Location, employment type, and department IDs rarely change but should be fetched at integration startup rather than hardcoded.
- Store
job_employment_type_idalongsidejob_id: You need the join record ID (not the employment type ID) when creating applications. Retrieve it fromGET /ats/jobsand store it with the job record. - Use
updated_afterfor sync: When polling for job changes, use theupdated_afterfilter with the timestamp of your last successful sync to retrieve only changed records.