Search As You Type

Search with the text typed so far, once per keystroke. Fixes spelling and completes the last word. Same response shape as Search Records.

Authentication

AuthorizationBearer

A search key, issued by Captain. Sent as Authorization: Bearer <key>.

OR
AuthorizationBearer

A scoped key for one end user, minted from an issuer key that Captain issues. Sent as Authorization: Bearer <key>.

Path parameters

indexstringRequiredformat: "^[a-z0-9][a-z0-9_-]{0,47}$"
index name

Request

This endpoint expects an object.
querystringOptional
kintegerOptional1-100Defaults to 10
filtersmap from strings to anyOptional

field -> value (exact), or list (any of). Also price_min, price_max, rating_min, t_<field>min / t<field>_max for typed numbers (flexible schema), attributes.<key> for attribute values. On an Object Search index a filterable field is named as the settings name it: a value or a list of values, or, on a number or date field, a range {gte, gt, lte, lt}. A bare date as lte covers that whole day (lte 2003-12-31 keeps filings made on the 31st). The filter expression (filter) says the same and more

modeenumOptionalDefaults to full
Allowed values:
variantenumOptionalDefaults to best
Allowed values:
facetsbooleanOptionalDefaults to true

full mode: exact facet counts over the relevance-cut result set

facet_keyslist of stringsOptional

the facets to count, by field name (as the answer names them). On an Object Search index a date facet, or a number facet with more than 1,000 distinct values, has no value counts and is refused (400); capabilities.fields.facet_counts lists the ones that count

facet_limitintegerOptional
prev_topstringOptional

instant mode: the id shown first at the previous keystroke (hold-top rule)

as_typedbooleanOptionalDefaults to false

search exactly what was typed (“Search instead for walnutt”): no spelling correction, no word split or join, no glued codes, no synonym expansion. Identifier matching, filters and the meaning (dense) lanes are unchanged: they retrieve, they don’t rewrite the query. query_understanding.as_typed says it applied

user_tokenstringOptional
who searched, for analytics
filterstringOptional

Object Search: a filter expression (strict), e.g. status IN [“open”, “pending”] AND filed_at >= 2024-01-01 AND office WITHIN 25 km OF (40.71, -74.00). See /llms.txt

preferlist of objectsOptional

soft constraints: reorder, never remove

constraintsenumOptionalDefaults to soft

strict: quantities parsed from the query (under 5 lb) must hold on the record’s typed fields; soft: they only rank

Allowed values:
sortlist of objectsOptional

a sortable field; search sorts the relevant set (up to 100)

group_byboolean or objectOptional

one hit per value of a field (product variants: Algolia’s distinct), with up to size - 1 more members: today’s ranking, deduplicated. k counts groups. Search only. false: no grouping, whatever the index’s default

pageintegerOptional>=0

search: which page, from 0, of per_page hits. Pages cut the final ranking (after filter, prefer, strict, sort and group_by) within the top 100 relevant records; a page past that is 400 PAGE_TOO_DEEP. To walk every match, browse with a filter, sort, k and page

per_pageintegerOptional1-50

search: hits per page (default k)

facet_queryobjectOptional

search inside one facet’s values (Algolia searchForFacetValues): the values whose text, or any of whose words, starts with prefix (case and accents folded), with their counts over the same set as facets

facet_statsbooleanOptional

min and max of each number and date facet (Algolia facets_stats; no average: it would need every match’s value). Search: over the relevance set, up to 1,000 distinct values, and exhaustive says whether that covered every one. Browse: exact over every record the filter matches and the key may see

explainbooleanOptional

per hit _explain: each lane’s rank, scores, identifier match, matched words per field

highlightboolean or objectOptional
citationsboolean or objectOptional

per hit _citations: the best passages (and child records) with character offsets. Best effort, not a guarantee: on CUAD contracts (CUAD dev, 469 queries, os-generalize’s labels as of 2026-09-27 10:36Z), when the right contract ranks first, one of its 3 cited passages holds the annotated clause 64.6% of the time (the first citation 45.7%)

fieldsboolean or list of stringsOptional

per hit fields: the typed values (dates as ISO 8601). Access lists are never returned

Response

results
hitslist of objectsOptional
totalintegerOptional

matching records (with group_by too: records, not groups)

groupedobjectOptional

present when results are grouped. The ranking is today’s, collapsed by the field’s value over the top depth candidates (k x size x 4, at most 100)

facetsmap from strings to lists of objectsOptional
facets_exactbooleanOptional
facet_set_sizeintegerOptional
query_idstringOptional
query_understandingobjectOptional

what the engine understood. Keys appear only when they apply; keys not listed here are diagnostics and may change

constraints_removedintegerOptional

constraints: strict: hits removed because a parsed quantity failed. hits [] with this > 0 means nothing meets the query’s quantities

sortobjectOptional

search with sort: which field and over what set

pageobjectOptional

search with page or per_page

facet_queryobjectOptional
facet_statsmap from strings to objectsOptional
requestobjectOptional
timingobjectOptional
© 2026 Captain