> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kombo.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Reading Applications

Reading Applications allows you to retrieve all applications from an ATS.

## Reading All Applications

In order to ensure you read all applications from your customer's ATS, you must configure the `Only Sync Created Applications` toggle to off in your dashboard.

<img src="https://mintcdn.com/kombo/OkxC1UMu0PfEDAZt/images/ats-implementation-guide/screening/only_sync_screenshot.png?fit=max&auto=format&n=OkxC1UMu0PfEDAZt&q=85&s=2f252066350ef266793b60bd88551e1e" alt="1378" width="894" height="513" data-path="images/ats-implementation-guide/screening/only_sync_screenshot.png" />

This can be done [here](https://app.kombo.dev/env/configuration/writing-candidates) in your Kombo Dashboard.

Kombo uses multiple approaches (e.g., syncs and upstream webhooks) to ingest data from the ATS. Whenever we detect a change in the ATS—for example, a new candidate is created—you will receive a `data-changed` webhook allowing you to fetch any new data from Kombo.
More information on fetching data can be found in [Fetching Data](/ats/getting-started/fetching-data).

<img src="https://mintcdn.com/kombo/OkxC1UMu0PfEDAZt/images/ats-implementation-guide/screening/reading-applications.png?fit=max&auto=format&n=OkxC1UMu0PfEDAZt&q=85&s=5baa6d385fefc40b53eb827cbccfbc3e" alt="1377" width="2906" height="752" data-path="images/ats-implementation-guide/screening/reading-applications.png" />

Once the first sync finishes, and whenever new data becomes available, you will receive a `data-changed` webhook.
Then, using the [GET Applications endpoint](/ats/v1/get-applications), applications can be read from the ATS into your system.

## Set Screening Trigger stage

You will want to identify the trigger stage(s) for your screening.
On the [GET Jobs endpoint](/ats/v1/get-jobs), you will see the stages object.

```json theme={null}
{
  "status": "success",
  "data": {
    "next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=",
    "results": [
      {
        "id": "26vafvWSRmbhNcxJYqjCzuJg",
        "remote_id": "32",
        "name": "Backend Engineer",
        ...,
        "stages": [
          {
            "id": "3PJ8PZhZZa1eEdd2DtPNtVup",
            "remote_id": "32",
            "name": "Initial Screening",
            "index": 0
          },
          {
            "id": "HWUTwvyx2wLoSUHphiWVrp28",
            "remote_id": "38",
            "name": "Interview",
            "index": 1
          },
        ],
      }
    ]
  }
}
```

You will have to identify the stage at which screening should occur.
It is possible to use the index, `stages.id`, or stage name to identify the stage(s) to trigger screening. You may also want to involve your customer in identifying the trigger stage. We recommend using the `stages.id`.

<Note>
  If you plan on moving an application we would recommend that you also identify
  the `stages.id` for the next stage in the application process and store this
  in your database. As you will need this in order to move the application to
  the next stage.
</Note>

### Understanding Stage Ordering

Each stage on the [GET Jobs endpoint](/ats/v1/get-jobs) includes an `index` field that represents its position in the hiring pipeline. The `stages` array is sorted by `index` in ascending order.

<Warning>
  The `index` field can be `null` when the underlying ATS does not expose stage
  ordering. Stages with a `null` index are sorted last. Always check for `null`
  before relying on `index` for ordering logic.
</Warning>

In many ATS systems, each job can have a **custom hiring process** — a different configuration of stages per job. Always get stage IDs and their order from the `stages` property on each specific job, not from the deprecated `/application-stages` endpoint.

### Tracking Stages

You will have to keep track of applications during the application process in order to check whether the stage of the application has changed to the trigger stage.
To see whether the stage of an application has changed, you have to implement some tracking logic on your end by calling the [GET Applications endpoint](/ats/v1/get-applications) with the `updated_after` filter and then comparing the stage of each candidate with the stage you currently have in your system.

When you fetch the applications via the [GET Applications endpoint](/ats/v1/get-applications), you will get the `current_stage_id` and `current_stage` properties for each application. The `current_stage` is an expanded version of the `current_stage_id` that includes the stage `name` and `index`:

```json theme={null}
{
  "status": "success",
  "data": {
    "next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=",
    "results": [
      {
        "id": "26vafvWSRmbhNcxJYqjCzuJg",
        "remote_id": "32",
        ...
        "current_stage_id": "5J7L4b48wBfffYwek9Az9pkM",
        ...
        "current_stage": {
          "id": "5J7L4b48wBfffYwek9Az9pkM",
          "remote_id": "32",
          "name": "Initial Screening",
          "index": 0
        },
      }
    ]
  }
}
```

## Get Attachments

As a screening company you may want to read candidates' CVs. This can be done using the [GET Application Attachments endpoint](/ats/v1/get-applications-application-id-attachments).

<Note>
  For every application you must make a request to retrieve the attachment
</Note>

* This endpoint requires the permission `Read document attachments` to be enabled in your [scope configuration](https://app.kombo.dev/scope-config).

You will need to provide the `application_id` for each application you want to get the attachments for.

```
curl --request GET \
  --url https://api.kombo.dev/v1/ats/applications/{123abc}/attachments \
  --header 'Authorization: Bearer <token>' \
  --header 'X-Integration-Id: <x-integration-id>'
```

## Screening Questions

Once you read in applications you can get the screening questions and answers from the screening\_question\_answers object on the get applications endpoint response.

```
"screening_question_answers": [
          {
            "answer": {
              "choice": "TypeScript"
            },
            "question": {
              "remote_id": "48b4d36a-1d4b-4c50-ada7-9519078e65b4",
              "title": "Which is your primary programming language",
              "type": "SINGLE_SELECT"
            }
          }
        ],
```
