Search Jobs
curl --request POST \
--url https://api.mokaru.ai/v1/jobs/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"location": "<string>",
"country": "<string>",
"remote": true,
"workArrangement": "<string>",
"workArrangements": [
"<string>"
],
"employmentType": "<string>",
"employmentTypes": [
"<string>"
],
"datePosted": "<string>",
"salaryMin": 123,
"salaryRanges": [
"<string>"
],
"requireSalary": true,
"benefits": [
"<string>"
],
"includeCompanies": [
"<string>"
],
"excludeCompanies": [
"<string>"
],
"includeKeywords": [
"<string>"
],
"excludeKeywords": [
"<string>"
],
"includeTitles": [
"<string>"
],
"excludeTitles": [
"<string>"
],
"jobLevels": [
"<string>"
],
"sources": [
"<string>"
],
"languages": [
"<string>"
],
"experienceMin": 123,
"experienceMax": 123,
"visaSponsorship": true,
"securityClearance": true,
"directApplyOnly": true,
"excludeGhostJobs": true,
"limit": 123,
"cursor": "<string>"
}
'import requests
url = "https://api.mokaru.ai/v1/jobs/search"
payload = {
"query": "<string>",
"location": "<string>",
"country": "<string>",
"remote": True,
"workArrangement": "<string>",
"workArrangements": ["<string>"],
"employmentType": "<string>",
"employmentTypes": ["<string>"],
"datePosted": "<string>",
"salaryMin": 123,
"salaryRanges": ["<string>"],
"requireSalary": True,
"benefits": ["<string>"],
"includeCompanies": ["<string>"],
"excludeCompanies": ["<string>"],
"includeKeywords": ["<string>"],
"excludeKeywords": ["<string>"],
"includeTitles": ["<string>"],
"excludeTitles": ["<string>"],
"jobLevels": ["<string>"],
"sources": ["<string>"],
"languages": ["<string>"],
"experienceMin": 123,
"experienceMax": 123,
"visaSponsorship": True,
"securityClearance": True,
"directApplyOnly": True,
"excludeGhostJobs": True,
"limit": 123,
"cursor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
location: '<string>',
country: '<string>',
remote: true,
workArrangement: '<string>',
workArrangements: ['<string>'],
employmentType: '<string>',
employmentTypes: ['<string>'],
datePosted: '<string>',
salaryMin: 123,
salaryRanges: ['<string>'],
requireSalary: true,
benefits: ['<string>'],
includeCompanies: ['<string>'],
excludeCompanies: ['<string>'],
includeKeywords: ['<string>'],
excludeKeywords: ['<string>'],
includeTitles: ['<string>'],
excludeTitles: ['<string>'],
jobLevels: ['<string>'],
sources: ['<string>'],
languages: ['<string>'],
experienceMin: 123,
experienceMax: 123,
visaSponsorship: true,
securityClearance: true,
directApplyOnly: true,
excludeGhostJobs: true,
limit: 123,
cursor: '<string>'
})
};
fetch('https://api.mokaru.ai/v1/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://api.mokaru.ai/v1/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([
'query' => '<string>',
'location' => '<string>',
'country' => '<string>',
'remote' => true,
'workArrangement' => '<string>',
'workArrangements' => [
'<string>'
],
'employmentType' => '<string>',
'employmentTypes' => [
'<string>'
],
'datePosted' => '<string>',
'salaryMin' => 123,
'salaryRanges' => [
'<string>'
],
'requireSalary' => true,
'benefits' => [
'<string>'
],
'includeCompanies' => [
'<string>'
],
'excludeCompanies' => [
'<string>'
],
'includeKeywords' => [
'<string>'
],
'excludeKeywords' => [
'<string>'
],
'includeTitles' => [
'<string>'
],
'excludeTitles' => [
'<string>'
],
'jobLevels' => [
'<string>'
],
'sources' => [
'<string>'
],
'languages' => [
'<string>'
],
'experienceMin' => 123,
'experienceMax' => 123,
'visaSponsorship' => true,
'securityClearance' => true,
'directApplyOnly' => true,
'excludeGhostJobs' => true,
'limit' => 123,
'cursor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.mokaru.ai/v1/jobs/search"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"location\": \"<string>\",\n \"country\": \"<string>\",\n \"remote\": true,\n \"workArrangement\": \"<string>\",\n \"workArrangements\": [\n \"<string>\"\n ],\n \"employmentType\": \"<string>\",\n \"employmentTypes\": [\n \"<string>\"\n ],\n \"datePosted\": \"<string>\",\n \"salaryMin\": 123,\n \"salaryRanges\": [\n \"<string>\"\n ],\n \"requireSalary\": true,\n \"benefits\": [\n \"<string>\"\n ],\n \"includeCompanies\": [\n \"<string>\"\n ],\n \"excludeCompanies\": [\n \"<string>\"\n ],\n \"includeKeywords\": [\n \"<string>\"\n ],\n \"excludeKeywords\": [\n \"<string>\"\n ],\n \"includeTitles\": [\n \"<string>\"\n ],\n \"excludeTitles\": [\n \"<string>\"\n ],\n \"jobLevels\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"languages\": [\n \"<string>\"\n ],\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"visaSponsorship\": true,\n \"securityClearance\": true,\n \"directApplyOnly\": true,\n \"excludeGhostJobs\": true,\n \"limit\": 123,\n \"cursor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.mokaru.ai/v1/jobs/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"location\": \"<string>\",\n \"country\": \"<string>\",\n \"remote\": true,\n \"workArrangement\": \"<string>\",\n \"workArrangements\": [\n \"<string>\"\n ],\n \"employmentType\": \"<string>\",\n \"employmentTypes\": [\n \"<string>\"\n ],\n \"datePosted\": \"<string>\",\n \"salaryMin\": 123,\n \"salaryRanges\": [\n \"<string>\"\n ],\n \"requireSalary\": true,\n \"benefits\": [\n \"<string>\"\n ],\n \"includeCompanies\": [\n \"<string>\"\n ],\n \"excludeCompanies\": [\n \"<string>\"\n ],\n \"includeKeywords\": [\n \"<string>\"\n ],\n \"excludeKeywords\": [\n \"<string>\"\n ],\n \"includeTitles\": [\n \"<string>\"\n ],\n \"excludeTitles\": [\n \"<string>\"\n ],\n \"jobLevels\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"languages\": [\n \"<string>\"\n ],\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"visaSponsorship\": true,\n \"securityClearance\": true,\n \"directApplyOnly\": true,\n \"excludeGhostJobs\": true,\n \"limit\": 123,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mokaru.ai/v1/jobs/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"location\": \"<string>\",\n \"country\": \"<string>\",\n \"remote\": true,\n \"workArrangement\": \"<string>\",\n \"workArrangements\": [\n \"<string>\"\n ],\n \"employmentType\": \"<string>\",\n \"employmentTypes\": [\n \"<string>\"\n ],\n \"datePosted\": \"<string>\",\n \"salaryMin\": 123,\n \"salaryRanges\": [\n \"<string>\"\n ],\n \"requireSalary\": true,\n \"benefits\": [\n \"<string>\"\n ],\n \"includeCompanies\": [\n \"<string>\"\n ],\n \"excludeCompanies\": [\n \"<string>\"\n ],\n \"includeKeywords\": [\n \"<string>\"\n ],\n \"excludeKeywords\": [\n \"<string>\"\n ],\n \"includeTitles\": [\n \"<string>\"\n ],\n \"excludeTitles\": [\n \"<string>\"\n ],\n \"jobLevels\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"languages\": [\n \"<string>\"\n ],\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"visaSponsorship\": true,\n \"securityClearance\": true,\n \"directApplyOnly\": true,\n \"excludeGhostJobs\": true,\n \"limit\": 123,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"title": "<string>",
"company": "<string>",
"companyLogo": "<string>",
"companyWebsite": "<string>",
"location": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>",
"isRemote": true,
"employmentType": "<string>",
"applyLink": "<string>",
"applyIsDirect": true,
"publisher": "<string>",
"description": "<string>",
"highlights": {},
"benefits": [
{}
],
"salaryMin": 123,
"salaryMax": 123,
"salaryPeriod": "<string>",
"postedAt": "<string>",
"firstSeenAt": "<string>",
"republishCount": 123,
"source": "<string>"
}
],
"count": 123,
"total": 123,
"hasMore": true,
"nextCursor": "<string>"
}Jobs
Search Jobs
Search job listings in the Mokaru database
POST
/
v1
/
jobs
/
search
Search Jobs
curl --request POST \
--url https://api.mokaru.ai/v1/jobs/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"location": "<string>",
"country": "<string>",
"remote": true,
"workArrangement": "<string>",
"workArrangements": [
"<string>"
],
"employmentType": "<string>",
"employmentTypes": [
"<string>"
],
"datePosted": "<string>",
"salaryMin": 123,
"salaryRanges": [
"<string>"
],
"requireSalary": true,
"benefits": [
"<string>"
],
"includeCompanies": [
"<string>"
],
"excludeCompanies": [
"<string>"
],
"includeKeywords": [
"<string>"
],
"excludeKeywords": [
"<string>"
],
"includeTitles": [
"<string>"
],
"excludeTitles": [
"<string>"
],
"jobLevels": [
"<string>"
],
"sources": [
"<string>"
],
"languages": [
"<string>"
],
"experienceMin": 123,
"experienceMax": 123,
"visaSponsorship": true,
"securityClearance": true,
"directApplyOnly": true,
"excludeGhostJobs": true,
"limit": 123,
"cursor": "<string>"
}
'import requests
url = "https://api.mokaru.ai/v1/jobs/search"
payload = {
"query": "<string>",
"location": "<string>",
"country": "<string>",
"remote": True,
"workArrangement": "<string>",
"workArrangements": ["<string>"],
"employmentType": "<string>",
"employmentTypes": ["<string>"],
"datePosted": "<string>",
"salaryMin": 123,
"salaryRanges": ["<string>"],
"requireSalary": True,
"benefits": ["<string>"],
"includeCompanies": ["<string>"],
"excludeCompanies": ["<string>"],
"includeKeywords": ["<string>"],
"excludeKeywords": ["<string>"],
"includeTitles": ["<string>"],
"excludeTitles": ["<string>"],
"jobLevels": ["<string>"],
"sources": ["<string>"],
"languages": ["<string>"],
"experienceMin": 123,
"experienceMax": 123,
"visaSponsorship": True,
"securityClearance": True,
"directApplyOnly": True,
"excludeGhostJobs": True,
"limit": 123,
"cursor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
location: '<string>',
country: '<string>',
remote: true,
workArrangement: '<string>',
workArrangements: ['<string>'],
employmentType: '<string>',
employmentTypes: ['<string>'],
datePosted: '<string>',
salaryMin: 123,
salaryRanges: ['<string>'],
requireSalary: true,
benefits: ['<string>'],
includeCompanies: ['<string>'],
excludeCompanies: ['<string>'],
includeKeywords: ['<string>'],
excludeKeywords: ['<string>'],
includeTitles: ['<string>'],
excludeTitles: ['<string>'],
jobLevels: ['<string>'],
sources: ['<string>'],
languages: ['<string>'],
experienceMin: 123,
experienceMax: 123,
visaSponsorship: true,
securityClearance: true,
directApplyOnly: true,
excludeGhostJobs: true,
limit: 123,
cursor: '<string>'
})
};
fetch('https://api.mokaru.ai/v1/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://api.mokaru.ai/v1/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([
'query' => '<string>',
'location' => '<string>',
'country' => '<string>',
'remote' => true,
'workArrangement' => '<string>',
'workArrangements' => [
'<string>'
],
'employmentType' => '<string>',
'employmentTypes' => [
'<string>'
],
'datePosted' => '<string>',
'salaryMin' => 123,
'salaryRanges' => [
'<string>'
],
'requireSalary' => true,
'benefits' => [
'<string>'
],
'includeCompanies' => [
'<string>'
],
'excludeCompanies' => [
'<string>'
],
'includeKeywords' => [
'<string>'
],
'excludeKeywords' => [
'<string>'
],
'includeTitles' => [
'<string>'
],
'excludeTitles' => [
'<string>'
],
'jobLevels' => [
'<string>'
],
'sources' => [
'<string>'
],
'languages' => [
'<string>'
],
'experienceMin' => 123,
'experienceMax' => 123,
'visaSponsorship' => true,
'securityClearance' => true,
'directApplyOnly' => true,
'excludeGhostJobs' => true,
'limit' => 123,
'cursor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.mokaru.ai/v1/jobs/search"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"location\": \"<string>\",\n \"country\": \"<string>\",\n \"remote\": true,\n \"workArrangement\": \"<string>\",\n \"workArrangements\": [\n \"<string>\"\n ],\n \"employmentType\": \"<string>\",\n \"employmentTypes\": [\n \"<string>\"\n ],\n \"datePosted\": \"<string>\",\n \"salaryMin\": 123,\n \"salaryRanges\": [\n \"<string>\"\n ],\n \"requireSalary\": true,\n \"benefits\": [\n \"<string>\"\n ],\n \"includeCompanies\": [\n \"<string>\"\n ],\n \"excludeCompanies\": [\n \"<string>\"\n ],\n \"includeKeywords\": [\n \"<string>\"\n ],\n \"excludeKeywords\": [\n \"<string>\"\n ],\n \"includeTitles\": [\n \"<string>\"\n ],\n \"excludeTitles\": [\n \"<string>\"\n ],\n \"jobLevels\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"languages\": [\n \"<string>\"\n ],\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"visaSponsorship\": true,\n \"securityClearance\": true,\n \"directApplyOnly\": true,\n \"excludeGhostJobs\": true,\n \"limit\": 123,\n \"cursor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.mokaru.ai/v1/jobs/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"location\": \"<string>\",\n \"country\": \"<string>\",\n \"remote\": true,\n \"workArrangement\": \"<string>\",\n \"workArrangements\": [\n \"<string>\"\n ],\n \"employmentType\": \"<string>\",\n \"employmentTypes\": [\n \"<string>\"\n ],\n \"datePosted\": \"<string>\",\n \"salaryMin\": 123,\n \"salaryRanges\": [\n \"<string>\"\n ],\n \"requireSalary\": true,\n \"benefits\": [\n \"<string>\"\n ],\n \"includeCompanies\": [\n \"<string>\"\n ],\n \"excludeCompanies\": [\n \"<string>\"\n ],\n \"includeKeywords\": [\n \"<string>\"\n ],\n \"excludeKeywords\": [\n \"<string>\"\n ],\n \"includeTitles\": [\n \"<string>\"\n ],\n \"excludeTitles\": [\n \"<string>\"\n ],\n \"jobLevels\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"languages\": [\n \"<string>\"\n ],\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"visaSponsorship\": true,\n \"securityClearance\": true,\n \"directApplyOnly\": true,\n \"excludeGhostJobs\": true,\n \"limit\": 123,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mokaru.ai/v1/jobs/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"location\": \"<string>\",\n \"country\": \"<string>\",\n \"remote\": true,\n \"workArrangement\": \"<string>\",\n \"workArrangements\": [\n \"<string>\"\n ],\n \"employmentType\": \"<string>\",\n \"employmentTypes\": [\n \"<string>\"\n ],\n \"datePosted\": \"<string>\",\n \"salaryMin\": 123,\n \"salaryRanges\": [\n \"<string>\"\n ],\n \"requireSalary\": true,\n \"benefits\": [\n \"<string>\"\n ],\n \"includeCompanies\": [\n \"<string>\"\n ],\n \"excludeCompanies\": [\n \"<string>\"\n ],\n \"includeKeywords\": [\n \"<string>\"\n ],\n \"excludeKeywords\": [\n \"<string>\"\n ],\n \"includeTitles\": [\n \"<string>\"\n ],\n \"excludeTitles\": [\n \"<string>\"\n ],\n \"jobLevels\": [\n \"<string>\"\n ],\n \"sources\": [\n \"<string>\"\n ],\n \"languages\": [\n \"<string>\"\n ],\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"visaSponsorship\": true,\n \"securityClearance\": true,\n \"directApplyOnly\": true,\n \"excludeGhostJobs\": true,\n \"limit\": 123,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"title": "<string>",
"company": "<string>",
"companyLogo": "<string>",
"companyWebsite": "<string>",
"location": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>",
"isRemote": true,
"employmentType": "<string>",
"applyLink": "<string>",
"applyIsDirect": true,
"publisher": "<string>",
"description": "<string>",
"highlights": {},
"benefits": [
{}
],
"salaryMin": 123,
"salaryMax": 123,
"salaryPeriod": "<string>",
"postedAt": "<string>",
"firstSeenAt": "<string>",
"republishCount": 123,
"source": "<string>"
}
],
"count": 123,
"total": 123,
"hasMore": true,
"nextCursor": "<string>"
}Overview
The Search Jobs endpoint lets you programmatically query job listings from the Mokaru database. It is the starting point for most automation workflows - search for relevant positions, then pipe the results into your application tracker or external tools. Common use cases:- AI agent job hunting - connect Claude Desktop, GPT, or any AI agent to search for jobs on your behalf. The agent can evaluate listings against your preferences and automatically create applications for the best matches.
- n8n and Make workflows - build automated pipelines that search for new jobs on a schedule, filter by your criteria, and push results to Slack, Notion, or a spreadsheet.
- Custom job boards - pull listings into your own interface or internal tool. Combine multiple searches (different roles, locations) into a single view.
- Market research - track hiring trends by querying specific job titles or locations over time. Monitor how many positions a company has open or how salary ranges shift.
nextCursor from a response back as cursor on the next request (opaque token - do not construct it yourself). The hasMore field tells you whether additional pages are available.
Free-tier users receive results from the Mokaru database, which is refreshed daily with popular job titles. Plus users get additional results from external providers (JSearch, Fantastic.jobs), giving broader coverage for niche roles or less common locations.
The response includes an id field for each listing. Pass this as jobListingId when creating an application to automatically link salary data and publisher information.
Scope required:
jobs:search | Rate limit: 30 requests/minRequest
POST /v1/jobs/search
Body Parameters
string
required
Job search keywords (e.g. “software engineer”, “product manager”)
string
City, state, or country (e.g. “San Francisco”, “Remote”)
string
Two-letter ISO country code (e.g.
DE, US, GB) for strict country filteringboolean
Legacy shortcut for
workArrangement: "remote". Prefer workArrangement(s)string
Work model:
remote, hybrid, or onsitestring[]
Multi-select work model (OR). Takes precedence over
workArrangementstring
Filter by type:
FULLTIME, PARTTIME, CONTRACTOR, INTERNstring[]
Multi-select employment type (OR). Takes precedence over
employmentTypestring
Filter by recency:
day, 3days, week, monthnumber
Minimum annual salary in the job currency. Only matches jobs with disclosed salary
string[]
Annualised salary bands (OR), open-ended allowed:
"30000-50000", "150000-"boolean
Only return jobs that disclose a salary
string[]
Require these benefits to be present (e.g.
["remote work", "health insurance"])string[]
Restrict results to these company names (case-insensitive substring match)
string[]
Hide listings from these companies (case-insensitive substring match)
string[]
Require all of these keywords to appear in title or description
string[]
Exclude jobs whose title or description contains any of these keywords
string[]
At least one of these substrings must appear in the job title
string[]
None of these substrings may appear in the job title
string[]
Seniority inferred from the title (OR):
entry, junior, mid, senior, leadstring[]
Restrict to specific ATS providers by exact source key (e.g.
greenhouse, ashby, workday)string[]
Required job languages by English name (OR), e.g.
["English", "German"]number
Minimum years of required experience stated by the job
number
Maximum years of required experience stated by the job
boolean
Only jobs that explicitly offer visa sponsorship
boolean
Match jobs that explicitly require a security clearance
boolean
Only jobs whose apply-link points to the employer’s own ATS
boolean
Hide likely-stale “ghost” jobs (posted 60+ days ago or repeatedly recycled)
number
default:"25"
Results per page (max 100)
string
Opaque pagination cursor from the previous response’s
nextCursor. Omit on the first page; pass it back unchangedExample
curl -X POST "https://api.mokaru.ai/v1/jobs/search" \
-H "Authorization: Bearer mk_your_key" \
-H "Content-Type: application/json" \
-d '{
"query": "software engineer",
"location": "San Francisco",
"remote": true,
"datePosted": "week"
}'
Response
array
Array of job listings
Show child attributes
Show child attributes
string
Unique job ID (use for
jobListingId when creating applications)string
Job title
string
Company name
string
Company logo URL
string
Company website URL
string
Job location
string
City
string
State or province
string
Country code
boolean
Whether the job is remote
string
Employment type
string
Direct application URL
boolean
Whether the apply link goes directly to the employer
string
Source publisher (e.g. LinkedIn, Indeed)
string
Full job description (HTML)
object
Qualifications, responsibilities, and other highlights
array
List of job benefits
number
Minimum salary
number
Maximum salary
string
Salary period (yearly, monthly, hourly)
string
ISO 8601 posting date the results sort by (newest first). From the employer/ATS when provided, otherwise when Mokaru first saw the job
string
ISO 8601 date Mokaru first indexed the listing (useful for spotting recycled/reposted jobs)
number
How many times the posting date was bumped forward (recycled-listing signal)
string
ATS provider key the job was ingested from (e.g.
greenhouse, ashby, workday)number
Number of jobs returned in this page (same as
data.length, max 25)number
Alias of
count for shape uniformity - NOT the grand total across all pagesboolean
Whether more pages are available
string
Opaque cursor for the next page. Pass back as
cursor. null when hasMore is false{
"data": [
{
"id": "clx1234...",
"title": "Senior Software Engineer",
"company": "Acme Corp",
"companyLogo": "https://...",
"companyWebsite": "https://...",
"location": "San Francisco, CA",
"city": "San Francisco",
"state": "CA",
"country": "US",
"isRemote": true,
"employmentType": "Full-time",
"applyLink": "https://acme.com/careers/123",
"applyIsDirect": false,
"publisher": "LinkedIn",
"description": "<p>We are looking for a Senior Software Engineer...</p>",
"highlights": { "qualifications": ["..."], "responsibilities": ["..."] },
"benefits": ["Health insurance", "401k"],
"salaryMin": 150000,
"salaryMax": 200000,
"salaryPeriod": "yearly",
"postedAt": "2026-03-10T00:00:00.000Z"
}
],
"total": 142,
"hasMore": true,
"page": 1,
"source": "database"
}
Plus users get results from external job providers (JSearch, Fantastic.jobs) in addition to the Mokaru database. The database is refreshed daily with the top 35 most popular job titles.
Was this page helpful?
