DEVELOPER DOCUMENTATION
Search Jobs
Search the public job marketplace. No authentication required.
/api/public/v1/jobsFull-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
Section titled “Request”qstringqueryFree-text search across job titles and descriptions.
categorystringqueryFilter by job category (use values from facets).
languagestringqueryFilter by required language.
countrystringqueryFilter by allowed country.
payTypestringqueryPAY_PER_HOUR, FIXED_PRICE, or PAY_PER_LABEL. Any other value returns 400.
limitnumberquery50Page size, max 100.
cursorstringqueryOpaque pagination cursor from a previous response’s nextCursor.
OPTIONS on this path returns 204 with the CORS headers (preflight support).
Response
Section titled “Response”jobsobject[]Matching public jobs, each a full job object.
nextCursorstring | nullPass back as cursor for the next page; null when there are no more results.
generatedAtstringISO timestamp when the response was generated (responses are edge-cached up to 5 minutes).
Errors
Section titled “Errors”| Status | code | Meaning |
|---|---|---|
400 | BAD_REQUEST | Invalid payType or malformed parameters |
429 | RATE_LIMITED | Over 120 requests/minute from one IP |