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.
Job search assistant
Build a search UI or conversational assistant on Worklittle's market-wide index: title search, commute search, filter, paginate with cursors, enrich with details and keywords, and stay inside monthly search quotas.
Job search is free within monthly quotas. Still keep limit and caching intentional so agents do not burn quota.
When to use
Reach for this pattern when the answer to a user's question lives in someone else's open roles.
A job board or search page where users filter by title, location, salary, and workplace type. A commute or neighborhood view that plots employers on a map (pair with Interactive job map). A swipe-to-apply deck that shows one job at a time, then starts auto-apply on the roles the user picks. A career copilot that reads a resume, proposes matching roles, and explains the fit. A matching or ranking service that scores your own candidate pool against live market postings. A research tool that tracks who is hiring for a role over time.
Do not use it for your own employer's applicants. Those live in the org-scoped ATS at Manage candidates, and they never appear in GET /jobs.
Architecture
The reliable shape is a narrow funnel: search broadly once, then enrich only the rows a human or model actually cares about.
1. Search with GET /jobs (MCP search_jobs). Returns discovery rows: title, company, location, apply_url, can_apply, closed_at. These are snippets, not full descriptions. 2. Rank in your own code or with a model. Do not fetch details for the whole page. 3. Enrich the top handful with GET /jobs/:id (MCP get_job_details) for responsibilities, qualifications, and salary hints. 4. Extract with get_job_keywords when the next step is document tailoring or a skills overlap score. 5. Paginate with meta.next_cursor only if the user asks for more.
Steps 1 and 3 are both metered, so the funnel is a cost control as much as a latency control. See Structured extraction for why keywords beat raw description text.
Call sequence
# 1) Search. Keep limit modest; max is 50.
curl -s "https://api.worklittle.com/jobs?q=product+designer&workplace_type=remote&posted_within_days=14&limit=10" \
-H "Authorization: Bearer $WORKLITTLE_API_KEY"
# 2) Enrich only the rows you will show or reason about.
curl -s "https://api.worklittle.com/jobs/JOB_ID" \
-H "Authorization: Bearer $WORKLITTLE_API_KEY"
# 3) Next page, only on demand.
curl -s "https://api.worklittle.com/jobs?q=product+designer&limit=10&cursor=NEXT_CURSOR" \
-H "Authorization: Bearer $WORKLITTLE_API_KEY"
The MCP equivalent is the same funnel with tool calls:
{ "name": "search_jobs", "arguments": { "query": "product designer", "workplace_type": "remote", "limit": 10 } }
{ "name": "get_job_details", "arguments": { "job_id": "JOB_ID" } }
{ "name": "get_job_keywords", "arguments": { "job_id": "JOB_ID" } }
Filters that carry their weight
| Parameter | Use it for | | --- | --- | | `q` | Title or company free text. Matches substrings / full-text search, not embeddings | | `title` | Title-only matching. Prefix a term with `-` to exclude it, so `-Senior` also removes **Sr.** and **Sr** titles | | `location`, `location_or` | City, state, or country text. Every job carries geocoded location data | | `company` | Employer slug(s). Bare = include OR (`stripe`). Leading `-` excludes (`-lucid-motors,-tesla`) | | `workplace_type`, `employment_type`, `seniority_level` | Structured narrowing that beats keyword guessing | | `posted_within_days` | Rolling recency window. `0` means no cutoff | | `limit`, `cursor` | Pagination, max **50** per page |
Three things surprise people. First, negative title tokens go in title or q as -Senior, not as a separate exclude parameter. Second, employer blocks use the same leading-dash pattern on company (-lucid-motors), not in q. Third, recency words belong in posted_within_days, never in q. A query of "recent remote designer jobs" will try to match the literal word "recent" in the title. Full reference: Search jobs.
Billing and pagination
> Tip: Job search is free within monthly quotas. Prefer smaller limit values so agents do not burn quota on unused rows.
Practical consequences:
Default to limit=10 or limit=20 for interactive search. Raise it only for batch jobs where you will genuinely consume every row. Never loop next_cursor to exhaustion "to be safe". Paginate on explicit user intent. Cache list responses for the life of a conversation turn. Re-running the same search to re-read a title you already have is a pure cost with no new information. GET /jobs/stats is free. If the question is "how many remote roles are there", do not page through search results to count them. See Alerts and market data.
Costs per route are on Jobs pricing, and running spend is on Usage.
Pitfalls
| Pitfall | What to do instead | | --- | --- | | Treating list `job_summary` as the full description | Call `GET /jobs/:id` or `get_job_details` before summarizing requirements | | Raising `limit` past 50 | The cap is 50. Use `cursor` for more | | Assuming every result accepts a hosted apply | Check `can_apply` and read [Apply with AI](/use-cases/apply-with-ai) | | Showing roles that have since closed | Filter on `closed_at`. See [Closed jobs and eligibility](/use-cases/closed-jobs-and-eligibility) | | Pasting a whole description into a resume prompt | Use `get_job_keywords`. See [Structured extraction](/use-cases/structured-extraction) |
The first detail fetch for a job may trigger a one-time AI enrichment backfill, so it can be slightly slower than later reads. Subsequent reads are cached. For API keys, first-time AI generation uses the daily free AI-description quota (100/org/UTC day), then published token rates; raw description_text and already-cached AI stay free.
Related docs
| Doc | Why | | --- | --- | | [Search jobs](/jobs/api/search-jobs) | Filters, cursor pagination, detail fetch | | [Apply for jobs](/jobs/api/apply-for-jobs) | Apply with AI and track applied jobs | | [Worklittle MCP](/jobs/mcp) | Tool names, install, and auth | | [Jobs pricing](/jobs/get-started/pricing) | What each call costs |
Next steps in this section: Interactive job map, Apply with AI, Pagination and limits.