Skip to main content
POST
Lean hybrid search
No cognition, brain inference, or contradiction detection — the cheap, capped primitive. Data scoping follows scope: user filters to the effective subject (owner by default, or a provisioned subject selected via X-Exo-Subject / the subject body field), org searches the whole organization. Org routing and authz stay on the principal. A missing embedder or pool degrades to 503 service_degraded, never 500.

Authorization

This route requires the read scope. A missing or invalid credential returns 401 authentication_error. A valid credential without the scope returns 403 permission_denied, and the problem body names the exact scope required.

Headers

These are request conventions the contract does not declare as parameters, so they do not appear in the schema tables below.

Success responses

Errors

Every error is an RFC 9457 application/problem+json body carrying a stable code, a requestId, and a suggestedAction where Exo has one. See Errors.

Notes

  • This is the cheap primitive, not a smaller retrieve. There is no cognition block, no brain inference and no contradiction detection. If you want reasoning, call POST /v1/retrieve.
  • scope is a body field here, not a header. user filters to the effective subject, org searches the whole organization.
  • Search has its own rate-limit family. It embeds the query, so it does not draw on the generous reads bucket. See Rate limits.

Authorizations

X-Exo-API-Key
string
header
required

An Exo API key (exo_...) sent as the X-Exo-API-Key header.

Body

application/json

POST /v1/search request body.

topK is coerced into [1, 50] (default 10), never rejected. scope selects the data scope: user (default) filters to the effective subject, org searches org-wide. The reserved subject selector is handled by the shared seam and is intentionally absent here.

query
string
required

The search text.

Required string length: 1 - 10000
scope
enum<string>
default:user

Data scope: 'user' (default) filters to the effective subject; 'org' searches across the whole organization.

Available options:
user,
org
topK
integer
default:10

Maximum number of results; coerced into [1, 50] (default 10).

Response

Successful Response

POST /v1/search response: the ranked results plus a usage object.

results
SearchResult · object[]
required
usage
SearchUsage · object
required

Additive per-call usage counters for search (spec D13).

  • readUnits: number of results returned (the billable read unit).
  • embedTokens: DOCUMENTED ESTIMATE of Voyage embed tokens for the query (~3.5 chars/token, the same tokenizer-free proxy retrieve reports), not the metered figure.