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

# Indeed Jobs API

> Indeed Jobs API: search public US job cards with salary, remote, and posted filters, then fetch one job. One page per request.

Two endpoints, one subscription. Search reads one Indeed results page (US
`indeed.com`). Job reads one posting. This does not submit applications.

See the [product page](https://clair.im/apis/indeed).

## Jobs

`GET /v1/search?engine=indeed` · **1 request**

```sh theme={null}
curl -G https://api.clair.im/v1/search \
  -H "Authorization: Bearer YOUR_KEY" \
  --data-urlencode "engine=indeed" \
  --data-urlencode "q=software engineer" \
  --data-urlencode "location=New York, NY"
```

| Parameter  | Required | Contract                                                            |
| ---------- | -------- | ------------------------------------------------------------------- |
| `engine`   | yes      | Must be `indeed`.                                                   |
| `q`        | yes      | Job title or keyword.                                               |
| `location` | no       | Mapped to Indeed's `l`.                                             |
| `job_type` | no       | `full_time`, `part_time`, `contract`, `internship`, or `temporary`. |
| `remote`   | no       | `true` or `false`.                                                  |
| `posted`   | no       | `1d`, `3d`, `7d`, or `14d`.                                         |
| `page`     | no       | Only `1`. Indeed shows later pages to signed-in visitors only.      |

Do not send `limit` or `cursor`. `next_cursor` is always null: the one page
holds every card Indeed serves for the search. To reach more jobs, narrow the
search with `location`, `job_type`, `remote`, or `posted`.

Each hit includes `position`, `id`, `title`, `company`, `location`,
`workplace_type`, `remote`, `salary_text`, `salary`, `job_type`, `posted_age`,
`posted_at`, `snippet`, `benefits`, `company_rating`, `company_reviews_count`,
`company_url`, `easy_apply`, `urgently_hiring`, `sponsored`, and `url`.

A page holds every card Indeed served, usually about 45. `sponsored: true`
marks a listing the employer paid to promote; it is still a real opening.

`salary` is `{ min, max, median, currency, period, source }` or null.
`period` is `year`, `month`, `week`, `day`, or `hour`. `source` is `employer`
when the posting states the pay, `estimated` when it is the board's estimate,
or null when the board does not say. `salary_text` stays as the board prints it.

## Job

`GET /v1/job?engine=indeed` · **1 request**

```sh theme={null}
curl -G https://api.clair.im/v1/job \
  -H "Authorization: Bearer YOUR_KEY" \
  --data-urlencode "engine=indeed" \
  --data-urlencode "id=e6489bd83820f079"
```

`id` is the 16-character hex job key from a search result. The body is
`job`: `title`, `company`, `location`, `workplace_type`, `remote`,
`salary_text`, `salary`, `job_type`, `posted_at`, `valid_through`,
`company_logo`, `company_url`, `benefits`, `direct_apply`, `url`,
`highlights`, and `paragraphs`.

`highlights` groups the description's bullet points into `qualifications`,
`responsibilities`, and `benefits` by the heading above them. Bullets without
a recognised heading are left out, so a posting with no headed lists returns
empty arrays. `paragraphs` still has the full text.

Auth, plans, rate limits, and error codes: [Authentication](/docs/authentication).
