2026-01-18 01:42:40 +00:00
---
2026-03-08 20:37:54 +05:30
summary: "Perplexity Search API and Sonar/OpenRouter compatibility for web_search"
2026-01-18 01:42:40 +00:00
read_when:
2026-03-04 04:57:19 +00:00
- You want to use Perplexity Search for web search
2026-03-08 20:37:54 +05:30
- You need PERPLEXITY_API_KEY or OPENROUTER_API_KEY setup
2026-03-04 04:57:19 +00:00
title: "Perplexity Search"
2026-01-18 01:42:40 +00:00
---
2026-03-04 04:57:19 +00:00
# Perplexity Search API
2026-01-18 01:42:40 +00:00
2026-03-08 14:10:26 +00:00
OpenClaw supports Perplexity Search API as a `web_search` provider.
It returns structured results with `title` , `url` , and `snippet` fields.
2026-01-18 01:42:40 +00:00
2026-03-08 20:37:54 +05:30
For compatibility, OpenClaw also supports legacy Perplexity Sonar/OpenRouter setups.
If you use `OPENROUTER_API_KEY` , an `sk-or-...` key in `tools.web.search.perplexity.apiKey` , or set `tools.web.search.perplexity.baseUrl` / `model` , the provider switches to the chat-completions path and returns AI-synthesized answers with citations instead of structured Search API results.
2026-03-04 04:57:19 +00:00
## Getting a Perplexity API key
2026-01-18 01:42:40 +00:00
2026-03-04 04:57:19 +00:00
1. Create a Perplexity account at < https: // www . perplexity . ai / settings / api >
2. Generate an API key in the dashboard
2026-03-08 14:10:26 +00:00
3. Store the key in config or set `PERPLEXITY_API_KEY` in the Gateway environment.
2026-01-18 01:42:40 +00:00
2026-03-08 20:37:54 +05:30
## OpenRouter compatibility
If you were already using OpenRouter for Perplexity Sonar, keep `provider: "perplexity"` and set `OPENROUTER_API_KEY` in the Gateway environment, or store an `sk-or-...` key in `tools.web.search.perplexity.apiKey` .
Optional legacy controls:
- `tools.web.search.perplexity.baseUrl`
- `tools.web.search.perplexity.model`
## Config examples
### Native Perplexity Search API
2026-01-18 01:42:40 +00:00
```json5
{
tools: {
web: {
search: {
provider: "perplexity",
perplexity: {
apiKey: "pplx-...",
2026-01-31 21:13:13 +09:00
},
},
},
},
2026-01-18 01:42:40 +00:00
}
```
2026-03-08 20:37:54 +05:30
### OpenRouter / Sonar compatibility
```json5
{
tools: {
web: {
search: {
provider: "perplexity",
perplexity: {
2026-03-08 11:09:05 -07:00
apiKey: "< openrouter-api-key > ",
2026-03-08 20:37:54 +05:30
baseUrl: "https://openrouter.ai/api/v1",
model: "perplexity/sonar-pro",
},
},
},
},
}
```
2026-03-08 14:10:26 +00:00
## Where to set the key
2026-01-18 01:42:40 +00:00
2026-03-08 14:10:26 +00:00
**Via config:** run `openclaw configure --section web` . It stores the key in
2026-03-04 04:57:19 +00:00
`~/.openclaw/openclaw.json` under `tools.web.search.perplexity.apiKey` .
2026-03-08 20:37:54 +05:30
**Via environment:** set `PERPLEXITY_API_KEY` or `OPENROUTER_API_KEY`
in the Gateway process environment. For a gateway install, put it in
`~/.openclaw/.env` (or your service environment). See [Env vars ](/help/faq#how-does-openclaw-load-environment-variables ).
2026-03-04 04:57:19 +00:00
## Tool parameters
2026-03-08 20:37:54 +05:30
These parameters apply to the native Perplexity Search API path.
2026-03-04 04:57:19 +00:00
| Parameter | Description |
| --------------------- | ---------------------------------------------------- |
| `query` | Search query (required) |
| `count` | Number of results to return (1-10, default: 5) |
| `country` | 2-letter ISO country code (e.g., "US", "DE") |
| `language` | ISO 639-1 language code (e.g., "en", "de", "fr") |
| `freshness` | Time filter: `day` (24h), `week` , `month` , or `year` |
| `date_after` | Only results published after this date (YYYY-MM-DD) |
| `date_before` | Only results published before this date (YYYY-MM-DD) |
| `domain_filter` | Domain allowlist/denylist array (max 20) |
| `max_tokens` | Total content budget (default: 25000, max: 1000000) |
| `max_tokens_per_page` | Per-page token limit (default: 2048) |
2026-03-08 20:37:54 +05:30
For the legacy Sonar/OpenRouter compatibility path, only `query` and `freshness` are supported.
Search API-only filters such as `country` , `language` , `date_after` , `date_before` , `domain_filter` , `max_tokens` , and `max_tokens_per_page` return explicit errors.
2026-03-04 04:57:19 +00:00
**Examples:**
```javascript
// Country and language-specific search
await web_search({
query: "renewable energy",
country: "DE",
language: "de",
});
// Recent results (past week)
await web_search({
query: "AI news",
freshness: "week",
});
// Date range search
await web_search({
query: "AI developments",
date_after: "2024-01-01",
date_before: "2024-06-30",
});
// Domain filtering (allowlist)
await web_search({
query: "climate research",
domain_filter: ["nature.com", "science.org", ".edu"],
});
// Domain filtering (denylist - prefix with -)
await web_search({
query: "product reviews",
domain_filter: ["-reddit.com", "-pinterest.com"],
});
// More content extraction
await web_search({
query: "detailed AI research",
max_tokens: 50000,
max_tokens_per_page: 4096,
});
```
2026-01-18 01:42:40 +00:00
2026-03-04 04:57:19 +00:00
### Domain filter rules
2026-01-20 07:27:25 +00:00
2026-03-04 04:57:19 +00:00
- Maximum 20 domains per filter
- Cannot mix allowlist and denylist in the same request
- Use `-` prefix for denylist entries (e.g., `["-reddit.com"]` )
2026-01-18 01:42:40 +00:00
2026-03-04 04:57:19 +00:00
## Notes
2026-01-18 01:42:40 +00:00
2026-03-08 14:10:26 +00:00
- Perplexity Search API returns structured web search results (`title` , `url` , `snippet` )
2026-03-08 20:37:54 +05:30
- OpenRouter or explicit `baseUrl` / `model` switches Perplexity back to Sonar chat completions for compatibility
2026-03-04 04:57:19 +00:00
- Results are cached for 15 minutes by default (configurable via `cacheTtlMinutes` )
2026-01-18 01:42:40 +00:00
See [Web tools ](/tools/web ) for the full web_search configuration.
2026-03-04 04:57:19 +00:00
See [Perplexity Search API docs ](https://docs.perplexity.ai/docs/search/quickstart ) for more details.