> ## 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.

# Jobs rapidapi listing

# RapidAPI listing copy — Jobs API

═══════════════════════════════════════════════════════════════════════════════
FIELD 0: NAME, CATEGORY & TAGS
═══════════════════════════════════════════════════════════════════════════════

* **Name:** `Clair Job Search API`
* **Category:** Jobs, Data
* **Tags:** jobs, internships, job search, job postings, remote jobs, job data,
  applicant tracking systems, recruiting, hiring data, salary data,
  compensation data, labor market data

═══════════════════════════════════════════════════════════════════════════════
FIELD 1: SHORT DESCRIPTION
═══════════════════════════════════════════════════════════════════════════════

Search normalized active jobs and explore hiring-market trends by role, skill,
company, country, and workplace type. Includes provenance, freshness, and
stable taxonomies.

═══════════════════════════════════════════════════════════════════════════════
FIELD 2: LONG DESCRIPTION
═══════════════════════════════════════════════════════════════════════════════

**Active jobs and hiring-market intelligence in one normalized API.**

Clair collects public employer postings from supported ATS platforms and
normalizes roles, skills, seniority, workplace type, location, compensation,
company, source provenance, and freshness where the source supports them.

**Endpoints**

* `GET /v1/jobs` — search active jobs and internships.
* `GET /v1/top-skills`, `/v1/top-roles` — rank current demand.
* `GET /v1/skills/:skill` — inspect one skill across the market.
* `GET /v1/companies`, `/v1/geography`, `/v1/workplace` — compare hiring by
  company, country, and workplace type.
* `GET /v1/salaries` — observed min, max, average, and median pay for a
  market slice.
* `GET /v1/taxonomy/skills`, `/v1/taxonomy/roles` — retrieve canonical filter
  vocabularies.

**Included:** active public postings with a usable posting or application URL;
normalized fields; deduplication; source identity; first-seen and
last-verified timestamps; bounded cursor pagination; explicit nulls when a
field is unavailable.

**Excluded:** closed or removed listings, unusable records, duplicate
requisitions, private jobs, invented values, currency conversion, and a
full-description archive. Public requests search Clair's prepared index and do
not crawl employer sites on demand.

**Use cases:** job discovery, recruiting and sourcing, alerts, company hiring
monitoring, workforce planning, talent intelligence, compensation analysis,
and labor-market research.

[Product overview](https://clair.im/dashboard/apis/jobs) ·
[Dataset coverage](https://clair.im/resources/datasets/active-jobs) ·
[Full documentation](https://clair.im/docs/jobs-api/introduction) ·
[Pricing](https://clair.im/pricing)

═══════════════════════════════════════════════════════════════════════════════
FIELD 3: DOCUMENTATION / README
═══════════════════════════════════════════════════════════════════════════════

# Clair Job Search API

Search active jobs or analyze hiring demand through normalized market
dimensions.

* **Search:** `GET /v1/jobs`
* **Intelligence:** `GET /v1/top-skills`, `/v1/top-roles`,
  `/v1/skills/:skill`, `/v1/companies`, `/v1/geography`, `/v1/workplace`,
  `/v1/salaries`
* **Taxonomies:** `GET /v1/taxonomy/skills`, `/v1/taxonomy/roles`
* **Authentication:** RapidAPI
* **Full docs:** [https://clair.im/docs/jobs-api/introduction](https://clair.im/docs/jobs-api/introduction)
* **Dataset coverage:** [https://clair.im/resources/datasets/active-jobs](https://clair.im/resources/datasets/active-jobs)

***

## Endpoint navigation

| Endpoint                  | Use it to                                                                  |
| ------------------------- | -------------------------------------------------------------------------- |
| `GET /v1/jobs`            | Search and page active normalized postings.                                |
| `GET /v1/top-skills`      | Rank skill demand within optional market filters.                          |
| `GET /v1/top-roles`       | Rank normalized roles within optional market filters.                      |
| `GET /v1/skills/:skill`   | Profile one skill across roles, companies, countries, and workplace types. |
| `GET /v1/companies`       | Compare company hiring activity.                                           |
| `GET /v1/geography`       | Compare demand by country.                                                 |
| `GET /v1/workplace`       | Compare remote, hybrid, and on-site demand.                                |
| `GET /v1/salaries`        | Observed min, max, average, and median pay.                                |
| `GET /v1/taxonomy/skills` | List canonical skill values.                                               |
| `GET /v1/taxonomy/roles`  | List canonical role values.                                                |

***

## Authentication

Send your RapidAPI key and the host shown on the listing:

```sh theme={null}
X-RapidAPI-Key: YOUR_RAPIDAPI_KEY
X-RapidAPI-Host: clair-job-search-api.p.rapidapi.com
```

RapidAPI manages key issuance, plan quotas, rate limiting, and billing.

***

## Quick start

```sh theme={null}
curl -G 'https://clair-job-search-api.p.rapidapi.com/v1/jobs' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: clair-job-search-api.p.rapidapi.com' \
  --data-urlencode 'q=data scientist' \
  --data-urlencode 'country=DE' \
  --data-urlencode 'workplace_type=remote' \
  --data-urlencode 'skills_any=python,pytorch' \
  --data-urlencode 'limit=25'
```

```json theme={null}
{
  "jobs": [
    {
      "id": "fd6b984d-f7f4-4ca8-b68e-34b88a4ec299",
      "title": "Data Science Intern",
      "company": "Example Labs",
      "location": "Berlin, Germany",
      "country": "DE",
      "workplace_type": "remote",
      "employment_type": "Intern",
      "posting_url": "https://jobs.example.com/4512338005",
      "apply_url": "https://jobs.example.com/4512338005/apply",
      "posted_at": "2026-07-24T09:00:00Z",
      "compensation": {
        "min": 25,
        "max": 35,
        "currency": "EUR",
        "interval": "hour",
        "summary": "€25–€35 per hour",
        "source": "description"
      },
      "seniority": "intern",
      "track": "ic",
      "title_family": "data scientist",
      "skills": ["Python", "PyTorch"],
      "description_available": true,
      "description_excerpt": null,
      "first_seen_at": "2026-07-24T09:08:12Z",
      "last_verified_at": "2026-07-28T08:03:51Z",
      "source": {
        "provider": "greenhouse",
        "board": "examplelabs",
        "external_id": "4512338005"
      }
    }
  ],
  "meta": {
    "request_id": "730ecf8c-3b70-48d3-ae2a-173c51b9cfda",
    "generated_at": "2026-07-28T12:00:00Z",
    "count": 1,
    "limit": 25,
    "sort": "posted_at",
    "has_more": false,
    "next_cursor": null,
    "total": null,
    "total_is_exact": false,
    "index": {
      "status": "healthy",
      "as_of": "2026-07-28T11:57:00Z",
      "active_boards": 9000,
      "stale_boards": 0
    }
  }
}
```

Sample values are illustrative.

***

## Search internships

```sh theme={null}
curl -G 'https://clair-job-search-api.p.rapidapi.com/v1/jobs' \
  -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  -H 'X-RapidAPI-Host: clair-job-search-api.p.rapidapi.com' \
  --data-urlencode 'seniority=intern' \
  --data-urlencode 'workplace_type=remote' \
  --data-urlencode 'first_seen_after=2026-07-28T00:00:00Z' \
  --data-urlencode 'sort=first_seen_at'
```

***

## Request parameters

| Field                       | Type     | Notes                                                                     |
| --------------------------- | -------- | ------------------------------------------------------------------------- |
| `q`                         | string   | Case-insensitive substring filter over the posting title.                 |
| `company`                   | string   | Case-insensitive company substring.                                       |
| `location`                  | string   | Case-insensitive match against any published location.                    |
| `country`                   | string   | ISO 3166-1 alpha-2.                                                       |
| `workplace_type`            | enum     | `remote`, `hybrid`, or `onsite`.                                          |
| `seniority`                 | enum     | `intern`, `entry`, `mid`, `senior`, `staff`, `principal`, or `executive`. |
| `track`                     | enum     | `ic`, `management`, or `executive`.                                       |
| `department`                | string   | Case-insensitive department or team substring.                            |
| `skills_all`                | CSV      | Every canonical skill must match.                                         |
| `skills_any`                | CSV      | At least one canonical skill must match.                                  |
| `salary_min` / `salary_max` | number   | Range-overlap filter. Currency is required.                               |
| `currency`                  | string   | Three-character currency; normalized to uppercase.                        |
| `salary_interval`           | enum     | `year`, `hour`, `month`, `week`, or `day`. Bounds default to `year`.      |
| `ats` / `board`             | string   | Advanced source-provenance filters.                                       |
| `posted_after`              | ISO 8601 | Publisher publication-time floor.                                         |
| `first_seen_after`          | ISO 8601 | Clair discovery-time floor; useful for alerts.                            |
| `sort`                      | enum     | `posted_at` (default) or `first_seen_at`, newest first.                   |
| `include_description`       | bool     | Adds a plain-text excerpt capped at 2,000 characters.                     |
| `include_total`             | bool     | Runs an additional exact distinct-count query.                            |
| `limit`                     | integer  | 1–100; default 25.                                                        |
| `cursor`                    | string   | Opaque cursor returned by the previous page.                              |

An unsupported skill returns `unknown_skill`. When both salary bounds are sent,
`salary_min` must not exceed `salary_max`.

***

## Pagination

If `meta.has_more` is true, repeat the same filters and pass
`meta.next_cursor` as `cursor`. The cursor is bound to its filters and sort;
changing them returns `bad_cursor`.

Stop when `has_more` is false and `next_cursor` is null.

Exact totals are off by default. Set `include_total=true` to populate
`meta.total` and set `total_is_exact` to true.

***

## Freshness and provenance

Each job distinguishes:

* Publisher time: `posted_at`, `updated_at`
* Clair time: `first_seen_at`, `last_verified_at`
* Source identity: `source.provider`, `source.board`, `source.external_id`
* Compensation origin: `compensation.source`

Each response includes `meta.index.status`, `as_of`, `active_boards`, and
`stale_boards`. `as_of` is the latest successful board crawl recorded, not a
claim that every board refreshed at the same instant.

***

## Errors

Branch on `error`; do not parse human-readable `detail`.

| Status | `error`                  | Meaning                                                        |
| ------ | ------------------------ | -------------------------------------------------------------- |
| `400`  | `bad_request`            | Invalid parameter.                                             |
| `400`  | `bad_cursor`             | Malformed cursor or cursor reused with different filters/sort. |
| `400`  | `unknown_skill`          | Unsupported skill name.                                        |
| `401`  | `unauthorized`           | Missing or invalid RapidAPI authorization.                     |
| `429`  | Gateway-managed          | RapidAPI plan rate limit exceeded.                             |
| `500`  | `internal`               | Unexpected internal error.                                     |
| `503`  | `dependency_unavailable` | API platform not ready.                                        |
| `503`  | `product_unavailable`    | Jobs product not ready.                                        |
| `503`  | `overloaded`             | Per-machine endpoint capacity reached.                         |
| `504`  | `timeout`                | Search exceeded its processing deadline.                       |

Origin responses include `X-Request-ID`. Honor `Retry-After` on `503` and retry
with backoff.

═══════════════════════════════════════════════════════════════════════════════
END
═══════════════════════════════════════════════════════════════════════════════
