Skip to main content
POST
/
search
/
query
Search Query
curl --request POST \
  --url https://api.sixtyfour.ai/search/query \
  --header 'Content-Type: application/json' \
  --data '
{
  "simple_filters": {},
  "filters": {},
  "parsed_query": {},
  "search_id": "<string>",
  "query": "<string>",
  "cursor": "<string>",
  "mode": "company",
  "page_size": 10,
  "max_results": 1000,
  "exclude_public_ids": [
    "<string>"
  ],
  "exclude_entity_ids": [
    "<string>"
  ],
  "exclude_list_ids": [
    "<string>"
  ],
  "location_expansion_enabled": true,
  "location_expansion_radius_miles": 10
}
'
{
  "total_results": 123,
  "search_id": "<string>",
  "resource_handle_id": "",
  "csv_download_url": "<string>",
  "json_download_url": "<string>",
  "next_cursor": "<string>",
  "cursor_expires_in_seconds": 123,
  "request_duration_ms": 123,
  "has_more": false,
  "page_size": 123,
  "page_count": 123,
  "page_number": 123,
  "total_pages": 123,
  "max_pages": 123,
  "remaining_results": 123,
  "download_expires_in_seconds": 123,
  "total_available": 123,
  "exported_count": 0,
  "results": [
    {}
  ],
  "parsed_query": {},
  "natural_language_query": "<string>"
}

Headers

x-api-key
string | null

Body

application/json

Unified search query request — replaces both /start-filter-search and /browse.

simple_filters
Simple Filters · object

MongoDB-style filters; the API translates them to DSL.

filters
Filters · object

Raw OpenSearch DSL filters.

parsed_query
Parsed Query · object

Structured filter set returned by a previous search.

search_id
string | null

Search history ID returned by a previous search. Replays only the query shape; pass exclusions again on this request if they should apply.

query
string | null

Natural-language query. Mutually exclusive with simple_filters / filters / parsed_query / search_id. People-mode only.

cursor
string | null

Opaque pagination cursor returned by a previous response.

mode
enum<string>
default:company

Search mode; inferred from DB when using search_id.

Available options:
people,
company
page_size
integer
default:10

Maximum number of results per page (1-100). Pages may contain fewer rows while more results remain (e.g. with exclusion filtering); rely on has_more/next_cursor, never on page fullness.

Required range: 1 <= x <= 100
max_results
integer
default:1000

Maximum number of results to return across pages.

exclude_public_ids
string[] | null

People-mode inline identifiers to exclude from results, applied as a post-filter. Accepts LinkedIn public IDs or profile URLs. For company searches, use exclude_entity_ids. Max 1000.

Maximum array length: 1000
exclude_entity_ids
string[] | null

Inline identifiers to exclude from results, applied as a post-filter. People mode: LinkedIn public IDs or profile URLs. Company mode: numeric LinkedIn company IDs, company URLs/slugs, or exact website domains (values that resolve to no or multiple companies are ignored). Max 1000.

Maximum array length: 1000
exclude_list_ids
string[] | null

Saved exclusion-list IDs to apply as a post-filter. Each list's entity type must match the search mode (person lists for people searches, company lists for company searches). Max 5.

Maximum array length: 5
location_expansion_enabled
boolean
default:true

Expand the parsed location filter to nearby areas via PostGIS radius. People-mode query branch only.

location_expansion_radius_miles
integer
default:10

Radius (miles) for PostGIS location expansion. Ignored when expansion is disabled.

Required range: 5 <= x <= 200

Response

Successful Response

Response for a completed filter search.

total_results
integer
required

Rows returned so far (cumulative for company pagination).

search_id
string | null

Search history ID returned by a previous search. Replays only the query shape; pass exclusions again on this request if they should apply.

resource_handle_id
string
default:""

Legacy export handle. Empty for company direct-filter mode.

csv_download_url
string | null

Signed URL to download results as CSV.

json_download_url
string | null

Signed URL to download results as JSON.

next_cursor
string | null

Cursor to fetch the next page; null when exhausted.

cursor_expires_in_seconds
integer | null

Seconds until next_cursor expires.

request_duration_ms
integer | null

Server-side request duration in milliseconds.

has_more
boolean
default:false

True when another page is available via next_cursor. Always continue via the cursor; a short or empty page does NOT mean the results are exhausted.

page_size
integer | null

Maximum number of results per page (1-100). Pages may contain fewer rows while more results remain (e.g. with exclusion filtering); rely on has_more/next_cursor, never on page fullness.

page_count
integer | null

Number of results in this response page. May be less than page_size (down to 0) while has_more is true, e.g. when exclusion filtering is active.

page_number
integer | null

1-based page number (company pagination).

total_pages
integer | null

Final total page count; omitted while has_more is true.

max_pages
integer | null

Upper bound on pages based on max_results and page_size.

remaining_results
integer | null

Rows still available under max_results after this page.

download_expires_in_seconds
integer | null

Seconds until the download URLs expire.

total_available
integer | null

Total OpenSearch matches across pages (capped at 50000); people-mode only. Pre-exclusion: exclusion filtering does not reduce this count.

exported_count
integer
default:0

Legacy export count; always 0 for company direct-filter mode.

results
Results · object[]

Rows returned for the current page.

parsed_query
Parsed Query · object

Structured filter set echoed back; round-trippable into a follow-up request.

natural_language_query
string | null

Original natural-language query echoed verbatim, if any.