Coding agent documentation index Fetch the complete documentation index at: https://docs.worklittle.com/docs-agent-manifest.json Use this file to discover all available pages before exploring further.

Search jobs

Search Worklittle's open-role index, paginate results, and fetch enriched job details for agents and job boards.

Search

Worklittle maintains a market-wide index of millions of open roles, enriched with location, salary, and company data, alongside jobs employers publish on Worklittle. GET /jobs searches that index and returns one page of matching jobs. Requires the jobs:read scope.

curl -s "https://api.worklittle.com/jobs?q=product+designer&workplace_type=remote&limit=10" \
  -H "Authorization: Bearer $WORKLITTLE_API_KEY"
{
  "data": [
    {
      "id": "…",
      "title": "Senior Product Designer",
      "company": { "name": "Example Co" },
      "apply_url": "https://…",
      "can_apply": true,
      "closed_at": null
    }
  ],
  "meta": { "next_cursor": "…" }
}

Rows are snippets without the full description. Pass meta.next_cursor as cursor to get the next page, and stop when it is null. limit defaults to 20 and maxes out at 50.

MCP: search_jobs. SDK: wl.jobs.search(). CLI: worklittle jobs search.

Get a job

GET /jobs/:id returns the full posting. Use the id from a search row.

curl -s "https://api.worklittle.com/jobs/JOB_ID" \
  -H "Authorization: Bearer $WORKLITTLE_API_KEY"

description_text is plain text, never HTML. Headings and bold become bold, lists become - bullets, and links become [label](url). Bold is for display only. For resume keywords, use keywords or MCP get_job_keywords.

By default the response returns the raw description plus any AI enrichment that is already cached. Add ?summary=true (MCP get_job_details with summary: true) to generate the AI summary the first time. Later reads use the cached result.

MCP: get_job_details.

Filters

| Parameter | Description |
| --- | --- |
| `q` | Match on title or company text. |
| `title` | Match on title only. Comma-separated values are ORed. Prefix a value with `-` to exclude it. `-Senior` also excludes "Sr." and "Sr" titles. The same applies to `-Principal`, `-Lead`, `-Staff`, `-Director`, `-Executive`, `-VP`, `-Head`, `-Chief`, and `-Group`. |
| `company` | Company slug or slugs. `stripe` or `meta,google` includes. A leading `-` excludes (`-lucid-motors,-tesla`). See [Search companies](/jobs/api/search-companies). |
| `location`, `location_or` | Location filters. |
| `workplace_type` | Workplace type, such as `remote`. |
| `employment_type` | Comma-separated values are ORed, for example `full_time,part_time`. |
| `seniority_level` | Comma-separated values are ORed, for example `internship,entry,new_grad`. |
| `posted_within_days` | Rolling lookback in days. `0` or omitted means no cutoff on REST. |
| `since` | Unix timestamp lower bound. Wins over `posted_within_days` when both are set. |
| `limit`, `cursor` | Page size (max 50) and pagination cursor. |
| `visa_sponsorship` | `yes` or `no`. `yes` includes US jobs whose company filed certified H-1B / E-3 visas for that kind of title in the last 12 months (US Department of Labor LCA data, refreshed quarterly), unless the posting says it does not sponsor. Each row's `visa_sponsorship_source` is `posting` or `h1b_filings`, and `h1b_filings` is the matching filing count. |
| `include_total` | `true` sets `meta.total` to the number of matching jobs. Works on the first page of a `title` search without `near_lat`/`near_lng` or `company`, otherwise `total` stays null. Add `exclude_remote=true` to leave remote roles out of the count. |

MCP search_jobs takes the role as query and exposes a smaller set: place (location, location_or, near_lat, near_lng, radius_km), company, posted_within_days, seniority_level, employment_type, and visa_sponsorship. Its limit defaults to 10. When posted_within_days is omitted, MCP defaults to 7 (no default when visa_sponsorship is set), and 0 means no cutoff. Salary and workplace filters (salary_min, workplace_type) are REST-only. Put recency in posted_within_days, never in the query text.

Closed jobs and applying

Search never returns closed jobs, so closed_at is always null in list rows and there is no closes_at filter. To read the ATS deadline, fetch closes_at from GET /jobs/:id. See Closed jobs and eligibility.

Use can_apply to decide whether POST /jobs/apply can run for a job. Do not infer it from source_name or apply_url. Roles with can_apply: false still carry an employer apply_url. See Apply for jobs.

Salary average

GET /jobs/salary-average returns the average annual pay for jobs that match a query. It takes the same filters as GET /jobs, including negative title tokens.

curl -s "https://api.worklittle.com/jobs/salary-average?title=Product+Manager,+-Senior,+-Principal,+-Director&workplace_type=remote&country=US" \
  -H "Authorization: Bearer $WORKLITTLE_API_KEY"
| Parameter | Description |
| --- | --- |
| `q` or `title` | Required. Role query with the same syntax as above. |
| `currency` | ISO 4217 code for the salary rows included. Defaults to `USD`. |
| `location`, `company`, `workplace_type`, … | Same as [Filters](/jobs/api/search-jobs). |

data contains matching_jobs, jobs_with_salary, jobs_in_average, average_salary, salary_min, and salary_max. Hourly and monthly pay is annualized first. Only jobs with annualized pay between $30k and $1M count toward the average.

Routes, scopes, and billing

| Route | Method | Scope | Billing |
| --- | --- | --- | --- |
| `/jobs` | GET | `jobs:read` | Free within the monthly quota (1000 jobs returned) |
| `/jobs/:id` | GET | `jobs:read` | Free within the monthly quota |
| `/stats` | GET | `jobs:read` | Free |
| `/jobs/map` | GET | `jobs:read` | Free within the monthly quota (1000 requests) |
| `/jobs/salary-average` | GET | `jobs:read` | Free within the monthly quota (1000 requests) |

Search is not billed per job returned. See Pricing and Rate limits. For aggregate counts, use GET /stats or MCP get_market_overview instead of paginating search.

Agent REST tools

| Method | Path | Purpose |
| --- | --- | --- |
| GET | `/v1/agent/tools` | List REST agent tools and JSON schemas |
| POST | `/v1/agent/tool` | Run `search_jobs`, `get_job_details`, `create_resume`, or `create_cover_letter` (legacy wrapper) |

Requires agent:tools scope. Prefer POST /jobs/resumes and POST /jobs/cover-letters for documents. Full ATS is on MCP.