JobSearchRequest
Optional filters for the job search. All fields are optional and combine with AND. Array filters ending in _or match any of their values; those ending in _not exclude their values. Unknown fields are rejected with HTTP 400.
Properties
| Name | Type | Description |
|---|---|---|
| job_title_or | array | Match jobs whose title contains any of these. |
| job_title_not | array | Exclude jobs whose title contains any of these. |
| description_or | array | Match jobs whose description contains every word of any one of these phrases. Each phrase is split into words and matched case-insensitively; the words may appear in any order and need not be adjacent |
| description_not | array | Exclude jobs whose description contains every word of any one of these phrases, matched the same way as description_or: case-insensitive, in any order, not necessarily adjacent. |
| job_country_code_or | array | Match any of these ISO alpha-2 country codes, e.g. US, GB. |
| job_country_code_not | array | Exclude these ISO alpha-2 country codes. |
| job_location_or | array | Match jobs whose city or region contains any of these, e.g. Seattle, WA. Metro wrappers are stripped (Greater London also matches London) and a US state, Canadian province or UK nation by name matches |
| city_or | array | Whole city names, e.g. London, Munich. Case-insensitive, and a metro wrapper on the stored value is ignored (Greater London and London Area are London). Spellings and diacritics are normalised for cit |
| job_seniority_or | array | Match any of these seniority levels. |
| include_unlabeled_employment_type | boolean | Also return jobs whose employment type is unknown. About 27% of postings do not state one, and employment_type_or excludes every one of them by default. |
| include_unlabeled_seniority | boolean | Also return jobs whose seniority is unknown. About 55% of postings do not state a level, and job_seniority_or excludes every one of them by default. |
| skills_or | array | Match jobs tagged with any of these skill slugs, e.g. python, kubernetes. Skills are extracted from title + description against a curated lexicon. |
| occupation_code_or | array | ISCO-08 occupation codes. 4-digit codes match exactly (2512 = Software Developers); 1-3 digit codes match as hierarchy prefixes (25 = all ICT professionals). |
| isic_division_or | array | ISIC Rev.4 industry divisions of the employer (2-digit, e.g. 62 = Computer programming and consultancy). |
| region_or | array | US states and Canadian provinces as ISO 3166-2 codes, e.g. ["US-NY", "CA-ON"]. Qualified by country because the underlying column stores "CA" for California while "CA" is also Canada's country code. M |
| employment_type_or | array | Match any of these employment types. |
| language_or | array | Match postings WRITTEN in any of these languages, as lowercase ISO 639-1 codes, e.g. ["en"] or ["en", "sv"]. The language of the posting text, not of the country it sits in: 18.3% of Swedish postings |
| language_not | array | Exclude postings written in any of these languages, as lowercase ISO 639-1 codes, e.g. ["fr"]. Postings we have not labelled are kept, so this narrows by known language rather than requiring one. |
| source_or | array | Return only jobs from any of these collector sources (OR). Job boards: linkedin, indeed, cvlibrary, resumelibrary, ycombinator, arbeitnow, himalayas, jobicy, themuse, remoteok, workingnomads, landingj |
| source_not | array | Exclude jobs from these collector sources. Same accepted values and aliases as source_or, plus any source added later; an unrecognized source excludes nothing. |
| company_name_partial_match_or | array | Match any of these company names (partial / contains). |
| company_technology_slug_or | array | Beta. Only jobs at companies whose own postings show they use any of these technologies (evidence tier likely or confirmed), e.g. ["snowflake", "dbt"]. At most 10 slugs. Answers 400 "filter not enable |
| min_employee_count | integer | Only jobs at companies with at least this many employees. Uses the exact headcount where known, otherwise the lower bound of the company's size band. Jobs whose company size is unknown are excluded. |
| max_employee_count | integer | Only jobs at companies with at most this many employees. Uses the exact headcount where known; a company known only by a size band matches when the band starts at or below this number ("11-50" matches |
| min_revenue_usd | number | Only jobs at companies whose estimated annual revenue, in US dollars, is at least this amount (the published revenue_usd). Companies with no revenue on record are excluded unless include_unknown conta |
| max_revenue_usd | number | Only jobs at companies whose estimated annual revenue, in US dollars, is at most this amount (the published revenue_usd). Companies with no revenue on record are excluded unless include_unknown contai |
| remote | boolean | true for remote-only, false to exclude remote. |
| work_arrangement_or | array | Match any of these work arrangements. Finer than remote, which answers false for hybrid and onsite alike. Jobs whose arrangement is unknown never match. |
| visa_sponsorship_or | array | Match any of these visa stances, parsed from the posting text: "offers" (sponsorship available), "no" (explicitly not available), "citizenship_required" (citizenship or security clearance required). J |
| benefits_or | array | Match jobs advertising any of these benefit slugs, e.g. ["401k", "health_insurance", "paid_time_off"] (any spelling: "health insurance" works too). Benefits come from structured board data (Indeed tod |
| metro_code_or | array | Match any of these US CBSA metro codes (e.g. "35620" New York). Resolved from the job's city/region; non-US jobs never match. |
| max_applicant_count | integer | Only jobs with at most this many applicants. Applicant counts exist only where the source exposes them (LinkedIn), so this filter also drops every job without a count. |
| has_recruiter_email | boolean | true for only jobs with a recruiter contact email parsed from the posting, false for only jobs without one. |
| min_salary_usd | integer | Only jobs whose posted salary reaches this annual USD amount (the max of the posted range, annualized). Jobs without a posted salary never match; estimated salaries are not consulted. |
| max_ghost_score | integer | Exclude jobs whose ghost-likelihood score (0-100) exceeds this. Unscored jobs always pass: the filter drops known-likely ghost jobs, it does not require a score. |
| include_unknown | array | Also match jobs whose value is UNKNOWN for these fields, e.g. ["seniority", "location"]. Without it every filter drops unknowns. "location" widens region_or within each subdivision's country, and job_ |
| last_verified_max_age_days | integer | Only jobs seen on their source (or re-written) within this many days. Drops active jobs we have not confirmed recently. |
| esco_skill_id_or | array | Match jobs tagged with any of these ESCO skill concept IDs (exact match). See each job's esco_skills for the id/label pairs. |
| posted_at_max_age_days | integer | Only postings newer than this many days. |
| posted_at_gte | string | Only postings on or after this date (YYYY-MM-DD). |
| posted_at_lte | string | Only postings on or before this date (YYYY-MM-DD). |
| discovered_at_gte | string | Only postings first discovered by JobsPipe at or after this UTC datetime (YYYY-MM-DD HH:MM:SS). Tracks when we first saw the posting, not when it was posted; poll with your last run time to get only n |
| limit | integer | Maximum number of results to return. Defaults to 25 and is capped by your plan's page size: 25 on Free, 100 below 300,000 credits a month, 500 from 300,000. One credit buys one job for the rest of the |
| offset | integer | Number of results to skip. Ignored when cursor is set. A positive offset takes precedence over page. |
| page | integer | Zero-based page index: skips page × limit results. Ignored when cursor is set or offset is positive. |
| cursor | stringnull | Opaque pagination cursor. Pass metadata.next_cursor from the previous response to fetch the next page. Takes precedence over offset and page. null is treated as not set, and a cursor that cannot be de |
| order_by | array | Sort order. Results are always newest-first by posted date, and that is the only order accepted: [{"field":"posted_at","desc":true}]. date_posted is accepted as a synonym for posted_at, the field name |
| status | string | Lifecycle filter: active (still open), closed, or any. Defaults to active, and the default also applies to job_id_or and job_ids, so looking up a closed job by ID requires status "closed" or "any". |
| company_name_or | array | Match any of these company names. Each name and the stored company name are normalized the same way: lowercased, punctuation replaced by spaces, whitespace collapsed, and one trailing legal suffix (su |
| job_id_or | array | Return jobs whose ID is any of these. Each value is matched against both the JobsPipe id and the source's native id. Behaves the same as job_ids; values from both are combined. The status filter still |
| job_ids | array | Look up these job IDs. Behaves the same as job_id_or: matched against the id or native id, combined with job_id_or, and subject to the status filter, which defaults to active. |
| include_unknown_size | boolean | Also return jobs at companies whose employee count is unknown when min_employee_count or max_employee_count is set; those filters otherwise exclude every unknown-size company. Alias of include_unknown |
| employer_type_or | array | Match only these employer types. "employer" hires for itself, "agency" is a staffing or recruitment firm posting for a client, "broker" is a job board republishing another company's listing. Including |
| employer_type_not | array | Exclude these employer types. Only classified jobs are excluded: a job whose company has not been classified yet is served as "employer" but is never removed by this filter, so ["employer"] does not d |
| include_total_results | boolean | Include the total match count in metadata.total_results. |
| include_technologies | boolean | Add technologies, the graded list of technologies each posting names, to every job. Off by default, and the field is then absent. Each returned job that names at least one technology costs 1 extra cre |
| blur_company_data | boolean | DEPRECATED and ignored. Preview mode has been removed: every search returns unmasked records and costs 1 credit per job not already paid for this month. Still accepted so existing integrations do not |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/jobspipe/main/json-schema/jobspipe-job-search-request-schema.json",
"title": "JobSearchRequest",
"description": "Optional filters for the job search. All fields are optional and combine with AND. Array filters ending in _or match any of their values; those ending in _not exclude their values. Unknown fields are rejected with HTTP 400.",
"x-generated": "2026-10-02",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/jobspipe-openapi.json#/components/schemas/JobSearchRequest",
"type": "object",
"properties": {
"job_title_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match jobs whose title contains any of these."
},
"job_title_not": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude jobs whose title contains any of these."
},
"description_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match jobs whose description contains every word of any one of these phrases. Each phrase is split into words and matched case-insensitively; the words may appear in any order and need not be adjacent, so this is neither a substring nor an exact-phrase match."
},
"description_not": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude jobs whose description contains every word of any one of these phrases, matched the same way as description_or: case-insensitive, in any order, not necessarily adjacent."
},
"job_country_code_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match any of these ISO alpha-2 country codes, e.g. US, GB."
},
"job_country_code_not": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude these ISO alpha-2 country codes."
},
"job_location_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match jobs whose city or region contains any of these, e.g. Seattle, WA. Metro wrappers are stripped (Greater London also matches London) and a US state, Canadian province or UK nation by name matches every spelling of it (Pennsylvania also matches PA). Terms of three characters or fewer are codes or exact names and match whole values (WA is Washington state, never Iowa); a country code or name matches the whole country. Combine with job_country_code_or to disambiguate same-named cities. For a city by name, city_or is the precise filter."
},
"city_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Whole city names, e.g. London, Munich. Case-insensitive, and a metro wrapper on the stored value is ignored (Greater London and London Area are London). Spellings and diacritics are normalised for cities we know: München finds Munich, Cracow finds Kraków. Other cities match the stored value exactly. Combine with job_country_code_or to disambiguate same-named cities; use job_location_or for substring matching."
},
"job_seniority_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match any of these seniority levels."
},
"include_unlabeled_employment_type": {
"type": "boolean",
"description": "Also return jobs whose employment type is unknown. About 27% of postings do not state one, and employment_type_or excludes every one of them by default."
},
"include_unlabeled_seniority": {
"type": "boolean",
"description": "Also return jobs whose seniority is unknown. About 55% of postings do not state a level, and job_seniority_or excludes every one of them by default."
},
"skills_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match jobs tagged with any of these skill slugs, e.g. python, kubernetes. Skills are extracted from title + description against a curated lexicon."
},
"occupation_code_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "ISCO-08 occupation codes. 4-digit codes match exactly (2512 = Software Developers); 1-3 digit codes match as hierarchy prefixes (25 = all ICT professionals)."
},
"isic_division_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "ISIC Rev.4 industry divisions of the employer (2-digit, e.g. 62 = Computer programming and consultancy)."
},
"region_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "US states and Canadian provinces as ISO 3166-2 codes, e.g. [\"US-NY\", \"CA-ON\"]. Qualified by country because the underlying column stores \"CA\" for California while \"CA\" is also Canada's country code. Matches every spelling a job board publishes, so \"CA-ON\" finds both \"ON\" and \"Ontario\"."
},
"employment_type_or": {
"type": "array",
"items": {
"type": "string",
"enum": [
"full-time",
"part-time",
"contract",
"temporary",
"internship"
]
},
"description": "Match any of these employment types."
},
"language_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match postings WRITTEN in any of these languages, as lowercase ISO 639-1 codes, e.g. [\"en\"] or [\"en\", \"sv\"]. The language of the posting text, not of the country it sits in: 18.3% of Swedish postings and 17.7% of German ones are in English, and Canada is 84.5% English with the rest French. Use it to fetch only the roles a team can actually read when hiring across a multilingual market. Values that are not exactly two letters are ignored. Postings we have not labelled never match; add include_unknown: [\"language\"] to keep them."
},
"language_not": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude postings written in any of these languages, as lowercase ISO 639-1 codes, e.g. [\"fr\"]. Postings we have not labelled are kept, so this narrows by known language rather than requiring one."
},
"source_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only jobs from any of these collector sources (OR). Job boards: linkedin, indeed, cvlibrary, resumelibrary, ycombinator, arbeitnow, himalayas, jobicy, themuse, remoteok, workingnomads, landingjobs, remotive, rise, bayt. Public employment services: eures, jobtech. ATS (company career sites): greenhouse, workday, ashby, lever, workable, recruitee, personio, smartrecruiters, breezy, paylocity, manatal, jobscore, teamtailor, pinpoint, hirehive. Case, spaces and punctuation are ignored (\"CV-Library\" = cvlibrary); aliases: yc for ycombinator, breezyhr for breezy. To exclude sources instead, use source_not. An unrecognized source is not an error; it simply matches nothing, so the request returns zero jobs."
},
"source_not": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude jobs from these collector sources. Same accepted values and aliases as source_or, plus any source added later; an unrecognized source excludes nothing."
},
"company_name_partial_match_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match any of these company names (partial / contains)."
},
"company_technology_slug_or": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"description": "Beta. Only jobs at companies whose own postings show they use any of these technologies (evidence tier likely or confirmed), e.g. [\"snowflake\", \"dbt\"]. At most 10 slugs. Answers 400 \"filter not enabled\" until the filter is switched on."
},
"min_employee_count": {
"type": "integer",
"description": "Only jobs at companies with at least this many employees. Uses the exact headcount where known, otherwise the lower bound of the company's size band. Jobs whose company size is unknown are excluded."
},
"max_employee_count": {
"type": "integer",
"description": "Only jobs at companies with at most this many employees. Uses the exact headcount where known; a company known only by a size band matches when the band starts at or below this number (\"11-50\" matches 100, \"10,000+\" does not)."
},
"min_revenue_usd": {
"type": "number",
"minimum": 0,
"description": "Only jobs at companies whose estimated annual revenue, in US dollars, is at least this amount (the published revenue_usd). Companies with no revenue on record are excluded unless include_unknown contains \"company_revenue\"."
},
"max_revenue_usd": {
"type": "number",
"minimum": 0,
"description": "Only jobs at companies whose estimated annual revenue, in US dollars, is at most this amount (the published revenue_usd). Companies with no revenue on record are excluded unless include_unknown contains \"company_revenue\"."
},
"remote": {
"type": "boolean",
"description": "true for remote-only, false to exclude remote."
},
"work_arrangement_or": {
"type": "array",
"items": {
"type": "string",
"enum": [
"remote",
"hybrid",
"onsite"
]
},
"description": "Match any of these work arrangements. Finer than remote, which answers false for hybrid and onsite alike. Jobs whose arrangement is unknown never match."
},
"visa_sponsorship_or": {
"type": "array",
"items": {
"type": "string",
"enum": [
"offers",
"no",
"citizenship_required"
]
},
"description": "Match any of these visa stances, parsed from the posting text: \"offers\" (sponsorship available), \"no\" (explicitly not available), \"citizenship_required\" (citizenship or security clearance required). Jobs that say nothing never match."
},
"benefits_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match jobs advertising any of these benefit slugs, e.g. [\"401k\", \"health_insurance\", \"paid_time_off\"] (any spelling: \"health insurance\" works too). Benefits come from structured board data (Indeed today), so coverage is partial; see metadata.field_coverage."
},
"metro_code_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match any of these US CBSA metro codes (e.g. \"35620\" New York). Resolved from the job's city/region; non-US jobs never match."
},
"max_applicant_count": {
"type": "integer",
"minimum": 0,
"description": "Only jobs with at most this many applicants. Applicant counts exist only where the source exposes them (LinkedIn), so this filter also drops every job without a count."
},
"has_recruiter_email": {
"type": "boolean",
"description": "true for only jobs with a recruiter contact email parsed from the posting, false for only jobs without one."
},
"min_salary_usd": {
"type": "integer",
"minimum": 0,
"description": "Only jobs whose posted salary reaches this annual USD amount (the max of the posted range, annualized). Jobs without a posted salary never match; estimated salaries are not consulted."
},
"max_ghost_score": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Exclude jobs whose ghost-likelihood score (0-100) exceeds this. Unscored jobs always pass: the filter drops known-likely ghost jobs, it does not require a score."
},
"include_unknown": {
"type": "array",
"items": {
"type": "string",
"enum": [
"employment_type",
"seniority",
"work_arrangement",
"location",
"occupation",
"industry",
"visa_sponsorship",
"benefits",
"company_size",
"company_revenue",
"salary",
"language"
]
},
"description": "Also match jobs whose value is UNKNOWN for these fields, e.g. [\"seniority\", \"location\"]. Without it every filter drops unknowns. \"location\" widens region_or within each subdivision's country, and job_location_or only when job_country_code_or is set. include_unknown_size, include_unlabeled_seniority and include_unlabeled_employment_type are aliases."
},
"last_verified_max_age_days": {
"type": "integer",
"minimum": 1,
"description": "Only jobs seen on their source (or re-written) within this many days. Drops active jobs we have not confirmed recently."
},
"esco_skill_id_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match jobs tagged with any of these ESCO skill concept IDs (exact match). See each job's esco_skills for the id/label pairs."
},
"posted_at_max_age_days": {
"type": "integer",
"description": "Only postings newer than this many days."
},
"posted_at_gte": {
"type": "string",
"description": "Only postings on or after this date (YYYY-MM-DD)."
},
"posted_at_lte": {
"type": "string",
"description": "Only postings on or before this date (YYYY-MM-DD)."
},
"discovered_at_gte": {
"type": "string",
"description": "Only postings first discovered by JobsPipe at or after this UTC datetime (YYYY-MM-DD HH:MM:SS). Tracks when we first saw the posting, not when it was posted; poll with your last run time to get only new jobs."
},
"limit": {
"type": "integer",
"minimum": 1,
"default": 25,
"description": "Maximum number of results to return. Defaults to 25 and is capped by your plan's page size: 25 on Free, 100 below 300,000 credits a month, 500 from 300,000. One credit buys one job for the rest of the calendar month, so this value is the most the call can cost: a response carrying 25 postings the account has not had this month costs 25 credits, and postings it already paid for are free. A search that matches nothing costs nothing. metadata.credits_charged reports the actual cost."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of results to skip. Ignored when cursor is set. A positive offset takes precedence over page."
},
"page": {
"type": "integer",
"minimum": 0,
"description": "Zero-based page index: skips page × limit results. Ignored when cursor is set or offset is positive."
},
"cursor": {
"type": [
"string",
"null"
],
"description": "Opaque pagination cursor. Pass metadata.next_cursor from the previous response to fetch the next page. Takes precedence over offset and page. null is treated as not set, and a cursor that cannot be decoded is ignored, so the first page is served."
},
"order_by": {
"type": "array",
"maxItems": 1,
"items": {
"type": "object",
"required": [
"field"
],
"properties": {
"field": {
"type": "string"
},
"desc": {
"type": "boolean"
}
}
},
"description": "Sort order. Results are always newest-first by posted date, and that is the only order accepted: [{\"field\":\"posted_at\",\"desc\":true}]. date_posted is accepted as a synonym for posted_at, the field name is case-insensitive, and desc may be omitted. Any other field, \"desc\": false, or more than one sort key returns 400 rather than being silently ignored."
},
"status": {
"type": "string",
"enum": [
"active",
"closed",
"any"
],
"default": "active",
"description": "Lifecycle filter: active (still open), closed, or any. Defaults to active, and the default also applies to job_id_or and job_ids, so looking up a closed job by ID requires status \"closed\" or \"any\"."
},
"company_name_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match any of these company names. Each name and the stored company name are normalized the same way: lowercased, punctuation replaced by spaces, whitespace collapsed, and one trailing legal suffix (such as Inc, LLC, Ltd, Corp, GmbH, PLC, Group or Holdings) dropped. A job matches when its normalized company name equals a normalized name or starts with it followed by a space, so Amazon matches Amazon Web Services but not Amazonia."
},
"job_id_or": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return jobs whose ID is any of these. Each value is matched against both the JobsPipe id and the source's native id. Behaves the same as job_ids; values from both are combined. The status filter still applies and defaults to active."
},
"job_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Look up these job IDs. Behaves the same as job_id_or: matched against the id or native id, combined with job_id_or, and subject to the status filter, which defaults to active."
},
"include_unknown_size": {
"type": "boolean",
"description": "Also return jobs at companies whose employee count is unknown when min_employee_count or max_employee_count is set; those filters otherwise exclude every unknown-size company. Alias of include_unknown: [\"company_size\"]."
},
"employer_type_or": {
"type": "array",
"items": {
"type": "string",
"enum": [
"employer",
"agency",
"broker"
]
},
"description": "Match only these employer types. \"employer\" hires for itself, \"agency\" is a staffing or recruitment firm posting for a client, \"broker\" is a job board republishing another company's listing. Including \"employer\" also returns jobs whose company has not been classified yet, which are served with employer_type \"employer\"."
},
"employer_type_not": {
"type": "array",
"items": {
"type": "string",
"enum": [
"employer",
"agency",
"broker"
]
},
"description": "Exclude these employer types. Only classified jobs are excluded: a job whose company has not been classified yet is served as \"employer\" but is never removed by this filter, so [\"employer\"] does not drop it and [\"agency\",\"broker\"] keeps it."
},
"include_total_results": {
"type": "boolean",
"description": "Include the total match count in metadata.total_results."
},
"include_technologies": {
"type": "boolean",
"description": "Add technologies, the graded list of technologies each posting names, to every job. Off by default, and the field is then absent. Each returned job that names at least one technology costs 1 extra credit on top of the job's own credit, once per job per calendar month (UTC); jobs with none cost nothing extra. metadata.technologies_credits_charged reports that part of the cost."
},
"blur_company_data": {
"type": "boolean",
"description": "DEPRECATED and ignored. Preview mode has been removed: every search returns unmasked records and costs 1 credit per job not already paid for this month. Still accepted so existing integrations do not break, but it changes neither the response nor the price."
}
},
"additionalProperties": false
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/jobspipe-job-search-request"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.