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
}
'import requests
url = "https://api.sixtyfour.ai/search/query"
payload = {
"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
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
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
})
};
fetch('https://api.sixtyfour.ai/search/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sixtyfour.ai/search/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sixtyfour.ai/search/query"
payload := strings.NewReader("{\n \"simple_filters\": {},\n \"filters\": {},\n \"parsed_query\": {},\n \"search_id\": \"<string>\",\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"mode\": \"company\",\n \"page_size\": 10,\n \"max_results\": 1000,\n \"exclude_public_ids\": [\n \"<string>\"\n ],\n \"exclude_entity_ids\": [\n \"<string>\"\n ],\n \"exclude_list_ids\": [\n \"<string>\"\n ],\n \"location_expansion_enabled\": true,\n \"location_expansion_radius_miles\": 10\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sixtyfour.ai/search/query")
.header("Content-Type", "application/json")
.body("{\n \"simple_filters\": {},\n \"filters\": {},\n \"parsed_query\": {},\n \"search_id\": \"<string>\",\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"mode\": \"company\",\n \"page_size\": 10,\n \"max_results\": 1000,\n \"exclude_public_ids\": [\n \"<string>\"\n ],\n \"exclude_entity_ids\": [\n \"<string>\"\n ],\n \"exclude_list_ids\": [\n \"<string>\"\n ],\n \"location_expansion_enabled\": true,\n \"location_expansion_radius_miles\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sixtyfour.ai/search/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"simple_filters\": {},\n \"filters\": {},\n \"parsed_query\": {},\n \"search_id\": \"<string>\",\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"mode\": \"company\",\n \"page_size\": 10,\n \"max_results\": 1000,\n \"exclude_public_ids\": [\n \"<string>\"\n ],\n \"exclude_entity_ids\": [\n \"<string>\"\n ],\n \"exclude_list_ids\": [\n \"<string>\"\n ],\n \"location_expansion_enabled\": true,\n \"location_expansion_radius_miles\": 10\n}"
response = http.request(request)
puts response.read_body{
"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>"
}{
"detail": "Invalid request body"
}{
"detail": "Invalid API key"
}{
"detail": "Insufficient API credits"
}{
"detail": "Forwarded user_id does not belong to your organization."
}{
"detail": "Search not found or has no parsed_query."
}{
"detail": "Export workflow is already running for this search."
}{
"detail": [
{
"loc": [
"body",
"target_company",
"domain"
],
"msg": "Field required",
"type": "missing",
"input": null,
"ctx": {}
}
]
}{
"detail": "Rate limit exceeded"
}{
"detail": "Internal server error"
}{
"detail": "NL upstream transport error: connection reset by peer"
}{
"detail": "Company search backend endpoint is not configured"
}{
"detail": "Field values request timed out"
}Search Query
Run a search query. Provide exactly one query source: simple_filters, filters, parsed_query, or search_id. For pagination, pass cursor alone.
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
}
'import requests
url = "https://api.sixtyfour.ai/search/query"
payload = {
"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
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
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
})
};
fetch('https://api.sixtyfour.ai/search/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sixtyfour.ai/search/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sixtyfour.ai/search/query"
payload := strings.NewReader("{\n \"simple_filters\": {},\n \"filters\": {},\n \"parsed_query\": {},\n \"search_id\": \"<string>\",\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"mode\": \"company\",\n \"page_size\": 10,\n \"max_results\": 1000,\n \"exclude_public_ids\": [\n \"<string>\"\n ],\n \"exclude_entity_ids\": [\n \"<string>\"\n ],\n \"exclude_list_ids\": [\n \"<string>\"\n ],\n \"location_expansion_enabled\": true,\n \"location_expansion_radius_miles\": 10\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sixtyfour.ai/search/query")
.header("Content-Type", "application/json")
.body("{\n \"simple_filters\": {},\n \"filters\": {},\n \"parsed_query\": {},\n \"search_id\": \"<string>\",\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"mode\": \"company\",\n \"page_size\": 10,\n \"max_results\": 1000,\n \"exclude_public_ids\": [\n \"<string>\"\n ],\n \"exclude_entity_ids\": [\n \"<string>\"\n ],\n \"exclude_list_ids\": [\n \"<string>\"\n ],\n \"location_expansion_enabled\": true,\n \"location_expansion_radius_miles\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sixtyfour.ai/search/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"simple_filters\": {},\n \"filters\": {},\n \"parsed_query\": {},\n \"search_id\": \"<string>\",\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"mode\": \"company\",\n \"page_size\": 10,\n \"max_results\": 1000,\n \"exclude_public_ids\": [\n \"<string>\"\n ],\n \"exclude_entity_ids\": [\n \"<string>\"\n ],\n \"exclude_list_ids\": [\n \"<string>\"\n ],\n \"location_expansion_enabled\": true,\n \"location_expansion_radius_miles\": 10\n}"
response = http.request(request)
puts response.read_body{
"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>"
}{
"detail": "Invalid request body"
}{
"detail": "Invalid API key"
}{
"detail": "Insufficient API credits"
}{
"detail": "Forwarded user_id does not belong to your organization."
}{
"detail": "Search not found or has no parsed_query."
}{
"detail": "Export workflow is already running for this search."
}{
"detail": [
{
"loc": [
"body",
"target_company",
"domain"
],
"msg": "Field required",
"type": "missing",
"input": null,
"ctx": {}
}
]
}{
"detail": "Rate limit exceeded"
}{
"detail": "Internal server error"
}{
"detail": "NL upstream transport error: connection reset by peer"
}{
"detail": "Company search backend endpoint is not configured"
}{
"detail": "Field values request timed out"
}Headers
Body
Unified search query request — replaces both /start-filter-search and /browse.
MongoDB-style filters; the API translates them to DSL.
Raw OpenSearch DSL filters.
Structured filter set returned by a previous search.
Search history ID returned by a previous search. Replays only the query shape; pass exclusions again on this request if they should apply.
Natural-language query. Mutually exclusive with simple_filters / filters / parsed_query / search_id. People-mode only.
Opaque pagination cursor returned by a previous response.
Search mode; inferred from DB when using search_id.
people, company 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.
1 <= x <= 100Maximum number of results to return across pages.
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.
1000Inline 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.
1000Saved 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 (10 for organizations with extended exclusion limits).
10Expand the parsed location filter to nearby areas via PostGIS radius. People-mode query branch only.
Radius (miles) for PostGIS location expansion. Ignored when expansion is disabled.
5 <= x <= 200Response
Successful Response
Response for a completed filter search.
Rows returned so far (cumulative for company pagination).
Search history ID returned by a previous search. Replays only the query shape; pass exclusions again on this request if they should apply.
Legacy export handle. Empty for company direct-filter mode.
Signed URL to download results as CSV.
Signed URL to download results as JSON.
Cursor to fetch the next page; null when exhausted.
Seconds until next_cursor expires.
Server-side request duration in milliseconds.
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.
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.
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.
1-based page number (company pagination).
Final total page count; omitted while has_more is true.
Upper bound on pages based on max_results and page_size.
Rows still available under max_results after this page.
Seconds until the download URLs expire.
Total OpenSearch matches across pages (capped at 50000); people-mode only. Pre-exclusion: exclusion filtering does not reduce this count.
Legacy export count; always 0 for company direct-filter mode.
Rows returned for the current page.
Structured filter set echoed back; round-trippable into a follow-up request.
Original natural-language query echoed verbatim, if any.
Was this page helpful?