{
 "slug": "exa",
 "name": "Exa",
 "url": "https://exa.ai",
 "domain": "exa.ai",
 "category": "search-apis",
 "category_name": "Search APIs",
 "tested_at": "2026-10-15",
 "run": "20261015T050138Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T194332Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "drives": 3
  },
  {
   "run": "20261006T063334Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261013T050123Z",
   "date": "2026-10-13",
   "level": 2,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   },
   "why": "product"
  },
  {
   "run": "20261015T050138Z",
   "date": "2026-10-15",
   "level": 2,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip"
   }
  }
 ],
 "level": 2,
 "level_name": "Gets in",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 2,
  "tries": 3,
  "self_start": true
 },
 "badges": [
  "agent-can-buy",
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: no key needed, pay per call",
   "how": "no-account",
   "way": "keyless"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "no",
   "text": "Work done: 20% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Pays per call for part of it: paid $0.001 a call (x402), 15 Oct",
   "value": "partial",
   "route": "agent_rail",
   "per_call": {
    "caps": [
     "cap-01",
     "cap-02",
     "cap-03"
    ],
    "core": 10,
    "share": 30
   }
  },
  {
   "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 on its own: no key needed, pay per call",
   "how": "no-account",
   "way": "keyless",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "no",
   "text": "Work done: 20% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Pays per call for part of it: paid $0.001 a call (x402), 15 Oct",
   "value": "partial",
   "route": "agent_rail",
   "per_call": {
    "caps": [
     "cap-01",
     "cap-02",
     "cap-03"
    ],
    "core": 10,
    "share": 30
   },
   "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": 2,
   "core": "2/10"
  },
  {
   "key": "pay_per_call",
   "label": "Pay per call",
   "routes": [
    "pay_per_call"
   ],
   "minutes": 0.5,
   "core": "3/10"
  }
 ],
 "minutes": 0.5,
 "next": {
  "to": 3,
  "text": "Next: do half of the core work (now 20%)"
 },
 "stop": null,
 "core": "2/10",
 "scores": {
  "coverage": 12,
  "reliability": 50,
  "resilience": 70,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": 60,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 1,
    "value": "2025-11-25"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   },
   {
    "standard": "A2A",
    "state": "behind",
    "behind": 1,
    "value": "0.3"
   }
  ]
 },
 "reliability_method": "pass^k",
 "resilience": {
  "parts": {
   "error_legibility": 90,
   "recovery": 70,
   "rate_limits": 50
  },
  "summary": {
   "error_legibility": "clear",
   "recovery": "partial",
   "idempotency": "n/a",
   "rate_limits": "unclear",
   "notes": "API 401s name the fix and the key page; MCP validation errors name the missing field. The keyless MCP limit comes as HTTP 200 with prose and a _meta flag, no 429 or Retry-After; idempotency not testable without an account."
  }
 },
 "stress": [
  {
   "capability": "Fetch full page text/highlights/summary for known URLs",
   "probe": "tool call missing required urls",
   "outcome": "HTTP 200, result.isError true: 'MCP error -32602: Input validation error… path [urls] expected array, Required'",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Search the web with a natural-language or keyword query",
   "probe": "burst of 8 keyless MCP searches",
   "outcome": "calls 1-7 HTTP 200 results; call 8 HTTP 200 with result._meta ai.exa/rateLimited:true and text 'You've hit Exa's free MCP rate limit… Fix: Create API key at https://dashboard.exa.ai/api-keys'; no 429,",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": "unclear"
  },
  {
   "capability": "Search the web with a natural-language or keyword query",
   "probe": "wrong API key",
   "outcome": "HTTP/2 401 \ncontent-type: application/json; charset=utf-8\n{\"requestId\":\"6c99a4fdc75a553cac7a0a0f74aef43f\",\"error\":\"Invalid API key. Provide a valid key using 'Authorization: Bearer <key>' or 'x-api-ke",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  }
 ],
 "surface_audit": null,
 "coverage_core": 20,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 4,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "9f4b18b8d5ad",
  "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": "skip"
 },
 "same_level_drives": 2,
 "drives": 6,
 "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-15"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt, docs/llms.txt, markdown docs (.md and Accept: text/markdown), OpenAPI 3.1.0 and a Team Management OpenAPI all fetched headless."
  },
  "signup": {
   "status": "n/a",
   "cause": "check",
   "note": "Not needed: our agent paid per call without an account (x402).",
   "way": "keyless",
   "note_driver": "No key needed: done.",
   "status_driver": "n/a",
   "no_account": true
  },
  "verify": {
   "status": "n/a",
   "cause": "check",
   "note": "Not needed: our agent paid per call without an account (x402).",
   "note_driver": "No key needed: done.",
   "status_driver": "n/a",
   "no_account": true
  },
  "credentials": {
   "status": "n/a",
   "cause": "check",
   "note": "Not needed: our agent paid per call without an account (x402).",
   "note_driver": "No key needed: done.",
   "status_driver": "n/a",
   "no_account": true
  },
  "first_call": {
   "status": "headless",
   "route": "no_account",
   "note": "Documented keyless hosted MCP (mcp.exa.ai/mcp): web_search_exa and web_fetch_exa answered without any account or key."
  },
  "first_action": {
   "status": "n/a",
   "cause": "check",
   "note": "No key needed: done.",
   "note_driver": "Nothing to create without an account: agent runs, websets and monitors need a key; agent_run over MCP answers 401 'Authentication required. Use OAuth or provide an API key.'",
   "status_driver": "blocked"
  },
  "pay": {
   "status": "headless",
   "grade": "P4",
   "rails": [
    "x402 v2 (exact, Base/Solana/World Chain/Arc) on api.exa.ai",
    "MPP (tempo charge) on api.exa.ai",
    "Stripe Projects (listed + documented)",
    "Nevermined x402 card delegation ($7 key purchase)"
   ],
   "rail_ids": [
    "x402",
    "mpp",
    "stripe-projects"
   ],
   "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": "0.007",
    "currency": "USD",
    "period": "usage",
    "plan": "pay per call /search",
    "last_button": ""
   },
   "person": "none",
   "ours": "no account",
   "note": "We paid one x402 v2 call each for /search, deep /search and /contents on Exa's own api.exa.ai (Base, settled, 2xx; pay_tx.json). /answer, agent runs, websets and monitors have no per-call rail (401 without a key), so the rail is partial. The dashboard billing page could not be reached (no account, Vercel checkpoint).",
   "paid": {
    "rail": "x402",
    "network": "eip155:8453",
    "testnet": false,
    "tx": "0x58e56c54a9a5ef49ac7047a84a932005f026bd5942cd0f052324ffd734c50814",
    "amount": 0.001,
    "currency": "USD",
    "at": "2026-10-15T05:02:17Z",
    "source": "pay_tx.json"
   },
   "per_call": {
    "caps": [
     "cap-01",
     "cap-02",
     "cap-03"
    ],
    "paid_caps": [
     "cap-01",
     "cap-02",
     "cap-03"
    ],
    "core": 10,
    "share": 30,
    "proof": "tasks"
   }
  },
  "cancel": {
   "status": "n/a",
   "grade": "X5",
   "note": "Nothing to cancel: our agent used it pay-per-call.",
   "docs_note": "Nothing to cancel: this drive started nothing recurring (keyless MCP and per-call x402 by us). Docs: credits are pay-as-you-go with optional auto recharge set on the dashboard billing page.",
   "nothing": "pay_per_call"
  },
  "delete": {
   "status": "n/a",
   "left": "nothing_made",
   "after_hours": null,
   "note": "No Exa account was made. Keyless searches store nothing for the caller. One unused public OAuth client from dynamic registration stays at auth.exa.ai; there is no documented way to delete it.",
   "account": false
  }
 },
 "routes": [
  {
   "route": "keyless",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 2
  },
  {
   "route": "pay_per_call",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "wallet",
   "fresh": true,
   "minutes": 0.5
  },
  {
   "route": "pay_signup",
   "offered": "documented",
   "tried": false,
   "not_tried": "over_cap",
   "result": null,
   "wall": null,
   "person": "once",
   "brings": "wallet",
   "fresh": true,
   "minutes": 0
  },
  {
   "route": "email_code",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "each",
   "brings": "inbox",
   "fresh": true,
   "minutes": 3
  },
  {
   "route": "stripe_projects",
   "offered": "documented",
   "tried": false,
   "not_tried": "no_kit",
   "result": null,
   "wall": null,
   "person": "once",
   "brings": "stripe_account",
   "fresh": true,
   "minutes": 0
  },
  {
   "route": "oauth_consent",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "each",
   "brings": "inbox",
   "fresh": true,
   "minutes": 2
  },
  {
   "route": "enterprise",
   "offered": "seen",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": "each",
   "brings": "person_grant",
   "fresh": true,
   "minutes": 0
  },
  {
   "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": "usage",
  "card_form": false,
  "plan": "pay per call /search"
 },
 "docs": {
  "at": "2026-10-15",
  "read": 196,
  "listed": 209,
  "sampled": false,
  "overall": "complete",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "good",
  "freshness": "fresh",
  "newest": "2026-10-15",
  "core_pages": "10 of 10",
  "capabilities": "covered"
 },
 "claims": {
  "claimed": 15,
  "tried": 2,
  "held": 2,
  "broken": 0,
  "unclear": 0,
  "not_tried": 13,
  "undocumented_works": 0
 },
 "pay_options": {
  "checked": "2026-10-15",
  "source": "probe",
  "options": [
   {
    "id": "stripe-projects",
    "name": "Stripe Projects",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [],
    "testnet": false
   },
   {
    "id": "x402",
    "name": "x402",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [
     "Base",
     "Solana",
     "eip155:480",
     "eip155:5042"
    ],
    "testnet": false
   },
   {
    "id": "mpp",
    "name": "MPP",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [
     "tempo:4217"
    ],
    "testnet": false
   }
  ],
  "agentic": [
   "stripe-projects",
   "x402",
   "mpp"
  ],
  "paid": {
   "rail": "x402",
   "network": "eip155:8453",
   "testnet": false,
   "tx": "0x58e56c54a9a5ef49ac7047a84a932005f026bd5942cd0f052324ffd734c50814",
   "amount": 0.001,
   "currency": "USD",
   "at": "2026-10-15T05:02:17Z"
  },
  "exercised": true,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "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,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST at api.exa.ai, 37 paths in exa-spec.json",
  "openapi": "3.1.0 public spec plus a Team Management spec (admin-api.exa.ai)",
  "mcp": "official hosted, 3 keyless tools + agent_run with auth; server card served",
  "llms_txt": "site and docs llms.txt, .md pages and Accept negotiation"
 },
 "can_do": [
  "Search the web through the hosted MCP server with no account or key",
  "Read a web page as markdown through the hosted MCP server with no account or key",
  "Pay per call with x402 v2 or MPP for /search and /contents without an account (done by us)"
 ],
 "cannot_do": [
  {
   "what": "Create an Exa account and get an API key",
   "why": "Visible Cloudflare Turnstile on the auth.exa.ai sign-up form and a Vercel Security Checkpoint block on dashboard.exa.ai"
  },
  {
   "what": "Answer, agent runs, websets, monitors, batches, webhooks",
   "why": "All need an API key or OAuth login, which needs an account; no per-call payment is offered for them"
  },
  {
   "what": "Keep using keyless MCP at volume",
   "why": "The free MCP rate limit triggered after about 7 quick searches, with no Retry-After"
  }
 ],
 "blockers": [
  "Cloudflare Turnstile 'Verify you are human' on the auth.exa.ai sign-up form",
  "Vercel Security Checkpoint (Code 21) on dashboard.exa.ai"
 ],
 "tips_for_owner": [
  "Let signed agents through the sign-up check",
  "Offer a headless account and key route",
  "Sell more endpoints over x402 and MPP",
  "Signal rate limits with 429 and Retry-After",
  "Support MCP (the 28 Jul 2026 spec) server/discover"
 ],
 "tips_for_agents": [
  "Without an account, use the hosted MCP at https://mcp.exa.ai/mcp: web_search_exa, web_fetch_exa and (with ?tools=) web_search_advanced_exa need no key",
  "The keyless limit trips after a handful of quick calls; the tool result carries _meta ai.exa/rateLimited:true and the limit clears within about a minute",
  "With a wallet, /search and /contents take x402 v2 (Base and others) or MPP on Tempo with no account",
  "Requesting agent_run without auth makes the whole MCP connection answer 401: leave it out of ?tools= when keyless",
  "Docs pages come as markdown with .md or Accept: text/markdown"
 ],
 "selfhost": null,
 "summary": "An agent can use Exa without an account: the hosted MCP server searches and reads pages with no key, and /search and /contents take x402 or MPP payments per call. Getting an account is where it stops: the sign-up form shows a Cloudflare Turnstile and the dashboard blocks our agent's browser with a Vercel checkpoint, so answer, agent runs, websets and monitors stayed out of reach.",
 "wall": "Cloudflare Turnstile on the sign-up form",
 "plan_scope": "none (no free access): keyless MCP and our per-call x402 only",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Exa is a web search and research tool for AI agents. Without making an account, an agent can search the web and read pages for free through Exa's hosted connector, and can even pay per search with a crypto wallet. But creating a full account (needed for answering questions directly, running research agents, or building datasets) is blocked by a human verification puzzle that the agent cannot solve.",
  "can_do": [
   "Search the web and read web pages with no sign-up at all",
   "Pay small amounts per search using a crypto wallet, without an account"
  ],
  "cannot_do": [
   {
    "what": "Create an Exa account or get an API key",
    "why": "A 'prove you are human' puzzle blocks the sign-up form"
   },
   {
    "what": "Get direct answers, run research agents, build datasets, or set up monitoring",
    "why": "All of these need an account, which could not be created"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Search",
   "capability": "Search the web with a natural-language or keyword query",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /search",
    "mcp": "web_search_exa",
    "cli": null,
    "ui": "dashboard.exa.ai/playground/search"
   },
   "check": "POST /search returns results[] with url/title; x-request-id header confirms the call ran",
   "source": "https://exa.ai/; https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-02",
   "group": "Search",
   "capability": "Run deep/multi-step research search with structured output and citations",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /search (type=deep|deep-lite|deep-reasoning)",
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai/playground/search"
   },
   "check": "POST /search with type=deep returns output.content matching outputSchema plus citations",
   "source": "https://exa.ai/pricing; https://docs.exa.ai (Get structured output example)"
  },
  {
   "id": "cap-03",
   "group": "Contents",
   "capability": "Fetch full page text/highlights/summary for known URLs",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /contents",
    "mcp": "web_fetch_exa",
    "cli": null,
    "ui": "dashboard.exa.ai/playground"
   },
   "check": "POST /contents with ids=[url] returns results[0].text/highlights populated",
   "source": "https://exa.ai/docs/reference/contents-api-guide; https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-04",
   "group": "Search",
   "capability": "Get a direct LLM answer to a question with citations",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /answer",
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai/playground"
   },
   "check": "POST /answer returns answer string plus citations[] with source URLs",
   "source": "https://exa.ai/docs/exa-spec.yaml; https://exa.ai/pricing"
  },
  {
   "id": "cap-05",
   "group": "Agent",
   "capability": "Run an autonomous research/enrichment/list-building agent from a single query",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /agent/runs",
    "mcp": "agent_run",
    "cli": null,
    "ui": "dashboard.exa.ai/playground/agent"
   },
   "check": "GET /agent/our records shows status completed with output.content populated",
   "source": "https://exa.ai/products/agent; https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-06",
   "group": "Agent",
   "capability": "Check status of / resume a long-running agent run",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /agent/our records",
    "mcp": "agent_run (with runId)",
    "cli": null,
    "ui": "dashboard.exa.ai/playground/agent"
   },
   "check": "GET /agent/our records returns status: running|completed and progressively more output",
   "source": "https://exa.ai/docs/reference/exa-mcp"
  },
  {
   "id": "cap-09",
   "group": "Agent",
   "capability": "Enrich a batch of entities with structured data in one run",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /agent/runs (input.data array)",
    "mcp": "agent_run",
    "cli": null,
    "ui": "dashboard.exa.ai/playground/agent"
   },
   "check": "run output contains one enriched record per input row matching outputSchema",
   "source": "https://exa.ai/products/agent"
  },
  {
   "id": "cap-11",
   "group": "Websets",
   "capability": "Create a Webset: a verified, enriched dataset built from a query and target count",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v0/websets",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "GET /v0/websets/{id} returns the new webset with status and dashboardUrl",
   "source": "https://exa.ai/docs/websets/quickstart; https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-14",
   "group": "Websets",
   "capability": "Define enrichment fields that populate extra data per webset item",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v0/websets/{webset}/enrichments",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "GET /v0/websets/{webset}/items/{id} shows the enrichment field populated with a value",
   "source": "https://exa.ai/docs/websets/quickstart (Key Capabilities table)"
  },
  {
   "id": "cap-18",
   "group": "Monitors",
   "capability": "Create a scheduled/recurring search that surfaces new matching results over time",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /monitors (and POST /v0/monitors for websets)",
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai"
   },
   "check": "GET /monitors/{id}/runs lists new runs appearing on the configured schedule",
   "source": "https://exa.ai/docs/reference/monitors-api-guide; https://exa.ai/pricing"
  },
  {
   "id": "cap-07",
   "group": "Agent",
   "capability": "Cancel or stop a running agent run",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /agent/our records, POST /agent/our records",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /agent/our records after cancel shows status: cancelled",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-08",
   "group": "Agent",
   "capability": "Stream agent run events as they happen",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /agent/our records",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET .../events returns an SSE stream of step events for an in-progress run",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-10",
   "group": "Agent",
   "capability": "Look up email/phone contact details for a person or company",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /agent/runs (contact enrichment)",
    "mcp": "agent_run",
    "cli": null,
    "ui": null
   },
   "check": "run usage shows emailEnrichments/phoneEnrichments > 0 and output contains the contact value",
   "source": "https://exa.ai/pricing (Email/Phone contact enrichment line items)"
  },
  {
   "id": "cap-12",
   "group": "Websets",
   "capability": "Preview a webset search before committing credits",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v0/websets/preview",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "POST /v0/websets/preview returns sample candidate items without creating a billed webset",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-13",
   "group": "Websets",
   "capability": "Add a new search to an existing webset to find more items",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v0/websets/{webset}/searches",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai (Find more results)"
   },
   "check": "GET /v0/websets/{webset}/items shows item count increased after the search completes",
   "source": "https://exa.ai/docs/websets/quickstart"
  },
  {
   "id": "cap-15",
   "group": "Websets",
   "capability": "Review, list, and remove individual items from a webset",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v0/websets/{webset}/items, DELETE /v0/websets/{webset}/items/{id}",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "GET /v0/websets/{webset}/items no longer lists the deleted item id",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-17",
   "group": "Websets",
   "capability": "Import your own list of URLs and run webset enrichments on them",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v0/imports",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "GET /v0/imports/{id} shows status completed with the imported row count",
   "source": "https://exa.ai/docs/websets/quickstart (Imports row); https://exa.ai/docs/websets/imports-and-search"
  },
  {
   "id": "cap-19",
   "group": "Monitors",
   "capability": "Create multiple monitors in one batch request",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /monitors/batch",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "response lists one created monitor id per input item",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-20",
   "group": "Monitors",
   "capability": "Manually trigger a monitor run on demand",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /monitors/{id}/trigger",
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai"
   },
   "check": "GET /monitors/{id}/runs shows a new run created immediately after the trigger call",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-21",
   "group": "Monitors",
   "capability": "Review past monitor run results",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /monitors/{id}/our records",
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai"
   },
   "check": "GET .../our records returns the results found during that run",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-22",
   "group": "Batch",
   "capability": "Submit a batch of multiple search/contents requests as one job",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /batches",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /batches/{id} shows status completed with one result per submitted request",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-24",
   "group": "Webhooks",
   "capability": "Register a webhook to receive real-time callbacks on webset/monitor events",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v0/webhooks",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "triggering a webset event delivers a POST to the registered webhook URL, logged in /v0/webhooks/{id}/attempts",
   "source": "https://exa.ai/docs/websets/quickstart (Webhooks row); https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-26",
   "group": "Connect",
   "capability": "Pull data from a third-party provider (e.g. Fiber, Baselayer) inside an agent run",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /agent/runs (connect provider params)",
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai/playground/agent"
   },
   "check": "run usage shows provider call charges (e.g. Fiber credits) and output includes provider-sourced fields",
   "source": "https://exa.ai/connect; https://exa.ai/pricing (Connect providers section)"
  },
  {
   "id": "cap-28",
   "group": "Integrations",
   "capability": "Give an LLM web-search/get-contents as callable tools via provider SDKs (OpenAI, etc.)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "exa.openai.web_search / exa.openai.get_contents helpers",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "chat completion with the Exa tool definitions returns a tool_call that, when executed, returns Exa search results",
   "source": "https://docs.exa.ai (Give an LLM web search example)"
  },
  {
   "id": "cap-16",
   "group": "Websets",
   "capability": "Cancel an in-progress webset, search, or enrichment job",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v0/websets/{id}/cancel",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "GET /v0/websets/{id} shows status: canceled",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-23",
   "group": "Batch",
   "capability": "Cancel a submitted batch job",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "POST /batches/{id}/cancel",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /batches/{id} shows status: canceled",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-25",
   "group": "Webhooks",
   "capability": "Inspect webhook delivery attempts and event log",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v0/webhooks/{id}/attempts, GET /v0/events",
    "mcp": null,
    "cli": null,
    "ui": "websets.exa.ai"
   },
   "check": "GET /v0/webhooks/{id}/attempts lists delivery attempts with response status codes",
   "source": "https://exa.ai/docs/exa-spec.yaml"
  },
  {
   "id": "cap-29",
   "group": "Enterprise",
   "capability": "Configure Zero Data Retention so queries/results are never stored",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "enterprise sales/dashboard admin"
   },
   "check": "account settings show Zero Data Retention enabled; vendor contract documents it",
   "source": "https://exa.ai/; https://exa.ai/docs/admin/security/zero-data-retention"
  },
  {
   "id": "cap-30",
   "group": "Admin",
   "capability": "View and manage team membership/settings",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /v0/teams/me",
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai"
   },
   "check": "GET /v0/teams/me returns team id, members, and role of the caller",
   "source": "https://exa.ai/docs/exa-spec.yaml; https://docs.exa.ai (team-management-spec.yaml reference)"
  },
  {
   "id": "cap-31",
   "group": "Admin",
   "capability": "Track usage and manage billing/credits/invoices",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai/billing, websets.exa.ai/billing"
   },
   "check": "billing page shows current credit balance and usage history after API calls",
   "source": "https://exa.ai/docs/admin/billing; https://exa.ai/pricing"
  },
  {
   "id": "cap-32",
   "group": "Admin",
   "capability": "Create and manage API keys",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "dashboard.exa.ai/api-keys"
   },
   "check": "a newly created key successfully authenticates a /search call and appears in the keys list",
   "source": "https://exa.ai/pricing; https://docs.exa.ai"
  }
 ],
 "attempts": [
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "robots.txt & aipref",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "exa.ai/robots.txt: User-Agent: * Disallow: /search?* and /hackathon/; no Content-Usage or Content-signal lines; no Content-Usage header seen. api.exa.ai/robots.txt 404 JSON; auth.exa.ai/robots.txt 404."
  },
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "dashboard reachability",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": ""
  },
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "MCP server/discover",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST https://mcp.exa.ai/mcp server/discover 2026-07-28 -> HTTP 400 JSON-RPC -32000 'Unsupported protocol version: 2026-07-28 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)' (not -32022) => legacy; initialize offering 2026-07-28 answered protocolVersion 2025-11-25, serverInfo exa-search-server 3.4.2, Mcp-Session-Id issued, SSE response"
  },
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "MCP server card",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://mcp.exa.ai/mcp/server-card 200 application/mcp-server-card+json (name ai.exa/exa 3.4.2, remote streamable-http, x-api-key optional); /.well-known/mcp/server-card.json 404 on mcp.exa.ai; exa.ai/docs/.well-known/mcp/server-card.json 200 application/json but empty body; exa.ai/.well-known/ai-catalog.json 404"
  },
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "A2A agent card",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "exa.ai/.well-known/agent-card.json 404 and agent.json 404; docs-level https://exa.ai/docs/.well-known/agent-card.json 200 application/json protocolVersion '0.3' (Mintlify-generated, linked rel=agent-card)"
  },
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "Markdown docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /docs/search/quickstart with Accept: text/markdown -> 200 content-type text/markdown, vary includes Accept; /docs/search/quickstart.md -> 200 text/markdown. Link headers rel=llms-txt, agent-card, mcp-server-card, agent-skills"
  },
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://exa.ai/docs/exa-spec.json openapi 3.1.0, 'Exa Public API' 2.0.0, server api.exa.ai, paths incl /search /contents /answer /agent/runs /monitors /batches /v0/websets /v0/webhooks /v0/teams/me"
  },
  {
   "t": "01:47",
   "cap": "discovery",
   "capability": "OAuth metadata",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "mcp.exa.ai PRM 200 (resource https://mcp.exa.ai/mcp, AS https://auth.exa.ai, scope mcp:tools); auth.exa.ai AS metadata: client_id_metadata_document_supported true, registration_endpoint (DCR), grants authorization_code, refresh_token, jwt-bearer, PKCE S256; no device_authorization_endpoint; no agent_auth block. exa.ai/auth.md 404, /.well-known/ucp 404"
  },
  {
   "t": "01:47",
   "cap": "cap-01",
   "way": "keyless",
   "capability": "Search the web",
   "task": "Search 'Model Context Protocol specification 2026-07-28 release' via hosted MCP without a key",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "tools/call web_search_exa keyless on mcp.exa.ai returned 3 results with titles/URLs/text about MCP 2026-07-28 (SEP-837, CIMD, tasks extension)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match",
    "docs_url": "https://exa.ai/docs/reference/exa-mcp.md",
    "error_legibility": "n/a"
   }
  },
  {
   "t": "01:55",
   "cap": "cap-03",
   "way": "keyless",
   "capability": "Fetch page contents",
   "task": "Fetch https://agentdrives.com as markdown via keyless hosted MCP",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "tools/call web_fetch_exa keyless returned page markdown starting '# AgentDrives: make sure AI agents can run your product'",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match",
    "docs_url": "https://exa.ai/docs/reference/exa-mcp.md"
   }
  },
  {
   "t": "02:53",
   "cap": "signup",
   "way": "email_code",
   "step": "start",
   "capability": "sign up",
   "task": "Sign up via the MCP OAuth login page (auth.exa.ai) with email",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": false,
   "evidence": "DCR POST auth.exa.ai/api/oauth/register 201-ish JSON client_id issued; authorize redirected to auth.exa.ai login: email field, Continue with Google, Sign in with SSO; no GitHub button"
  },
  {
   "t": "03:36",
   "cap": "signup",
   "way": "email_code",
   "capability": "sign up",
   "task": "Submit email on auth.exa.ai sign-up/login form",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "After Continue: 'Please complete the verification challenge.' with a visible Cloudflare Turnstile 'Verify you are human' checkbox (screenshot browser/shots/004.png). Not clicked by us.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "03:36",
   "cap": "signup",
   "way": "email_code",
   "capability": "dashboard",
   "task": "Open dashboard.exa.ai (sign-up entry from docs)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": ""
  },
  {
   "t": "03:53",
   "cap": "signup",
   "way": "pay_per_call",
   "result": "done",
   "verified": true,
   "capability": "pay per call (we)",
   "task": "x402 v2 per-call payments on api.exa.ai",
   "route": "api",
   "documented": true,
   "evidence": "pay_tx.json: settled+confirmed+entitled x402 v2 exact on Base: /search tx 0xc698fc37…, /search deep tx 0x3415b8e5…, /contents tx 0x58e56c54…; ..not_offered"
  },
  {
   "t": "03:53",
   "cap": "signup",
   "way": "stripe_projects",
   "result": "skipped",
   "not_tried": "no_kit",
   "capability": "Stripe Projects onboarding",
   "task": "stripe projects add exa/api",
   "route": "cli",
   "documented": true,
   "evidence": "Documented at https://exa.ai/docs/reference/stripe-projects; our agent has no Stripe account"
  },
  {
   "t": "03:53",
   "cap": "signup",
   "way": "sso_google",
   "result": "skipped",
   "not_tried": "no_kit",
   "capability": "Continue with Google",
   "task": "Continue with Google on auth.exa.ai",
   "route": "browser",
   "documented": true,
   "evidence": "Button seen on auth.exa.ai login; pw sso google: this drive has no Google account"
  },
  {
   "t": "03:53",
   "cap": "signup",
   "way": "sso_github",
   "result": "skipped",
   "not_tried": "same_as",
   "capability": "Continue with GitHub",
   "task": "n/a",
   "route": "none",
   "documented": false,
   "evidence": "No GitHub button on auth.exa.ai login (only Google, email, enterprise SSO); route not offered"
  },
  {
   "t": "03:53",
   "cap": "signup",
   "way": "person_key",
   "result": "skipped",
   "not_tried": "assisted_only",
   "capability": "person creates a key in the dashboard",
   "task": "",
   "route": "none",
   "documented": true,
   "evidence": "docs: create keys at https://dashboard.exa.ai/api-keys; a person would act; not an assisted drive"
  },
  {
   "t": "03:53",
   "cap": "signup",
   "way": "enterprise",
   "result": "skipped",
   "not_tried": "assisted_only",
   "capability": "Sign in with SSO",
   "task": "",
   "route": "none",
   "documented": true,
   "evidence": "auth.exa.ai 'Sign in with SSO' link (company SSO)"
  },
  {
   "t": "03:53",
   "cap": "signup",
   "way": "oauth_consent",
   "result": "blocked",
   "cause": "check",
   "capability": "MCP OAuth sign-in",
   "task": "DCR client + PKCE authorize for https://mcp.exa.ai/mcp (?login flow)",
   "route": "browser",
   "documented": true,
   "evidence": "DCR worked headless (client_id issued); authorize sends to auth.exa.ai login which needs an account; creating it hits the Cloudflare Turnstile 'Verify you are human' (same wall as email). CIMD advertised but we have no hosted client metadata doc; DCR used."
  },
  {
   "t": "04:07",
   "cap": "pay",
   "step": "probe",
   "capability": "402 probes",
   "task": "Unauthenticated POSTs on api.exa.ai",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /search -> 402 with PAYMENT-REQUIRED (x402 v2, exact, eip155:8453, amount 7000 = $0.007 USDC, payTo 0x6d6E…9192) AND WWW-Authenticate: Payment method=tempo intent=charge (MPP), body tag X402_PAYMENT_REQUIRED; POST /answer and /agent/runs -> 401 INVALID_API_KEY 'Authentication required…Create a key at https://dashboard.exa.ai/api-keys' (no 402 offer). pay_tx.json paid /search, /search deep, /contents."
  },
  {
   "t": "04:09",
   "cap": "cap-01",
   "way": "keyless",
   "trial": 2,
   "capability": "Search the web",
   "task": "keyless MCP search 'Exa search API rate limits documentation'",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Title: N/A\nURL: https://exa.ai/docs/reference/rate-limits\nPublished: N/A\nAuthor: N/A\nHighlights:\n# Rate Limits\n\n> Default rate limits for Exa API endpoints\n...\n? Contact us at sales@exa.ai to discuss",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://exa.ai/docs/reference/exa-mcp.md"
   }
  },
  {
   "t": "04:09",
   "cap": "cap-01",
   "way": "keyless",
   "trial": 3,
   "capability": "Search the web",
   "task": "keyless MCP search 'x402 protocol version 2 specification'",
   "route": "mcp",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "You've hit Exa's free MCP rate limit. To continue using without limits, create your own Exa API key.\n\nFix: Create API key at https://dashboard.exa.ai/api-keys, and then update Exa MCP URL to this htt",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://exa.ai/docs/reference/exa-mcp.md"
   }
  },
  {
   "t": "04:10",
   "cap": "cap-03",
   "way": "keyless",
   "trial": 2,
   "capability": "Fetch page contents",
   "task": "keyless MCP fetch https://example.com",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "# Example Domain\nURL: https://example.com\n\nExample Domain\n\nThis domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monit",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://exa.ai/docs/reference/exa-mcp.md"
   }
  },
  {
   "t": "04:11",
   "cap": "cap-03",
   "way": "keyless",
   "trial": 3,
   "capability": "Fetch page contents",
   "task": "keyless MCP fetch https://www.rfc-editor.org/rfc/rfc9309",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "# RFC 9309: Robots Exclusion Protocol | RFC Editor\nURL: https://www.rfc-editor.org/rfc/rfc9309\nPublished: 2022-09-09\n\nRFC 9309: Robots Exclusion Protocol | RFC Editor\n\nInfo\n\n# RFC 9309: Robots Exclusi",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://exa.ai/docs/reference/exa-mcp.md"
   }
  },
  {
   "t": "05:05",
   "cap": "cap-05",
   "way": "keyless",
   "capability": "Run agent",
   "task": "Open MCP with tools=…,agent_run keyless",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "initialize on https://mcp.exa.ai/mcp?tools=…,agent_run without key -> HTTP 401, WWW-Authenticate: Bearer resource_metadata=\"https://mcp.exa.ai/.well-known/oauth-protected-resource/mcp\", -32000 'Authentication required. Use OAuth or provide an API key.' (as documented: agent_run needs OAuth or key)"
  },
  {
   "t": "05:55",
   "cap": "signup",
   "way": "pay_signup",
   "result": "skipped",
   "not_tried": "over_cap",
   "capability": "Buy an API key via Nevermined x402 card delegation",
   "task": "POST https://admin-api.exa.ai/team-management/nevermined/purchase-key",
   "route": "api",
   "documented": true,
   "evidence": "Docs https://exa.ai/docs/integrations/payments/nevermined.md: 'Each $7 purchase returns an Exa API key with $7 of Exa credits'. Unauthenticated POST -> 402 PAYMENT-REQUIRED x402v2 {\"x402Version\":2,\"resource\":{\"url\":\"/purchase-key\"},\"accepts\":[{\"scheme\":\"nvm:erc4337\",\"network\":\"eip155:84532\",\"planId\":\"27800462147494506865542649899724877617306579171265399959488097895839186996870\",\"extra\":{\"version\":\"1\",\"httpVerb\":\"POST\"}}],\"extensions\":{}}. $7 is over our $5/drive cap and needs a Nevermined card delegation we do not have."
  },
  {
   "t": "05:55",
   "cap": "docs",
   "capability": "Docs",
   "task": "Read llms.txt, docs index, OpenAPI, MCP docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "exa.ai/llms.txt + /docs/llms.txt; .md pages; OpenAPI 3.1.0 exa-spec.json; team-management-spec.yaml (admin-api.exa.ai /api-keys CRUD); MCP docs list keyless/OAuth/API-key modes; docs_pass verdict: getting started, auth, errors found, examples good, fresh"
  },
  {
   "t": "05:55",
   "cap": "credentials",
   "key": "create",
   "capability": "API key headless",
   "task": "Create a scoped key via POST https://admin-api.exa.ai/team-management/api-keys",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "Documented Team Management API exists (create/list/get/update/delete keys) but it needs an existing service key from an account; account creation stopped at the Cloudflare Turnstile on auth.exa.ai; dashboard.exa.ai/api-keys behind Vercel Security Checkpoint (Code 21)."
  },
  {
   "t": "05:55",
   "cap": "verify",
   "way": "email_code",
   "capability": "verify",
   "task": "verify",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not reached: sign-up stopped at Cloudflare Turnstile 'Verify you are human' on auth.exa.ai."
  },
  {
   "t": "05:55",
   "cap": "first_action",
   "way": "email_code",
   "capability": "The first action",
   "task": "The first action",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not reached: sign-up stopped at Cloudflare Turnstile 'Verify you are human' on auth.exa.ai."
  },
  {
   "t": "05:55",
   "cap": "first_call",
   "way": "keyless",
   "capability": "first call",
   "task": "first MCP call without account",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "keyless hosted MCP web_search_exa returned results (documented keyless mode: 'Free rate-limited usage without sign-in or API key')"
  },
  {
   "t": "05:55",
   "cap": "cap-02",
   "way": "email_code",
   "capability": "",
   "task": "core task via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "POST /search type=deep needs an API key (or x402: we paid one, pay_tx tx 0x3415b8e5…); behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-04",
   "way": "email_code",
   "capability": "",
   "task": "core task via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "POST /answer -> 401 INVALID_API_KEY without key; no x402 offer on /answer; behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-06",
   "way": "email_code",
   "capability": "",
   "task": "core task via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "GET /agent/our records needs key; MCP agent_run needs OAuth/key (401); behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-09",
   "way": "email_code",
   "capability": "",
   "task": "core task via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "POST /agent/runs needs key; behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-11",
   "way": "email_code",
   "capability": "",
   "task": "core task via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "POST /v0/websets needs key; behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-14",
   "way": "email_code",
   "capability": "",
   "task": "core task via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "websets enrichments need key; behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-18",
   "way": "email_code",
   "capability": "",
   "task": "core task via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "cause": "check",
   "evidence": "POST /monitors needs key; behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-01",
   "way": "email_code",
   "capability": "Search via API",
   "task": "POST /search with own key",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No key: behind the door: no account/API key; keyless MCP route done instead"
  },
  {
   "t": "05:55",
   "cap": "cap-03",
   "way": "email_code",
   "capability": "Contents via API",
   "task": "POST /contents with own key",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No key: behind the door: no account/API key; keyless MCP route done instead"
  },
  {
   "t": "05:55",
   "cap": "cap-07",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-08",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-10",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-12",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-13",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-15",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-17",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-19",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-20",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-21",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-22",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-24",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-26",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-28",
   "way": "email_code",
   "capability": "",
   "task": "secondary capability via API",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented in exa-spec.json/docs; needs an API key: behind the door: no account/API key"
  },
  {
   "t": "05:55",
   "cap": "cap-16",
   "capability": "",
   "task": "check documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: POST /v0/websets/{id}/cancel in exa-spec.json; docs websets/api/websets/searches/cancel-a-running-search.md. Not callable without an account (behind the door: no account/API key)"
  },
  {
   "t": "05:55",
   "cap": "cap-23",
   "capability": "",
   "task": "check documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: POST /batches/{id}/cancel in exa-spec.json; docs reference/batches/cancel-a-batch.md. Not callable without an account (behind the door: no account/API key)"
  },
  {
   "t": "05:55",
   "cap": "cap-25",
   "capability": "",
   "task": "check documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: GET /v0/webhooks/{id}/attempts and /v0/events in exa-spec.json. Not callable without an account (behind the door: no account/API key)"
  },
  {
   "t": "05:55",
   "cap": "cap-29",
   "capability": "",
   "task": "check documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: docs admin/security/zero-data-retention.md: 'ZDR is available on Enterprise plans and enabled per team. Contact sales@exa.ai'no API. Not callable without an account (behind the door: no account/API key)"
  },
  {
   "t": "05:55",
   "cap": "cap-30",
   "capability": "",
   "task": "check documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: GET /v0/teams/me in exa-spec.json; docs admin/team-management.md (dashboard). Not callable without an account (behind the door: no account/API key)"
  },
  {
   "t": "05:55",
   "cap": "cap-31",
   "capability": "",
   "task": "check documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: docs admin/billing.md: billing dashboard dashboard.exa.ai/billing (add credits, auto recharge, invoices); API key usage via GET admin-api /api-keys/{id}/usage. Not callable without an account (behind the door: no account/API key)"
  },
  {
   "t": "05:55",
   "cap": "cap-32",
   "capability": "",
   "task": "check documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: team-management-spec.yaml: admin-api.exa.ai/team-management /api-keys create/list/get/update/delete; dashboard.exa.ai/api-keys. Not callable without an account (behind the door: no account/API key)"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "api",
   "claim": "POST /search",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "402 x402/MPP or 401 without key; no key obtainable (Turnstile at sign-up). Our x402 payment proved it (pay_tx)",
   "capability": "Docs claim: Search the web with a natural-language or keyword query",
   "task": "POST /search",
   "route": "api",
   "evidence": "402 x402/MPP or 401 without key; no key obtainable (Turnstile at sign-up). Our x402 payment proved it (pay_tx)"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "mcp",
   "claim": "web_search_exa",
   "doc_url": "https://exa.ai/docs/reference/exa-mcp.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "keyless hosted MCP returned results",
   "capability": "Docs claim: Search the web with a natural-language or keyword query",
   "task": "web_search_exa",
   "route": "mcp",
   "evidence": "keyless hosted MCP returned results"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "api",
   "claim": "POST /search (type=deep)",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs key; our x402 payment proved the deep call (pay_tx)",
   "capability": "Docs claim: Run deep/multi-step research search with structured output and citations",
   "task": "POST /search (type=deep)",
   "route": "api",
   "evidence": "needs key; our x402 payment proved the deep call (pay_tx)"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "api",
   "claim": "POST /contents",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs key or x402; we paid one (pay_tx)",
   "capability": "Docs claim: Fetch full page text/highlights/summary for known URLs",
   "task": "POST /contents",
   "route": "api",
   "evidence": "needs key or x402; we paid one (pay_tx)"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "mcp",
   "claim": "web_fetch_exa",
   "doc_url": "https://exa.ai/docs/reference/exa-mcp.md",
   "result": "done",
   "verified": true,
   "documented": true,
   "notes": "keyless hosted MCP returned page markdown",
   "capability": "Docs claim: Fetch full page text/highlights/summary for known URLs",
   "task": "web_fetch_exa",
   "route": "mcp",
   "evidence": "keyless hosted MCP returned page markdown"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-04",
   "surface": "api",
   "claim": "POST /answer",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "401 INVALID_API_KEY without key",
   "capability": "Docs claim: Get a direct LLM answer to a question with citations",
   "task": "POST /answer",
   "route": "api",
   "evidence": "401 INVALID_API_KEY without key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-05",
   "surface": "api",
   "claim": "POST /agent/runs",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "401 INVALID_API_KEY without key",
   "capability": "Docs claim: Run an autonomous research/enrichment/list-building agent from a single query",
   "task": "POST /agent/runs",
   "route": "api",
   "evidence": "401 INVALID_API_KEY without key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-05",
   "surface": "mcp",
   "claim": "agent_run",
   "doc_url": "https://exa.ai/docs/reference/exa-mcp.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "401 + resource_metadata: needs OAuth or key",
   "capability": "Docs claim: Run an autonomous research/enrichment/list-building agent from a single query",
   "task": "agent_run",
   "route": "mcp",
   "evidence": "401 + resource_metadata: needs OAuth or key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "api",
   "claim": "GET /agent/our records",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs key",
   "capability": "Docs claim: Check status of / resume a long-running agent run",
   "task": "GET /agent/our records",
   "route": "api",
   "evidence": "needs key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "mcp",
   "claim": "agent_run (with runId)",
   "doc_url": "https://exa.ai/docs/reference/exa-mcp.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs OAuth or key",
   "capability": "Docs claim: Check status of / resume a long-running agent run",
   "task": "agent_run (with runId)",
   "route": "mcp",
   "evidence": "needs OAuth or key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-09",
   "surface": "api",
   "claim": "POST /agent/runs (input.data array)",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs key",
   "capability": "Docs claim: Enrich a batch of entities with structured data in one run",
   "task": "POST /agent/runs (input.data array)",
   "route": "api",
   "evidence": "needs key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-09",
   "surface": "mcp",
   "claim": "agent_run",
   "doc_url": "https://exa.ai/docs/reference/exa-mcp.md",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs OAuth or key",
   "capability": "Docs claim: Enrich a batch of entities with structured data in one run",
   "task": "agent_run",
   "route": "mcp",
   "evidence": "needs OAuth or key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-11",
   "surface": "api",
   "claim": "POST /v0/websets",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs key",
   "capability": "Docs claim: Create a Webset: a verified, enriched dataset built from a query and target count",
   "task": "POST /v0/websets",
   "route": "api",
   "evidence": "needs key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-14",
   "surface": "api",
   "claim": "POST /v0/websets/{webset}/enrichments",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs key",
   "capability": "Docs claim: Define enrichment fields that populate extra data per webset item",
   "task": "POST /v0/websets/{webset}/enrichments",
   "route": "api",
   "evidence": "needs key"
  },
  {
   "t": "06:21",
   "kind": "claim",
   "cap": "cap-18",
   "surface": "api",
   "claim": "POST /monitors",
   "doc_url": "https://exa.ai/docs/exa-spec.json",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "needs key",
   "capability": "Docs claim: Create a scheduled/recurring search that surfaces new matching results over time",
   "task": "POST /monitors",
   "route": "api",
   "evidence": "needs key"
  },
  {
   "t": "06:21",
   "cap": "pay",
   "step": "checkout",
   "capability": "walk to last click",
   "task": "Open the cheapest paid option",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up stopped at Cloudflare Turnstile; billing lives at dashboard.exa.ai/billing (docs admin/billing.md: 'Add credits, configure auto recharge, and view invoices'), which answers Vercel Security Checkpoint 'Failed to verify your browser, Code 21'. Pricing is pay-as-you-go credits, free tier $10/month without a card (llms.txt). Agent rails: x402 v2 and MPP on /search and /contents (paid by us), Nevermined $7 key purchase, Stripe Projects."
  },
  {
   "t": "06:21",
   "cap": "cancel",
   "capability": "cancel",
   "task": "Cancel what we started",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Nothing recurring started: keyless MCP and per-call x402 payments (by us) only. Docs: pay-as-you-go credits with optional auto recharge configured in the dashboard billing page; no subscription to cancel on the free tier."
  },
  {
   "t": "06:21",
   "cap": "delete",
   "capability": "delete",
   "task": "Delete what the drive made",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "left": "nothing_made",
   "evidence": "No Exa account was created (sign-up blocked before submission; inbox empty). Keyless searches/fetches store nothing for the caller. One public OAuth client (DCR, mcp_10d6…) remains registered at auth.exa.ai: no documented way to delete it (no RFC 7592 endpoint advertised), no grant was ever issued to it."
  }
 ],
 "stale": false,
 "icon": "/logos/exa.png",
 "monitored": false,
 "verdict": "Gets in describes Exa today: our agent reached search and page-reading with no account at all. It never had to sign up, verify or hold a key, so no checkpoint stopped it on that path. Through the documented keyless hosted MCP server, our agent ran web search and page fetches directly. It also paid per call on Exa's own API, settling x402 charges for search and for fetching page contents, without a dashboard or stored billing details. Reaching an account hit a Cloudflare Turnstile at sign-up. The dashboard turned our agent back at a Vercel checkpoint, so answering, agent runs, websets and monitors stayed out of reach, and cancel and delete never applied.",
 "page": "https://agentdrives.com/tools/exa?via=api"
}