You know what you want. Here is what to send.
Short recipes for specific jobs, each with the parameters that matter, runnable code, and the mistake it exists to stop you making.
Search one project's documentation
Use site= with vertical=code and content_type[]=docs to restrict a search to one project’s documentation instead of filtering the results afterwards.
Avoids: Putting the domain in `q` instead of `site`.
Monitor a topic without seeing the same story twice
Combine collapse=story with published_from to poll a topic and receive one row per story rather than one row per outlet that syndicated it.
Avoids: Advancing your cursor to `now()` after each poll.
Return only claims that more than one source carries
Set min_independent_sources to require a claim to appear on several separately-owned hosts before it reaches your agent.
Avoids: Treating a high count as proof.
Fit a result set into a token budget
Use fields[] to drop everything the agent will not read and limit to cap the set, or let assemble_context pack to a budget for you.
Avoids: Requesting `limit=20` and truncating client-side.
Find an exact error code or identifier
Use term= with mode=keyword to require an exact token, instead of letting semantic search return documents that are merely about the same subject.
Avoids: Leaving `mode` on the default `hybrid` and hoping the quoted identifier survives.
Filter by date without losing half your results
from/to filter by when we indexed a document; published_from/published_to filter by when it was published. Choosing the wrong pair is the most common date bug.
Avoids: Using `from`/`to` when you meant publication dates.
Handle rate limits and retries properly
Back off exponentially on 429 while honouring Retry-After, and treat the rate limit as a design constraint rather than an error to swallow.
Avoids: Retrying without jitter.
Debug a search that returns nothing
Remove filters one at a time from the most restrictive downward, then use why_not to distinguish a filter problem from a coverage gap.
Avoids: Assuming an empty result means missing coverage and giving up.
Find out why a URL is not in your results
why_not(url) reports present, removed with a typed reason, or never admitted — so a gap in coverage is a fact you can act on rather than silence.
Avoids: Reporting a coverage gap to your users as "no results found".
Search across languages without translating
Semantic and hybrid modes cross languages natively, so an English query retrieves relevant German passages; lang= narrows to one when you need it.
Avoids: Using `mode=keyword` and wondering why nothing crosses languages.
Build a context pack in one call
assemble_context runs the search, collapses duplicates, ranks by trust and packs to a token budget — replacing about twenty calls and the reasoning between them.
Avoids: Throwing away the `reason` field and keeping only the text.
Work through more results than one call returns
There is no cursor. Partition the query space by date window, host or content type and run one call per partition — which is faster and cheaper than paging anyway.
Avoids: Deduplicating partitions by URL rather than by `id`.
Every recipe runs on the free tier
10,000 requests a month, no card. Enough to work through all of these and still have quota left for your own evaluation set.
