Files
openclaw/docs/tools/exa-search.md
2026-05-02 06:06:40 +01:00

153 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
summary: "Exa AI search -- neural and keyword search with content extraction"
read_when:
- You want to use Exa for web_search
- You need an EXA_API_KEY
- You want neural search or content extraction
title: "Exa search"
---
OpenClaw supports [Exa AI](https://exa.ai/) as a `web_search` provider. Exa
offers neural, keyword, and hybrid search modes with built-in content
extraction (highlights, text, summaries).
## Get an API key
<Steps>
<Step title="Create an account">
Sign up at [exa.ai](https://exa.ai/) and generate an API key from your
dashboard.
</Step>
<Step title="Store the key">
Set `EXA_API_KEY` in the Gateway environment, or configure via:
```bash
openclaw configure --section web
```
</Step>
</Steps>
## Config
```json5
{
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, put it in `~/.openclaw/.env`.
## Base URL override
Set `plugins.entries.exa.config.webSearch.baseUrl` when Exa search requests
should go through a compatible proxy or alternate Exa endpoint. OpenClaw
normalizes bare hosts by prepending `https://` and appends `/search` unless the
path already ends there. The resolved endpoint is included in the search cache
key, so results from different Exa endpoints are not shared.
## Tool parameters
<ParamField path="query" type="string" required>
Search query.
</ParamField>
<ParamField path="count" type="number">
Results to return (1100).
</ParamField>
<ParamField path="type" type="'auto' | 'neural' | 'fast' | 'deep' | 'deep-reasoning' | 'instant'">
Search mode.
</ParamField>
<ParamField path="freshness" type="'day' | 'week' | 'month' | 'year'">
Time filter.
</ParamField>
<ParamField path="date_after" type="string">
Results after this date (`YYYY-MM-DD`).
</ParamField>
<ParamField path="date_before" type="string">
Results before this date (`YYYY-MM-DD`).
</ParamField>
<ParamField path="contents" type="object">
Content extraction options (see below).
</ParamField>
### Content extraction
Exa can return extracted content alongside search results. Pass a `contents`
object to enable:
```javascript
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 |
### 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
- If no `contents` option is provided, Exa defaults to `{ highlights: true }`
so results include key sentence excerpts
- Results preserve `highlightScores` and `summary` fields from the Exa API
response when available
- Result descriptions are resolved from highlights first, then summary, then
full text — whichever is available
- `freshness` and `date_after`/`date_before` cannot be combined — use one
time-filter mode
- Up to 100 results can be returned per query (subject to Exa search-type
limits)
- Results are cached for 15 minutes by default (configurable via
`cacheTtlMinutes`)
- Exa is an official API integration with structured JSON responses
## Related
- [Web Search overview](/tools/web) -- all providers and auto-detection
- [Brave Search](/tools/brave-search) -- structured results with country/language filters
- [Perplexity Search](/tools/perplexity-search) -- structured results with domain filtering