Two endpoints for finding jobs: a quick GET keyword search with facets and a typed POST search with full inclusion/exclusion filters and range support.
Use this file to discover all available pages before exploring further.
Two endpoints — quick keyword search vs. typed search with facets.
Quick search — GET /api/jobs. Simple query-string search with comma-separated filters. Best for lightweight integrations and URL-shareable queries.
Advanced search — POST /api/jobs/search. Typed JSON body with inclusion/exclusion filters, range filters, and multi-value text queries. Best for filter UIs and programmatic search.
Both endpoints return JobDto objects — see the Feed page for the full field reference.
Full request/response reference and a live “Try it” playground live on the dedicated pages below.
Quick search
GET /api/jobs — simple query-string search. Best for lightweight integrations and URL-shareable queries.
Advanced search
POST /api/jobs/search — typed JSON body with inclusion/exclusion filters, range filters, and multi-value text queries. Best for filter UIs and programmatic search.
The response includes a facets object with server-computed aggregations. The set of facets is controlled by the include_facets request parameter; when omitted the server returns a low-cardinality default subset to keep responses fast.
skills is returned; unknown names are silently dropped.
On GET /api/jobs pass a comma-separated string (?include_facets=skills,industries); on POST /api/jobs/search pass a JSON array ("include_facets": ["skills", "industries"]). To skip facets from the GET endpoint, send the empty value ?include_facets=.
Facet values for enum fields reflect the lowercased canonical values stored in the index, sorted by count descending. skills is faceted on its display-cased values.Counts are bounded by Typesense’s top_values strategy, so long-tail buckets may be approximate — exact totals come from the total field, not from summing facet counts.Use facet values to power filter UIs. Since all filter fields are case-insensitive, you can pass facet key values directly back as filter values.
Send the canonical value listed below. Filter inputs are matched case-insensitively and common variants (e.g. sr → senior, WFH → remote) are normalized server-side, so most reasonable strings will resolve to the right bucket.
All 57 ATS / job-board providers Jobo currently ingests. Use the provider_id in the sources filter (e.g. "sources": ["greenhouse", "lever"]); the same value comes back on the source field of every JobDto and in the facets.sources bucket.