Skip to content

Search parameters

Everything tunable about a search rides in the request’s search block. The block itself, and the one-line summary of each option, are on Parameters & Configuration; this page is what each one does, what it costs, and where every field in the response came from.

One of minimalist, default, extended, max. Default "default".

The tier decides how much each result carries and which knobs the adapters send upstream, so it is the price knob as well as the detail knob. The sets are cumulative.

Tier Adds
minimalist url, title, rank, latency_ms, warnings
default summary
extended excerpt, full_content †, publish_date, usage
max thumbnail, favicon, source, enrichments, fetch_meta, answer, entities, related, verticals

full_content never arrives on the tier alone — see Full page content.

A field in the active set is present on every result — null or [] when the provider cannot supply it. Fields outside the set are absent entirely. latency_ms and warnings are always present.

fields is the explicit alternative: list any of the names above and the tier presets do not apply.

One vocabulary, whoever answered. summary is always the result’s text snippet — whether the provider spells it description (brave), content (tavily), or highlights (exa). Telem aligns every provider’s response into these fields server-side, and never invents a value: a field the provider cannot supply comes back null ([] for list fields), with a capability_gap warning saying so. The original, untouched payload is always one flag away — include_raw.

The tabs below name the raw field behind each normalized one. Three are the same everywhere and omitted: rank is the row’s position in the provider’s own ordering, source.domain comes from the result’s URL, and enrichments carries whatever provider-specific keys normalization did not consume, verbatim.

Normalized Read from
url / title url / title
summary summary, else highlights (below max)
excerpt highlights (10k shape; paid, max/fields mode)
full_content text (paid; max/fields mode)
publish_date publishedDate
usage costDollars
thumbnail / favicon image / favicon
answer output (deep runs via overrides)
source.author author

Cannot supply: entities, related, verticals, fetch_metanull plus a capability_gap warning. Requesting enrichments on exa buys the paid extras knob.

providers.include replaces the deployment’s default provider set rather than adding to it; providers.exclude subtracts from whatever set would otherwise run. More providers means better recall and a bigger bill, so an explicit list makes a search’s cost a decision rather than an accident.

Provider Notes
brave
ceramic No count knob upstream — num_results is enforced by trimming the results.
exa Embedding-based; matches on meaning. num_results is clamped to 10.
linkup
parallel
seltz No title by API design — title is always null.
serpapi No count knob upstream — num_results is enforced by trimming the results.
tavily
you

An unknown name is a 400 listing the known ones, and so is naming the same provider in both halves. Any provider above may be named, whether or not the deployment runs it by default. GET /v1/preprocessors (no auth) is the live roster — each provider’s slug and whether it runs by default.

Normalization covers the portable knobs; provider_overrides is the passthrough for everything native. Keyed by provider, deep-merged into the request Telem builds for that provider — so a knob only one engine has is one line, not a feature request:

{
"search": {
"providers": { "include": ["exa", "tavily"] },
"provider_overrides": {
"exa": { "category": "news" },
"tavily": { "search_depth": "advanced" }
}
}
}

Overrides are explicit intent, so almost nothing is blocked — the guardrails that remain: you can only override providers named in the request (400 otherwise), the whole block caps at 16 KB, and count-type knobs (num_results, max_results, count and friends, at any depth) cap at 20 and still count toward the volume budget. Native knobs are intentionally not portable — keep each one under its provider’s key, and expect paid features (like tavily’s advanced depth) to bill accordingly.

include_raw: true returns each provider run’s original, untouched response under that run’s raw_payload, next to the normalized results — the escape hatch when you need something the envelope does not carry (a provider’s own relevance score, say). Off by default; the payloads are big.

num_results · 120 · default 5. Per provider, not per request: five providers at num_results: 10 is fifty rows.

include_full_content: true asks providers for the whole page body rather than a snippet. Slower and more expensive, and off unless set.

It is an intersection, never an addition: the flag keeps the full_content field a tier already has, so at extended and max it fills, and at minimalist and default it is a no-op — those tiers have no full_content field to keep. Naming full_content in fields opts in the same way. It also licenses the paid content knob wherever a provider has one. exa and you supply page text only at tier: "max" (or in fields mode); linkup returns it from extended up and buys its deeper paid mode at max.

Whole pages are rarely the best input for a model, and every one costs money — the cheaper pattern is to search at default and fetch only the URLs you actually keep.

Pass a list of queries and they run concurrently inside a single interaction, each result tagged with the query that produced it — faster and cheaper than calling search repeatedly.

{ "user_input": [ { "query": "istio vs linkerd" }, { "query": "envoy gateway api" } ] }

The Python SDK spells this client.search(["q1", "q2"]).