{
 "slug": "tavily",
 "name": "Tavily",
 "url": "https://tavily.com",
 "domain": "tavily.com",
 "category": "search-apis",
 "category_name": "Search APIs",
 "tested_at": "2026-10-16",
 "run": "20261016T050136Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T043412Z",
   "date": "2026-10-06",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261014T050127Z",
   "date": "2026-10-14",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  },
  {
   "run": "20261016T050136Z",
   "date": "2026-10-16",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip"
   }
  }
 ],
 "level": 3,
 "level_name": "Does the work",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 3,
  "tries": 3,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in without an account (no key needed); can't sign up for one",
   "at": "signup",
   "how": "no-account",
   "way": "keyless"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "part",
   "text": "Work done: 50% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Tried to pay: the payment failed on the seller's side",
   "value": "ready",
   "route": "agent_rail",
   "why": "unsettled"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, made nothing to delete",
   "how": "no-account",
   "left": "nothing_made"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ],
   "docs": "complete"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in without an account (no key needed); can't sign up for one",
   "at": "signup",
   "how": "no-account",
   "way": "keyless",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "part",
   "text": "Work done: 50% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Tried to pay: the payment failed on the seller's side",
   "value": "ready",
   "route": "agent_rail",
   "why": "unsettled",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, made nothing to delete",
   "how": "no-account",
   "left": "nothing_made",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "keyless",
   "label": "No key needed",
   "routes": [
    "keyless"
   ],
   "minutes": 1,
   "core": "4/8"
  }
 ],
 "minutes": 1,
 "next": {
  "to": 4,
  "text": "Next: let an agent sign up for an account on its own (without one it does 50% of the core work)"
 },
 "stop": "signup",
 "core": "4/8",
 "scores": {
  "coverage": 48,
  "reliability": 85,
  "resilience": 94,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": 90,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "current",
    "behind": null,
    "value": "2026-07-28"
   },
   {
    "standard": "MCP discovery",
    "state": "current",
    "behind": null,
    "value": "ok"
   },
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.3"
   },
   {
    "standard": "A2A",
    "state": "current",
    "behind": null,
    "value": "1.0"
   }
  ]
 },
 "reliability_method": "pass^k",
 "resilience": {
  "parts": {
   "error_legibility": 95,
   "recovery": 83,
   "idempotency": 100,
   "rate_limits": 100
  },
  "summary": null
 },
 "stress": [
  {
   "capability": "Run a real-time web search",
   "probe": "query too short",
   "outcome": "400 application/json {\"detail\":{\"error\":\"Query is too short. Min query length is 2 characters.\"}}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Run a real-time web search",
   "probe": "keyless rate limit (hit in normal use after ~40 calls in ~12 min)",
   "outcome": "429 retry-after: 25, application/json {\"error\":{\"code\":\"hourly_cap_reached\",\"message\":\"You reached the hourly keyless Tavily limit... retry after the time given in the Retry-After response header.\",\"n",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "clean"
  },
  {
   "capability": "Run a real-time web search",
   "probe": "keyless monthly cap on MCP + bonus offer",
   "outcome": "MCP: result text {\"code\":\"monthly_cap_reached_bonus_eligible\",\"window\":\"month\",\"retry_after_seconds\":256, next_actions x402/signup/bonus_credits 36}; API /keyless/bonus -> 409 {\"code\":\"bonus_not_eligi",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": "clean"
  },
  {
   "capability": "Run a real-time web search",
   "probe": "wrong API key",
   "outcome": "401 {\"detail\":{\"error\":\"Unauthorized: missing or invalid API key.\"}}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Extract clean content from one or more URLs",
   "probe": "bad url value",
   "outcome": "400 {\"detail\":{\"error\":\"All URLs failed validation.\",\"failed_results\":[{\"url\":\"not-a-list\",\"error\":\"Validation Error: Invalid URL format\"}]}} (application/json, not problem+json)",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Run a real-time web search",
   "probe": "repeat identical search (safe retry)",
   "outcome": "200 both times, same result set; search stores nothing, so a retry cannot duplicate anything",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  }
 ],
 "surface_audit": null,
 "coverage_core": 50,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 4,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "365f93123295",
  "kb_version": "3+overlay-83f4487de6",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 4,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip"
 },
 "same_level_drives": 3,
 "drives": 3,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "home",
   "at": "2026-10-16"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "docs.tavily.com with llms.txt, every page as .md and via Accept: text/markdown, OpenAPI 3.0.3, and a keyless quick start."
  },
  "signup": {
   "status": "n/a",
   "cause": "check",
   "note": "Not needed: a documented route works without an account.",
   "way": "keyless",
   "no_account": true,
   "note_driver": "Email sign-up on auth.tavily.com (Auth0) showed a Cloudflare Turnstile 'Verify you are human' checkbox after the email. Continue with GitHub and the MCP/CLI OAuth were refused by Auth0 with access_denied 'Suspicious User Agent'.",
   "status_driver": "human"
  },
  "verify": {
   "status": "n/a",
   "cause": "check",
   "note": "Not needed: a documented route works without an account.",
   "no_account": true,
   "note_driver": "Not reached: no sign-up got past the bot check, so no verification mail was sent.",
   "status_driver": "blocked"
  },
  "credentials": {
   "status": "n/a",
   "cause": "check",
   "note": "Not needed: a documented route works without an account.",
   "via": "",
   "no_account": true,
   "note_driver": "API keys come from the app.tavily.com dashboard, which our agent could not enter; no API or CLI creates a key without an existing one. Keyless mode needs no credential for Search and Extract only.",
   "status_driver": "blocked"
  },
  "first_call": {
   "status": "headless",
   "route": "no_account",
   "note": "POST https://api.tavily.com/search with X-Tavily-Access-Mode: keyless answered 200 with results; the same works on the remote MCP server and the tvly CLI."
  },
  "first_action": {
   "status": "headless",
   "note": "Keyless /extract returned clean page content; Tavily stores nothing per call. Crawl, Map and Research need an API key."
  },
  "pay": {
   "status": "blocked",
   "grade": "P3",
   "rails": [
    "x402 v2 on Base (USDC), first-party at x402.tavily.com, POST /search advanced only, $0.01"
   ],
   "rail_ids": [
    "x402"
   ],
   "first_party": true,
   "rail_scope": "partial",
   "trial_path": "free tier",
   "route": "agent_rail",
   "checkout": {
    "reached": "no",
    "processor": "none",
    "captcha": "none",
    "three_ds": "not_seen",
    "card_form": false,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "x402",
    "price": "30.00",
    "currency": "USD",
    "period": "month",
    "plan": "Project",
    "last_button": ""
   },
   "person": "none",
   "ours": "no account",
   "note": "A first-party x402 v2 rail sells advanced Search for $0.01 a call with no account; our signed payments were all answered 402 settlement_failed, so no payment went through. Plans (Pay As You Go $0.008/credit, Project $30/month) are bought in the app.tavily.com dashboard, which our agent could not enter; no billing API.",
   "unsettled": {
    "tries": 6,
    "at": "2026-10-16T05:02:28Z"
   },
   "detected_grade": "P4",
   "exercised": false
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "Nothing to cancel: the drive started no plan or trial. Plans are managed on the app.tavily.com billing page; no billing API is documented.",
   "docs_grade": "",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "n/a",
   "left": "nothing_made",
   "after_hours": null,
   "note": "The way in that worked (keyless) stores nothing for the caller. No Tavily account was entered; the GitHub grant given during the refused sign-in was revoked. Whether Auth0 kept a record of the GitHub identity is unknown.",
   "account": false
  }
 },
 "routes": [
  {
   "route": "keyless",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 1
  },
  {
   "route": "pay_per_call",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "broken",
   "wall": null,
   "person": "none",
   "brings": "wallet",
   "fresh": true,
   "minutes": 0.5
  },
  {
   "route": "email_password",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 2
  },
  {
   "route": "oauth_consent",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "refused",
   "wall": {
    "type": "consent_needs_account",
    "owner": "product"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 2
  },
  {
   "route": "person_key",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": "each",
   "brings": "person_grant",
   "fresh": true,
   "minutes": 0
  }
 ],
 "checkout": {
  "reached": "no",
  "processor": "none",
  "captcha": "none",
  "three_ds": "not_seen",
  "phone_field": "none",
  "rail_offer": "x402",
  "period": "month",
  "card_form": false,
  "price": "30.00",
  "currency": "USD",
  "plan": "Project"
 },
 "docs": {
  "at": "2026-10-16",
  "read": 113,
  "listed": 114,
  "sampled": false,
  "overall": "complete",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "good",
  "freshness": "fresh",
  "newest": "2026-10-15",
  "core_pages": "8 of 8",
  "capabilities": "covered"
 },
 "claims": {
  "claimed": 24,
  "tried": 10,
  "held": 9,
  "broken": 1,
  "unclear": 0,
  "not_tried": 14,
  "undocumented_works": 0
 },
 "pay_options": {
  "checked": "2026-10-16",
  "source": "probe",
  "options": [
   {
    "id": "x402",
    "name": "x402",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [
     "Base",
     "aws:base"
    ],
    "testnet": false
   },
   {
    "id": "mpp",
    "name": "MPP",
    "kind": "agent-rail",
    "first_party": false,
    "lead": true,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [
   "x402"
  ],
  "paid": null,
  "exercised": false,
  "detected_grade": "P4",
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   },
   {
    "title": "Sell the plan or credits over the rail, not only side endpoints",
    "how": "Let the paid call buy what the product sells, so the rail covers the whole product."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST, 10 operations in the OpenAPI plus key management in the docs",
  "openapi": "3.0.3; key-management routes missing",
  "mcp": "official remote, 5 tools, the 28 Jul 2026 spec, keyless or OAuth or key",
  "cli": "tvly (PyPI tavily-cli), keyless search/extract",
  "llms_txt": "docs.tavily.com/llms.txt; docs robots.txt carries Cloudflare Content-Signal: ai-train=yes, search=yes, ai-input=yes"
 },
 "can_do": [
  "Search the web and get ranked results with no account or key (REST, MCP, CLI)",
  "Choose basic or advanced search depth (1 vs 2 credits)",
  "Get an AI-written answer with search results",
  "Filter by topic, date window, include/exclude domains, country",
  "Get images with descriptions and full raw page content in search",
  "Extract clean content from URLs, with query-focused chunks"
 ],
 "cannot_do": [
  {
   "what": "Crawl, map or research",
   "why": "These need an API key; sign-up refused our agent (Turnstile on email, Auth0 'Suspicious User Agent' on GitHub and OAuth)"
  },
  {
   "what": "Get an API key",
   "why": "Keys come only from the web dashboard behind the same sign-up"
  },
  {
   "what": "Pay per call over x402",
   "why": "Every signed payment came back 402 settlement_failed; x402 sells only /search anyway"
  },
  {
   "what": "Use answers over MCP",
   "why": "tavily_search rejects include_answer (validation error)"
  },
  {
   "what": "Sustained keyless use",
   "why": "Keyless caps hit within ~15 minutes of light use; MCP reported the monthly keyless cap reached"
  }
 ],
 "blockers": [
  "Auth0 refuses our signed agent's user agent: access_denied 'Suspicious User Agent'",
  "Cloudflare Turnstile checkbox on email sign-up"
 ],
 "tips_for_owner": [
  "Stop refusing agent user agents at Auth0",
  "Let verified agents pass email sign-up",
  "Offer an agent sign-up or key claim",
  "Fix x402 settlement and sell every endpoint",
  "Point next_actions only at real routes",
  "Accept include_answer in MCP tavily_search",
  "Publish the keyless limits and align counters"
 ],
 "tips_for_agents": [
  "Send X-Tavily-Access-Mode: keyless to use /search and /extract (REST, MCP, CLI) with no key",
  "Keyless caps are tight: honour Retry-After on 429 hourly_cap_reached; the MCP may report a monthly cap",
  "MCP tool names use underscores (tavily_search); tavily_search has no include_answer, use REST for answers",
  "Crawl, Map, Research need an API key from a human-made account",
  "x402 at x402.tavily.com sells only advanced search ($0.01)",
  "Errors are JSON with code, message and next_actions; extract reports per-URL failures in failed_results"
 ],
 "selfhost": null,
 "summary": "Tavily is easy for an agent to start with: keyless Search and Extract work on REST, a modern 28 Jul 2026 MCP server and the CLI with no account, and covered 4 of 8 core tasks. Getting further fails: email sign-up shows a Cloudflare Turnstile checkbox and GitHub/OAuth sign-in is refused by Auth0 as a 'Suspicious User Agent', so Crawl, Map and Research (free with a key) were out of reach. The first-party x402 rail sells only search, and our signed payments came back settlement_failed.",
 "wall": "Auth0 refuses agent user agent; Turnstile on email",
 "plan_scope": "none (no free access): keyless Search and Extract only",
 "robots_stop": null,
 "robots": {
  "rule": "star",
  "step": null,
  "seen": "2026-10-16",
  "held": false
 },
 "plain": null,
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Search",
   "capability": "Run a real-time web search",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /search",
    "mcp": "tavily-search",
    "cli": "tvly search",
    "ui": "Playground (app.tavily.com/playground)"
   },
   "check": "Response includes results[] with url/content/score and a request_id; GET /usage shows credits decremented",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search; https://docs.tavily.com/documentation/tavily-cli"
  },
  {
   "id": "cap-02",
   "group": "Search",
   "capability": "Choose search depth (basic/advanced/fast/ultra-fast) to trade latency for relevance",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /search (search_depth)",
    "mcp": "tavily-search",
    "cli": "tvly search --depth",
    "ui": "Playground"
   },
   "check": "Response content length/snippet count and usage.credits differ (1 credit basic/fast/ultra-fast vs 2 for advanced)",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search; https://docs.tavily.com/documentation/api-credits"
  },
  {
   "id": "cap-03",
   "group": "Search",
   "capability": "Get an AI-generated answer alongside search results",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /search (include_answer)",
    "mcp": "tavily-search",
    "cli": "tvly search --include-answer",
    "ui": "Playground"
   },
   "check": "Response JSON has non-null `answer` field",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search"
  },
  {
   "id": "cap-04",
   "group": "Extract",
   "capability": "Extract clean content from one or more URLs",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /extract",
    "mcp": "tavily-extract",
    "cli": "tvly extract",
    "ui": "Playground"
   },
   "check": "Response results[] contains raw_content per URL; failed_results[] lists per-URL failures",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/extract"
  },
  {
   "id": "cap-05",
   "group": "Crawl",
   "capability": "Crawl a website from a root URL and extract content from discovered pages",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /crawl",
    "mcp": "tavily-crawl (local MCP server)",
    "cli": "tvly crawl",
    "ui": "Playground"
   },
   "check": "Response results[] lists crawled urls with raw_content; base_url echoes request",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/crawl; https://docs.tavily.com/documentation/keyless#faq (crawl requires API key)"
  },
  {
   "id": "cap-06",
   "group": "Map",
   "capability": "Map a site's URL structure without extracting content",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /map",
    "mcp": "tavily-map (local MCP server)",
    "cli": "tvly map",
    "ui": "Playground"
   },
   "check": "Response results[] is a list of discovered URLs with base_url echoed",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/map; https://docs.tavily.com/documentation/keyless#faq"
  },
  {
   "id": "cap-07",
   "group": "Research",
   "capability": "Create a cited research report/task on a topic",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /research",
    "mcp": "tavily-research (local MCP server)",
    "cli": "tvly research",
    "ui": null
   },
   "check": "POST returns request_id + status=pending; GET /research/{request_id} eventually returns status=completed with a cited report",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/research; https://docs.tavily.com/documentation/api-reference/endpoint/research-get"
  },
  {
   "id": "cap-08",
   "group": "Research",
   "capability": "Pick a research model (mini for narrow questions, pro for multi-angle research, auto)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /research (model)",
    "mcp": "tavily-research",
    "cli": "tvly research --model",
    "ui": null
   },
   "check": "Response `model` field matches requested value; credit usage falls within the published min/max bounds for that model",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/research; https://docs.tavily.com/documentation/api-credits"
  },
  {
   "id": "cap-09",
   "group": "Research",
   "capability": "Stream research progress and results in real time",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /research (stream=true)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Response is an SSE stream emitting incremental progress/result events instead of a single JSON body",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/research-streaming"
  },
  {
   "id": "cap-10",
   "group": "Research",
   "capability": "Constrain research output to a custom JSON schema",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /research (output_schema)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Completed research task's output object validates against the submitted output_schema",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/research"
  },
  {
   "id": "cap-11",
   "group": "Research",
   "capability": "Attach files (txt/md/json) as additional research sources",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /research (files)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Completed report cites the uploaded filename as a source",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/research"
  },
  {
   "id": "cap-12",
   "group": "Search",
   "capability": "Filter search by topic (general/news/finance) and time range or date window",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /search (topic, time_range, start_date, end_date)",
    "mcp": "tavily-search",
    "cli": "tvly search --topic/--time-range",
    "ui": "Playground"
   },
   "check": "All returned results' published_date (include_published_date=true) fall inside the requested window",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search"
  },
  {
   "id": "cap-13",
   "group": "Search",
   "capability": "Restrict or exclude results by domain",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /search (include_domains, exclude_domains, include_domains_mode)",
    "mcp": "tavily-search",
    "cli": "tvly search --include-domains/--exclude-domains",
    "ui": "Playground"
   },
   "check": "All result URLs' hostnames are within include_domains and none within exclude_domains",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search"
  },
  {
   "id": "cap-15",
   "group": "Search",
   "capability": "Include images (and image descriptions) with search results",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /search (include_images, include_image_descriptions)",
    "mcp": "tavily-search",
    "cli": "tvly search --include-images",
    "ui": "Playground"
   },
   "check": "Response has top-level images[] array populated, each with a description when the flag is set",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search"
  },
  {
   "id": "cap-16",
   "group": "Search",
   "capability": "Include raw page content (markdown/text) for each search result",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /search (include_raw_content)",
    "mcp": "tavily-search",
    "cli": "tvly search --include-raw-content",
    "ui": "Playground"
   },
   "check": "Each result object includes a populated raw_content field in the requested format",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search"
  },
  {
   "id": "cap-17",
   "group": "Extract",
   "capability": "Choose extraction depth (basic/advanced) for JS-rendered or table-heavy pages",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /extract (extract_depth)",
    "mcp": "tavily-extract",
    "cli": "tvly extract --extract-depth",
    "ui": "Playground"
   },
   "check": "raw_content for a JS-rendered page is populated only when extract_depth=advanced; credit usage doubles (2 vs 1 per 5 URLs)",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/extract; https://docs.tavily.com/documentation/api-credits"
  },
  {
   "id": "cap-18",
   "group": "Extract",
   "capability": "Rerank extracted content chunks by a relevance query",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /extract (query, chunks_per_source)",
    "mcp": "tavily-extract",
    "cli": "tvly extract --query --chunks-per-source",
    "ui": "Playground"
   },
   "check": "raw_content returns top-ranked chunks relevant to the query string rather than the full page",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/extract"
  },
  {
   "id": "cap-19",
   "group": "Crawl",
   "capability": "Guide crawl/map scope with depth, breadth, path/domain regex filters, and natural-language instructions",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /crawl, POST /map (max_depth, max_breadth, select_paths, exclude_paths, instructions, ...)",
    "mcp": "tavily-crawl/tavily-map",
    "cli": "tvly crawl/map --max-depth --select-paths --instructions",
    "ui": "Playground"
   },
   "check": "Returned result URLs all match the select_paths/select_domains regex and respect max_depth/limit; instructions run costs 2x credits/10 pages vs 1x",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/crawl; https://docs.tavily.com/documentation/api-reference/endpoint/map"
  },
  {
   "id": "cap-20",
   "group": "Research",
   "capability": "Steer research sources with include/exclude domains and set citation format and output length",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /research (include_domains, exclude_domains, citation_format, output_length)",
    "mcp": null,
    "cli": "tvly research",
    "ui": null
   },
   "check": "Completed report's citations use the requested format (e.g., APA) and contain no URLs from exclude_domains",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/research"
  },
  {
   "id": "cap-21",
   "group": "Platform",
   "capability": "Try Search and Extract without an API key (keyless access)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /search, /extract (header X-Tavily-Access-Mode: keyless)",
    "mcp": "tavily-search/tavily-extract via keyless header",
    "cli": null,
    "ui": null
   },
   "check": "A request with no Authorization header and the keyless header returns a normal 200 result instead of 401",
   "source": "https://docs.tavily.com/documentation/keyless"
  },
  {
   "id": "cap-24",
   "group": "Platform",
   "capability": "Search/extract/crawl/map/research from a terminal CLI",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "tvly search|extract|crawl|map|research",
    "ui": null
   },
   "check": "`tvly search \"query\" --json` prints a JSON object with results[] to stdout",
   "source": "https://docs.tavily.com/documentation/tavily-cli"
  },
  {
   "id": "cap-26",
   "group": "Platform",
   "capability": "Submit feedback on search result relevance/usefulness",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /feedback",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Response returns success:true with a feedback_id for a prior request_id/session_id",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/feedback"
  },
  {
   "id": "cap-14",
   "group": "Search",
   "capability": "Boost results from a specific country",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /search (country)",
    "mcp": "tavily-search",
    "cli": "tvly search --country",
    "ui": "Playground"
   },
   "check": "Result set composition shifts toward sources from the specified country vs. an unfiltered call",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/search"
  },
  {
   "id": "cap-22",
   "group": "Platform",
   "capability": "Call Search over x402 machine payments (pay-per-call in USDC, no API key)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST https://x402.tavily.com/search",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Unsigned POST returns HTTP 402 with payment envelope; a signed retry returns 200 with results and a PAYMENT-RESPONSE settlement header",
   "source": "https://docs.tavily.com/documentation/machine-payments/x402"
  },
  {
   "id": "cap-25",
   "group": "Platform",
   "capability": "Install Agent Skills that remind coding agents to call Tavily",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "tvly login (bundled skill install)",
    "ui": null
   },
   "check": "Skill files appear under the coding agent's skills directory after `tvly login`/CLI install",
   "source": "https://docs.tavily.com/documentation/agent-skills; https://docs.tavily.com/llms.txt"
  },
  {
   "id": "cap-27",
   "group": "Account",
   "capability": "View API key and account credit usage",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /usage",
    "mcp": null,
    "cli": null,
    "ui": "app.tavily.com dashboard"
   },
   "check": "GET /usage returns current period credit consumption that increases after making a search/extract call",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/usage"
  },
  {
   "id": "cap-28",
   "group": "Account",
   "capability": "Retrieve per-request usage logs",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /logs",
    "mcp": null,
    "cli": null,
    "ui": "app.tavily.com dashboard"
   },
   "check": "GET /logs returns a row for a specific request_id with endpoint, timestamp, and credit cost",
   "source": "https://docs.tavily.com/documentation/api-reference/endpoint/logs"
  },
  {
   "id": "cap-29",
   "group": "Account",
   "capability": "Programmatically generate and deactivate scoped API keys (enterprise)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "POST /generate-keys, POST /deactivate-keys, GET key-info",
    "mcp": null,
    "cli": null,
    "ui": "app.tavily.com dashboard"
   },
   "check": "POST /generate-keys returns working tvly-dev-... keys with the requested credit limit and TTL; deactivate-keys makes them return 401 afterward",
   "source": "https://docs.tavily.com/documentation/enterprise/generate-keys; https://docs.tavily.com/documentation/enterprise/deactivate-keys"
  },
  {
   "id": "cap-30",
   "group": "Account",
   "capability": "View organization-wide usage and pay-as-you-go cost across API keys",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET org-usage (enterprise)",
    "mcp": null,
    "cli": null,
    "ui": "app.tavily.com billing"
   },
   "check": "Response aggregates request counts and cost per API key under the organization",
   "source": "https://docs.tavily.com/documentation/enterprise/org-usage"
  },
  {
   "id": "cap-31",
   "group": "Account",
   "capability": "Upgrade/choose a billing plan or switch to pay-as-you-go",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "app.tavily.com/billing"
   },
   "check": "Dashboard billing page shows selected plan tier and updated monthly credit allowance",
   "source": "https://www.tavily.com/pricing; https://docs.tavily.com/documentation/api-credits"
  }
 ],
 "attempts": [
  {
   "t": "01:13",
   "cap": "discovery",
   "way": "keyless",
   "capability": "keyless access",
   "task": "keyless search with X-Tavily-Access-Mode header",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST api.tavily.com/search keyless -> 200, 3 results, request_id [id]",
   "notes": "no account, no key",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/keyless.md"
   }
  },
  {
   "t": "01:41",
   "cap": "discovery",
   "way": "keyless",
   "capability": "MCP version probe",
   "task": "POST server/discover on https://mcp.tavily.com/mcp/",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "no header: 401 WWW-Authenticate Bearer resource_metadata=.../oauth-protected-resource/mcp; with X-Tavily-Access-Mode: keyless: 200 supportedVersions [\"2026-07-28\"], serverInfo tavily-mcp 4.1.0",
   "notes": "modern stateless server, no initialize needed"
  },
  {
   "t": "01:41",
   "cap": "discovery",
   "way": "keyless",
   "capability": "MCP tools/list + tools/call keyless",
   "task": "tools/list and tavily_search via MCP keyless",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "tools/list 200: tavily_search, tavily_extract, tavily_crawl, tavily_map, tavily_research; tools/call tavily_search 200 with results",
   "notes": "tool names use underscores (map says tavily-search)",
   "quality": {
    "docs_match": "drift",
    "docs_url": "https://docs.tavily.com/documentation/keyless.md"
   }
  },
  {
   "t": "02:36",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "capability": "MCP server card / AI catalog",
   "task": "GET mcp.tavily.com/mcp/server-card, tavily.com/.well-known/ai-catalog.json, /.well-known/mcp/server-card.json",
   "result": "failed",
   "verified": true,
   "evidence": "mcp server-card 404 text/plain; www.tavily.com ai-catalog 404 html; /.well-known/mcp/server-card.json 404 on tavily.com. docs.tavily.com/.well-known/mcp/server-card.json is 200 JSON but describes the Mintlify docs MCP (search_tavily_docs), not the product MCP"
  },
  {
   "t": "02:36",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "capability": "A2A agent card",
   "task": "GET tavily.com/.well-known/agent-card.json",
   "result": "done",
   "verified": true,
   "evidence": "302 to www.tavily.com, 200 application/json, protocolVersion \"1.0\", url https://api.tavily.com, securitySchemes apiKey+oauth2; legacy /.well-known/agent.json also 200 same card"
  },
  {
   "t": "02:36",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "capability": "aipref / content signals",
   "task": "robots.txt and Content-Usage header",
   "result": "done",
   "verified": true,
   "evidence": "www.tavily.com/robots.txt: only \"Sitemap:\" line, no Content-Usage. docs.tavily.com/robots.txt: \"Content-Signal: ai-train=yes, search=yes, ai-input=yes\" (Cloudflare Content Signals scheme, parses). No Content-Usage response header on www.tavily.com"
  },
  {
   "t": "02:36",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "capability": "markdown docs",
   "task": "Accept: text/markdown and .md URL on docs page",
   "result": "done",
   "verified": true,
   "evidence": "docs.tavily.com/documentation/quickstart with Accept: text/markdown -> content-type text/markdown, vary includes Accept, Link header rel=llms-txt/agent-card/agent-skills; quickstart.md -> 200 text/markdown"
  },
  {
   "t": "02:36",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "capability": "OpenAPI",
   "task": "GET docs.tavily.com/documentation/api-reference/openapi.json",
   "result": "done",
   "verified": true,
   "evidence": "openapi 3.0.3, 10 paths: /search /extract /crawl /map /research /research/{request_id} /feedback /usage /logs /org-usage; server https://api.tavily.com/. Key-management (/generate-keys) not in it"
  },
  {
   "t": "02:36",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "capability": "MCP OAuth metadata",
   "task": "GET PRM and AS metadata on mcp.tavily.com",
   "result": "done",
   "verified": true,
   "evidence": "PRM /.well-known/oauth-protected-resource/mcp 200 (resource https://mcp.tavily.com/mcp, AS https://mcp.tavily.com/); AS metadata: client_id_metadata_document_supported true, registration_endpoint present (DCR too), PKCE S256, iss parameter supported; no device_authorization_endpoint"
  },
  {
   "t": "02:51",
   "cap": "pay",
   "way": "pay_per_call",
   "step": "probe",
   "capability": "pay step public probes",
   "task": "x402 402 challenge and pay-per-call on x402.tavily.com",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "pay_probe.json: 402 x402 v2 PAYMENT-REQUIRED header on https://x402.tavily.com/search (exact, eip155:8453, 10000 = $0.01 USDC; plus agent-pay on aws:base). pay_tx.json: we signed 6 payments (2 per try, 3 tries incl. retry), every one answered 402 {\"x402Version\":2,\"error\":\"settlement_failed\"}; nothing settled, tx null, entitled false. Docs: docs.tavily.com/documentation/machine-payments/x402.md sells only POST /search advanced at $0.01. mpp.dev lists Tavily only via third parties (paywithlocus, orthogonal).",
   "notes": "First-party x402 v2 rail exists for search only; settlement failed on the vendor side for our signed payments"
  },
  {
   "t": "04:15",
   "cap": "signup",
   "way": "email_password",
   "capability": "sign up with email",
   "task": "Sign up at auth.tavily.com (Auth0 Universal Login) with the agent's inbox",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "After entering the email and clicking Continue the form stayed on /u/signup/identifier and showed a visible \"Verify you are human\" checkbox: Auth0 Bot Detection (data-captcha-provider=\"auth0_v2\") rendered with Cloudflare Turnstile (challenges.cloudflare.com/turnstile/v0/api.js). Not solved by us.",
   "notes": "visible browser check on email sign-up"
  },
  {
   "t": "04:21",
   "cap": "signup",
   "way": "email_password",
   "step": "handoff",
   "capability": "human handoff for Turnstile",
   "task": "",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "",
   "notes": "Check was Auth0 Bot Detection with Cloudflare Turnstile"
  },
  {
   "t": "07:15",
   "cap": "signup",
   "way": "sso_github",
   "capability": "Continue with GitHub",
   "task": "Continue with GitHub on auth.tavily.com with our agent GitHub account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "GitHub consent asked only scope user:email; authorized. Back at Tavily, https://auth.tavily.com/authorize 302 -> https://app.tavily.com/api/auth/callback?error=access_denied&error_description=Suspicious%20User%20Agent, which answers HTTP 400. Repeats on every load of app.tavily.com/home in this browser (Auth0 session exists, app access refused).",
   "notes": "Auth0 refuses our honest user agent (Chrome UA + AgentDrivesAgent/1.0) as \"Suspicious User Agent\"; no challenge shown, an invisible refusal. Not retried with another UA."
  },
  {
   "t": "09:19",
   "cap": "signup",
   "way": "oauth_consent",
   "capability": "MCP OAuth / tvly login (browser OAuth)",
   "task": "tvly login --no-browser; open its mcp.tavily.com/authorize URL in our agent's browser (signed in at Tavily Auth0 via GitHub)",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "mcp.tavily.com/authorize (client registered by the CLI) 302 -> auth.tavily.com/authorize 302 -> mcp.tavily.com/auth/callback?error=access_denied&error_description=Suspicious%20User%20Agent -> 127.0.0.1 callback with error=access_denied \"Suspicious User Agent\". No device flow offered (AS metadata has no device_authorization_endpoint).",
   "notes": "Same Auth0 user-agent refusal as Continue with GitHub; OAuth needs an account we could not get"
  },
  {
   "t": "09:33",
   "cap": "cap-01",
   "way": "keyless",
   "capability": "Web search",
   "task": "search \"latest Rust stable release\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /search keyless -> 200; 3 results with url/content/score; request_id [id]; usage {'credits': 1}",
   "notes": "search is stateless: nothing to create/update/delete; verified by the result set; GET /usage needs an API key",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "no",
    "idempotent": "n/a"
   }
  },
  {
   "t": "09:36",
   "cap": "cap-01",
   "way": "keyless",
   "capability": "Web search",
   "task": "search \"Python 3.14 release notes\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /search keyless -> 200; 3 results with url/content/score; request_id [id]; usage {'credits': 1}",
   "notes": "search is stateless: nothing to create/update/delete; verified by the result set; GET /usage needs an API key",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "no",
    "idempotent": "n/a"
   },
   "trial": 2
  },
  {
   "t": "09:37",
   "cap": "cap-01",
   "way": "keyless",
   "capability": "Web search",
   "task": "search \"Linux kernel 7.0 features\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /search keyless -> 200; 3 results with url/content/score; request_id [id]; usage {'credits': 1}",
   "notes": "search is stateless: nothing to create/update/delete; verified by the result set; GET /usage needs an API key",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "no",
    "idempotent": "n/a"
   },
   "trial": 3
  },
  {
   "t": "09:49",
   "cap": "cap-02",
   "way": "keyless",
   "capability": "Search depth",
   "task": "advanced vs basic for \"what is the Model Context Protocol\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "advanced -> 200, usage {'credits': 2}, avg content len 1490; basic -> 200, usage {'credits': 1}, avg len 1490",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "yes"
   }
  },
  {
   "t": "09:52",
   "cap": "cap-03",
   "way": "keyless",
   "capability": "Search with answer",
   "task": "include_answer for \"what is the Model Context Protocol\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /search include_answer=basic -> 200; answer: The Model Context Protocol (MCP) is an open standard introduced by Anthropic in November 2024 to standardize the way AI systems like large language models integ",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "yes"
   }
  },
  {
   "t": "09:57",
   "cap": "cap-02",
   "way": "keyless",
   "capability": "Search depth",
   "task": "advanced vs basic for \"what is HTTP 402 Payment Required\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "advanced -> 200, usage {'credits': 2}, avg content len 148; basic -> 200, usage {'credits': 1}, avg len 148",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "yes"
   },
   "trial": 2
  },
  {
   "t": "10:00",
   "cap": "cap-03",
   "way": "keyless",
   "capability": "Search with answer",
   "task": "include_answer for \"what is HTTP 402 Payment Required\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /search include_answer=basic -> 200; answer: HTTP 402 is a rarely used HTTP response status code indicating that payment is required to access a resource. In the context of the x402 protocol, it is used to",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "yes"
   },
   "trial": 2
  },
  {
   "t": "10:04",
   "cap": "cap-02",
   "way": "keyless",
   "capability": "Search depth",
   "task": "advanced vs basic for \"what is RFC 9457\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "advanced -> 200, usage {'credits': 2}, avg content len 1183; basic -> 200, usage {'credits': 1}, avg len 1183",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "yes"
   },
   "trial": 3
  },
  {
   "t": "10:07",
   "cap": "cap-03",
   "way": "keyless",
   "capability": "Search with answer",
   "task": "include_answer for \"what is RFC 9457\"",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /search include_answer=basic -> 200; answer: RFC 9457, the successor to RFC 7807, provides a standard for expressing error details in a structured, consistent, and machine-readable format for HTTP APIs. It",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
    "verify_route": "yes"
   },
   "trial": 3
  },
  {
   "t": "10:15",
   "cap": "cap-04",
   "way": "keyless",
   "capability": "Extract page content",
   "task": "extract https://docs.tavily.com/documentation/quickstart plus one bad URL",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /extract keyless -> 200; results [('https://docs.tavily.com/documentation/quickstart', 2816)]; failed_results [{'url': 'https://docs.tavily.com/this-page-does-not-exist-xyz', 'error': '404 page not found'}]; usage {'credits': 0}",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/extract.md",
    "verify_route": "yes",
    "error_legibility": "clear"
   }
  },
  {
   "t": "10:16",
   "cap": "cap-04",
   "way": "keyless",
   "capability": "Extract page content",
   "task": "extract https://www.rfc-editor.org/rfc/rfc9457.html plus one bad URL",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "failed",
   "verified": false,
   "evidence": "POST /extract keyless -> 200; results []; failed_results [{'url': 'https://docs.tavily.com/this-page-does-not-exist-xyz', 'error': '404 page not found'}, {'url': 'https://www.rfc-editor.org/rfc/rfc9457.html', 'error': '404 page not found'}]; usage {'credits': 0}",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/extract.md",
    "verify_route": "yes",
    "error_legibility": "clear"
   },
   "trial": 2
  },
  {
   "t": "10:17",
   "cap": "cap-04",
   "way": "keyless",
   "capability": "Extract page content",
   "task": "extract https://docs.tavily.com/documentation/api-reference/introduction plus one bad URL",
   "route": "api",
   "documented": true,
   "step": "use",
   "result": "done",
   "verified": true,
   "evidence": "POST /extract keyless -> 200; results [('https://docs.tavily.com/documentation/api-reference/introduction', 4215)]; failed_results [{'url': 'https://docs.tavily.com/this-page-does-not-exist-xyz', 'error': '404 page not found'}]; usage {'credits': 0}",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/extract.md",
    "verify_route": "yes",
    "error_legibility": "clear"
   },
   "trial": 3
  },
  {
   "t": "10:46",
   "cap": "cap-05",
   "way": "keyless",
   "capability": "Crawl a site",
   "task": "Crawl a site without an account (API /crawl, MCP tavily_crawl, x402)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Keyless POST /crawl -> 404 {\"code\":\"unsupported_endpoint\",\"message\":\"This Tavily endpoint requires an API key. Keyless Tavily currently supports Search and Extract only...\"}; MCP tavily_crawl keyless returns the same error; x402.tavily.com/crawl -> 404 \"Route not found\" (x402 sells /search only). Needs an API key from an account; sign-up refused our agent (Turnstile on email, \"Suspicious User Agent\" on GitHub/OAuth).",
   "notes": "Not plan-gated: docs say the free key (1,000 credits/month) covers it; blocked by the sign-up wall. The error next_actions points to x402 for this endpoint though x402 only sells /search."
  },
  {
   "t": "10:46",
   "cap": "cap-06",
   "way": "keyless",
   "capability": "Map a site",
   "task": "Map a site without an account (API /map, MCP tavily_map, x402)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Keyless POST /map -> 404 {\"code\":\"unsupported_endpoint\",\"message\":\"This Tavily endpoint requires an API key. Keyless Tavily currently supports Search and Extract only...\"}; MCP tavily_map keyless returns the same error; x402.tavily.com/map -> 404 \"Route not found\" (x402 sells /search only). Needs an API key from an account; sign-up refused our agent (Turnstile on email, \"Suspicious User Agent\" on GitHub/OAuth).",
   "notes": "Not plan-gated: docs say the free key (1,000 credits/month) covers it; blocked by the sign-up wall. The error next_actions points to x402 for this endpoint though x402 only sells /search."
  },
  {
   "t": "10:46",
   "cap": "cap-07",
   "way": "keyless",
   "capability": "Research task",
   "task": "Research task without an account (API /research, MCP tavily_research, x402)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Keyless POST /research -> 404 {\"code\":\"unsupported_endpoint\",\"message\":\"This Tavily endpoint requires an API key. Keyless Tavily currently supports Search and Extract only...\"}; MCP tavily_research keyless returns the same error; x402.tavily.com/research -> 404 \"Route not found\" (x402 sells /search only). Needs an API key from an account; sign-up refused our agent (Turnstile on email, \"Suspicious User Agent\" on GitHub/OAuth).",
   "notes": "Not plan-gated: docs say the free key (1,000 credits/month) covers it; blocked by the sign-up wall. The error next_actions points to x402 for this endpoint though x402 only sells /search."
  },
  {
   "t": "10:46",
   "cap": "cap-08",
   "way": "keyless",
   "capability": "Research with model choice",
   "task": "Research with model choice without an account (API /research (model), MCP tavily_research, x402)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Keyless POST /research -> 404 {\"code\":\"unsupported_endpoint\",\"message\":\"This Tavily endpoint requires an API key. Keyless Tavily currently supports Search and Extract only...\"}; MCP tavily_research keyless returns the same error; x402.tavily.com/research -> 404 \"Route not found\" (x402 sells /search only). Needs an API key from an account; sign-up refused our agent (Turnstile on email, \"Suspicious User Agent\" on GitHub/OAuth).",
   "notes": "Not plan-gated: docs say the free key (1,000 credits/month) covers it; blocked by the sign-up wall. The error next_actions points to x402 for this endpoint though x402 only sells /search."
  },
  {
   "t": "11:00",
   "cap": "docs",
   "way": "keyless",
   "capability": "find docs",
   "task": "docs.tavily.com, llms.txt, OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "docs.tavily.com/llms.txt 200; OpenAPI 3.0.3 at docs.tavily.com/documentation/api-reference/openapi.json; every page as .md; keyless page explains no-account use",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/llms.txt"
   }
  },
  {
   "t": "11:00",
   "cap": "verify",
   "way": "email_password",
   "capability": "verify email",
   "task": "verification mail",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not reached: the email sign-up stopped at the Turnstile \"Verify you are human\" check before any mail was sent"
  },
  {
   "t": "11:00",
   "cap": "credentials",
   "way": "keyless",
   "capability": "get API key",
   "task": "API key from app.tavily.com",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: the key lives in the dashboard at app.tavily.com, which our agent's browser could not enter (Turnstile on email sign-up; Auth0 access_denied \"Suspicious User Agent\" after GitHub). Keyless mode needs no credential for search/extract."
  },
  {
   "t": "11:00",
   "cap": "credentials",
   "way": "keyless",
   "key": "create",
   "capability": "scoped key headless",
   "task": "create a scoped API key via API/CLI",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Docs list POST /generate-keys and /deactivate-keys (key management) but they need an existing API key; the OpenAPI has no key route; tvly CLI has login/logout only. With no account there is no key to start from."
  },
  {
   "t": "11:00",
   "cap": "first_call",
   "way": "keyless",
   "capability": "first API call",
   "task": "POST /search keyless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST https://api.tavily.com/search with X-Tavily-Access-Mode: keyless -> 200 with results (also MCP tools/call and tvly CLI keyless)"
  },
  {
   "t": "11:00",
   "cap": "first_action",
   "way": "keyless",
   "capability": "first real action",
   "task": "extract a page keyless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /extract keyless -> 200 raw_content for docs.tavily.com/documentation/quickstart (2816 chars). Nothing is stored for the caller (stateless product)."
  },
  {
   "t": "11:16",
   "cap": "cap-12",
   "way": "keyless",
   "capability": "Search filters: topic and time window",
   "task": "news search 2026-10-01..2026-10-15",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /search topic=news start_date/end_date -> 200; published_date of all 5 results inside the window: ['Wed, 14 Oct 2026 05:00:00 GMT', 'Mon, 12 Oct 2026 21:20:13 GMT', 'Wed, 14 Oct 2026 17:25:31 GMT', 'Tue, 13 Oct 2026 18:46:27 GMT', 'Mon, 12 Oct 2026 20:08:02 GMT']",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md"
   }
  },
  {
   "t": "11:19",
   "cap": "cap-13",
   "way": "keyless",
   "capability": "Domain include/exclude",
   "task": "include modelcontextprotocol.io+github.com, exclude github.com",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /search -> 200; hosts ['modelcontextprotocol.io', 'modelcontextprotocol.io', 'modelcontextprotocol.io', 'modelcontextprotocol.io', 'modelcontextprotocol.io']",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md"
   }
  },
  {
   "t": "11:22",
   "cap": "cap-15",
   "way": "keyless",
   "capability": "Image results",
   "task": "include_images + descriptions",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /search include_images -> 200; 5 images; first [{\"url\": \"https://upload.wikimedia.org/wikipedia/commons/b/bf/Golden_Gate_Bridge_as_seen_from_Battery_East.jpg?utm_source=en.wikipedia.org&utm_campaign=index&utm_content=original\", \"title\": \"Golden Ga",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md"
   }
  },
  {
   "t": "11:24",
   "cap": "cap-16",
   "way": "keyless",
   "capability": "Raw content in search",
   "task": "include_raw_content=markdown",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /search include_raw_content=markdown -> 200; raw_content lengths [11923, 9823]",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md"
   }
  },
  {
   "t": "11:28",
   "cap": "cap-14",
   "way": "keyless",
   "capability": "Country boost",
   "task": "country=france vs none",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "country=france -> 200 hosts ['nevertwofull.com', 'www.doitinparis.com', 'clarascrumbs.substack.com', 'lyonsecret.com', 'www.parisunlocked.com']; unfiltered -> 200 hosts ['www.yelp.com', 'www.tripadvisor.com', 'www.visitlancasterpa.com', 'www.mclennancontracting.com', 'www.reddit.com']",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md"
   }
  },
  {
   "t": "11:43",
   "cap": "cap-17",
   "way": "keyless",
   "capability": "Extract depth",
   "task": "extract tavily.com/pricing basic vs advanced",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "advanced -> 200 len [2704] usage {'credits': 0}; basic -> 200 len [2704] usage {'credits': 0}",
   "notes": "keyless usage shows 0 credits for extract",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/extract.md"
   }
  },
  {
   "t": "12:03",
   "cap": "cap-18",
   "way": "keyless",
   "capability": "Query-focused extract",
   "task": "extract API intro with query + chunks_per_source=2",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "full page 4215 chars; with query \"authentication with API key\" + chunks_per_source=2: 1552 chars of top chunks. (A first try on the search endpoint page returned empty results/failed_results for the plain extract.)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/api-reference/endpoint/extract.md"
   }
  },
  {
   "t": "12:03",
   "cap": "cap-21",
   "way": "keyless",
   "capability": "Keyless access",
   "task": "search+extract with X-Tavily-Access-Mode: keyless, no Authorization",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Every keyless /search and /extract call in this drive returned 200 with normal results (see ..04 lines); without the header the MCP endpoint answers 401",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/keyless.md"
   }
  },
  {
   "t": "12:04",
   "cap": "cap-24",
   "way": "keyless",
   "capability": "CLI",
   "task": "tvly search \"Tavily CLI\" --json (no key)",
   "route": "cli",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "tavily-cli from PyPI; exit 3; JSON with 0 results. crawl/map/research commands say \"requires a Tavily API key\"",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/tavily-cli.md",
    "error_legibility": "clear",
    "recoverable": "yes"
   },
   "notes": "exit 3: {\"code\":\"hourly_cap_reached\",\"message\":\"You reached the hourly keyless Tavily limit...\",\"retry_after_seconds\":41} after ~40 keyless calls; the same command had worked minutes earlier"
  },
  {
   "t": "13:09",
   "cap": "cap-24",
   "way": "keyless",
   "capability": "CLI",
   "task": "tvly search \"Tavily CLI\" --json after Retry-After",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "exit 0, JSON with 2 results; the \"hourly\" keyless cap cleared after ~30 s",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.tavily.com/documentation/tavily-cli.md"
   }
  },
  {
   "t": "13:09",
   "cap": "cap-26",
   "way": "keyless",
   "capability": "Feedback",
   "task": "POST /feedback for a keyless request_id",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST /feedback keyless -> 404 {\"code\":\"unsupported_endpoint\",\"message\":\"This Tavily endpoint requires an API key...\"}; no account to get a key"
  },
  {
   "t": "13:09",
   "cap": "cap-22",
   "way": "keyless",
   "capability": "x402 pay per call",
   "task": "check against docs",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "pay_tx.json: 402 x402 v2 challenge from x402.tavily.com/search confirmed; we signed payments, all answered 402 settlement_failed; /.well-known/pricing lists /search advanced $0.01"
  },
  {
   "t": "13:10",
   "cap": "cap-25",
   "way": "keyless",
   "capability": "Skills install with CLI",
   "task": "check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "docs tavily-cli.md: installing the CLI installs Agent Skills; tvly init \"Authenticate, install Tavily skills\"; docs.tavily.com/.well-known/agent-skills/index.json lists skill \"tavilyai\". Not run: init needs authentication"
  },
  {
   "t": "13:10",
   "cap": "cap-27",
   "way": "keyless",
   "capability": "GET /usage",
   "task": "check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "OpenAPI documents GET /usage (API key required); not callable without an account"
  },
  {
   "t": "13:10",
   "cap": "cap-28",
   "way": "keyless",
   "capability": "GET /logs",
   "task": "check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "OpenAPI documents GET /logs; needs an API key"
  },
  {
   "t": "13:10",
   "cap": "cap-29",
   "way": "keyless",
   "capability": "Key management API",
   "task": "check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "docs list generate-keys/deactivate-keys; not in OpenAPI; needs an API key"
  },
  {
   "t": "13:10",
   "cap": "cap-30",
   "way": "keyless",
   "capability": "Org usage",
   "task": "check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "OpenAPI documents GET /org-usage (enterprise); needs key"
  },
  {
   "t": "13:10",
   "cap": "cap-31",
   "way": "keyless",
   "capability": "Billing page",
   "task": "check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "app.tavily.com/billing; dashboard not reachable without an account"
  },
  {
   "t": "13:10",
   "cap": "cap-09",
   "way": "keyless",
   "capability": "Research streaming",
   "task": "Research streaming without an account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs /research or /crawl//map, which answer 404 unsupported_endpoint \"requires an API key\" keylessly; sign-up refused our agent, so no key"
  },
  {
   "t": "13:10",
   "cap": "cap-10",
   "way": "keyless",
   "capability": "Research output_schema",
   "task": "Research output_schema without an account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs /research or /crawl//map, which answer 404 unsupported_endpoint \"requires an API key\" keylessly; sign-up refused our agent, so no key"
  },
  {
   "t": "13:10",
   "cap": "cap-11",
   "way": "keyless",
   "capability": "Research with files",
   "task": "Research with files without an account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs /research or /crawl//map, which answer 404 unsupported_endpoint \"requires an API key\" keylessly; sign-up refused our agent, so no key"
  },
  {
   "t": "13:10",
   "cap": "cap-19",
   "way": "keyless",
   "capability": "Crawl/map options",
   "task": "Crawl/map options without an account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs /research or /crawl//map, which answer 404 unsupported_endpoint \"requires an API key\" keylessly; sign-up refused our agent, so no key"
  },
  {
   "t": "13:10",
   "cap": "cap-20",
   "way": "keyless",
   "capability": "Research options",
   "task": "Research options without an account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs /research or /crawl//map, which answer 404 unsupported_endpoint \"requires an API key\" keylessly; sign-up refused our agent, so no key"
  },
  {
   "t": "13:21",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "mcp",
   "claim": "tavily_search (map: tavily-search)",
   "doc_url": "https://docs.tavily.com/documentation/mcp",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "tools/call tavily_search keyless at 05:06 returned results (discovery line); a repeat at 05:18 answered {\"code\":\"monthly_cap_reached_bonus_eligible\"} (keyless monthly limit on MCP)",
   "capability": "Docs claim: Run a real-time web search",
   "task": "tavily_search (map: tavily-search)",
   "route": "mcp",
   "evidence": "tools/call tavily_search keyless at 05:06 returned results (discovery line); a repeat at 05:18 answered {\"code\":\"monthly_cap_reached_bonus_eligible\"} (keyless monthly limit on MCP)"
  },
  {
   "t": "13:25",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "mcp",
   "claim": "tavily_search (map: tavily-search)",
   "doc_url": "https://docs.tavily.com/documentation/mcp",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "tavily_search inputSchema has search_depth; the call answered {\"code\":\"monthly_cap_reached_bonus_eligible\",\"message\":\"You reached the monthly keyless Tavily limit...\"}: keyless MCP budget used up, no key to continue",
   "capability": "Docs claim: Choose search depth (basic/advanced/fast/ultra-fast) to trade latency for relevance",
   "task": "tavily_search (map: tavily-search)",
   "route": "mcp",
   "evidence": "tavily_search inputSchema has search_depth; the call answered {\"code\":\"monthly_cap_reached_bonus_eligible\",\"message\":\"You reached the monthly keyless Tavily limit...\"}: keyless MCP budget used up, no key to continue"
  },
  {
   "t": "13:28",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "mcp",
   "claim": "tavily_search (map: tavily-search)",
   "doc_url": "https://docs.tavily.com/documentation/mcp",
   "result": "failed",
   "verified": true,
   "documented": true,
   "notes": "tavily_search with include_answer -> JSON-RPC -32603 \"Internal error: 1 validation error for call[tavily_search] include_answer Unexpected keyword\"; the tool schema has no include_answer, so the MCP surface cannot return an answer",
   "capability": "Docs claim: Get an AI-generated answer alongside search results",
   "task": "tavily_search (map: tavily-search)",
   "route": "mcp",
   "evidence": "tavily_search with include_answer -> JSON-RPC -32603 \"Internal error: 1 validation error for call[tavily_search] include_answer Unexpected keyword\"; the tool schema has no include_answer, so the MCP surface cannot return an answer"
  },
  {
   "t": "13:33",
   "kind": "claim",
   "cap": "cap-04",
   "surface": "mcp",
   "claim": "tavily_extract (map: tavily-extract)",
   "doc_url": "https://docs.tavily.com/documentation/mcp",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "keyless remote MCP tools/call -> 200; {\"results\":[{\"url\":\"https://docs.tavily.com/documentation/quickstart\",\"title\":\"Quickstart - Tavily Docs\",\"raw_content\":\"> ## Documentation Index\\n>\\n> Fetch the",
   "capability": "Docs claim: Extract clean content from one or more URLs",
   "task": "tavily_extract (map: tavily-extract)",
   "route": "mcp",
   "evidence": "keyless remote MCP tools/call -> 200; {\"results\":[{\"url\":\"https://docs.tavily.com/documentation/quickstart\",\"title\":\"Quickstart - Tavily Docs\",\"raw_content\":\"> ## Documentation Index\\n>\\n> Fetch the"
  },
  {
   "t": "14:21",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "api",
   "claim": "POST /search",
   "doc_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "keyless REST call in this drive returned the documented fields (see the cap line)",
   "capability": "Docs claim: Run a real-time web search",
   "task": "POST /search",
   "route": "api",
   "evidence": "keyless REST call in this drive returned the documented fields (see the cap line)"
  },
  {
   "t": "14:21",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "api",
   "claim": "POST /search (search_depth)",
   "doc_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "keyless REST call in this drive returned the documented fields (see the cap line)",
   "capability": "Docs claim: Choose search depth (basic/advanced/fast/ultra-fast) to trade latency for relevance",
   "task": "POST /search (search_depth)",
   "route": "api",
   "evidence": "keyless REST call in this drive returned the documented fields (see the cap line)"
  },
  {
   "t": "14:21",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "api",
   "claim": "POST /search (include_answer)",
   "doc_url": "https://docs.tavily.com/documentation/api-reference/endpoint/search.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "keyless REST call in this drive returned the documented fields (see the cap line)",
   "capability": "Docs claim: Get an AI-generated answer alongside search results",
   "task": "POST /search (include_answer)",
   "route": "api",
   "evidence": "keyless REST call in this drive returned the documented fields (see the cap line)"
  },
  {
   "t": "14:21",
   "kind": "claim",
   "cap": "cap-04",
   "surface": "api",
   "claim": "POST /extract",
   "doc_url": "https://docs.tavily.com/documentation/api-reference/endpoint/extract.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "keyless REST call in this drive returned the documented fields (see the cap line)",
   "capability": "Docs claim: Extract clean content from one or more URLs",
   "task": "POST /extract",
   "route": "api",
   "evidence": "keyless REST call in this drive returned the documented fields (see the cap line)"
  },
  {
   "t": "15:34",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "cli",
   "claim": "tvly search --max-results --json",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "exit 0; {\"query\": \"Tavily Nebius\", \"follow_up_questions\": null, \"answer\": null, \"images\": [], \"results\": [{\"url\": \"https://nebius.com/blog/posts/bringing-agentic-search-into-the-production-ai-stack\", \"title\": \"Nebius and Tavily:",
   "capability": "Docs claim: Run a real-time web search",
   "task": "tvly search --max-results --json",
   "route": "cli",
   "evidence": "exit 0; {\"query\": \"Tavily Nebius\", \"follow_up_questions\": null, \"answer\": null, \"images\": [], \"results\": [{\"url\": \"https://nebius.com/blog/posts/bringing-agentic-search-into-the-production-ai-stack\", \"title\": \"Nebius and Tavily:"
  },
  {
   "t": "15:40",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "cli",
   "claim": "tvly search --depth --max-results --json",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-payments/x402) or sig",
   "capability": "Docs claim: Choose search depth (basic/advanced/fast/ultra-fast) to trade latency for relevance",
   "task": "tvly search --depth --max-results --json",
   "route": "cli",
   "evidence": "exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-payments/x402) or sig"
  },
  {
   "t": "15:46",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "cli",
   "claim": "tvly search --include-answer --max-results --json",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-payments/x402) or sig",
   "capability": "Docs claim: Get an AI-generated answer alongside search results",
   "task": "tvly search --include-answer --max-results --json",
   "route": "cli",
   "evidence": "exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-payments/x402) or sig"
  },
  {
   "t": "15:52",
   "kind": "claim",
   "cap": "cap-04",
   "surface": "cli",
   "claim": "tvly extract --json",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-payments/x402) or sig",
   "capability": "Docs claim: Extract clean content from one or more URLs",
   "task": "tvly extract --json",
   "route": "cli",
   "evidence": "exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-payments/x402) or sig"
  },
  {
   "t": "16:06",
   "kind": "claim",
   "cap": "cap-05",
   "surface": "api",
   "claim": "POST /crawl",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Crawl a website from a root URL and extract content from discovered pages",
   "task": "POST /crawl",
   "route": "api",
   "evidence": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:06",
   "kind": "claim",
   "cap": "cap-05",
   "surface": "mcp",
   "claim": "tavily-crawl (local MCP server)",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Crawl a website from a root URL and extract content from discovered pages",
   "task": "tavily-crawl (local MCP server)",
   "route": "mcp",
   "evidence": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:06",
   "kind": "claim",
   "cap": "cap-05",
   "surface": "cli",
   "claim": "tvly crawl",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable",
   "capability": "Docs claim: Crawl a website from a root URL and extract content from discovered pages",
   "task": "tvly crawl",
   "route": "cli",
   "evidence": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable"
  },
  {
   "t": "16:06",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "api",
   "claim": "POST /map",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Map a site's URL structure without extracting content",
   "task": "POST /map",
   "route": "api",
   "evidence": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:06",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "mcp",
   "claim": "tavily-map (local MCP server)",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Map a site's URL structure without extracting content",
   "task": "tavily-map (local MCP server)",
   "route": "mcp",
   "evidence": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:06",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "cli",
   "claim": "tvly map",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable",
   "capability": "Docs claim: Map a site's URL structure without extracting content",
   "task": "tvly map",
   "route": "cli",
   "evidence": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable"
  },
  {
   "t": "16:07",
   "kind": "claim",
   "cap": "cap-07",
   "surface": "api",
   "claim": "POST /research",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Create a cited research report/task on a topic",
   "task": "POST /research",
   "route": "api",
   "evidence": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:07",
   "kind": "claim",
   "cap": "cap-07",
   "surface": "mcp",
   "claim": "tavily-research (local MCP server)",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Create a cited research report/task on a topic",
   "task": "tavily-research (local MCP server)",
   "route": "mcp",
   "evidence": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:07",
   "kind": "claim",
   "cap": "cap-07",
   "surface": "cli",
   "claim": "tvly research",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable",
   "capability": "Docs claim: Create a cited research report/task on a topic",
   "task": "tvly research",
   "route": "cli",
   "evidence": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable"
  },
  {
   "t": "16:07",
   "kind": "claim",
   "cap": "cap-08",
   "surface": "api",
   "claim": "POST /research (model)",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Pick a research model (mini for narrow questions, pro for multi-angle research, auto)",
   "task": "POST /research (model)",
   "route": "api",
   "evidence": "keyless REST answers 404 unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:07",
   "kind": "claim",
   "cap": "cap-08",
   "surface": "mcp",
   "claim": "tavily-research",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable",
   "capability": "Docs claim: Pick a research model (mini for narrow questions, pro for multi-angle research, auto)",
   "task": "tavily-research",
   "route": "mcp",
   "evidence": "keyless MCP tool listed in tools/list but answers unsupported_endpoint \"requires an API key\"; no account/key reachable"
  },
  {
   "t": "16:07",
   "kind": "claim",
   "cap": "cap-08",
   "surface": "cli",
   "claim": "tvly research --model",
   "doc_url": "https://docs.tavily.com/documentation/keyless.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable",
   "capability": "Docs claim: Pick a research model (mini for narrow questions, pro for multi-angle research, auto)",
   "task": "tvly research --model",
   "route": "cli",
   "evidence": "tvly says \"The crawl command requires a Tavily API key\"; no account/key reachable"
  },
  {
   "t": "16:07",
   "cap": "signup",
   "way": "person_key",
   "capability": "person makes key",
   "task": "a person signs up and hands the agent a key",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "not_tried": "assisted_only",
   "verified": false,
   "evidence": "docs: \"Get a free API key at https://app.tavily.com\"; this is a public, unassisted drive"
  },
  {
   "t": "16:07",
   "cap": "signup",
   "way": "sso_google",
   "capability": "Continue with Google",
   "task": "Continue with Google",
   "route": "browser",
   "documented": true,
   "result": "skipped",
   "not_tried": "no_kit",
   "verified": false,
   "evidence": "pw sso google: \"this drive has no Google account\""
  },
  {
   "t": "16:07",
   "cap": "signup",
   "way": "device_login",
   "capability": "CLI device login",
   "task": "tvly login",
   "route": "cli",
   "documented": true,
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "evidence": "tvly login is a browser OAuth with a 127.0.0.1 callback (no device code); tried as oauth_consent, refused \"Suspicious User Agent\""
  },
  {
   "t": "16:19",
   "cap": "pay",
   "way": "keyless",
   "step": "checkout",
   "capability": "walk to the last click",
   "task": "buy the cheapest paid plan (Project $30/month)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "www.tavily.com/pricing: Researcher Free (1,000 credits/month, \"No credit card required\"), Pay As You Go $0.008/credit, Project $30/month (4,000 credits), Enterprise \"Talk to Team\". Every \"Get Started\" leads to app.tavily.com, which needs an account; our sign-up was refused (Turnstile; Auth0 \"Suspicious User Agent\"), so the checkout was never opened. No billing API in the OpenAPI.",
   "notes": "checkout reached: no; processor unknown"
  },
  {
   "t": "16:19",
   "cap": "cancel",
   "way": "keyless",
   "capability": "cancel plan",
   "task": "cancel what the drive started",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "tested": false,
   "evidence": "Nothing to cancel: the drive started no plan or trial (keyless calls only; our x402 payments did not settle). Docs/pricing say Pay As You Go \"Cancel anytime\"; plan management lives in the app.tavily.com billing page (no billing API in the OpenAPI)."
  },
  {
   "t": "18:37",
   "cap": "delete",
   "way": "sso_github",
   "step": "revoke",
   "capability": "revoke GitHub grant",
   "task": "revoke Tavily at github.com/settings/applications",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Tavily (owned by tavily-ai) listed as authorized OAuth app; Revoke access -> list now shows only Apify (\"You have granted 1 application access\")"
  },
  {
   "t": "18:37",
   "cap": "delete",
   "way": "keyless",
   "capability": "delete account and data",
   "task": "delete what the drive made",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "left": "nothing_made",
   "evidence": "The working way in (keyless search/extract, MCP, CLI) stores nothing for the caller and needs no account. Continue with GitHub reached Tavily's Auth0 but the app answered access_denied \"Suspicious User Agent\", so we never entered an account to delete; whether Auth0 kept a user record for the GitHub identity is unknown (no way to sign in and check). The GitHub grant was revoked."
  },
  {
   "t": "19:54",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "cli",
   "claim": "tvly search --depth --max-results --json",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "retry after Retry-After: exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-p",
   "capability": "Docs claim: Choose search depth (basic/advanced/fast/ultra-fast) to trade latency for relevance",
   "task": "tvly search --depth --max-results --json",
   "route": "cli",
   "evidence": "retry after Retry-After: exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-p"
  },
  {
   "t": "21:02",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "cli",
   "claim": "tvly search --include-answer --max-results --json",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "retry after Retry-After: exit 0; {\"query\": \"what is llms.txt\", \"follow_up_questions\": null, \"answer\": \"The llms.txt file is a plain text file placed at the root of a website to provide guidance to large language models about how to i",
   "capability": "Docs claim: Get an AI-generated answer alongside search results",
   "task": "tvly search --include-answer --max-results --json",
   "route": "cli",
   "evidence": "retry after Retry-After: exit 0; {\"query\": \"what is llms.txt\", \"follow_up_questions\": null, \"answer\": \"The llms.txt file is a plain text file placed at the root of a website to provide guidance to large language models about how to i"
  },
  {
   "t": "22:07",
   "kind": "claim",
   "cap": "cap-04",
   "surface": "cli",
   "claim": "tvly extract --json",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "retry after Retry-After: exit 0; {\"results\": [{\"url\": \"https://docs.tavily.com/documentation/quickstart\", \"title\": \"Quickstart - Tavily Docs\", \"raw_content\": \"> ## Documentation Index\\n>\\n> Fetch the complete documentation index at:<",
   "capability": "Docs claim: Extract clean content from one or more URLs",
   "task": "tvly extract --json",
   "route": "cli",
   "evidence": "retry after Retry-After: exit 0; {\"results\": [{\"url\": \"https://docs.tavily.com/documentation/quickstart\", \"title\": \"Quickstart - Tavily Docs\", \"raw_content\": \"> ## Documentation Index\\n>\\n> Fetch the complete documentation index at:<"
  },
  {
   "t": "23:28",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "cli",
   "claim": "tvly search --depth advanced",
   "doc_url": "https://docs.tavily.com/documentation/tavily-cli.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "third try after waiting out Retry-After: exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-p",
   "capability": "Docs claim: Choose search depth (basic/advanced/fast/ultra-fast) to trade latency for relevance",
   "task": "tvly search --depth advanced",
   "route": "cli",
   "evidence": "third try after waiting out Retry-After: exit 3; {\"error\": {\"code\": \"hourly_cap_reached\", \"message\": \"You reached the hourly keyless Tavily limit. To continue immediately, pay via x402 agentic payment (https://docs.tavily.com/documentation/machine-p"
  }
 ],
 "stale": false,
 "icon": "/logos/tavily.png",
 "monitored": false,
 "verdict": null,
 "page": "https://agentdrives.com/tools/tavily?via=api"
}