Unified ATS API

Retrieve all candidates.

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/candidates

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
applications✓ Yes✓ Yes
applications → current_stage✗ No✗ No
applications → job✗ No✗ No
tags✓ 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.

emailstring email

Filter the candidates based on an email address. When set, returns only the candidates where the given email is in email_addresses. This filter is case-insensitive.

job_idsstring

Filter by a comma-separated list of job IDs. We will only return candidates that have applied to any of the jobs.

first_namestring

Filter candidates by first name. This filter is case-insensitive and matches the exact first name. Fuzzy matching might be enabled in the future, so consider this for your implementation.

last_namestring

Filter candidates by last name. This filter is case-insensitive and matches the exact last name. Fuzzy matching might be enabled in the future, so consider this for your implementation.

Headers

X-Integration-Idstring required

ID of the integration you want to interact with.

Response

GET /ats/candidates Positive response

status'success' required

Example response

{
  "data": {
    "next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=",
    "results": [
      {
        "id": "26vafvWSRmbhNcxJYqjCzuJg",
        "remote_id": "32",
        "first_name": "John",
        "last_name": "Doe",
        "company": "Acme, Inc.",
        "title": "Head of Marketing",
        "confidential": false,
        "source": "Employee Referral",
        "phone_numbers": [
          {
            "phone_number": "+1-541-754-3010",
            "type": "HOME"
          }
        ],
        "email_addresses": [
          {
            "email_address": "john.doe@example.com",
            "type": "PRIVATE"
          }
        ],
        "social_media": [
          {
            "link": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
            "type": "YOUTUBE",
            "username": null
          }
        ],
        "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/people/32",
        "remote_created_at": "2022-04-02T00:00:00.000Z",
        "remote_updated_at": "2022-04-04T00:00:00.000Z",
        "remote_data": null,
        "changed_at": "2022-04-04T00:00:00.000Z",
        "remote_deleted_at": null,
        "applications": [
          {
            "id": "H77fDF8uvEzGNPRubiz5DvQ7",
            "remote_id": "32",
            "outcome": "HIRED",
            "rejection_reason_name": null,
            "rejected_at": null,
            "remote_url": "https://app.greenhouse.io/applications/32",
            "changed_at": "2022-08-07T14:01:29.196Z",
            "remote_created_at": "2022-08-07T14:01:29.196Z",
            "remote_updated_at": "2022-08-07T14:01:29.196Z",
            "current_stage": {
              "id": "5J7L4b48wBfffYwek9Az9pkM",
              "name": "Initial Screening",
              "remote_id": "32",
              "index": 2
            },
            "job": {
              "id": "H5daSm8e85Dmvmne3wLeCPhX",
              "name": "Backend Engineer",
              "remote_id": "32"
            }
          }
        ],
        "tags": [
          {
            "id": "26vafvWSRmbhNcxJYqjCzuJg",
            "name": "High Potential",
            "remote_id": "32"
          }
        ]
      }
    ]
  }
}

Changes

    • breaking

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

    • info

      added the new optional query request parameter email

    • info

      added the new optional query request parameter first_name

    • info

      added the new optional query request parameter ignore_unsupported_filters

    • info

      added the new optional query request parameter job_ids

    • info

      added the new optional query request parameter last_name

    • 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

      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