Search people or companies with simple_filters or filters. Discover valid fields first, inspect top values for one field, then run the paginated search.
API Reference
See the full request/response schema and parameters in the API Reference.
The primary query input format for search and field-values requests. Supports Mongo-style operators such as $eq, $in, $gte, $match, and $and.
filters
The DSL backup query format. The API rejects queries that exceed the field and query limits defined by GET /search/filter-capabilities.
exclude_entity_ids
Excludes specific people or companies from /search/query results by ID. In people mode it accepts LinkedIn public IDs or profile URLs; in company mode, LinkedIn company IDs, URLs, slugs, or website domains. See Search Exclusions.
exclude_list_ids
Excludes members of a reusable saved exclusion list. The list’s entity type must match the search mode. See Search Exclusions.
fields
Unified field metadata returned by GET /search/filter-capabilities. Use it to discover queryable, sortable, rangeable, and top-value-capable fields.
filter_snippet
A ready-to-use exact-match clause in filters format returned alongside each top value. Use it when you need filters.
cursor
A pagination token returned as next_cursor. Pass it as the only field in follow-up requests to fetch the next page.
simple_filters is the primary query format for this API. It supports common exact-match, range, logical, and text-search operations with concise JSON syntax.
$elemMatch queries fields inside nested arrays. Two mistakes account for nearly all failed queries:
Relative path — companyData.memberId instead of the full dotted path currentCompanies.companyData.memberId
Wrong type — passing a numeric ID as a string ("1234567") when the field’s value_type is long
A relative path or type mismatch inside $elemMatch returns zero results or a misleading 400 — not always a clear error. Check the full dotted path and value_type in GET /search/filter-capabilities before querying.
Find people currently at a specific company by LinkedIn memberId:
Both the relative path (companyData.memberId instead of currentCompanies.companyData.memberId) and the string ID ("1234567" instead of 1234567) cause this query to fail.$elemMatch must be keyed on the field’s nested_path from capabilities — not always the outermost array. currentCompanies.companyData.memberId has nested_path: "currentCompanies", so $elemMatch keys on currentCompanies. currentCompanies.positions.title has nested_path: "currentCompanies.positions", so $elemMatch on currentCompanies cannot reference a positions field.
Use simple_filters operators such as $ne, $nin, $not, and $nor to exclude records that match field conditions.
Use the top-level exclusion fields — exclude_entity_ids or exclude_list_ids — to suppress specific people or companies by ID. See Search Exclusions for identifier formats, saved lists, and limits.
Operator-based exclusions affect matching, pagination, and result counts. ID-based exclusions are applied after matching, so pages can return fewer rows than page_size. Don’t rely on total_available to count excluded records or size pagination — page until next_cursor is null.
Cursor requests must send only {"cursor": "..."}. You cannot add or change exclusions while paging through an existing cursor. Include exclusions in the first /search/query request.
Find people currently at a specific company by LinkedIn memberId — see the full example and path/type requirements in Nested array matching ($elemMatch).
filters accepts a constrained DSL subset for cases where simple_filters is not expressive enough. For DSL syntax and clause behavior, see the OpenSearch Query DSL docs.
GET https://api.sixtyfour.ai/search/filter-capabilities
Returns all available fields for filter search — the complete list of fields you can query, sort, range, or aggregate against, plus the supported simple_filters operators and DSL limits.
Call this first to discover what is filterable before constructing any simple_filters or filters request. The response is the source of truth: a field that is not in fields cannot be queried.
To confirm that a field exists and see what operators it accepts, filter the fields array by name. The examples below check hq_country_iso2 and employees_count — the same fields used in the simple_filters examples earlier on this page.
If a field is missing from fields, it cannot be queried. If queryable is false, the field is exposed but reserved for sort or aggregation only. If nested_path is non-null, wrap the clause in a nested query when using filters.To search by partial name (e.g. every revenue-related field):
Capabilities are cached for cache_ttl_seconds (typically 600s). Pass refresh=true only when verifying schema changes — every refresh rebuilds the mapping and is slower.
Use filter-field-values with a high top_k to enumerate valid values for any enum-like field before filtering. This prevents querying with values that return zero results.
The same pattern works for any enum-like field: ownership_status, hq_country_iso2, funding_stage, and so on. Check supports_top_values: true in the capabilities response to confirm the field supports this endpoint.
For nested fields such as funding_rounds.name, counts are document counts and each filter_snippet is wrapped in a nested clause so it can be reused directly in DSL flows.
First request: send exactly one of simple_filters, filters, parsed_query, or search_id, plus optional page_size, max_results, and exclusions (exclude_entity_ids, exclude_list_ids).
Next page request: send only {"cursor":"..."}.
Requests that mix cursor with query or pagination fields return 400.
Use exclusions when re-running or refining a search and you want to avoid returning records the user has already seen. People searches also accept exclude_public_ids for backward compatibility. For full details — company identifiers, saved lists, and limits — see Search Exclusions.Re-run a previous search: