GET /api/v2/jobs/search - Job Postings API
Use this endpoint to get the job postings themselves (10 per request). If you only need the number of matching postings, use count instead. This endpoint returns the paginated search results for a search query using various query parameters. The response is returned per default in JSON format and primarily consists of a JSON-LD payload containing up to 10 JobPostings per page (see https://schema.org/JobPosting). With the format parameter other output formats can be requested. This structured data can be directly integrated into a webpage to enhance visibility and indexing by search engines (e.g., https://developers.google.com/search/docs/appearance/structured-data/job-posting).
Request
Base URL: https://daily-international-job-postings.p.rapidapi.com - authentication: see How to authenticate.
curl --request GET \
--url 'https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search?countryCode=us&title=developer' \
--header 'X-RapidAPI-Key: YOUR_API_KEY' \
--header 'X-RapidAPI-Host: daily-international-job-postings.p.rapidapi.com'import requests
url = "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search"
params = {"countryCode": "us", "title": "developer"}
headers = {
"X-RapidAPI-Key": "YOUR_API_KEY",
"X-RapidAPI-Host": "daily-international-job-postings.p.rapidapi.com",
}
response = requests.get(url, params=params, headers=headers, timeout=30)
response.raise_for_status()
print(response.json())// Node.js 18+ or browser
const url = new URL('https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search');
url.search = new URLSearchParams({ 'countryCode': 'us', 'title': 'developer' });
const response = await fetch(url, {
headers: {
'X-RapidAPI-Key': 'YOUR_API_KEY',
'X-RapidAPI-Host': 'daily-international-job-postings.p.rapidapi.com',
},
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
console.log(await response.json());// Java 11+
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class TechmapExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search?countryCode=us&title=developer"))
.header("X-RapidAPI-Key", "YOUR_API_KEY")
.header("X-RapidAPI-Host", "daily-international-job-postings.p.rapidapi.com")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) throw new RuntimeException(response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
format |
query | string | The format of the output in json, csv, rss, atom, xml, or parquet (e.g., format=rss) Values: json, csv, rss, atom, xml, parquet. |
dateCreated |
query | string | The day the job posting was created / posted on using the format YYYY-MM-DD or YYYY-MM. If empty, the current day minus 2 days is used. |
dateCreatedMin |
query | string | The starting date for a date range search of when the job posting was created or posted, using the format YYYY-MM-DD. Only used if dateCreated is empty; dateCreatedMin and dateCreatedMax must be used together. |
dateCreatedMax |
query | string | The ending date for a date range search of when the job posting was created or posted, using the format YYYY-MM-DD. Only used if dateCreated is empty; dateCreatedMin and dateCreatedMax must be used together. |
page |
query | integer | The page of the paginated search results starting at 1. Pages contain 10 jobs and the defaults to 1 if not stated. |
cursor |
query | string | The cursor in a cursor-based pagination search started with 'true'. Does not work together with page-based pagination. Defaults to null if not stated. |
sort |
query | string | The sort order of the results by the time the job posting was collected: 'oldest' (default) or 'newest'. 'oldest' keeps page-based pagination stable while new jobs are added; 'newest' returns the most recent jobs first. Works with page-based and cursor-based pagination (a cursor keeps the sort order it was created with). Values: oldest, newest. |
isDirect |
query | string | A flag indicating if the job posting URL or externalApplyUrl links directly to the company's website. |
isDuplicate |
query | string | A flag indicating whether the job posting is considered a duplicate of another, either within the same source or across multiple sources. Note: We currently err on the safe side, resulting in more false duplicates than there are. |
isActive |
query | string | A flag indicating if the job posting has a dateActive not yet reached. |
isRecruiter |
query | string | A flag indicating if the job posting was posted by a recruiting firm. |
title |
query | string | Free-text search within the title of the job postings. |
skills |
query | string | The skills, keywords, or tags associated with the job posting. |
language |
query | string | The language the job posting is written in described by a 2-letter language code from ISO 639-1 such as 'en', 'de' or 'zh'. |
contractType |
query | string | The type of employment contract extracted from the job posting such as permanent, temporary, internship, etc. |
workType |
query | string | The type of work duration extracted from the job posting such as fulltime, parttime, flextime, etc. |
workPlace |
query | string | The workplace of the job, extracted from the job posting such as remote, hybrid, onsite, field, offshore, etc. |
hasSalary |
query | string | A flag indicating if the job posting contains salary information. |
minSalary |
query | number | The minimum salary of the job posting. Can be yearly, monthly, or hourly and any currency (exact data is stated in JsonLD result). |
industry |
query | string | The industry extracted from the job posting or categorization in the job board, such as advertising, agriculture, it, healthcare, etc. |
company |
query | string | The company that posted the job posting (can be a recruiting firm). |
department |
query | string | The department extracted from the job title such as, finance, it, hr, sales, etc. |
occupation |
query | string | The occupation type extracted from the job title reduced to a stem form incl. several synonyms. For example: programmer, executive, manager, engineer, nurse, etc. |
countryCode |
query | string | The country the job is located in described by a 2-letter country code from ISO 3166-1 alpha-2. Internally, we lower-case the countryCode and convert 'gb' into 'uk' and 'el' into 'gr' - you can use both spellings. |
state |
query | string | The state the workplace is located in, extracted from the job posting or geo-location. |
city |
query | string | The city the workplace is located in, extracted from the job posting or geo-location. |
postCode |
query | string | The postal / zip code the workplace is located in, extracted from the job posting or geo-location. |
timezone |
query | string | The timezone the job is located in such as CET, PST, or UTC |
timezoneOffset |
query | integer | The numeric offset of the timezone from UTC. |
timezoneMin |
query | integer | The minimum numeric offset of the timezone from UTC. Requires a 'timezoneMax' value greater than 'timezoneMin' to search in a timezone range. |
timezoneMax |
query | integer | The maximum numeric offset of the timezone from UTC. Must be larger than 'timezoneMin' to search in a timezone range. |
geoPointLat |
query | number | The geographic latitude of a GeoPoint used in a distance search. |
geoPointLng |
query | number | The geographic longitude of a GeoPoint used in a distance search. |
geoDistance |
query | string | The distance from a GeoPoint specified with 'geoPointLat' and 'geoPointLng'. |
geoTopLeftLat |
query | number | The geographic latitude of the top left GeoPoint in a bounding box search. |
geoTopLeftLng |
query | number | The geographic longitude of the top left GeoPoint in a bounding box search. |
geoBottomRightLat |
query | number | The geographic latitude of the bottom right GeoPoint in a bounding box search. |
geoBottomRightLng |
query | number | The geographic longitude of the bottom right GeoPoint in a bounding box search. |
portal |
query | string | The portal the job postings originated from. |
source |
query | string | The specific source with countrycode the job postings originated from such as careerjet, monster, linkedin, techmap, etc. |
Responses
| Status | Description |
|---|---|
| 200 | Success - indicating a correct query execution with results |
| 400 | Bad Request - A parameter value could not be parsed, e.g. an unknown countryCode, an invalid date or sort value. Solution: Check the value against the parameter description. The message names the invalid parameter. |
| 401 | Unauthorized - The key is missing or invalid, or the request was sent directly to the backend instead of RapidAPI. Solution: Send your key in the header X-RapidAPI-Key and use the base URL https://daily-international-job-postings.p.rapidapi.com. Copy the key again from the RapidAPI listing if it was rotated. |
| 403 | Forbidden - Either you are not subscribed to this API ("You are not subscribed to this API."), or the endpoint is not included in your plan (e.g. /api/v2/meta/jobs/distinct and /api/v2/meta/jobs/statistics need at least the Pro plan). Solution: Subscribe to the Basic plan, or upgrade to the plan named in requiredPlan. The response contains message, requiredPlan and pricingUrl. |
| 404 | Not Found - The endpoint path does not exist (typo, wrong API version) or a required search parameter is missing, or the requested field does not exist. Solution: Check the path and add at least one search parameter (e.g. countryCode). The message lists the allowed parameters or fields. |
| 405 | Method Not Allowed - Another HTTP method than GET was used. Solution: Use GET. |
| 429 | Too Many Requests - Too many requests in a short time window (rate limit of your RapidAPI plan, e.g. 1 request/second on Basic). This is not a monthly limit - the plans have no hard limit, extra requests are billed as overage. RapidAPI also answers 429 after repeated calls with an invalid key. Solution: Slow down and retry with exponential backoff (e.g. 1 s, 2 s, 4 s). If it persists, check that your key is valid. |
| 500 | Internal Server Error - An unexpected error on our side. Solution: Retry once. If it persists, contact data@techmap.io with the full request URL (without your key). |
| 503 | Service Unavailable - The search backend is temporarily unavailable. Solution: Retry later with exponential backoff. |
| 509 | Bandwidth Limit Exceeded - The response would be larger than 6 MB. Solution: Request a more compact format or narrow the query. |
Example response
{
"api": "Techmap.io Job Posting API",
"apiVersion": "v2.7.1",
"apiEndpoint": "GET search result for Job Postings by countryCode, dateCreated, language, industry, timezone, workPlace, etc.",
"page": 1,
"pageSize": 10,
"totalCount": 567,
"query": {
"query": {
"bool": {
"must": [
{
"range": {
"dateCreated": {
"gte": "2026-09-30T00:00:00.000Z",
"lte": "2026-09-30T23:59:59.999Z"
}
}
},
{
"match": {
"countryCode": "lu"
}
}
]
}
}
},
"result": [
{
"occupation": "QA Inspector",
"dateActive": "2026-10-30T01:17:41.210125Z",
"city": "Emmen",
"timezone": "CEST",
"contractType": [
"N/A"
],
"language": "en",
"industry": "Automotive",
"jsonLD": {
"identifier": "6abc6337fc2604050dc86da6",
"validThrough": "2026-10-30",
"employmentType": "FlexTime",
"@type": "JobPosting",
"salaryCurrency": "EUR",
"description": "Quality Control Inspector (all genders)\n\n**We are mission critical**\n\nBeyond Gravity, headquartered in Zurich, Switzerland, is the first startup to combine agility, speed and innovation with decades o...",
"industry": "Automotive",
"title": "Quality Control Inspector (all genders) Job Details | Beyond Gravity",
"@context": "https://schema.org",
"url": "https://ruagcorport3.valhalla12.stage.jobs2web.com/BeyondGravity/job/Emmen-Quality-Control-Inspector-%28all-genders%29-LU/167381751/",
"relevantOccupation": "QA Inspector",
"skills": [
"Microsoft Office",
"Apache Spark"
],
"hiringOrganization": {
"identifier": "8920944eb34b39c4d7f1ad53",
"@type": "Organization",
"name": "Beyond Gravity",
"@context": "https://schema.org",
"url": "https://beyondgravity.com"
},
"employmentUnit": "N/A",
"jobLocation": {
"identifier": "a0a0c838ec8d7cbbe8e32cfb",
"address": {
"addressCountry": "Switzerland",
"@type": "PostalAddress",
"postalCode": "6032",
"addressLocality": "Emmen",
"addressRegion": "LU",
"@context": "https://schema.org"
},
"@type": "Place",
"latitude": 47.079,
"name": "Emmen, LU, CH",
"@context": "https://schema.org",
"longitude": 8.302
},
"datePosted": "2026-09-30",
"applicantLocationRequirements": "CEST Timezone",
"sameAs": "https://ruagcorport3.valhalla12.stage.jobs2web.com/BeyondGravity/job/Emmen-Quality-Control-Inspector-%28all-genders%29-LU/167381751/"
},
"source": "successfactors_lu",
"locale": "en_CH",
"geoPoint": {
"lon": 8.302,
"lat": 47.079
},
"title": "Quality Control Inspector (all genders) Job Details | Beyond Gravity",
"skills": [
"Microsoft Office",
"Apache Spark"
],
"dateCreated": "2026-09-30T01:17:41.210125Z",
"timezoneOffset": 2,
"countryCode": "lu",
"company": "Beyond Gravity",
"state": "LU",
"isDuplicate": false,
"portal": "successfactors",
"department": "N/A",
"workPlace": [
"N/A"
],
"isRecruiter": false,
"hasSalary": false,
"careerLevel": [
"N/A"
],
"workType": [
"FlexTime"
],
"postCode": "6032",
"isDirect": true
}
],
"resultSizeInBytes": 69743
}
Interactive reference with all schemas: Job Postings API reference.