Skip to main content
A new query ({ "type": "query", ... }) is deprecated: use automatic search, whose agent answers filter, rank, and count questions from the metadata catalog and returns the matches as a catalog table. Paging with { "type": "page", "cursor": "..." } is not deprecated: it pages any catalog table, including one an automatic search or QA answer returns. The endpoint keeps working until it is retired.
POST /v1/workspaces/{workspace_id}/filtered-search pages with a discriminated body: { "type": "query", ... } then { "type": "page", "cursor": "..." }. Python: client.search.filtered / filtered_page. TypeScript: HTTP only. Ask a filter, rank, or count question without a grouping setting. Each result is one matching catalog entry, whose identity is established from the source data. Native register entries stay separate; supporting sections retain their own values and citations in components. Entries from separate source files remain separate; this does not deduplicate a contract appearing in both a register and a PDF. Each row’s entry_id identifies the entry in the current catalog independently of query wording; source_file_id identifies the supporting uploaded file. Unambiguous structural identities persist when the same source generation is reprojected. Incomplete or ambiguous identities fall back to the catalog record identity and can change on rebuild. Query wording does not change the result unit: the response uses result_unit="entry", and ranking, top-N, and pagination operate on entries. total_matches counts matching entries; total_files counts their distinct source files. Both describe all confirmed matches before top-N and paging. File-type and document-kind conditions filter the entries without changing what a result represents. The nullable request result_unit is a deprecated compatibility override. Its legacy "source", "component", and "entity" values remain accepted; omit it for catalog entries. Older results without result_unit use component units and may omit total_files. An idempotent retry that omits the override can replay a stored source request, preserving that job’s original grouping. A different explicit override is rejected. Unknown catalog values remain candidates for content verification. They are not confirmed matches. Content-verified results remain non-exhaustive; inspect content_verification.unverified_candidates before interpreting an empty result. Requested output fields appear in columns with requested=true, independently of the filtered flag. Available catalog values retain their citations and native formatting. An unavailable requested value has cell status unexamined; it does not exclude a matching entry. A condition on that value still requires evidence before the entry can count as a match. Scope a query with path_prefix (a folder), paths (exact uploaded files, no limit on how many), or both. Only catalog entries extracted from the resulting files can match. The two add up: the catalog covers every file under the folder plus every named file. Unknown or inaccessible paths are refused with 404 before a job exists. A page request carries no scope: it re-executes under the original query’s. See Search and Pagination.