Skip to main content
GET
Full-text search over the public OpenTrain job marketplace. This endpoint is tokenless — no Authorization header needed — and CORS-enabled (Access-Control-Allow-Origin: *), so it works from browsers, scripts, and agents without any onboarding. Responses are cached at the edge (Cache-Control: public, s-maxage=300, stale-while-revalidate=3600). For filter values to offer in a UI, fetch GET /jobs/facets first. To track marketplace changes incrementally, poll GET /jobs/changes. Requirements: none — no token, no scope, no feature flag. Rate limited to 120 requests/minute per IP.

Request

string
Free-text search across job titles and descriptions.
string
Filter by job category (use values from facets).
string
Filter by required language.
string
Filter by allowed country.
string
PAY_PER_HOUR, FIXED_PRICE, or PAY_PER_LABEL. Any other value returns 400.
number
default:"50"
Page size, max 100.
string
Opaque pagination cursor from a previous response’s nextCursor.
OPTIONS on this path returns 204 with the CORS headers (preflight support).

Response

object[]
Matching public jobs, each a full job object.
string | null
Pass back as cursor for the next page; null when there are no more results.
string
ISO timestamp when the response was generated (responses are edge-cached up to 5 minutes).

Errors