Skip to main content
GET
X job search API for listings, salary & company
Search the public job listings on X by keyword. Narrow them by location, work type, seniority, employment type, or company.
Requested result counts are upper bounds for paid authenticated calls. When remaining credits cannot cover the full page, Xquik returns fewer results. If zero paid results are affordable, it returns 402 insufficient_credits.
1 credit per job returned · All plans from $0.00012/credit
The Node.js and Python snippets build 1 row per job. Store the rows with the cursor before you request the next page. Start with a keyword in q, such as a job title or a skill. Add 1 filter at a time and check the results after each change.
  • location takes a city, region, or country as text.
  • locationId takes an exact place from job locations.
  • locationType keeps onsite, remote, or hybrid jobs.
  • seniority keeps levels from intern to executive.
  • employmentType keeps full-time, part-time, or contract jobs.
  • company keeps the jobs of 1 employer.
The 3 list filters take comma lists. They ignore case and accept spaces, hyphens, or underscores between words. Full Time, full-time, and full_time all work. An unknown value returns 400 invalid_job_filter. Its message names the values the filter takes.

Page through job listings

Each page returns has_next_page and next_cursor. Send next_cursor back as cursor with the same query and filters. Stop when has_next_page is false. A cursor X refuses or that expired returns 400 invalid_cursor, which is free. Start again without cursor, then use next_cursor. A job that closed is left out of the page and costs nothing. A page can therefore hold fewer jobs than pageSize. Use the job id as the key in your store. Overlapping searches then add no duplicates.

Get the full description

Search returns the listing summary. Send a job’s id to get 1 job listing for the full description, work type, seniority, and team.

Query parameters

string
required
Keyword, such as a job title or skill. Alias: query.
string
City, region, or country as text, such as Berlin.
string
Location ID from job locations. It replaces location when you send both.
string
Where the work happens. Comma list of onsite, remote, and hybrid.
string
Comma list of intern, entry_level, junior, mid_level, senior, lead, manager, and executive.
string
Comma list of full_time, full_time_contract, part_time, and contract_to_hire.
string
Company name to match.
string
Pagination cursor from a previous response. Omit for the first page.
integer
Jobs per page. Range: 1-100. Defaults to 20. Aliases: limit, count, max_results, maxItems, max_items & per_page.

Headers

string
Full account key. Sessions and OAuth also work.
string
Bearer xq_your_guest_key_here for paid_reads.

Response

200 OK

X leaves out a field that a job lacks. Only id and url are always present.
object[]
Array of matching job listings. Job object fields.
string
Job ID.
string
Job title.
string
The job page on X.
string
Where applicants apply, off X.
string
Location as the employer wrote it.
string
Salary as X shows it, such as Starting at $225K.
number
Lowest salary, in salaryCurrencyCode per salaryInterval.
number
Highest salary, in salaryCurrencyCode per salaryInterval.
string
ISO 4217 currency code of the salary.
string
Pay period of the salary: annually or hourly.
object
Company profile with id, name, and logoUrl. Present on jobs X imported from a job board.
object
The X account that posted the job, with id, username, name, verified, verifiedType, profilePicture, and profileImageShape. A job has none when X imported it from a job board or no longer shows the account.
boolean
Whether more results are available.
string
Cursor for the next page.

400 Missing query, unknown filter, or invalid cursor

A request without q returns missing_query. A cursor X cannot read returns invalid_cursor:
Start again without cursor. All 3 answers are free.

401 Unauthenticated

Anonymous requests get WWW-Authenticate: Bearer and a guest wallet checkout action. This is not a Payment challenge.

402 Payment required

Account keys get account options. Guest keys get guest top-up only. No checkout starts automatically. Confirm any payment action.

502 X API unavailable

The read service returned an error. Retry after a short delay.

429 Rate limit exceeded

You exceeded your tier rate limit. Wait for the Retry-After header before retrying.

424 Dependency failed

The normalized v1 response contract can return 424 when the read service is unavailable.
Next steps. Get 1 job listing for the full description, or search users to find the hiring accounts.