Skip to main content Diagnose and fix Exa common errors and exceptions.
Use when encountering Exa errors, debugging failed requests,
or troubleshooting integration issues.
Trigger with phrases like "exa error", "fix exa",
"exa not working", "debug exa".
npx skills add jeremylongshore/claude-code-plugins-plus-skills --skill exa-common-errors ai automation claude-code devops mcp ai-agents
Exa Common Errors
Overview
Quick reference for Exa API errors by HTTP status code and error tag. All error responses include a requestId field — include it when contacting Exa support at [email protected] .
Error Reference
400 — Bad Request
Error Tag Cause Solution INVALID_REQUEST_BODYMalformed JSON or missing required fields Validate JSON structure and required query field INVALID_REQUESTConflicting parameters Remove contradictory options (e.g., date filters with company category)
INVALID_URLS
Malformed URLs in getContents
Ensure URLs have https:// protocol
INVALID_NUM_RESULTSnumResults > 100 with highlights Reduce to <= 100 or remove highlights
INVALID_JSON_SCHEMABad schema in summary.schema Validate JSON schema syntax
NUM_RESULTS_EXCEEDEDExceeds plan limit Check your plan's max results
NO_CONTENT_FOUNDNo content at provided URLs Verify URLs are accessible
401 — Unauthorized # Verify your API key is set and valid
echo "Key set: ${EXA_API_KEY:+yes}"
# Test with curl
curl -s -o /dev/null -w "%{http_code}" \
-X POST https://api.exa.ai/search \
-H "x-api-key: $EXA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"test","numResults":1}'
402 — Payment Required Error Tag Cause Solution NO_MORE_CREDITSAccount balance exhausted Top up at dashboard.exa.ai API_KEY_BUDGET_EXCEEDEDSpending limit reached Increase budget in API key settings
403 — Forbidden Error Tag Cause Solution ACCESS_DENIEDFeature not available on plan Upgrade plan or contact Exa FEATURE_DISABLEDEndpoint not enabled Check plan capabilities ROBOTS_FILTER_FAILEDURL blocked by robots.txt Use a different URL PROHIBITED_CONTENTContent blocked by moderation Review query for policy violations
429 — Rate Limited // Default rate limit: 10 QPS (queries per second)
// Error response format: { "error": "rate limit exceeded" }
// Fix: implement exponential backoff
async function searchWithBackoff(exa: Exa, query: string, opts: any) {
for (let attempt = 0; attempt < 5; attempt++) {
try {
return await exa.search(query, opts);
} catch (err: any) {
if (err.status !== 429) throw err;
const delay = 1000 * Math.pow(2, attempt) + Math.random() * 500;
console.log(`Rate limited. Waiting ${delay.toFixed(0)}ms...`);
await new Promise(r => setTimeout(r, delay));
}
}
throw new Error("Rate limit retries exhausted");
}
422 — Unprocessable Entity Error Tag Cause Solution FETCH_DOCUMENT_ERRORURL could not be crawled Verify URL is accessible and not paywalled
5xx — Server Errors Code Tag Action 500 DEFAULT_ERROR / INTERNAL_ERRORRetry after 1-2 seconds 501 UNABLE_TO_GENERATE_RESPONSERephrase query (answer endpoint) 502 Bad Gateway Retry with delay 503 Service Unavailable Check status page, retry later
Content Fetch Errors (per-URL status in getContents) Tag Cause Resolution CRAWL_NOT_FOUNDContent unavailable at URL Verify URL correctness CRAWL_TIMEOUTFetch timed out Retry or increase livecrawlTimeout CRAWL_LIVECRAWL_TIMEOUTLive crawl exceeded timeout Set livecrawlTimeout: 15000 or use livecrawl: "fallback" SOURCE_NOT_AVAILABLEPaywalled or blocked Try cached content with livecrawl: "never" UNSUPPORTED_URLNon-HTTP URL scheme Use standard HTTPS URLs
Quick Diagnostic Script set -euo pipefail
echo "=== Exa Diagnostics ==="
echo "API Key: ${EXA_API_KEY:+SET (${#EXA_API_KEY} chars)}"
# Test basic connectivity
echo -n "API connectivity: "
HTTP_CODE=$(curl -s -o /tmp/exa-test.json -w "%{http_code}" \
-X POST https://api.exa.ai/search \
-H "x-api-key: $EXA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"connectivity test","numResults":1}')
echo "$HTTP_CODE"
if [ "$HTTP_CODE" != "200" ]; then
echo "Error response:"
cat /tmp/exa-test.json | python3 -m json.tool 2>/dev/null || cat /tmp/exa-test.json
fi
Instructions
Check the HTTP status code from the error response
Match the error tag to the tables above
Apply the documented solution
Include requestId from error responses when contacting support
Resources
Next Steps For comprehensive debugging, see exa-debug-bundle. For rate limit patterns, see exa-rate-limits.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading/injecting/running secrets via op.
CLI to manage emails via IMAP/SMTP. Use `himalaya` to list, read, write, reply, forward, search, and organize emails from the terminal. Supports multiple accounts and message composition with MML (MIME Meta Language).
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading/injecting/running secrets via op.
CLI to manage emails via IMAP/SMTP. Use `himalaya` to list, read, write, reply, forward, search, and organize emails from the terminal. Supports multiple accounts and message composition with MML (MIME Meta Language).