Create Search Job
agent-data call f9a6ec16-0bfd-44d8-b3ee-073776745ee7 search-jobs --keywords <keywords> [--location New York] [--limit <limit>] [--fields <fields>] [--published_on_or_after <published_on_or_after>] [--source <source>] [--cursor <cursor>]curl -X POST "https://i2ovik0sjj.execute-api.us-east-2.amazonaws.com/prod/v1/search-jobs" -H "Authorization: Bearer <YOUR_API_KEY>" -H "Content-Type: application/json"Single-source job search. Every request targets exactly one source: linkedin, ashby, greenhouse, lever. If source is omitted the API defaults to linkedin. This route never fans out across multiple sources. LinkedIn searches live upstream; Ashby, Greenhouse, and Lever search the service-refreshed local postings store. Returns up to limit summary rows. For Ashby/Greenhouse/Lever, keyword terms are stemmed and searched across title/company/department/team/location and the full description; postings matching ALL terms rank first, then progressively relaxed matches (floor: half the terms), newest-first within each tier. Pagination order is deterministic; page through with cursor. Each row carries an id (format jp_<12-hex>) AND a source_url — keep BOTH; you’ll need them as a pair when calling get-posting. Use fields=id,title,company_name (comma-separated) to request a subset of fields and reduce response size. Allowed fields: [‘capture_method’, ‘company_name’, ‘department_name’, ‘detail_available’, ‘employment_type’, ‘id’, ‘is_remote’, ‘location_display’, ‘missing_fields’, ‘posted_at’, ‘published_at’, ‘salary_display’, ‘search_status’, ‘source’, ‘source_id’, ‘source_url’, ‘staleness_status’, ‘team_name’, ‘title’, ‘workplace_type’]. Errors: 422 validation_error (param fails type/range validation; details[].loc identifies the field); 400 validation_error (fields= or source= violates the request contract); 503 upstream_unavailable (the chosen upstream source failed, retryable:true — caller decides backoff).
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Search terms. For ashby/greenhouse/lever: terms are stemmed tokens matched against title, company, department, team, location, and the full job description. Results return postings matching all terms first, then progressively fewer (never below half), ordered newest-first within each match tier. A trailing * makes a term a prefix (scrap* matches scraping/scraper). Max 8 terms (422 above). Punctuation is ignored. linkedin: forwarded verbatim to LinkedIn’s own search.
Search terms. For ashby/greenhouse/lever: terms are stemmed tokens matched against title, company, department, team, location, and the full job description. Results return postings matching all terms first, then progressively fewer (never below half), ordered newest-first within each match tier. A trailing * makes a term a prefix (scrap* matches scraping/scraper). Max 8 terms (422 above). Punctuation is ignored. linkedin: forwarded verbatim to LinkedIn’s own search.
Optional location filter, e.g. New York. Accepts a city, state/region, or country (names, common aliases like NYC/SF, ISO codes like US/GBR, and native spellings like München all resolve via GeoNames). linkedin: forwarded to LinkedIn’s own location filter. ashby/greenhouse/lever: matched against each posting’s resolved location with hierarchical containment — a country matches every city in it. ‘Remote’ matches remote-flagged postings. Unrecognized strings fall back to substring match on the posting’s displayed location. Qualify ambiguous cities (‘London, UK’).
Maximum number of results to return (1-100).
Maximum number of results to return (1-100).
Optional comma-separated list of fields to include per row. Allowed: [‘capture_method’, ‘company_name’, ‘department_name’, ‘detail_available’, ‘employment_type’, ‘id’, ‘is_remote’, ‘location_display’, ‘missing_fields’, ‘posted_at’, ‘published_at’, ‘salary_display’, ‘search_status’, ‘source’, ‘source_id’, ‘source_url’, ‘staleness_status’, ‘team_name’, ‘title’, ‘workplace_type’].
Inclusive recency filter as ISO YYYY-MM-DD. Keeps only jobs whose effective publication timestamp (later of published_at and posted_at, using whichever is present) is on or after this date. Jobs with unknown publication date are excluded when this filter is set.
Opaque continuation cursor for store-backed pagination.
Opaque continuation cursor for store-backed pagination.
Responses
Section titled “ Responses ”Search results.
object
object
One row in a search-jobs result. All fields optional because sparse
fieldsets (?fields=id,title) may omit any subset.
object
object
Example
{ "data": { "warnings": [] }}Service-side request contract error. error.param identifies the offending field when available.
object
object
object
Example
{ "error": { "source": "upstream" }}The upstream source responded successfully but no posting data was available for the requested resource.
object
object
object
Example
{ "error": { "source": "upstream" }}Client validation error. details[] identifies the offending field.
object
object
object
Example
{ "error": { "source": "upstream" }}Upstream dependency unavailable (retryable:true). The caller decides retry cadence.
object
object
object
Example
{ "error": { "source": "upstream" }}