{
 "slug": "brave",
 "name": "Brave Search API",
 "url": "https://brave.com/search/api",
 "domain": "brave.com",
 "category": "search-apis",
 "category_name": "Search APIs",
 "tested_at": "2026-10-14",
 "run": "20261014T050127Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T000326Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261014T050127Z",
   "date": "2026-10-14",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "credentials"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "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, deletes its account",
   "how": "no-account"
  }
 ],
 "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": "no",
   "text": "Can't get in on its own",
   "at": "credentials",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "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, deletes its account",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent get a key on its own"
 },
 "stop": "credentials",
 "core": "6/7",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 90,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 90,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 1,
    "value": "2025-11-25"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [
  {
   "capability": "Run a web search and get ranked results",
   "probe": "bad credential (our own made-up key)",
   "outcome": "422 application/json {\"error\":{\"code\":\"SUBSCRIPTION_TOKEN_INVALID\",\"detail\":\"The provided subscription token is invalid.\",\"meta\":{\"component\":\"authentication\"},\"status\":422},\"type\":\"ErrorResponse\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Run a web search and get ranked results",
   "probe": "missing required header",
   "outcome": "422 {\"error\":{\"code\":\"VALIDATION\",\"detail\":\"Unable to validate request parameter(s)\",\"meta\":{\"errors\":[{\"loc\":[\"header\",\"x-subscription-token\"],\"msg\":\"Field required\",\"type\":\"missing\"}]},\"status\":422}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Pay per-request with a stablecoin micropayment instead of an API key",
   "probe": "paid path without required q, unpaid",
   "outcome": "402 with Payment-Required header (asks to pay before validating the query); unsold path /res/v1/answers -> 404 empty body",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Pay per-request with a stablecoin micropayment instead of an API key",
   "probe": "burst of 12 unpaid calls on the x402 host",
   "outcome": "12x 402 with Payment-Required; no 429, no block",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "none-seen"
  },
  {
   "capability": "Run a web search and get ranked results",
   "probe": "idempotency / repeat",
   "outcome": "Both 200 with results; searches are reads, nothing duplicated",
   "grade": "clear",
   "idempotent": "n/a",
   "rate_limit": null
  }
 ],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 4,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "b93fd797b556",
  "kb_version": "3+overlay-1353601952",
  "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": "obey"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": {
  "rung": "signup",
  "vendor": "Brave's own proof-of-work captcha ('Verifying you're a human being...')",
  "signed": true
 },
 "who_gets_in": {
  "server": {
   "state": "closed"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "unknown",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt at api-dashboard.search.brave.com/llms.txt; every docs page as Markdown (.md URL and Accept: text/markdown with Vary: Accept); the agent-payments guide and the x402 host's own llms.txt and OpenAPI 3.1.0."
  },
  "signup": {
   "status": "browser",
   "note": "Web form only (name, email, password); the submit button runs Brave's own proof-of-work check, which passed on its own. No sign-up API."
  },
  "verify": {
   "status": "browser",
   "note": "A 6-digit code by email (arrived in about a minute), typed on /verify-account. The quickstart still says a confirmation link."
  },
  "credentials": {
   "status": "blocked",
   "cause": "card",
   "note": "API keys need an activated plan, and every plan, including the one with $5 of free monthly credits, needs a card ('A valid card is required to activate your plan and unlock your free credits'). Keys are made only in the dashboard; there is no key API or CLI.",
   "via": ""
  },
  "first_call": {
   "status": "",
   "cause": "card",
   "note": "No key without a carded plan. The same endpoints answered 200 in the docs playground in a browser with a shared demo key, and our x402 payment for one search got 502 'x402 payment could not be settled'.",
   "route": "account",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Same wall as the first call: a search on our own key needs a key, which needs a card.",
   "cause": "card",
   "reached": false
  },
  "pay": {
   "status": "blocked",
   "grade": "P3",
   "rails": [
    "x402 v2 (USDC on Base) on search.agent.s.brave.app"
   ],
   "rail_ids": [
    "x402",
    "stripe-checkout"
   ],
   "first_party": true,
   "rail_scope": "partial",
   "trial_path": "card trial",
   "3ds": "none",
   "route": "agent_rail",
   "checkout": {
    "reached": "card_form",
    "processor": "stripe_checkout",
    "captcha": "invisible",
    "three_ds": "not_seen",
    "card_form": true,
    "phone_field": "none",
    "wallets": [
     "link"
    ],
    "rail_offer": "x402",
    "price": "5.00",
    "currency": "USD",
    "period": "usage",
    "plan": "Search (prepaid, $5 free credits a month)",
    "last_button": "Save"
   },
   "person": null,
   "ours": "no_card",
   "note": "Brave's own x402 v2 host sells web, LLM context, news, video, image and place search at $0.005 a call with no account; Answers, Suggest and Spellcheck are not sold there. Our one payment got 502 'x402 payment could not be settled': no tx, no result. The account route activates even the free-credit plan only through Stripe Checkout with a card and billing address; we stopped at the card form (no card; checkout.stripe.com disallows all user agents in robots.txt).",
   "unsettled": {
    "tries": 1,
    "at": "2026-10-14T05:01:58Z"
   },
   "detected_grade": "P4",
   "exercised": false
  },
  "cancel": {
   "status": "",
   "note": "Nothing to cancel: no plan was activated. Plans are managed in the dashboard (My plans); the Help page says all plans must be cancelled before an account can be deleted. No billing API.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "browser",
   "note": "Settings > Manage account > Delete my account, confirmed with email and password; /goodbye said 'Your account and associated data have been successfully deleted', and logging in again was refused ('Invalid email or password'). Billing history is kept.",
   "account": false
  }
 },
 "routes": [
  {
   "route": "keyless",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "partial",
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 6
  },
  {
   "route": "pay_per_call",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "broken",
   "wall": null,
   "person": "none",
   "brings": "wallet",
   "fresh": true,
   "minutes": 1
  },
  {
   "route": "email_password",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "card",
    "owner": "product"
   },
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 12
  },
  {
   "route": "marketplace",
   "offered": "documented",
   "tried": false,
   "not_tried": "no_kit",
   "result": null,
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": null,
   "minutes": null
  },
  {
   "route": "person_key",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": "each",
   "brings": "person_grant",
   "fresh": null,
   "minutes": null
  }
 ],
 "checkout": {
  "reached": "card_form",
  "processor": "stripe_checkout",
  "captcha": "invisible",
  "three_ds": "not_seen",
  "phone_field": "none",
  "wallets": [
   "link"
  ],
  "rail_offer": "x402",
  "period": "usage",
  "card_form": true,
  "price": "5.00",
  "currency": "USD",
  "plan": "Search (prepaid, $5 free credits a month)",
  "last_button": "Save"
 },
 "docs": {
  "at": "2026-10-14",
  "read": 166,
  "listed": 166,
  "sampled": false,
  "overall": "complete",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "good",
  "freshness": "fresh",
  "newest": "2026-10-05",
  "core_pages": "7 of 7",
  "capabilities": "covered"
 },
 "claims": null,
 "pay_options": {
  "checked": "2026-10-14",
  "source": "probe",
  "options": [
   {
    "id": "x402",
    "name": "x402",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [
     "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": null,
   "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": false,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST under api.search.brave.com/res/v1: web, llm/context, news, videos, images, local place_search/pois/descriptions, suggest, spellcheck, chat/completions (Answers)",
  "openapi": "3.1.0 only on the x402 host (8 paid paths with x-payment-info); none found for the keyed API",
  "mcp": "official, local only, 8 tools, needs an API key",
  "llms_txt": "api-dashboard.search.brave.com/llms.txt plus search.agent.s.brave.app/llms.txt; official Agent Skills repo"
 },
 "can_do": [
  "Run web, LLM-context, news, video, image and place searches in the docs playground without an account (browser, shared demo key, automatic proof-of-work check)",
  "Get autocomplete suggestions and spelling corrections in the same playground",
  "Sign up and verify the email in a browser without help",
  "Delete the account in the browser"
 ],
 "cannot_do": [
  {
   "what": "Get an API key",
   "why": "Keys need an activated plan and every plan, even the free-credit one, needs a card at Stripe Checkout"
  },
  {
   "what": "Get an AI answer (Answers API)",
   "why": "The playground's demo key does not cover it, a key needs a card, and x402 does not sell it"
  },
  {
   "what": "Get a paid result over x402",
   "why": "Our payment for one web search got 502 'x402 payment could not be settled'"
  },
  {
   "what": "Use the MCP server",
   "why": "It runs locally and needs an API key"
  }
 ],
 "blockers": [
  "Card required to activate any plan, including the free-credit plan, before an API key can be made",
  "x402 settlement failed (502) on the one paid call"
 ],
 "tips_for_owner": [
  "Give keys without a card",
  "Fix x402 settlement on the agent host",
  "Sell Answers, Suggest and Spellcheck over x402",
  "Offer a hosted MCP server",
  "Add an API for keys and plans",
  "Fix the quickstart's verification step"
 ],
 "tips_for_agents": [
  "Without a key, the API reference 'Try out' playground runs real queries in a browser (shared demo key, proof-of-work check); Answers is not covered.",
  "Pay per call: search.agent.s.brave.app takes x402 v2 (USDC on Base, $0.005 a call) for web, llm/context, news, videos, images and local paths; read its llms.txt first. Our one payment failed to settle (502).",
  "Errors are JSON with code and detail (e.g. 422 SUBSCRIPTION_TOKEN_INVALID); a missing key is 422, not 401.",
  "Every dashboard login sends an emailed code, and repeated logins hit 'Too many codes requested'; keep the session.",
  "The sign-up button stays disabled until fields get real key events."
 ],
 "selfhost": null,
 "summary": "An agent can sign up and verify in a browser, but an API key needs an activated plan, and every plan, even the one with $5 of free monthly credits, needs a card at Stripe Checkout. Without an account, the docs playground ran real web, LLM-context, news, video, image and place searches in a browser, and Brave's own x402 host sells most endpoints per call, but our one payment answered 502 'could not be settled'. The account was deleted in the browser.",
 "wall": "Card required before any API key",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Brave Search API is a web/news/image/video/place search service for developers. Without any account, an agent could run real searches in the browser-based docs playground, but getting its own API key requires an activated plan, and every plan, even the free one, needs a credit card. The agent stopped at that card form.",
  "can_do": [
   "Run web, news, video, image, and local place searches, plus autocomplete and spell-check, without signing up, using the docs' live try-it-out page",
   "Sign up and verify its email on its own",
   "Delete its own account afterward, which also blocked further logins"
  ],
  "cannot_do": [
   {
    "what": "Get a real API key",
    "why": "Every plan, even the free one, needs a credit card"
   },
   {
    "what": "Get an AI-generated answer",
    "why": "That feature needs a paid key, and isn't sold through the pay-per-search option either"
   },
   {
    "what": "Pay per search without a key",
    "why": "The one payment attempt failed to go through (a server error)"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Web search",
   "capability": "Run a web search and get ranked results",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /res/v1/web/search",
    "mcp": "brave_web_search",
    "cli": null,
    "ui": "search.brave.com"
   },
   "check": "Response JSON contains a `web.results` array of URLs/snippets for the query",
   "source": "https://api-dashboard.search.brave.com/documentation/services/web-search"
  },
  {
   "id": "cap-02",
   "group": "AI context",
   "capability": "Get pre-extracted LLM-ready web context for a query",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /res/v1/llm/context",
    "mcp": "brave_llm_context",
    "cli": null,
    "ui": null
   },
   "check": "Response JSON contains ranked `smart chunks`/context blocks sized by maximum_number_of_tokens",
   "source": "https://api-dashboard.search.brave.com/documentation/services/llm-context"
  },
  {
   "id": "cap-03",
   "group": "Answers",
   "capability": "Get an AI-generated, source-cited answer to a question",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "Answers API endpoint",
    "mcp": null,
    "cli": null,
    "ui": "search.brave.com/ask"
   },
   "check": "Response contains a generated answer with citation list grounded on search results",
   "source": "https://api-dashboard.search.brave.com/documentation/services/answers; https://api-dashboard.search.brave.com/app/plans"
  },
  {
   "id": "cap-04",
   "group": "News search",
   "capability": "Search dedicated news index with freshness filters",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /res/v1/news/search",
    "mcp": "brave_news_search",
    "cli": null,
    "ui": "search.brave.com (News tab)"
   },
   "check": "Response JSON `results` list items with publication date and source outlet for the query",
   "source": "https://api-dashboard.search.brave.com/documentation/services/news-search"
  },
  {
   "id": "cap-05",
   "group": "Video search",
   "capability": "Search dedicated video index",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /res/v1/videos/search",
    "mcp": "brave_video_search",
    "cli": null,
    "ui": "search.brave.com (Videos tab)"
   },
   "check": "Response JSON `results` list video items with thumbnail/duration metadata",
   "source": "https://api-dashboard.search.brave.com/documentation/services/video-search"
  },
  {
   "id": "cap-06",
   "group": "Image search",
   "capability": "Search dedicated image index",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /res/v1/images/search",
    "mcp": "brave_image_search",
    "cli": null,
    "ui": "search.brave.com (Images tab)"
   },
   "check": "Response JSON `results` list image items with source URL and dimensions",
   "source": "https://api-dashboard.search.brave.com/documentation/services/image-search"
  },
  {
   "id": "cap-07",
   "group": "Place search",
   "capability": "Find local places/businesses by query and location",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /res/v1/local/search (place endpoint)",
    "mcp": "brave_place_search / brave_local_search",
    "cli": null,
    "ui": null
   },
   "check": "Response JSON returns POIs with name, address, hours, rating for the coordinates/query",
   "source": "https://api-dashboard.search.brave.com/documentation/services/place-search; https://github.com/brave/brave-search-mcp-server"
  },
  {
   "id": "cap-08",
   "group": "Query assist",
   "capability": "Get autocomplete suggestions while typing a query",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /res/v1/suggest/search",
    "mcp": null,
    "cli": null,
    "ui": "search.brave.com (suggestion dropdown)"
   },
   "check": "Response JSON returns an array of suggested query strings for the partial input",
   "source": "https://api-dashboard.search.brave.com/documentation/services/suggest"
  },
  {
   "id": "cap-09",
   "group": "Query assist",
   "capability": "Spellcheck a query and get corrected alternatives",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /res/v1/spellcheck/search",
    "mcp": "spellcheck parameter on search tools",
    "cli": null,
    "ui": "search.brave.com (did-you-mean)"
   },
   "check": "Response JSON returns corrected query suggestions when the input query is misspelled",
   "source": "https://api-dashboard.search.brave.com/documentation/services/spellcheck; https://api-dashboard.search.brave.com/app/plans"
  },
  {
   "id": "cap-10",
   "group": "Result ranking",
   "capability": "Apply a Goggle to re-rank/boost/filter search results",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "`goggles` parameter on search endpoints",
    "mcp": "goggles parameter on brave_web_search/brave_llm_context",
    "cli": null,
    "ui": "search.brave.com/help/goggles"
   },
   "check": "Same query returns a different, boosted/filtered result order when a Goggle is supplied vs. omitted",
   "source": "https://api-dashboard.search.brave.com/documentation/resources/goggles"
  },
  {
   "id": "cap-11",
   "group": "Result refinement",
   "capability": "Use search operators (site:, filetype:, etc.) to filter results in a query",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "operators embedded in `q` parameter",
    "mcp": null,
    "cli": null,
    "ui": "search.brave.com"
   },
   "check": "Query with `site:example.com` returns only results from that domain",
   "source": "https://api-dashboard.search.brave.com/documentation/resources/search-operators"
  },
  {
   "id": "cap-12",
   "group": "AI summarization",
   "capability": "Generate an AI summary from a prior web search's results",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "Summarizer endpoint (via `summary` key)",
    "mcp": "brave_summarizer",
    "cli": null,
    "ui": null
   },
   "check": "Passing the `key` returned by a web search with summary:true returns a generated summary with optional source references",
   "source": "https://github.com/brave/brave-search-mcp-server"
  },
  {
   "id": "cap-13",
   "group": "Localization",
   "capability": "Localize results by country, language, and safesearch level",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "`country`, `search_lang`, `ui_lang`, `safesearch` params on search endpoints",
    "mcp": "same params on all search tools",
    "cli": null,
    "ui": "search.brave.com settings"
   },
   "check": "Same query with different `country`/`search_lang` returns a different localized result set",
   "source": "https://github.com/brave/brave-search-mcp-server"
  },
  {
   "id": "cap-14",
   "group": "Agent access",
   "capability": "Pay per-request with a stablecoin micropayment instead of an API key",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "search.agent.s.brave.app (x402-style payment flow)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Unsigned request to search.agent.s.brave.app returns 402 Payment Required with payment options; a signed payment returns normal search results",
   "source": "https://api-dashboard.search.brave.com/documentation/guides/agent-payments"
  },
  {
   "id": "cap-16",
   "group": "Developer workflow",
   "capability": "Pin requests to a specific dated API version",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "`api-version` request header",
    "mcp": "api-version header on tools",
    "cli": null,
    "ui": null
   },
   "check": "Requests with an older `api-version` header continue returning the response shape for that date after a newer API version ships",
   "source": "https://api-dashboard.search.brave.com/documentation/guides/versioning"
  },
  {
   "id": "cap-17",
   "group": "Developer workflow",
   "capability": "Test API calls interactively before writing code",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "api-dashboard.search.brave.com Playground"
   },
   "check": "Playground page executes a sample query and displays the live JSON response",
   "source": "https://api-dashboard.search.brave.com/app/plans (Getting started > Playground nav)"
  },
  {
   "id": "cap-18",
   "group": "Account/billing",
   "capability": "Choose and switch between Search and Answers pricing plans",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "api-dashboard.search.brave.com/app/plans"
   },
   "check": "Dashboard plan page shows the account's currently active plan after a change",
   "source": "https://api-dashboard.search.brave.com/app/plans"
  },
  {
   "id": "cap-19",
   "group": "Account/billing",
   "capability": "Prepay for credits and track balance consumption",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "api-dashboard.search.brave.com (billing/credits)"
   },
   "check": "Dashboard credits balance decreases after API usage and reflects prepaid top-ups",
   "source": "https://api-dashboard.search.brave.com/app/plans"
  },
  {
   "id": "cap-20",
   "group": "Account/admin",
   "capability": "Monitor rate-limit usage and request quota per plan",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "rate-limit response headers (429 on exceed)",
    "mcp": null,
    "cli": null,
    "ui": "api-dashboard.search.brave.com"
   },
   "check": "Exceeding the plan's requests-per-second returns HTTP 429, and dashboard usage view reflects current request rate",
   "source": "https://api-dashboard.search.brave.com/documentation/guides/rate-limiting"
  },
  {
   "id": "cap-21",
   "group": "Account/admin",
   "capability": "Request Zero Data Retention / enterprise terms for an account",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "contact sales (api-sales@brave.com)"
   },
   "check": "Account terms/contract shows ZDR clause after enterprise agreement is signed",
   "source": "https://api-dashboard.search.brave.com/app/plans; https://brave.com/blog/search-[redacted]/"
  }
 ],
 "attempts": [
  {
   "cap": "discovery",
   "capability": "Docs",
   "task": "Read docs pass, llms.txt, quickstart, auth, agent payments, rate limiting",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "llms.txt at https://api-dashboard.search.brave.com/llms.txt (79 lines, links to .md pages); quickstart says prerequisites \"A credit card to activate a plan\"; Step 2 \"Activate a plan ... Enter your credit card information\"; Step 3 create API key in dashboard /app/keys",
   "notes": "Docs are agent-friendly: every page has index.html.md and Accept: text/markdown negotiation.",
   "t": "01:26"
  },
  {
   "cap": "discovery",
   "capability": "Markdown docs",
   "task": "Accept: text/markdown and .md URL",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /documentation/quickstart with Accept: text/markdown -> content-type text/markdown; vary: Accept. /documentation/quickstart/index.html.md also serves markdown.",
   "notes": "both",
   "t": "01:26"
  },
  {
   "cap": "discovery",
   "capability": "OpenAPI",
   "task": "OpenAPI on agent host and api",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://search.agent.s.brave.app/openapi.json: openapi \"3.1.0\", 8 paid paths with x-payment-info, x-service-info. No OpenAPI found for api.search.brave.com (brave.com/openapi.json 302).",
   "notes": "",
   "t": "01:27"
  },
  {
   "cap": "discovery",
   "capability": "Keyless call",
   "task": "GET api.search.brave.com/res/v1/web/search without key",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "422 application/json {\"error\":{\"code\":\"VALIDATION\",\"detail\":\"Unable to validate request parameter(s)\",\"meta\":{\"errors\":[{\"loc\":[\"header\",\"x-subscription-token\"],\"msg\":\"Field required\"}]},\"status\":422}}",
   "notes": "Error names the missing header; 422 rather than 401.",
   "quality": {
    "error_legibility": "clear"
   },
   "t": "01:27"
  },
  {
   "cap": "signup",
   "way": "pay_per_call",
   "capability": "Pay per call (x402)",
   "task": "We paid one web search over x402 v2 on search.agent.s.brave.app",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "pay_tx.json 20261014T050127Z-mv7n7qzv2tbl: 402 x402 v2, exact, eip155:8453, 5000 base units USDC; the paid retry answered HTTP 502 {\"error\":\"x402 payment could not be settled\"}; tx null, entitled false",
   "notes": "The llms.txt of the agent host documents this 502 as \"Settlement failed after the search ran. The result is withheld and the money did not move\". No result reached us.",
   "quality": {
    "error_legibility": "clear",
    "docs_match": "match",
    "docs_url": "https://search.agent.s.brave.app/llms.txt"
   },
   "t": "06:04"
  },
  {
   "cap": "signup",
   "way": "marketplace",
   "capability": "AWS Marketplace",
   "task": "Subscribe via AWS Marketplace",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "not_tried": "no_kit",
   "verified": false,
   "evidence": "brave.com/search/api lists \"AWS Marketplace\"; our agent has no AWS account",
   "notes": "",
   "t": "06:04"
  },
  {
   "cap": "signup",
   "way": "person_key",
   "capability": "Person gives key",
   "task": "A person hands over a key",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "not_tried": "assisted_only",
   "verified": false,
   "evidence": "door_probe: \"Get API key\" on brave.com/search/api",
   "notes": "Public drive, not assisted.",
   "t": "06:04"
  },
  {
   "cap": "signup",
   "way": "email_password",
   "capability": "Sign up",
   "task": "Create account at /register with the agent's inbox",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Form: Full name, Email, Password; submit is a proof-of-work captcha button (\"Verifying you're a human being...\", Web Worker hashing, no puzzle) that solved on its own; redirected to /verify-account?email=an inbox%40agentdrives.com",
   "notes": "No API sign-up documented. Button stays disabled until fields fire keyup. PoW check let our agent's browser through.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/quickstart/index.html.md"
   },
   "t": "11:04"
  },
  {
   "cap": "verify",
   "way": "email_password",
   "capability": "Verify email",
   "task": "Enter 6-digit code from mail",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Mail from search-api@brave.com \"Brave Search API verification code\" arrived within ~1 min; code entered at /verify-account; landed on /app/dashboard \"You have no active plans yet.\"",
   "notes": "Quickstart says \"clicking the confirmation link\"; live it is a 6-digit code (drift).",
   "quality": {
    "docs_match": "drift",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/quickstart/index.html.md"
   },
   "t": "11:04"
  },
  {
   "cap": "login",
   "way": "email_password",
   "capability": "Session",
   "task": "Logged-in dashboard session",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/app/dashboard shows nav: API keys, Plans, Credits balance, Settings, Billing, MFA, Organization",
   "notes": "",
   "t": "11:04"
  },
  {
   "cap": "discovery",
   "capability": "MCP version (local stdio)",
   "task": "server/discover then initialize on @brave/brave-search-mcp-server 2.1.4 over stdio",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover -> {\"code\":-32601,\"message\":\"Method not found\"} (legacy); initialize offering 2026-07-28 -> protocolVersion \"2025-11-25\", serverInfo brave-search-mcp-server 2.1.4; tools/list: brave_web_search, brave_local_search, brave_video_search, brave_image_search, brave_news_search, brave_summarizer, brave_llm_context, brave_place_search",
   "notes": "Official, local only (stdio default, optional local HTTP); needs BRAVE_API_KEY. Installed under the run dir (npm --prefix mcp).",
   "t": "22:22"
  },
  {
   "cap": "login",
   "way": "email_password",
   "capability": "Log in again",
   "task": "Log in to reach keys/plans (every login sends an email OTP)",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "/verify-otp?nocode=1: \"Your password was accepted, but we could not send a code to your email.\" then on \"Send a new code\": \"Too many codes requested. Please try again in 16 minutes.\"",
   "notes": "Every password login is followed by an emailed 6-digit code (mail \"Brave Search API login attempt\"). After about 8 logins in 10 minutes the code limit was reached; after the stated wait, login worked again. Clear message with a wait time.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "yes"
   },
   "t": "28:48"
  },
  {
   "cap": "credentials",
   "way": "email_password",
   "key": "create",
   "capability": "API key",
   "task": "Create an API key at /app/keys",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": true,
   "evidence": "/app/keys: \"Go to the Available plans page to activate a plan before generating API keys.\" / \"You have no active plans. Go to the Available plans page to activate one before trying to generate API keys.\" Help: \"Why is a credit card required to activate a plan? The credit card serves as an anti-fraud measure...\"; quickstart prerequisites: \"A credit card to activate a plan\"",
   "notes": "Keys only exist under an active plan; every plan (even with the free $5 monthly credits) needs a card. No API/CLI to create keys (docs: dashboard only). We have no card for this drive.",
   "t": "28:48"
  },
  {
   "cap": "cap-17",
   "way": "keyless",
   "capability": "Test API calls interactively before writing code",
   "task": "Run a web search in the API reference playground without an account",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/web/search/get -> Try out -> q=\"model context protocol specification\" -> Send: GET /api-reference/captcha (proof-of-work challenge, solved in the page) then /api-reference/playground?scalar_url=https://api.search.brave.com/res/v1/web/search?q=... -> 200 application/json {\"type\":\"search\",\"query\":{\"original\":\"model context protocol specification\",...}}; headers x-ratelimit-policy \"10;w=1, 0;w=2678400\"; key field placeholder \"Shared demo key\"",
   "notes": "Works logged out with a shared demo key behind an automatic proof-of-work check; no account needed.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md",
    "verify_route": "yes"
   },
   "t": "32:15"
  },
  {
   "cap": "cap-02",
   "way": "keyless",
   "step": "use",
   "capability": "Get pre-extracted LLM-ready web context",
   "task": "One query in the API reference playground (ai/llm_context/get), logged out, shared demo key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/ai/llm_context/get Try out -> Send -> playground proxied https://api.search.brave.com/res/v1/llm/context?q=tallest+mountains+in+the+alps -> 200 application/json; grounding.generic[] with url, title, snippets; x-ratelimit-policy 10;w=1, 0;w=2678400",
   "notes": "Browser only, through the documented playground (proof-of-work check passed on its own, shared demo key). The API itself needs a key behind a card. Searches create nothing, so no create/update/delete chain applies.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/llm-context/index.html.md",
    "verify_route": "yes"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-04",
   "way": "keyless",
   "step": "use",
   "capability": "Search news index",
   "task": "One query in the API reference playground (news/news_search/get), logged out, shared demo key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/news/news_search/get Try out -> Send -> playground proxied https://api.search.brave.com/res/v1/news/search?q=european+central+bank -> 200 application/json; results[] type news_result (ecb.europa.eu ...); x-ratelimit-policy 10;w=1, 0;w=2678400",
   "notes": "Browser only, through the documented playground (proof-of-work check passed on its own, shared demo key). The API itself needs a key behind a card. Searches create nothing, so no create/update/delete chain applies.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/news-search/index.html.md",
    "verify_route": "yes"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-05",
   "way": "keyless",
   "step": "use",
   "capability": "Search video index",
   "task": "One query in the API reference playground (videos/video_search/get), logged out, shared demo key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/videos/video_search/get Try out -> Send -> playground proxied https://api.search.brave.com/res/v1/videos/search?q=how+to+tie+a+bowline+knot -> 200 application/json; results[] type video_result with age/page_age; x-ratelimit-policy 10;w=1, 0;w=2678400",
   "notes": "Browser only, through the documented playground (proof-of-work check passed on its own, shared demo key). The API itself needs a key behind a card. Searches create nothing, so no create/update/delete chain applies.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/video-search/index.html.md",
    "verify_route": "yes"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-06",
   "way": "keyless",
   "step": "use",
   "capability": "Search image index",
   "task": "One query in the API reference playground (images/image_search), logged out, shared demo key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/images/image_search Try out -> Send -> playground proxied https://api.search.brave.com/res/v1/images/search?q=matterhorn -> 200 application/json; results[] type image_result with source, thumbnail; x-ratelimit-policy 10;w=1, 0;w=2678400",
   "notes": "Browser only, through the documented playground (proof-of-work check passed on its own, shared demo key). The API itself needs a key behind a card. Searches create nothing, so no create/update/delete chain applies.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/image-search/index.html.md",
    "verify_route": "yes"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-07",
   "way": "keyless",
   "step": "use",
   "capability": "Find local places",
   "task": "One query in the API reference playground (web/place_search), logged out, shared demo key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/web/place_search Try out -> Send -> playground proxied https://api.search.brave.com/res/v1/local/place_search?q=coffee&latitude=37.7749&longitude=-122.4194&radius=1000 -> 200 application/json; type locations, results[] location_result \"Sightglass Coffee\" with coordinates (defaults lat 37.7749 lon -122.4194); x-ratelimit-policy 10;w=1, 0;w=2678400",
   "notes": "Browser only, through the documented playground (proof-of-work check passed on its own, shared demo key). The API itself needs a key behind a card. Searches create nothing, so no create/update/delete chain applies.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/place-search/index.html.md",
    "verify_route": "yes"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-08",
   "way": "keyless",
   "step": "use",
   "capability": "Autocomplete suggestions",
   "task": "One query in the API reference playground (other/suggestions), logged out, shared demo key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/other/suggestions Try out -> Send -> playground proxied https://api.search.brave.com/res/v1/suggest/search?q=how+to+tie+a -> 200 application/json; results [{\"query\":\"how to tie a tie\"},...]; x-ratelimit-policy 10;w=1, 0;w=2678400",
   "notes": "Browser only, through the documented playground (proof-of-work check passed on its own, shared demo key). The API itself needs a key behind a card. Searches create nothing, so no create/update/delete chain applies.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/suggest/index.html.md",
    "verify_route": "yes"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-09",
   "way": "keyless",
   "step": "use",
   "capability": "Spellcheck a query",
   "task": "One query in the API reference playground (other/spell_check), logged out, shared demo key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/other/spell_check Try out -> Send -> playground proxied https://api.search.brave.com/res/v1/spellcheck/search?q=helo+wrld -> 200 application/json; \"helo wrld\" -> results [{\"query\":\"hello world\"}]; x-ratelimit-policy 10;w=1, 0;w=2678400",
   "notes": "Browser only, through the documented playground (proof-of-work check passed on its own, shared demo key). The API itself needs a key behind a card. Searches create nothing, so no create/update/delete chain applies.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/spellcheck/index.html.md",
    "verify_route": "yes"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-03",
   "way": "keyless",
   "capability": "AI-generated cited answer",
   "task": "Ask \"What is the capital of Switzerland?\" in the Answers playground",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": true,
   "evidence": "https://api-dashboard.search.brave.com/api-reference/ai/answers Try out -> Send -> /res/v1/chat/completions -> 422 {\"type\":\"ErrorResponse\",\"error\":{\"id\":\"[id]\",\"status\":422,\"detail\":\"The provided API key is invalid.\",\"meta\":{\"component\":\"authentication\"},\"code\":\"SUBSCRIPTION_TOKEN_I",
   "notes": "The shared demo key does not cover Answers; a real key needs an activated plan, and every plan needs a card. Answers is also not sold on the x402 host (\"The Answers API (/res/v1/chat/completions) is not sold\").",
   "quality": {
    "error_legibility": "clear",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/answers/index.html.md"
   },
   "t": "33:28"
  },
  {
   "cap": "cap-01",
   "way": "keyless",
   "step": "use",
   "capability": "Run a web search and get ranked results",
   "task": "Web search \"rust ownership\" in the API reference playground, logged out",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "playground -> https://api.search.brave.com/res/v1/web/search?q=rust+ownership -> 200; web.results 20 items, first hosts doc.rust-lang.org, www.reddit.com, doc.rust-lang.org, blog.stevanfreeborn.com, dev.to",
   "notes": "Browser only via the documented playground with the shared demo key; the API route needs a key behind a card, and the x402 route failed to settle (pay_tx.json). Search creates nothing: no create/update/delete chain.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/services/web-search/index.html.md",
    "verify_route": "yes"
   },
   "t": "37:43"
  },
  {
   "cap": "cap-11",
   "way": "keyless",
   "capability": "Search operators",
   "task": "Query \"ownership site:doc.rust-lang.org\" in the playground",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/res/v1/web/search?q=ownership+site%3Adoc.rust-lang.org -> 200, 20 web.results, all of the first 6 on doc.rust-lang.org (unfiltered query had reddit, dev.to etc.)",
   "notes": "",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/resources/search-operators/index.html.md"
   },
   "t": "37:43"
  },
  {
   "cap": "cap-13",
   "way": "keyless",
   "capability": "Localize by country/language",
   "task": "Send country=DE&search_lang=de through the playground, else the API",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": false,
   "evidence": "Playground: the parameter picker (Add -> parameter list) did not yield a value field we could fill; the requests went out without country=DE&search_lang=de. API route: needs X-Subscription-Token, keys need an activated plan, plans need a card. Parameter documented at https://api-dashboard.search.brave.com/api-reference/web/search/get/index.html.md",
   "notes": "Documented; not exercised in this drive.",
   "t": "37:43"
  },
  {
   "cap": "cap-10",
   "way": "keyless",
   "capability": "Apply a Goggle",
   "task": "Send goggles (inline \"$discard / $site=doc.rust-lang.org\") through the playground, else the API",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": false,
   "evidence": "Playground: the parameter picker (Add -> parameter list) did not yield a value field we could fill; the requests went out without goggles. API route: needs X-Subscription-Token, keys need an activated plan, plans need a card. Parameter documented at https://api-dashboard.search.brave.com/documentation/resources/goggles/index.html.md",
   "notes": "Documented; not exercised in this drive.",
   "t": "37:43"
  },
  {
   "cap": "cap-16",
   "way": "keyless",
   "capability": "Pin an API version",
   "task": "Send Api-Version: 2023-01-01 header through the playground, else the API",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": false,
   "evidence": "Playground: the parameter picker (Add -> parameter list) did not yield a value field we could fill; the requests went out without Api-Version:. API route: needs X-Subscription-Token, keys need an activated plan, plans need a card. Parameter documented at https://api-dashboard.search.brave.com/documentation/guides/versioning/index.html.md",
   "notes": "Documented; not exercised in this drive.",
   "t": "37:43"
  },
  {
   "cap": "cap-12",
   "way": "keyless",
   "capability": "AI summary (Summarizer)",
   "task": "Check docs",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "search.agent.s.brave.app/llms.txt: \"The Summarizer (/res/v1/summarizer/search) is not sold: Brave has deprecated it.\" MCP 2.1.4 still lists brave_summarizer.",
   "notes": "Deprecated per Brave; needs a key.",
   "t": "37:43"
  },
  {
   "cap": "cap-14",
   "way": "pay_per_call",
   "capability": "Pay per request with stablecoin",
   "task": "x402 v2 on search.agent.s.brave.app (we paid one web search)",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "pay_tx.json: 402 Payment-Required x402 v2 exact eip155:8453 5000 units USDC to 0xbd94...c3d; paid retry -> 502 {\"error\":\"x402 payment could not be settled\"}; tx null",
   "notes": "Rail exists and is first-party and documented; this drive got no paid result.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/guides/agent-payments/index.html.md",
    "error_legibility": "clear"
   },
   "t": "37:43"
  },
  {
   "cap": "cap-18",
   "capability": "Choose/switch plans",
   "task": "Check against docs and dashboard",
   "route": "browser",
   "documented": true,
   "result": "skipped",
   "verified": true,
   "evidence": "/app/subscriptions/subscribe lists Search ($5.00 per 1,000 requests, \"Includes free $5 in credits every month\", 50 rps), Answers ($4.00 per 1,000 queries + $5/1M tokens in/out, 2 rps), Spellcheck & Suggest tab, Enterprise \"Contact us\"",
   "notes": "Peripheral: checked it exists and is documented.",
   "t": "37:43"
  },
  {
   "cap": "cap-19",
   "capability": "Prepaid credits",
   "task": "Check against docs and dashboard",
   "route": "browser",
   "documented": true,
   "result": "skipped",
   "verified": true,
   "evidence": "/app/credits: \"Credits power Brave Search's prepaid plans. Activate a prepaid plan to add credits\"",
   "notes": "Peripheral: checked it exists and is documented.",
   "t": "37:43"
  },
  {
   "cap": "cap-20",
   "capability": "Rate-limit headers",
   "task": "Check against docs and dashboard",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Live playground answers carry x-ratelimit-limit \"10, 0\", x-ratelimit-policy \"10;w=1, 0;w=2678400\", x-ratelimit-remaining \"10, 0\"; docs rate-limiting page documents X-RateLimit-* and 429",
   "notes": "Peripheral: checked it exists and is documented.",
   "t": "37:44"
  },
  {
   "cap": "cap-21",
   "capability": "ZDR/enterprise terms",
   "task": "Check against docs and dashboard",
   "route": "browser",
   "documented": true,
   "result": "skipped",
   "verified": true,
   "evidence": "Plans page: \"Need custom terms, capacity, or ZDR? Contact us\" (sales)",
   "notes": "Peripheral: checked it exists and is documented.",
   "t": "37:44"
  },
  {
   "kind": "claim",
   "cap": "cap-01",
   "surface": "api",
   "claim": "GET /res/v1/web/search",
   "doc_url": "https://api-dashboard.search.brave.com/documentation/services/web-search",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground.",
   "t": "39:43",
   "capability": "Docs claim: Run a web search and get ranked results",
   "task": "GET /res/v1/web/search",
   "route": "api",
   "evidence": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground."
  },
  {
   "kind": "claim",
   "cap": "cap-01",
   "surface": "mcp",
   "claim": "brave_web_search",
   "doc_url": "https://github.com/brave/brave-search-mcp-server",
   "result": "blocked",
   "verified": true,
   "documented": true,
   "notes": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card).",
   "t": "39:43",
   "capability": "Docs claim: Run a web search and get ranked results",
   "task": "brave_web_search",
   "route": "mcp",
   "evidence": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card)."
  },
  {
   "kind": "claim",
   "cap": "cap-02",
   "surface": "api",
   "claim": "GET /res/v1/llm/context",
   "doc_url": "https://api-dashboard.search.brave.com/documentation/services/llm-context",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground.",
   "t": "39:43",
   "capability": "Docs claim: Get pre-extracted LLM-ready web context for a query",
   "task": "GET /res/v1/llm/context",
   "route": "api",
   "evidence": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground."
  },
  {
   "kind": "claim",
   "cap": "cap-02",
   "surface": "mcp",
   "claim": "brave_llm_context",
   "doc_url": "https://github.com/brave/brave-search-mcp-server",
   "result": "blocked",
   "verified": true,
   "documented": true,
   "notes": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card).",
   "t": "39:43",
   "capability": "Docs claim: Get pre-extracted LLM-ready web context for a query",
   "task": "brave_llm_context",
   "route": "mcp",
   "evidence": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card)."
  },
  {
   "kind": "claim",
   "cap": "cap-04",
   "surface": "api",
   "claim": "GET /res/v1/news/search",
   "doc_url": "https://api-dashboard.search.brave.com/documentation/services/news-search",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground.",
   "t": "39:43",
   "capability": "Docs claim: Search dedicated news index with freshness filters",
   "task": "GET /res/v1/news/search",
   "route": "api",
   "evidence": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground."
  },
  {
   "kind": "claim",
   "cap": "cap-04",
   "surface": "mcp",
   "claim": "brave_news_search",
   "doc_url": "https://github.com/brave/brave-search-mcp-server",
   "result": "blocked",
   "verified": true,
   "documented": true,
   "notes": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card).",
   "t": "39:43",
   "capability": "Docs claim: Search dedicated news index with freshness filters",
   "task": "brave_news_search",
   "route": "mcp",
   "evidence": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card)."
  },
  {
   "kind": "claim",
   "cap": "cap-05",
   "surface": "api",
   "claim": "GET /res/v1/videos/search",
   "doc_url": "https://api-dashboard.search.brave.com/documentation/services/video-search",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground.",
   "t": "39:44",
   "capability": "Docs claim: Search dedicated video index",
   "task": "GET /res/v1/videos/search",
   "route": "api",
   "evidence": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground."
  },
  {
   "kind": "claim",
   "cap": "cap-05",
   "surface": "mcp",
   "claim": "brave_video_search",
   "doc_url": "https://github.com/brave/brave-search-mcp-server",
   "result": "blocked",
   "verified": true,
   "documented": true,
   "notes": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card).",
   "t": "39:44",
   "capability": "Docs claim: Search dedicated video index",
   "task": "brave_video_search",
   "route": "mcp",
   "evidence": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card)."
  },
  {
   "kind": "claim",
   "cap": "cap-06",
   "surface": "api",
   "claim": "GET /res/v1/images/search",
   "doc_url": "https://api-dashboard.search.brave.com/documentation/services/image-search",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground.",
   "t": "39:44",
   "capability": "Docs claim: Search dedicated image index",
   "task": "GET /res/v1/images/search",
   "route": "api",
   "evidence": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground."
  },
  {
   "kind": "claim",
   "cap": "cap-06",
   "surface": "mcp",
   "claim": "brave_image_search",
   "doc_url": "https://github.com/brave/brave-search-mcp-server",
   "result": "blocked",
   "verified": true,
   "documented": true,
   "notes": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card).",
   "t": "39:44",
   "capability": "Docs claim: Search dedicated image index",
   "task": "brave_image_search",
   "route": "mcp",
   "evidence": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card)."
  },
  {
   "kind": "claim",
   "cap": "cap-07",
   "surface": "api",
   "claim": "GET /res/v1/local/place_search",
   "doc_url": "https://api-dashboard.search.brave.com/documentation/services/place-search",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground.",
   "t": "39:44",
   "capability": "Docs claim: Find local places/businesses by query and location",
   "task": "GET /res/v1/local/place_search",
   "route": "api",
   "evidence": "Needs X-Subscription-Token; keys need an activated plan, plans need a card (no card this drive). Without a key: 422 VALIDATION \"x-subscription-token Field required\". The same path answered 200 through the docs playground."
  },
  {
   "kind": "claim",
   "cap": "cap-07",
   "surface": "mcp",
   "claim": "brave_place_search",
   "doc_url": "https://github.com/brave/brave-search-mcp-server",
   "result": "blocked",
   "verified": true,
   "documented": true,
   "notes": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card).",
   "t": "39:45",
   "capability": "Docs claim: Find local places/businesses by query and location",
   "task": "brave_place_search",
   "route": "mcp",
   "evidence": "Tool present in tools/list of @brave/brave-search-mcp-server 2.1.4 (stdio); tools/call with a placeholder key -> isError 422 SUBSCRIPTION_TOKEN_INVALID. Needs a real key (card)."
  },
  {
   "kind": "claim",
   "cap": "cap-03",
   "surface": "api",
   "claim": "Answers API endpoint (/res/v1/chat/completions)",
   "doc_url": "https://api-dashboard.search.brave.com/documentation/services/answers",
   "result": "blocked",
   "verified": true,
   "documented": true,
   "notes": "Playground with shared demo key -> 422 \"The provided API key is invalid.\" Needs a plan (card). Not sold on x402.",
   "t": "39:45",
   "capability": "Docs claim: Get an AI-generated, source-cited answer to a question",
   "task": "Answers API endpoint (/res/v1/chat/completions)",
   "route": "api",
   "evidence": "Playground with shared demo key -> 422 \"The provided API key is invalid.\" Needs a plan (card). Not sold on x402."
  },
  {
   "cap": "cap-01",
   "way": "keyless",
   "trial": 2,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=sourdough+starter+feeding",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/web/search?q=sourdough+starter+feeding -> 200; web.results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:57"
  },
  {
   "cap": "cap-02",
   "way": "keyless",
   "trial": 2,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=how+do+heat+pumps+work",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/llm/context?q=how+do+heat+pumps+work -> 200; grounding.generic has 19 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:57"
  },
  {
   "cap": "cap-04",
   "way": "keyless",
   "trial": 2,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=solar+power+auction",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/news/search?q=solar+power+auction -> 200; results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:57"
  },
  {
   "cap": "cap-05",
   "way": "keyless",
   "trial": 2,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=replace+bicycle+chain",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/videos/search?q=replace+bicycle+chain -> 200; results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:57"
  },
  {
   "cap": "cap-06",
   "way": "keyless",
   "trial": 2,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=lake+geneva",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/images/search?q=lake+geneva -> 200; results has 50 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:57"
  },
  {
   "cap": "cap-07",
   "way": "keyless",
   "trial": 2,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=bakery&latitude=37.7749&longitude=-122.4194&radius=1000",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/local/place_search?q=bakery&latitude=37.7749&longitude=-122.4194&radius=1000 -> 200; results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:57"
  },
  {
   "cap": "cap-01",
   "way": "keyless",
   "trial": 3,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=sourdough+starter+feeding+guide",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/web/search?q=sourdough+starter+feeding+guide -> 200; web.results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:58"
  },
  {
   "cap": "cap-02",
   "way": "keyless",
   "trial": 3,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=how+do+heat+pumps+work+guide",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/llm/context?q=how+do+heat+pumps+work+guide -> 200; grounding.generic has 19 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:58"
  },
  {
   "cap": "cap-04",
   "way": "keyless",
   "trial": 3,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=solar+power+auction+guide",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/news/search?q=solar+power+auction+guide -> 200; results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:58"
  },
  {
   "cap": "cap-05",
   "way": "keyless",
   "trial": 3,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=replace+bicycle+chain+guide",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/videos/search?q=replace+bicycle+chain+guide -> 200; results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:58"
  },
  {
   "cap": "cap-06",
   "way": "keyless",
   "trial": 3,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=lake+geneva+guide",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/images/search?q=lake+geneva+guide -> 200; results has 50 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:58"
  },
  {
   "cap": "cap-07",
   "way": "keyless",
   "trial": 3,
   "step": "use",
   "capability": "",
   "task": "Repeat query in playground: q=bakery+guide&latitude=37.7749&longitude=-122.4194&radius=1000",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.search.brave.com/res/v1/local/place_search?q=bakery+guide&latitude=37.7749&longitude=-122.4194&radius=1000 -> 200; results has 20 items",
   "notes": "Fresh query, playground, shared demo key.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/playground/index.html.md"
   },
   "t": "41:58"
  },
  {
   "cap": "pay",
   "capability": "Pay probes",
   "task": "402 challenges, registries, docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe.json: search.agent.s.brave.app 402 x402 v2 (Payment-Required, exact, eip155:8453, 5000 units USDC = $0.005), first-party, documented at /documentation/guides/agent-payments; openapi.json 3.1.0 lists 8 paid paths with x-payment-info; x402 Bazaar 9 resources for payTo 0xbd94...c3d; mpp.dev lists Brave Search third-party (paywithlocus, tempo). llms.txt: \"This deployment takes the x402 rail only.\" We paid once: 502 \"x402 payment could not be settled\" (pay_tx.json). No billing API/CLI in docs; plans and keys are dashboard-only.",
   "notes": "",
   "t": "46:54"
  },
  {
   "cap": "pay",
   "step": "checkout",
   "way": "email_password",
   "capability": "Walk the checkout",
   "task": "Activate the Search plan (Free = $5 monthly free credits) up to the card",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "/app/subscriptions/subscribe -> Get started (Search, Prepaid) -> modal \"Activate Search plan\": \"A valid card is required to activate your plan and unlock your free credits.\"; options Free/$5/$10/$25/$50/Custom, buttons \"Skip for now\" / \"Pay $25.00\"; Free -> \"Start with free credits\" -> Terms of use checkbox -> \"Activate plan\" -> redirect to checkout.stripe.com/c/pay/cs_live_… (Stripe Checkout): Card number, expiry, CVC, Cardholder name, Billing address (country, address, postal code, city), Save payment information; final button \"Save\"; js.stripe.com hcaptcha-invisible and human-security frames loaded.",
   "notes": "Stopped at the card form: no card this drive, and a billing address our identity does not have. checkout.stripe.com robots.txt disallows all user agents (the dashboard redirected there after the form post). Nothing typed on Stripe.",
   "t": "46:54"
  },
  {
   "cap": "first_call",
   "way": "email_password",
   "capability": "First API call with own key",
   "task": "GET /res/v1/web/search with an account key",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": true,
   "evidence": "No key could be created (keys need an activated plan; plans need a card). The same search answered 200 in the docs playground (browser, shared demo key) and via x402 we got 502 not settled.",
   "notes": "",
   "t": "48:54"
  },
  {
   "cap": "first_action",
   "way": "email_password",
   "capability": "First real action",
   "task": "A search on our own key",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": true,
   "evidence": "Same wall as the first call: no key without a carded plan.",
   "notes": "Searches create nothing; the first action is the first answered search.",
   "t": "48:54"
  },
  {
   "cap": "cancel",
   "capability": "Cancel",
   "task": "Nothing recurring was started",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan activated (Stripe Checkout left at the card form). Help page: \"Before deleting your account ensure that all invoices have been paid and all plans have been cancelled\"; plans are managed under /app/subscriptions (My plans) in the dashboard.",
   "notes": "n/a: nothing to cancel.",
   "t": "48:54"
  },
  {
   "cap": "delete",
   "way": "email_password",
   "capability": "Delete account",
   "task": "Settings > Manage account > Delete my account",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/app/settings/account?tab=delete-account -> \"Delete my account\" -> confirm email + current password -> \"Confirm and delete account\" -> /goodbye \"Account deleted. Your account and associated data have been successfully deleted.\" Then login with the same credentials -> \"Error logging in. Invalid email or password.\"",
   "notes": "Web only (documented in Help); \"Billing history will be retained for legal and accounting purposes\".",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://api-dashboard.search.brave.com/documentation/resources/help-feedback/index.html.md",
    "verify_route": "yes"
   },
   "t": "48:54"
  },
  {
   "cap": "credentials",
   "key": "revoke",
   "capability": "Revoke key",
   "task": "Revoke key",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "cause": "card",
   "verified": false,
   "evidence": "No key was created (card wall); docs: keys are created and revoked in the dashboard (/app/keys), no API/CLI for keys.",
   "notes": "",
   "t": "48:54"
  }
 ],
 "stale": false,
 "icon": "/logos/brave.png",
 "monitored": false,
 "verdict": null,
 "page": "https://agentdrives.com/tools/brave?via=api"
}