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.
Where each field comes from
Section titled “Where each field comes from”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_meta — null plus a capability_gap warning. Requesting enrichments on exa buys the paid extras knob.
| Normalized | Read from |
|---|---|
url / title |
url / title |
summary |
content (first chunk when advanced depth is engaged) |
excerpt |
content, chunked (paid advanced depth) |
full_content |
raw_content |
favicon |
favicon |
usage / answer |
usage / answer |
related |
follow_up_questions |
verticals |
images |
Cannot supply: publish_date, thumbnail, entities, fetch_meta.
| Normalized | Read from |
|---|---|
url / title |
url / title (in web.results[]) |
summary |
description |
excerpt |
extra_snippets |
publish_date |
page_age |
thumbnail / favicon |
thumbnail.src / meta_url.favicon |
source.name |
profile.name |
entities |
infobox |
related |
faq questions + discussions titles |
verticals |
news, videos, locations |
fetch_meta |
fetched_content_timestamp |
Cannot supply: full_content, usage, answer.
| Normalized | Read from |
|---|---|
url / title |
url / title |
summary |
excerpts[0] |
excerpt |
excerpts |
publish_date |
publish_date |
usage |
usage (SKU list) |
Cannot supply: full_content, thumbnail, favicon, answer, entities, related, verticals, fetch_meta.
| Normalized | Read from |
|---|---|
url / title |
url / title (in results.web[]) |
summary |
description |
excerpt |
snippets |
full_content |
contents.markdown (paid livecrawl; max/fields mode) |
publish_date |
page_age |
thumbnail / favicon |
thumbnail_url / favicon_url |
verticals |
results.news |
Cannot supply: usage, answer, entities, related, fetch_meta.
| Normalized | Read from |
|---|---|
url |
url |
title |
name |
summary |
content |
full_content |
content (free at extended; max buys the paid deep depth) |
favicon |
favicon |
Cannot supply: excerpt, publish_date, usage, thumbnail, answer, entities, related, verticals, fetch_meta.
| Normalized | Read from |
|---|---|
url / title |
url / title (in result.results[]) |
summary |
description |
full_content |
description (same field, as text) |
Cannot supply: everything else.
| Normalized | Read from |
|---|---|
url |
url (in documents[]) |
summary |
content |
full_content |
content |
publish_date |
published_date |
Cannot supply: title (none by API design — always null) and everything else.
| Normalized | Read from |
|---|---|
url / title |
link / title (in organic_results[]) |
summary |
snippet |
publish_date |
date (some rows only) |
thumbnail / favicon |
thumbnail / favicon |
source.name |
source |
answer |
answer_box.answer, else .snippet |
entities |
knowledge_graph |
related |
related_questions + related_searches |
verticals |
top_stories, answer_box, ai_overview, inline_* |
Cannot supply: excerpt, full_content, usage, fetch_meta.
Providers
Section titled “Providers”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.
Provider overrides
Section titled “Provider overrides”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.
Raw provider payloads
Section titled “Raw provider payloads”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.
Results per provider
Section titled “Results per provider”num_results · 1–20 · default 5. Per provider, not per request: five
providers at num_results: 10 is fifty rows.
Full page content
Section titled “Full page content”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.
Batch query
Section titled “Batch query”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"]).