curl -X POST "https://connect.jobo.world/api/jobs/search" \
-H "X-Api-Key: $JOBO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"queries": ["backend engineer"],
"locations": ["London"],
"work_models": ["remote", "hybrid"],
"experience_levels": ["senior"],
"salary_usd": { "min": 150000 },
"page_size": 50
}'import os
from jobo_enterprise import JoboClient, RangeFilter
with JoboClient(api_key=os.environ["JOBO_API_KEY"]) as client:
results = client.search.search_advanced(
queries=["backend engineer"],
locations=["London"],
work_models=["remote", "hybrid"],
experience_levels=["senior"],
salary_usd=RangeFilter(min=150_000),
page_size=50,
)
const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
queries: ['<string>'],
search_description: true,
locations: ['<string>'],
sources: ['<string>'],
skills: {include: ['<string>'], exclude: ['<string>']},
companies: {include: ['<string>'], exclude: ['<string>']},
industries: {include: ['<string>'], exclude: ['<string>']},
company_categories: {include: ['<string>'], exclude: ['<string>']},
job_categories: {include: ['<string>'], exclude: ['<string>']},
job_subcategories: {include: ['<string>'], exclude: ['<string>']},
occupation_ids: {include: ['<string>'], exclude: ['<string>']},
work_models: [],
employment_types: [],
experience_levels: [],
languages: ['<string>'],
salary_usd: {min: 1, max: 1},
posted_after: '2023-11-07T05:31:56Z',
posted_before: '2023-11-07T05:31:56Z',
discovered_after: '2023-11-07T05:31:56Z',
discovered_before: '2023-11-07T05:31:56Z',
sort: 'relevance',
page: 1,
page_size: 25,
include_facets: [],
include_fields: [],
description_format: 'markdown'
})
};
fetch('https://connect.jobo.world/api/jobs/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://connect.jobo.world/api/jobs/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'queries' => [
'<string>'
],
'search_description' => true,
'locations' => [
'<string>'
],
'sources' => [
'<string>'
],
'skills' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'companies' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'industries' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'company_categories' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'job_categories' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'job_subcategories' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'occupation_ids' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'work_models' => [
],
'employment_types' => [
],
'experience_levels' => [
],
'languages' => [
'<string>'
],
'salary_usd' => [
'min' => 1,
'max' => 1
],
'posted_after' => '2023-11-07T05:31:56Z',
'posted_before' => '2023-11-07T05:31:56Z',
'discovered_after' => '2023-11-07T05:31:56Z',
'discovered_before' => '2023-11-07T05:31:56Z',
'sort' => 'relevance',
'page' => 1,
'page_size' => 25,
'include_facets' => [
],
'include_fields' => [
],
'description_format' => 'markdown'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://connect.jobo.world/api/jobs/search"
payload := strings.NewReader("{\n \"queries\": [\n \"<string>\"\n ],\n \"search_description\": true,\n \"locations\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"skills\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"companies\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"industries\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"company_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_subcategories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"occupation_ids\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"work_models\": [],\n \"employment_types\": [],\n \"experience_levels\": [],\n \"languages\": [\n \"<string>\"\n ],\n \"salary_usd\": {\n \"min\": 1,\n \"max\": 1\n },\n \"posted_after\": \"2023-11-07T05:31:56Z\",\n \"posted_before\": \"2023-11-07T05:31:56Z\",\n \"discovered_after\": \"2023-11-07T05:31:56Z\",\n \"discovered_before\": \"2023-11-07T05:31:56Z\",\n \"sort\": \"relevance\",\n \"page\": 1,\n \"page_size\": 25,\n \"include_facets\": [],\n \"include_fields\": [],\n \"description_format\": \"markdown\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://connect.jobo.world/api/jobs/search")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"queries\": [\n \"<string>\"\n ],\n \"search_description\": true,\n \"locations\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"skills\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"companies\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"industries\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"company_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_subcategories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"occupation_ids\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"work_models\": [],\n \"employment_types\": [],\n \"experience_levels\": [],\n \"languages\": [\n \"<string>\"\n ],\n \"salary_usd\": {\n \"min\": 1,\n \"max\": 1\n },\n \"posted_after\": \"2023-11-07T05:31:56Z\",\n \"posted_before\": \"2023-11-07T05:31:56Z\",\n \"discovered_after\": \"2023-11-07T05:31:56Z\",\n \"discovered_before\": \"2023-11-07T05:31:56Z\",\n \"sort\": \"relevance\",\n \"page\": 1,\n \"page_size\": 25,\n \"include_facets\": [],\n \"include_fields\": [],\n \"description_format\": \"markdown\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.jobo.world/api/jobs/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"queries\": [\n \"<string>\"\n ],\n \"search_description\": true,\n \"locations\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"skills\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"companies\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"industries\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"company_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_subcategories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"occupation_ids\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"work_models\": [],\n \"employment_types\": [],\n \"experience_levels\": [],\n \"languages\": [\n \"<string>\"\n ],\n \"salary_usd\": {\n \"min\": 1,\n \"max\": 1\n },\n \"posted_after\": \"2023-11-07T05:31:56Z\",\n \"posted_before\": \"2023-11-07T05:31:56Z\",\n \"discovered_after\": \"2023-11-07T05:31:56Z\",\n \"discovered_before\": \"2023-11-07T05:31:56Z\",\n \"sort\": \"relevance\",\n \"page\": 1,\n \"page_size\": 25,\n \"include_facets\": [],\n \"include_fields\": [],\n \"description_format\": \"markdown\"\n}"
response = http.request(request)
puts response.read_body{
"jobs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"normalized_title": "<string>",
"occupation": {
"id": "esco:8d3e8aaa-791b-4c75-a465-f3f827028f50",
"name": "Registered Nurse",
"category": "Healthcare",
"subcategory": "Nursing",
"isco_code": "2221",
"onet_soc_codes": [
"29-1141.00"
]
},
"company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"website": "<string>",
"logo_url": "<string>",
"summary": "<string>",
"industries": [
"<string>"
],
"categories": [
"<string>"
],
"linkedin_url": "<string>",
"crunchbase_url": "<string>",
"details_url": "<string>"
},
"description": "<string>",
"language": "en",
"summary": "<string>",
"listing_url": "<string>",
"apply_url": "<string>",
"locations": [
{
"location": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"latitude": 123,
"longitude": 123
}
],
"compensation": {
"min": 123,
"max": 123,
"currency": "<string>",
"period": "hourly"
},
"employment_type": "Full-time",
"workplace_type": "Remote",
"experience_level": "Intern",
"source": "greenhouse",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"date_posted": "2023-11-07T05:31:56Z",
"valid_through": "2023-11-07T05:31:56Z",
"qualifications": {
"must_have": {
"education": [
"<string>"
],
"certifications": [
"<string>"
],
"skills": [
{
"name": "<string>",
"type": "hard"
}
]
},
"preferred": {
"education": [
"<string>"
],
"certifications": [
"<string>"
],
"skills": [
{
"name": "<string>",
"type": "hard"
}
]
}
},
"responsibilities": [
"<string>"
],
"benefits": [
"<string>"
],
"is_work_auth_required": true,
"is_h1b_sponsor": true,
"is_clearance_required": true,
"external_id": "000123"
}
],
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123,
"facets": {},
"warnings": [
{
"code": "companies_unmatched",
"field": "companies.include",
"message": "<string>"
}
],
"filters": {
"companies": {
"matched": [
{
"query": "<string>",
"companies": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"provider_id": "workday",
"website": "<string>",
"is_enabled": true
}
]
}
],
"unmatched": [
"<string>"
],
"exclude_unmatched": [
"<string>"
]
}
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"docs_url": "https://jobo.world/docs/guides/sync-a-database",
"api_version": "2026-08-31"
}{
"error": "Invalid or expired API key",
"api_version": "2026-08-31"
}{
"error": "Insufficient credits",
"detail": "This request needs 75 credits ($0.075). Your wallet balance is 12 credits ($0.012). Top up your wallet to continue.",
"group": "JobSearch",
"credits_required": 123,
"credits_balance": 123,
"cost_per_request_usd": 0.075,
"quota_remaining": 123
}{
"error": "Rate limit exceeded",
"detail": "Per-minute JobSearch request limit of 180 exceeded. Try again shortly.",
"retry_after_seconds": 1,
"code": "rate_limit_exceeded",
"group": "JobSearch",
"api_version": "2026-08-31"
}{
"message": "An error occurred",
"detail": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"docs_url": "https://jobo.world/docs/guides/sync-a-database",
"api_version": "2026-08-31"
}Search jobs
Structured search: several queries and locations (OR’d), include/exclude filters, date and salary ranges, field selection and facets. The body is optional; without one, you get the first page of an unfiltered search. Search recipes has worked examples, and the public Search Builder page writes this request body for you and shows how many jobs it matches.
Billed per delivered job: included jobs first, then the wallet. The Unlimited plan does not cover Search. See Billing.
curl -X POST "https://connect.jobo.world/api/jobs/search" \
-H "X-Api-Key: $JOBO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"queries": ["backend engineer"],
"locations": ["London"],
"work_models": ["remote", "hybrid"],
"experience_levels": ["senior"],
"salary_usd": { "min": 150000 },
"page_size": 50
}'import os
from jobo_enterprise import JoboClient, RangeFilter
with JoboClient(api_key=os.environ["JOBO_API_KEY"]) as client:
results = client.search.search_advanced(
queries=["backend engineer"],
locations=["London"],
work_models=["remote", "hybrid"],
experience_levels=["senior"],
salary_usd=RangeFilter(min=150_000),
page_size=50,
)
const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
queries: ['<string>'],
search_description: true,
locations: ['<string>'],
sources: ['<string>'],
skills: {include: ['<string>'], exclude: ['<string>']},
companies: {include: ['<string>'], exclude: ['<string>']},
industries: {include: ['<string>'], exclude: ['<string>']},
company_categories: {include: ['<string>'], exclude: ['<string>']},
job_categories: {include: ['<string>'], exclude: ['<string>']},
job_subcategories: {include: ['<string>'], exclude: ['<string>']},
occupation_ids: {include: ['<string>'], exclude: ['<string>']},
work_models: [],
employment_types: [],
experience_levels: [],
languages: ['<string>'],
salary_usd: {min: 1, max: 1},
posted_after: '2023-11-07T05:31:56Z',
posted_before: '2023-11-07T05:31:56Z',
discovered_after: '2023-11-07T05:31:56Z',
discovered_before: '2023-11-07T05:31:56Z',
sort: 'relevance',
page: 1,
page_size: 25,
include_facets: [],
include_fields: [],
description_format: 'markdown'
})
};
fetch('https://connect.jobo.world/api/jobs/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://connect.jobo.world/api/jobs/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'queries' => [
'<string>'
],
'search_description' => true,
'locations' => [
'<string>'
],
'sources' => [
'<string>'
],
'skills' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'companies' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'industries' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'company_categories' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'job_categories' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'job_subcategories' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'occupation_ids' => [
'include' => [
'<string>'
],
'exclude' => [
'<string>'
]
],
'work_models' => [
],
'employment_types' => [
],
'experience_levels' => [
],
'languages' => [
'<string>'
],
'salary_usd' => [
'min' => 1,
'max' => 1
],
'posted_after' => '2023-11-07T05:31:56Z',
'posted_before' => '2023-11-07T05:31:56Z',
'discovered_after' => '2023-11-07T05:31:56Z',
'discovered_before' => '2023-11-07T05:31:56Z',
'sort' => 'relevance',
'page' => 1,
'page_size' => 25,
'include_facets' => [
],
'include_fields' => [
],
'description_format' => 'markdown'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://connect.jobo.world/api/jobs/search"
payload := strings.NewReader("{\n \"queries\": [\n \"<string>\"\n ],\n \"search_description\": true,\n \"locations\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"skills\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"companies\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"industries\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"company_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_subcategories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"occupation_ids\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"work_models\": [],\n \"employment_types\": [],\n \"experience_levels\": [],\n \"languages\": [\n \"<string>\"\n ],\n \"salary_usd\": {\n \"min\": 1,\n \"max\": 1\n },\n \"posted_after\": \"2023-11-07T05:31:56Z\",\n \"posted_before\": \"2023-11-07T05:31:56Z\",\n \"discovered_after\": \"2023-11-07T05:31:56Z\",\n \"discovered_before\": \"2023-11-07T05:31:56Z\",\n \"sort\": \"relevance\",\n \"page\": 1,\n \"page_size\": 25,\n \"include_facets\": [],\n \"include_fields\": [],\n \"description_format\": \"markdown\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://connect.jobo.world/api/jobs/search")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"queries\": [\n \"<string>\"\n ],\n \"search_description\": true,\n \"locations\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"skills\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"companies\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"industries\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"company_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_subcategories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"occupation_ids\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"work_models\": [],\n \"employment_types\": [],\n \"experience_levels\": [],\n \"languages\": [\n \"<string>\"\n ],\n \"salary_usd\": {\n \"min\": 1,\n \"max\": 1\n },\n \"posted_after\": \"2023-11-07T05:31:56Z\",\n \"posted_before\": \"2023-11-07T05:31:56Z\",\n \"discovered_after\": \"2023-11-07T05:31:56Z\",\n \"discovered_before\": \"2023-11-07T05:31:56Z\",\n \"sort\": \"relevance\",\n \"page\": 1,\n \"page_size\": 25,\n \"include_facets\": [],\n \"include_fields\": [],\n \"description_format\": \"markdown\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.jobo.world/api/jobs/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"queries\": [\n \"<string>\"\n ],\n \"search_description\": true,\n \"locations\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"skills\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"companies\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"industries\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"company_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_categories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"job_subcategories\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"occupation_ids\": {\n \"include\": [\n \"<string>\"\n ],\n \"exclude\": [\n \"<string>\"\n ]\n },\n \"work_models\": [],\n \"employment_types\": [],\n \"experience_levels\": [],\n \"languages\": [\n \"<string>\"\n ],\n \"salary_usd\": {\n \"min\": 1,\n \"max\": 1\n },\n \"posted_after\": \"2023-11-07T05:31:56Z\",\n \"posted_before\": \"2023-11-07T05:31:56Z\",\n \"discovered_after\": \"2023-11-07T05:31:56Z\",\n \"discovered_before\": \"2023-11-07T05:31:56Z\",\n \"sort\": \"relevance\",\n \"page\": 1,\n \"page_size\": 25,\n \"include_facets\": [],\n \"include_fields\": [],\n \"description_format\": \"markdown\"\n}"
response = http.request(request)
puts response.read_body{
"jobs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"normalized_title": "<string>",
"occupation": {
"id": "esco:8d3e8aaa-791b-4c75-a465-f3f827028f50",
"name": "Registered Nurse",
"category": "Healthcare",
"subcategory": "Nursing",
"isco_code": "2221",
"onet_soc_codes": [
"29-1141.00"
]
},
"company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"website": "<string>",
"logo_url": "<string>",
"summary": "<string>",
"industries": [
"<string>"
],
"categories": [
"<string>"
],
"linkedin_url": "<string>",
"crunchbase_url": "<string>",
"details_url": "<string>"
},
"description": "<string>",
"language": "en",
"summary": "<string>",
"listing_url": "<string>",
"apply_url": "<string>",
"locations": [
{
"location": "<string>",
"city": "<string>",
"region": "<string>",
"country": "<string>",
"latitude": 123,
"longitude": 123
}
],
"compensation": {
"min": 123,
"max": 123,
"currency": "<string>",
"period": "hourly"
},
"employment_type": "Full-time",
"workplace_type": "Remote",
"experience_level": "Intern",
"source": "greenhouse",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"date_posted": "2023-11-07T05:31:56Z",
"valid_through": "2023-11-07T05:31:56Z",
"qualifications": {
"must_have": {
"education": [
"<string>"
],
"certifications": [
"<string>"
],
"skills": [
{
"name": "<string>",
"type": "hard"
}
]
},
"preferred": {
"education": [
"<string>"
],
"certifications": [
"<string>"
],
"skills": [
{
"name": "<string>",
"type": "hard"
}
]
}
},
"responsibilities": [
"<string>"
],
"benefits": [
"<string>"
],
"is_work_auth_required": true,
"is_h1b_sponsor": true,
"is_clearance_required": true,
"external_id": "000123"
}
],
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123,
"facets": {},
"warnings": [
{
"code": "companies_unmatched",
"field": "companies.include",
"message": "<string>"
}
],
"filters": {
"companies": {
"matched": [
{
"query": "<string>",
"companies": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"provider_id": "workday",
"website": "<string>",
"is_enabled": true
}
]
}
],
"unmatched": [
"<string>"
],
"exclude_unmatched": [
"<string>"
]
}
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"docs_url": "https://jobo.world/docs/guides/sync-a-database",
"api_version": "2026-08-31"
}{
"error": "Invalid or expired API key",
"api_version": "2026-08-31"
}{
"error": "Insufficient credits",
"detail": "This request needs 75 credits ($0.075). Your wallet balance is 12 credits ($0.012). Top up your wallet to continue.",
"group": "JobSearch",
"credits_required": 123,
"credits_balance": 123,
"cost_per_request_usd": 0.075,
"quota_remaining": 123
}{
"error": "Rate limit exceeded",
"detail": "Per-minute JobSearch request limit of 180 exceeded. Try again shortly.",
"retry_after_seconds": 1,
"code": "rate_limit_exceeded",
"group": "JobSearch",
"api_version": "2026-08-31"
}{
"message": "An error occurred",
"detail": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"docs_url": "https://jobo.world/docs/guides/sync-a-database",
"api_version": "2026-08-31"
}Authorizations
Body
Free-text queries, OR'd together. Each entry matches broadly with typo tolerance; search_description chooses the fields. Double-quote an entry ("\"Quantitative Developer\"" in JSON) for an exact, contiguous phrase match on the job title only. Prefix an entry with - to exclude it. Up to 10 positive entries; more returns 400, and - entries don't count. See How text queries match.
Which fields queries match. true (default): the title, curated alternative titles, company, popular skills and summary, so python finds a Software Engineer job that lists Python as a skill. false: the job's own title and curated same-role alternative titles only, so Android Developer also finds Android Engineer but not a job that only lists Android as a skill. Use false when you pass exact job titles.
Double-quoted entries match the literal job title only, without alternative titles, in either mode. See How text queries match.
Location strings, resolved by the same geocoder as GET /api/locations/geocode. See Resolve locations.
Include/exclude skills filter
Show child attributes
Show child attributes
Include/exclude companies. Each entry is matched by its form:
- A GUID (any format or casing) matches the Jobo company id, as in
company.idandfilters.companies.matched. - A domain or URL (
fedex.com,https://www.fedex.com/careers) matches the website domain, ignoring scheme, path, port and a leadingwww.. Other subdomains count, so use the main domain. A value that parses as a domain is never retried as a name. - Anything else matches the whole company name, ignoring case, accents, punctuation and trailing legal suffixes (Inc, Corp, Ltd, plc, GmbH, …). Not a partial match:
Glenmarkdoes not findGlenmark Pharmaceuticals.
Unmatched entries never fail the request. Unmatched include entries are listed in filters.companies.unmatched with a companies_unmatched warning; if every one misses, you get 200 with zero jobs, not 400. An unmatched exclude entry excludes nothing (companies_exclude_unmatched). Companies on none of the requested sources (a Workday company with sources: [greenhouse]) return nothing and are reported as companies_outside_sources.
See Search recipes.
Show child attributes
Show child attributes
Include/exclude company-industry filter. Matched on the whole industry name, case-insensitively — not a partial match.
Show child attributes
Show child attributes
Include/exclude filter on the hiring company's business model (company.categories), such as b2b, b2c, b2b2c, saas, marketplace or service-provider. Exact, case-insensitive match.
Show child attributes
Show child attributes
Include/exclude filter on the job's occupation category (occupation.category, e.g. Healthcare). Exact, case-insensitive match. GET /api/occupations lists every value. Jobs without an occupation never match an include list.
Show child attributes
Show child attributes
Include/exclude filter on the job's occupation subcategory (occupation.subcategory, e.g. Nursing). Exact, case-insensitive match. GET /api/occupations lists every value.
Show child attributes
Show child attributes
Include/exclude filter on occupation id (occupation.id, e.g. esco:8d3e8aaa-791b-4c75-a465-f3f827028f50). Use ids, not names: names can improve between taxonomy releases, ids don't. GET /api/occupations lists every id.
Show child attributes
Show child attributes
Filter by work model: remote, hybrid, onsite
remote, hybrid, onsite Filter by employment type: full-time, part-time, contract, internship, freelance, temporary
full-time, part-time, contract, internship, freelance, temporary Exact-match experience-level filter. Canonical values are intern, entry, mid, senior, lead, and executive.
intern, entry, mid, senior, lead, executive Filter by description language, as ISO 639-1 codes (en, de, fr). Language names and locales (English, en-US) are mapped to their code. null = all jobs.
Annualized USD range-overlap filter. A job matches when its disclosed salary range intersects the requested range. Jobs without disclosed compensation are excluded.
Show child attributes
Show child attributes
Only return jobs whose employer posting date is on or after this date
Only return jobs whose employer posting date is on or before this date
Only return jobs first indexed on or after this UTC timestamp
Only return jobs first indexed on or before this UTC timestamp
Result order. relevance (default) ranks by match quality, or by most recently updated when there are no queries. Jobs that match every word of a query rank first, so take results from the top. Relevance order shifts as jobs update, so deep paging can skip or repeat a job. discovered_asc and discovered_desc order by created_at, which never changes: pair them with discovered_after / discovered_before for stable pages.
relevance, discovered_asc, discovered_desc x >= 11 <= x <= 100Facets to return. Omit (or null) for the defaults: work_model, experience_level, employment_type and sources. Pass [] for none. Every other facet is computed only when requested. Each facet returns at most 8 buckets, and unknown names are ignored.
A bucket key goes straight back in as a filter value: countries keys (lowercased names such as united states) as locations, occupations keys as occupation_ids. Occupation buckets also carry name and parent. See Facets.
work_model, experience_level, employment_type, sources, industries, skills, countries, company_categories, job_categories, job_subcategories, occupations Non-core fields to return. Omit (or null) for the full job. Pass a subset to keep only those, or [] for core fields only. Unknown names are ignored. Excluded fields are still present but empty: description is "", summary is null, responsibilities and benefits are [], and qualifications has empty buckets. See Shrinking the response.
description, summary, qualifications, responsibilities, benefits Format of each job's description. markdown (default) returns it as stored. html renders it to HTML on the fly: raw HTML in the source is escaped and only http(s), mailto and relative URLs are kept.
markdown, html Response
Paginated list of matching jobs with optional facets
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Non-fatal problems with the request. Omitted when there is nothing to report. The same codes are sent, comma-separated, in the X-Jobo-Warnings response header, so a client can branch without parsing the body.
Show child attributes
Show child attributes
How the server interpreted the filters that needed resolving. Present only when a companies filter was supplied.
Show child attributes
Show child attributes

