---
title: "Search jobs"
method: GET
path: "/jobs/search/{searchTerm}"
tags: ["Jobs"]
---

# Search jobs

`GET /jobs/search/{searchTerm}`

## Request

- Base URL: `https://api.twittrapi.com`
- URL: `https://api.twittrapi.com/jobs/search/{searchTerm}`
- Auth: API key in header `X-API-KEY`

Job listings posted on X, by keyword.

Paginated: pass the bottom cursor of one page as cursor to get the next. Each page is one billed call.

X's job search sometimes fails on X's side (DependencyError); the API retries automatically and returns an error if every attempt fails. Retrying a little later usually works.

Reference: https://www.twittrapi.com/docs/reference/jobs-search-searchterm

## Path parameters

- `searchTerm` string, required

## Query parameters

- `count` integer
- `cursor` string
- `jobLocationId` string[]
- `jobLocationType` string[]
- `seniorityLevel` string[]
- `employmentType` string[]
- `companyName` string
- `format` 'raw' | 'simple'

## Response `200`

Raw JSON of X's JobSearchQueryScreenJobsQuery. Jobs are in data.job_search.items_results; the next-page cursor is data.job_search.slice_info.next_cursor.

With format=simple: Collection of Job objects.

- union: format=simple: the simple-format schema. Default (raw): X's JSON, passthrough.
  - JobPage: Simple format: a page of jobs
    - `data` Job[], required
      - `id` string, required
      - `title` string, required
      - `location` string, nullable, required
      - `url` string, nullable, required: The employer's application page
      - `description` string, nullable, required
      - `company` object, nullable, required
        - `id` string, required
        - `name` string, required
        - `logoUrl` string, nullable, required
      - `postedBy` object, nullable, required
        - `id` string, required
        - `username` string, required
    - `nextCursor` string, nullable, required: Pass as cursor for the next page; null on the last page
    - `previousCursor` string, nullable, required: X's top cursor, for polling newer items
    - `hasNextPage` boolean, required
  - RawPassthrough: X's own JSON (raw format, the default), passed through unchanged. The shape is X's and can change; see https://www.twittrapi.com/docs/response-format.

## Other responses

- `401`: Missing or unknown API key. Not charged.
- `402`: No balance left, or the trial expired. Not charged. Top up in the dashboard.
- `403`: Key deactivated, or the endpoint is not in your plan (trial keys and account actions). Not charged.
- `429`: Rate limit for your key exceeded. Not charged. No Retry-After header: back off exponentially.
- `500`: Something failed on our side or between us and X. Refunded (400, 407, 408, 409 or a 5xx error are refunded). Retry with backoff.

---

[API](https://skmtc.dev/twittrapi/apis/twittrapi-api.md) · [All operations](https://skmtc.dev/twittrapi/apis/twittrapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/twittrapi/apis/twittrapi-api/revisions/0618e38b54c2?raw)
