githunt-ai · Schema

SearchRequest

At least one of `location`, `locations`, or `regions` is required.

CompanyAITalentRecruitmentDeveloper

Properties

Name Type Description
location string
role string
skills array
languages array
minExperienceYears integer
isHireable boolean
strictSkills boolean
includeUnlocated boolean When true, also search candidates indexed with no stated location. Their location is unknown, so they are returned as screening leads and can never be counted as geographically verified; `meta.coverag
maxResults integer
offset integer Number of top-ranked candidates to skip, for paging. Use with maxResults to fetch the next page. Consecutive pages never overlap.
excludeLogins array GitHub logins to leave out of results, e.g. candidates already seen in a prior call. Use for dedup across searches. Case-insensitive; invalid entries are dropped rather than rejected.
excludeLocations array Countries or cities to exclude, matched the same way as the location parameter (aliases and native names included).
excludeUtcOffsets object Exclude candidates whose stated location resolves entirely within this UTC offset band, in hours. A location that only partially overlaps the band, or can't be resolved, is kept (not excluded) - a can
locations array Additional cities/countries to search in one call, freeform like `location`, merged with it (max 10 combined). Live GitHub crawl only covers the first location; further locations are served from the c
regions array Named region shortcuts that expand to their member countries, merged with `location`/`locations` (max 10 combined locations after expansion; extras are dropped). Case-insensitive. A request whose regi
organizations array GitHub org logins to check candidates' employer affinity against. Boosts matching candidates' rank unless `requireOrgAffinity` is true.
sectors array Industry sectors to check candidates' employer affinity against, via GitHunt's employer graph (public GitHub orgs mapped to companies and sectors).
requireOrgAffinity boolean When true, only return candidates matching one of the given `organizations`/`sectors` (hard filter) instead of just boosting their rank.
domains array Domain vocabulary packs to score candidates' repos/bio against for subject-matter evidence (e.g. core payments-processing terminology, not just the word "payments").
skillRecency array Filter on public skill activity. Entries are ANDed: a candidate must satisfy every entry to be returned. Only candidates whose signals positively support every entry are returned, and only they occupy
excludeList string Name of a seen list (see /v1/lists) whose logins are merged into `excludeLogins` for this search, so a rerun of the same brief never returns candidates the account already recorded. Only permanent `se
View JSON Schema on GitHub

JSON Schema

githunt-ai-search-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/githunt-ai/json-schema/githunt-ai-search-request-schema.json",
  "title": "SearchRequest",
  "description": "At least one of `location`, `locations`, or `regions` is required.",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/githunt-ai-openapi.yaml#/components/schemas/SearchRequest",
  "type": "object",
  "properties": {
    "location": {
      "type": "string"
    },
    "role": {
      "type": "string"
    },
    "skills": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10
    },
    "minExperienceYears": {
      "type": "integer",
      "minimum": 0,
      "maximum": 50
    },
    "isHireable": {
      "type": "boolean"
    },
    "strictSkills": {
      "type": "boolean",
      "default": false
    },
    "includeUnlocated": {
      "type": "boolean",
      "default": false,
      "description": "When true, also search candidates indexed with no stated location. Their location is unknown, so they are returned as screening leads and can never be counted as geographically verified; `meta.coverage.unlocated_included` marks a response that contains them."
    },
    "maxResults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 200,
      "default": 0,
      "description": "Number of top-ranked candidates to skip, for paging. Use with maxResults to fetch the next page. Consecutive pages never overlap."
    },
    "excludeLogins": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 500,
      "description": "GitHub logins to leave out of results, e.g. candidates already seen in a prior call. Use for dedup across searches. Case-insensitive; invalid entries are dropped rather than rejected."
    },
    "excludeLocations": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "description": "Countries or cities to exclude, matched the same way as the location parameter (aliases and native names included)."
    },
    "excludeUtcOffsets": {
      "type": "object",
      "description": "Exclude candidates whose stated location resolves entirely within this UTC offset band, in hours. A location that only partially overlaps the band, or can't be resolved, is kept (not excluded) - a candidate whose commit timezone falls inside the band but whose location is unresolvable comes back flagged with `location_resolution.screening_reason`, never dropped.",
      "properties": {
        "min": {
          "type": "number",
          "minimum": -12,
          "maximum": 14
        },
        "max": {
          "type": "number",
          "minimum": -12,
          "maximum": 14
        }
      },
      "required": [
        "min",
        "max"
      ]
    },
    "locations": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "Additional cities/countries to search in one call, freeform like `location`, merged with it (max 10 combined). Live GitHub crawl only covers the first location; further locations are served from the candidate pool only. At least one of `location`, `locations`, or `regions` is required."
    },
    "regions": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "north-america",
          "latin-america",
          "south-america",
          "europe",
          "western-europe",
          "eastern-europe",
          "nordics",
          "dach",
          "benelux",
          "iberia",
          "uk-ireland",
          "middle-east",
          "africa",
          "apac",
          "east-asia",
          "southeast-asia",
          "south-asia",
          "oceania",
          "americas",
          "emea",
          "worldwide"
        ]
      },
      "maxItems": 3,
      "description": "Named region shortcuts that expand to their member countries, merged with `location`/`locations` (max 10 combined locations after expansion; extras are dropped). Case-insensitive. A request whose region names are all unknown and that carries no `location` is rejected with `invalid_request`."
    },
    "organizations": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "description": "GitHub org logins to check candidates' employer affinity against. Boosts matching candidates' rank unless `requireOrgAffinity` is true."
    },
    "sectors": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "adtech",
          "ai-ml",
          "banking",
          "cloud",
          "cybersecurity",
          "ecommerce",
          "fintech",
          "gaming",
          "healthtech",
          "media",
          "mobility",
          "payments"
        ]
      },
      "maxItems": 5,
      "description": "Industry sectors to check candidates' employer affinity against, via GitHunt's employer graph (public GitHub orgs mapped to companies and sectors)."
    },
    "requireOrgAffinity": {
      "type": "boolean",
      "default": false,
      "description": "When true, only return candidates matching one of the given `organizations`/`sectors` (hard filter) instead of just boosting their rank."
    },
    "domains": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "payments",
          "healthcare",
          "adtech"
        ]
      },
      "maxItems": 3,
      "description": "Domain vocabulary packs to score candidates' repos/bio against for subject-matter evidence (e.g. core payments-processing terminology, not just the word \"payments\")."
    },
    "skillRecency": {
      "type": "array",
      "minItems": 1,
      "maxItems": 10,
      "items": {
        "$ref": "#/$defs/SkillRecencyEntry"
      },
      "description": "Filter on public skill activity. Entries are ANDed: a candidate must satisfy every entry to be returned. Only candidates whose signals positively support every entry are returned, and only they occupy a slot in the per-location selection the search scores, so a candidate with evidence is never crowded out by higher-activity candidates without it. Candidates whose signals cannot answer the question are `unknown` and are left out of the results (and queued for enrichment), which is not a negative finding - see `meta.skill_recency`. `unknown` covers a signal that is missing, failed, expired (signals are refreshed on a 30-day cycle, and one older than that no longer answers a strict filter) or partial (the years the answer depends on could not be fetched). Malformed entries are an uncharged `invalid_request`. When `skillRecency` is set, the search is served from the candidate pool alone: a live GitHub row carries no derived signals and could only ever be `unknown`."
    },
    "excludeList": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9_-]{0,63}$",
      "description": "Name of a seen list (see /v1/lists) whose logins are merged into `excludeLogins` for this search, so a rerun of the same brief never returns candidates the account already recorded. Only permanent `seen` entries and claims that have not expired are excluded: an interrupted run's candidates are rediscoverable as soon as the claim lapses. The server-side list is bounded at 5000 eligible logins rather than the 500-entry client cap; `meta.exclude_list.truncated` reports when that bound was hit. An unknown list is a `not_found` before any quota is charged, so create the list first with an empty `POST /v1/lists/{name}/logins`."
    }
  },
  "$defs": {
    "SkillRecencyEntry": {
      "type": "object",
      "description": "One skill-activity predicate. At least one of `minActiveYears` or `usedWithinYears` is required; both may be given.",
      "required": [
        "skill"
      ],
      "properties": {
        "skill": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64,
          "description": "Language or skill name. Common aliases resolve to the canonical GitHub Linguist name (ts, js, py, rb, kt, rs, sh, cpp, c#, golang)."
        },
        "minActiveYears": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9,
          "description": "Minimum number of distinct calendar years with public activity in this skill (a year counts at five or more commits). This is a public-activity measure, never elapsed or commercial tenure."
        },
        "usedWithinYears": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9,
          "description": "Require dated activity inside the rolling window of this many years ending at the request's UTC timestamp. Calendar-year subtraction in UTC, clamping Feb 29 to Feb 28 in a non-leap target year; the cutoff day itself counts as inside the window."
        }
      }
    }
  }
}

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.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/githunt-ai-search-request"
All schemas
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.