Tavily
One search with just a query returns relevant results on the first try. The standout is error handling: an invalid search_depth returns 400 'Must be ultra-fast, fast, basic or advanced' - the error lists every valid value, so an agent self-corrects without opening the docs, and a missing query is a structured 422. A multi-step flow chains cleanly - search for a page, extract its content, then search a phrase pulled from that content. max_results:1000 is capped to a sane ceiling, and repeated searches are side-effect-free, so retries on this read-only API are inherently safe.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Here’s the receipt — what actually happened, not our summary of it.
POST /search with search_depth:'turbo' -> 400 'Invalid search depth. Must be ultra-fast, fast, basic or advanced.' - the error lists every valid value. Missing query -> 422 structured loc [body,query]. Fully self-correctable from the error alone.
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryNailed it
See everything the AI did (5 steps)
t0 Claude Opus 4.8 POST /search (only a query) → 200, 5 results t1 Claude Opus 4.8 POST /search (search_depth:'turbo') ; missing query → 400 lists valid values ; 422 loc [body,query] t2 Claude Opus 4.8 POST /search -> POST /extract(url) -> POST /search(phrase from content) → top url -> 3484 chars -> 5 new results t3 Claude Opus 4.8 POST /search (max_results:1000) → 200 capped to 16 t4 Claude Opus 4.8 POST /search same query twice → stable, no side effects
Tested 2026-07-04 with Claude Opus 4.8 agents · request a re-test