Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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.
openapi: 3.2.0
info:
title: hyreflow engine (local) Search API
version: 0.1.0
tags:
- name: Search
paths:
/search/{capability}:
post:
summary: Search
description: 'People-search waterfall. ONE canonical PeopleQuery → a deduped LIST of relevant people.
Body: {"query": {titles, skills, locations, company_names, company_domains, seniority, limit,
# capability-gated filters — presence skips providers that can''t honor them
# (search_specs._PROVIDER_FIELD_SUPPORT):
min_experience_years, max_experience_years, # whole career (max: aiark + prospeo)
company_tenure_min_months, company_tenure_max_months, # tenure AT company (max = newly hired)
role_tenure_min_months, role_tenure_max_months, # tenure in current title
profile_badges, departments, # contact.profileBadge / departmentAndFunction
company_founded_year_min/_max, company_employee_min/_max,
company_revenue_min/_max, company_funding_types}, # account firmographics
"coverage": "single" | "max", "limit": ,
"providers": [, ...] # optional allowlist — pin the chain to a subset, house order kept}
DEFAULT (single): walk the provider order, accumulate + dedup, and **STOP as soon as we have
`limit` people** — a ''hit''. The first source(s) that fill the quota win; the rest are skipped
(and never billed). A thin/empty provider falls through to the next to TOP UP.
MAX: don''t early-stop — run every source, accumulate the deduped union, but page each source only
as far as `limit` needs (a non-paginated source runs its one page; the union may exceed `limit`).
(A relevance/ICP gate to filter `people` before counting is intentionally NOT applied for now.)'
operationId: search_search__capability__post
security:
- HTTPBearer: []
parameters:
- name: capability
in: path
required: true
schema:
type: string
title: Capability
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: true
default: {}
title: Body
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Search
components:
schemas:
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
securitySchemes:
HTTPBearer:
type: http
scheme: bearer