Published 2026-09-21 · Tested 2026-08-20
Exa
A-Exa received 8 PASS votes and passed 5 of five agent surface checks. The clearest finding came from the find the exact limits task.
Three AI models, GPT 5.6 Sol, Claude Opus 5, and DeepSeek v4 Flash, each read Exa’s public documentation independently and attempted five first-hour developer jobs: run the first web search, find the exact limits, recover from a 429, verify a Websets webhook, use the Python SDK.
No accounts, API calls, or code execution were used. Every verdict came from public pages and every published quotation passed a live verification check.
Freshness
How rechecks work- Category
- Search & retrieval
- Tested
- Quotes verified
- Surface rechecked
No change since the test.
2 of 5 quoted passages still appear on the live pages. The quoted page changed for Run the first web search, Recover from a 429, and Use the Python SDK.
91.2% · 73/80 · AI Agent Readiness Score · reading 30 pts · surface 50 pts
Agent surface checks · 50/50
The Reading Test
| Task | GPT 5.6 Sol | Opus 5 | DeepSeek v4F | Consensus |
|---|---|---|---|---|
| Run the first web search | PARTIAL | PASS | PASS | PASS |
| Find the exact limits | PARTIAL | PARTIAL | PARTIAL | PARTIAL |
| Recover from a 429 | PARTIAL | PARTIAL | PASS | PARTIAL |
| Verify a Websets webhook | PARTIAL | PASS | PASS | PASS |
| Use the Python SDK | PASS | PASS | PASS | PASS |
docs platform: Mintlify (unscored) · verified 2026-08-20
What to fix first
These 2 fixes could add up to 5 points to the AI Agent Readiness Score. The list ranks each fix by the points it would add. How the ranking works
- 1
Found: The Rate Limits page gives /search 10 QPS, but exa.ai/pricing gives the Starter plan 5 QPS. Opus 5 also found four endpoints with no QPS figure.
Fix: List QPS by plan for every endpoint on the Rate Limits page, and match the Starter value on exa.ai/pricing.
Evidence: exa.ai/
docs/ reference/ rate-limits (opens in a new tab) - 2
Found: The Error Codes page says to use exponential backoff but gives no delay, cap, jitter, or Retry-After rule.
Fix: Add a 429 retry example to Error Codes with the start delay, multiplier, cap, jitter, and whether Retry-After is sent.
Evidence: exa.ai/
docs/ reference/ error-codes (opens in a new tab)
What the docs get right
- Use the Python SDK: 3 PASS votes. The SDK page documents installation, environment-key initialization, and a minimum search matching the REST query and contents shape.
- Run the first web search: 2 PASS votes. The Human Quickstart runs key, export EXA_API_KEY, pip install exa-py, and a working exa.search(...) call in one unbroken sequence on a single page, and the Python SDK Specification documents the returned Result fields (url, title, score, highlights) so the results can be inspected.
- 5 of 5 agent surface checks. Present: llms.txt, llms-full.txt, markdown mirrors, an MCP server, docs AI.
Run the first web search
PASSPASS consensus from 2 PASS, 1 PARTIAL.
The quickstart covers key creation, installation, and search, but it never shows how to print or iterate returned results. The Human Quickstart runs key, export EXA_API_KEY, pip install exa-py, and a working exa.search(...) call in one unbroken sequence on a single page, and the Python SDK Specification documents the returned Result fields (url, title, score, highlights) so the results can be inspected. Three-step path (API key → install → run) is documented in one page with a minimal working example; no ambiguity or cross-referencing required.
Find the exact limits
PARTIALPARTIAL consensus from 3 PARTIAL.
The docs give credits, prices, and Enterprise differences, but rate-limits says 10 QPS while Starter pricing says 5 QPS. Free credits ($20 signup plus $10 monthly) and per-request pricing agree exactly between Pricing and Billing, but the Enterprise card implies a 25-result public ceiling while the Search API schema states "The maximum public limit is 100 results", and the Rate Limits table publishes QPS for only /search, /contents, and /answer with no figures for /agent, /monitors, /context, or /websets. Values per page are individually clear, but the rate-limits page and pricing page contradict each other on the default QPS (rate-limits says 10 universally; pricing shows Starter tier at 5). Enterprise differences are clearly listed as custom QPS, up to 1,000 results, and volume discounts.
Recover from a 429
PARTIALPARTIAL consensus from 1 PASS, 2 PARTIAL.
The endpoint table gives QPS values, but the 429 guidance omits delay, multiplier, cap, jitter, and Retry-After handling. The 429 body names the numeric limit and the Error Codes table prescribes "Implement exponential backoff and reduce request rate", but no page documents a Retry-After header, gives backoff parameters or a retry code sample, or assigns an error tag to 429, and the exceeded limit cannot be identified from the docs for any endpoint outside the three in the Rate Limits table. All three recovery steps (identify endpoint limit from rate-limits page, reduce request rate, exponential backoff) are documented. The 429 error body lacks Retry-After header and concrete backoff parameters, but the guidance to implement exponential backoff is unambiguous.
Verify a Websets webhook
PASSPASS consensus from 2 PASS, 1 PARTIAL.
The receive-and-verify flow is complete, but both creation examples use two event names absent from the documented enum. The chain is complete end to end: Create a Webhook documents the 19-value EventType enum and that secret is "Only returned on Webhook creation", and Verifying Signatures gives the t=/v1= header format, a four-step procedure, runnable Python, JavaScript, and Java, timing-safe comparison, a 300-second replay window, and a raw-body troubleshooting section. Complete end-to-end process documented: create webhook with secret-only-once response, parse Exa-Signature header format t=<ts>,v1=<hex>, compute HMAC-SHA256 over timestamp.rawBody, use timing-safe comparison, check timestamp freshness. Python code example provided.
Use the Python SDK
PASSPASS consensus from 3 PASS.
The SDK page documents installation, environment-key initialization, and a minimum search matching the REST query and contents shape. The SDK minimum, exa.search(query, contents={"highlights": True}), is byte-for-byte the same shape as the REST Minimal Working Example on the Search API Reference for coding agents, and both pages carry the same warning that text, highlights, and summary nest inside contents on /search. Python SDK examples in the SDK page and in the Search API coding-agent guide agree with each other and with the REST API guidance. The snake_case vs camelCase divergence is explicitly documented, leaving no room for guesswork.
The receipt
Each endpoint has a base price per request that includes up to 10 results. Additional results and Exa-generated page summaries are billed on top.
The docs give credits, prices, and Enterprise differences, but rate-limits says 10 QPS while Starter pricing says 5 QPS.
Agent surface notes
Initialize returned a valid MCP response with Exa Search server information.
The live docs expose a public Ask Assistant control.
Show the score
Paste this into a readme:
[](https://docsforagents.com/reports/exa-docs-ai-agent-readiness/) Method note
This is a reading test of public documentation, not an execution test. No accounts were created and no API calls were run. The AI Agent Readiness Score counts fifteen reading votes at PASS 2, PARTIAL 1, and FAIL 0, for 30 possible points. Five agent surface checks add 10 points each. The total is 80. Consensus chips show each row majority and do not affect scoring. The panel split on 3 of five tasks. Quotes shown here were re-fetched and confirmed verbatim on 2026-08-20.
Put another docs site through the battery.
Nominate a docs site