Tools
Perplexity search
OpenClaw supports Perplexity Search API as a web_search provider.
It returns structured results with title, url, and snippet fields.
For compatibility, OpenClaw also supports legacy Perplexity Sonar/OpenRouter setups.
If you use OPENROUTER_API_KEY, an sk-or-... key in plugins.entries.perplexity.config.webSearch.apiKey, or set plugins.entries.perplexity.config.webSearch.baseUrl / model, the provider switches to the chat-completions path and returns AI-synthesized answers with citations instead of structured Search API results.
Getting a Perplexity API key
- Create a Perplexity account at perplexity.ai/settings/api
- Generate an API key in the dashboard
- Store the key in config or set
PERPLEXITY_API_KEYin the Gateway environment.
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 plugins.entries.perplexity.config.webSearch.apiKey.
Optional compatibility controls:
plugins.entries.perplexity.config.webSearch.baseUrlplugins.entries.perplexity.config.webSearch.model
Config examples
Native Perplexity Search API
{ plugins: { entries: { perplexity: { config: { webSearch: { apiKey: "pplx-...", }, }, }, }, }, tools: { web: { search: { provider: "perplexity", }, }, },}OpenRouter / Sonar compatibility
{ plugins: { entries: { perplexity: { config: { webSearch: { apiKey: "<openrouter-api-key>", baseUrl: "https://openrouter.ai/api/v1", model: "perplexity/sonar-pro", }, }, }, }, }, tools: { web: { search: { provider: "perplexity", }, }, },}Where to set the key
Via config: run openclaw configure --section web. It stores the key in
~/.openclaw/openclaw.json under plugins.entries.perplexity.config.webSearch.apiKey.
That field also accepts SecretRef objects.
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.
If provider: "perplexity" is configured and the Perplexity key SecretRef is unresolved with no env fallback, startup/reload fails fast.
Tool parameters
These parameters apply to the native Perplexity Search API path.
querystringrequiredSearch query.
countnumberdefault: 5Number of results to return (1-10).
countrystring2-letter ISO country code (e.g. US, DE).
languagestringISO 639-1 language code (e.g. en, de, fr).
freshness'day' | 'week' | 'month' | 'year'Time filter - day is 24 hours.
date_afterstringOnly results published after this date (YYYY-MM-DD).
date_beforestringOnly results published before this date (YYYY-MM-DD).
domain_filterstring[]Domain allowlist/denylist array (max 20).
max_tokensnumberdefault: 25000Total content budget (max 1000000).
max_tokens_per_pagenumberdefault: 2048Per-page token limit.
For the legacy Sonar/OpenRouter compatibility path:
query,count, andfreshnessare acceptedcountis compatibility-only there; the response is still one synthesized answer with citations rather than an N-result list- Search API-only filters such as
country,language,date_after,date_before,domain_filter,max_tokens, andmax_tokens_per_pagereturn explicit errors
Examples:
// Country and language-specific searchawait web_search({ query: "renewable energy", country: "DE", language: "de",}); // Recent results (past week)await web_search({ query: "AI news", freshness: "week",}); // Date range searchawait 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 extractionawait web_search({ query: "detailed AI research", max_tokens: 50000, max_tokens_per_page: 4096,});Domain filter rules
- Maximum 20 domains per filter
- Cannot mix allowlist and denylist in the same request
- Use
-prefix for denylist entries (e.g.,["-reddit.com"])
Notes
- Perplexity Search API returns structured web search results (
title,url,snippet) - OpenRouter or explicit
plugins.entries.perplexity.config.webSearch.baseUrl/modelswitches Perplexity back to Sonar chat completions for compatibility - Sonar/OpenRouter compatibility returns one synthesized answer with citations, not structured result rows
- Results are cached for 15 minutes by default (configurable via
cacheTtlMinutes)