Unified ATS API

Retrieve all jobs.

Visit our in-depth guides to learn more about:

  • 🔄 Getting updates of the data
  • ❗ Handling failing syncs
  • 🔍 Letting your customer choose which jobs to expose
  • 🔗 Matching jobs in your database to ATS jobs
  • 🗑️ Reacting to deleted/closed jobs

Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: (id IN ids) AND (remote_id IN remote_ids)

get/ats/jobs

Request

Query parameters

cursorstring

An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response.

page_sizeinteger

The number of results to return per page. Maximum is 250.

updated_afterstring date-time

Filter the entries based on the modification date in format YYYY-MM-DDTHH:mm:ss.sssZ. Returns records where either the record itself OR its nested data has been updated since this timestamp, even if the record's own changed_at field remains unchanged.

If you want to track entry deletion, also set the include_deleted=true query parameter, because otherwise, deleted entries will be hidden.

For more details, see Understanding changed_at vs updated_after Behavior.

For this endpoint, updated_after matches when the returned record changed, or when related data changed as described below.

PathAdded/RemovedLinked Record
stages✓ Yes✗ No
screening_questions✓ Yes✓ Yes
job_postings✓ Yes✓ Yes
hiring_team✓ Yes✗ No

Added/Removed: Whether adding or removing entries from this list triggers an update (n/a for single records). Linked Record: Whether changes to the linked record itself trigger an update.

include_deleted'true' | 'false'

By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too.

ignore_unsupported_filters'true' | 'false'

When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.

idsstring

Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3.

remote_idsstring

Filter by a comma-separated list of remote IDs.

job_codesstring

Filter by a comma-separated list of job codes.

post_urlstring

Filter by the post_url field. Can be used to find a job based on its public posting URL.

status'OPEN' | 'CLOSED' | 'DRAFT' | 'ARCHIVED'

(⚠️ Deprecated - Use the statuses filter instead.) Filter by the status field. Can be used to find a job based on its status.

statusesstring

Filter by a comma-separated list of OPEN, CLOSED, DRAFT, ARCHIVED

Leave this blank to get results matching all values.

employment_typesstring

Filter by a comma-separated list of FULL_TIME, PART_TIME, CONTRACT, SEASONAL, INTERNSHIP

Leave this blank to get results matching all values.

visibilitiesstring

Filter by a comma-separated list of PUBLIC, INTERNAL, UNLISTED, CONFIDENTIAL

Leave this blank to get results matching all values.

remote_created_afterstring date-time

Filter jobs by the day they were created in the remote system. This allows you to get jobs that were created on or after a certain day.

name_containsstring

Filter by the name field. Can be used to find a job by keywords present in the job name.

Headers

X-Integration-Idstring required

ID of the integration you want to interact with.

Response

GET /ats/jobs Positive response

status'success' required

Example response

{
  "data": {
    "next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=",
    "results": [
      {
        "id": "H5daSm8e85Dmvmne3wLeCPhX",
        "remote_id": "32",
        "name": "Backend Engineer",
        "job_code": "BE-2021-01",
        "description": "<p>Kombo is hiring engineers! If you are reading this and you are located in Berlin, Germany, feel free to contact us about this position.</p>",
        "confidential": false,
        "weekly_hours": 37,
        "employment_type": "FULL_TIME",
        "status": "OPEN",
        "visibility": "PUBLIC",
        "category": "Technical Job",
        "department": "Engineering",
        "post_url": "https://jobs.example.com/post/159829112",
        "experience_level": "Mid-Senior",
        "remote_work_status": "HYBRID",
        "salary_amount": 4200,
        "salary_amount_from": null,
        "salary_amount_to": null,
        "salary_currency": "EUR",
        "salary_period": "MONTH",
        "location": {
          "city": "Berlin",
          "country": "DE",
          "raw": "Berlin, Germany",
          "state": "Berlin",
          "street_1": "Lohmühlenstraße 65",
          "street_2": null,
          "zip_code": "12435"
        },
        "custom_fields": {},
        "integration_fields": [],
        "remote_url": "https://app.greenhouse.io/jobs/32",
        "opened_at": "2022-08-07T14:01:29.196Z",
        "closed_at": null,
        "remote_created_at": "2022-08-07T14:01:29.196Z",
        "remote_updated_at": "2022-08-07T14:01:29.196Z",
        "contact_id": "6gT2yLMBEipd3zpezATv3Rhu",
        "remote_data": null,
        "changed_at": "2022-08-07T14:01:29.196Z",
        "remote_deleted_at": null,
        "stages": [
          {
            "id": "5J7L4b48wBfffYwek9Az9pkM",
            "remote_id": "32",
            "name": "Initial Screening",
            "status": "ACTIVE",
            "custom_fields": {},
            "integration_fields": [],
            "remote_data": null,
            "index": 0
          }
        ],
        "screening_questions": [
          {
            "id": "26vafvWSRmbhNcxJYqjCzuJg",
            "remote_id": "48b4d36a-1d4b-4c50-ada7-9519078e65b4",
            "title": "Which is your primary programming language?",
            "description": "Please enter the language you are most comfortable with.",
            "format": {
              "display_type": "SINGLE_LINE",
              "max_length": null,
              "type": "TEXT"
            },
            "category": null,
            "index": 0,
            "required": true,
            "precondition_question_id": "4ZVteCSSgDw3BdwGzcQqGEPk",
            "precondition_options": [
              "7qd5qjPwDHarsMLFMGzXYG1K"
            ]
          }
        ],
        "job_postings": [
          {
            "id": "26vafvWSRmbhNcxJYqjCzuJg",
            "remote_id": "48b4d36a-1d4b-4c50-ada7-9519078e65b4",
            "title": "Frontend Engineer",
            "description_html": "<p>We are looking for a Frontend Engineer.</p>",
            "status": "ACTIVE",
            "visibility": "PUBLIC",
            "url": "https://jobs.example.com/post/159829112",
            "remote_data": null
          }
        ],
        "hiring_team": [
          {
            "id": "26vafvWSRmbhNcxJYqjCzuJg",
            "remote_id": "32",
            "first_name": "John",
            "last_name": "Doe",
            "email": "john.doe@kombo.dev",
            "hiring_team_roles": [
              "RECRUITER",
              "HIRING_MANAGER"
            ],
            "job_roles": [
              {
                "remote_id": "1",
                "remote_label": "Hiring Manager",
                "unified_type": "HIRING_MANAGER",
                "scope": "JOB"
              }
            ]
          }
        ]
      }
    ]
  }
}

Changes

    • info

      added the required property ///// to the response with the status

    • info

      added the required property ///// to the response with the status

    • info

      added the required property ///// to the response with the status

    • breaking

      the // response's property type changed from no type to object for status

    • info

      added the new optional query request parameter employment_types

    • info

      added the new optional query request parameter ignore_unsupported_filters

    • info

      added the new optional query request parameter job_codes

    • info

      added the new optional query request parameter name_contains

    • info

      added the new optional query request parameter remote_created_after

    • info

      added the new optional query request parameter status

    • info

      added the new optional query request parameter statuses

    • info

      added the new optional query request parameter visibilities

    • info

      removed the pattern /^([\da-z]{24}(,[\da-z]{24})*)?$/i from the query request parameter ids

    • info

      removed the non-success response with the status

    • info

      removed the non-success response with the status

    • info

      removed the non-success response with the status

    • info

      removed the non-success response with the status

    • info

      removed the non-success response with the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      removed subschema #1 subschema #2 from the // response property allOf list for the response status

    • info

      the response property const value success was added for the status

    • info

      removed the success enum value from the response property for the response status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status

    • info

      added the required property /// to the response with the status