---
title: "Search jobs"
method: GET
path: "/jobs"
---

# Search jobs

`GET /jobs`

## Request

- Base URL: `https://api.hiddenjobs.dev/v1`
- URL: `https://api.hiddenjobs.dev/v1/jobs`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.hiddenjobs.dev/v1/oauth/authorize`, token URL `https://api.hiddenjobs.dev/v1/oauth/token`, scopes: `email`)

Search explicitly selected sources. limit is per source. sourceResults reports provider coverage, continuation cursors and failures. External offers are not stored in Hidden Jobs. Hidden Jobs-only filters are reported as unsupported on external sources rather than ignored.

## Query parameters

- `sources` string[], required
- `q` string
- `category` string
- `employmentType` string
- `jobType` string
- `remoteLocation` string
- `page` integer
- `limit` integer

## Response `200`

Job data. Hidden Jobs employer links are withheld; external source links and attribution are included.

- JobsResponse
  - `data` object
    - `jobs` Job[]
      - `id` string, uuid, required
      - `title` string, required
      - `description` string, required
      - `descriptionPreview` string
      - `salary` string
      - `location` string, nullable
      - `category` string
      - `employmentType` string, nullable
      - `jobType` string, nullable
      - `createdAt` string, date-time
      - `updatedAt` string, date-time, nullable
      - `validThrough` string, nullable
      - `experienceLevel` string, nullable
      - `skills` string[]
      - `remoteScope` string, nullable
      - `remoteLocationCodes` string[]
      - `remoteLocationLabel` string, nullable
      - `hasApplicationLink` boolean, required
      - `source` 'hiddenjobs' | 'jobicy' | 'weworkremotely' | 'remoteok' | 'himalayas'
      - `sourceName` string
      - `sourceUrl` string, uri
      - `applicationUrl` string, uri
      - `attribution` object
        - `name` string
        - `url` string, uri
        - `linkRel` 'follow'
        - `logoAllowed` boolean
      - `timezoneRestrictions` number[]
    - `totalCount` integer
    - `page` integer
    - `limit` integer
    - `hasMore` boolean
    - `sources` string[]
    - `partial` boolean
    - `sourceResults` object[]
      - `source` 'hiddenjobs' | 'jobicy' | 'weworkremotely' | 'remoteok' | 'himalayas', required
      - `count` integer, required
      - `nextCursor` string, nullable
      - `coverage` string
      - `warning` string
      - `error` object
        - `code` string
        - `message` string
        - `fields` string[]

## Other responses

- `401`: Missing, invalid, revoked or expired API key or OAuth access token
- `429`: Credential or account request limit exceeded

---

[API](https://skmtc.dev/hiddenjobs/apis/hidden-jobs-api.md) · [All operations](https://skmtc.dev/hiddenjobs/apis/hidden-jobs-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hiddenjobs/apis/hidden-jobs-api/revisions/c1d57d8e4720?raw)
