Exa Search Integration: Neural, Keyword & Hybrid Search
Learn how to integrate Exa AI search into your workflow. This page covers setup, API key configuration, base URL overrides, and tool parameters for developers.
Read this when
- You want to use Exa for web_search
- You need an EXA_API_KEY
- You want neural search or content extraction
Exa AI is a web_search provider offering neural, keyword, and hybrid search modes, along with built-in content extraction for highlights, text, and summaries.
Install plugin
openclaw plugins install @openclaw/exa-plugin
openclaw gateway restart
Get an API key
Create an account
Sign up at exa.ai and generate an API key from your dashboard.
Store the key
Set EXA_API_KEY in the Gateway environment, or configure it using:
openclaw configure --section web
Config
{
plugins: {
entries: {
exa: {
config: {
webSearch: {
apiKey: "exa-...", // optional if EXA_API_KEY is set
baseUrl: "https://api.exa.ai", // optional; OpenClaw appends /search
},
},
},
},
},
tools: {
web: {
search: {
provider: "exa",
},
},
},
}
Environment alternative: set EXA_API_KEY in the Gateway environment. For a gateway install, place it in ~/.openclaw/.env. See Env vars.
Base URL override
Set plugins.entries.exa.config.webSearch.baseUrl to route Exa search requests through a compatible proxy or alternative endpoint. OpenClaw normalizes bare hosts by prepending https:// and appending /search unless the path already ends there. The resolved endpoint becomes part of the search cache key, so results from different endpoints are never shared.
Tool parameters
-
query(string, required), Search query. -
count(number, default: 5), Number of results to return (1-100, subject to Exa search-type limits). -
type('auto' | 'neural' | 'fast' | 'deep' | 'deep-reasoning' | 'instant'), Search mode. -
freshness('day' | 'week' | 'month' | 'year'), Time filter. Cannot be combined withdate_after/date_before. -
date_after(string), Results after this date (YYYY-MM-DD). -
date_before(string), Results before this date (YYYY-MM-DD). -
contents(object), Content extraction options (see below).
Content extraction
Pass a contents object to control extracted content in results:
await web_search({
query: "transformer architecture explained",
type: "neural",
contents: {
text: true, // full page text
highlights: { numSentences: 3 }, // key sentences
summary: true, // AI summary
},
});
| Contents option | Type | Description |
|---|---|---|
text | boolean | { maxCharacters } | Extract full page text |
highlights | boolean | { maxCharacters, query, numSentences, highlightsPerUrl } | Extract key sentences |
summary | boolean | { query } | AI-generated summary |
If contents is omitted, Exa defaults to { highlights: true } so results include key-sentence excerpts. Result descriptions resolve from highlights first, then summary, then full text, whichever is available first. Results also preserve the raw highlightScores and summary fields from the Exa API response when available.
Search modes
| Mode | Description |
|---|---|
auto | Exa picks the best mode (default) |
neural | Semantic/meaning-based search |
fast | Quick keyword search |
deep | Thorough deep search |
deep-reasoning | Deep search with reasoning |
instant | Fastest results |
Notes
countaccepts up to 100, subject to Exa search-type limits.- Results are cached for 15 minutes by default. Configure the shared
tools.web.search.cacheTtlMinutes(minutes) andtools.web.search.timeoutSeconds(default 30s) to change caching and request timeout for allweb_searchproviders, including Exa.
Related
- Web Search overview, all providers and auto-detection
- Brave Search, structured results with country/language filters
- Perplexity Search, structured results with domain filtering