openclaw - ✅(Solved) Fix Feature: support custom Exa web_search baseUrl (or fail with explicit schema/docs guidance) [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#54928Fetched 2026-04-08 01:34:27
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
0
Author
Timeline (top)
referenced ×2commented ×1cross-referenced ×1

OpenClaw's built-in Exa web search provider still appears to reject a custom baseUrl in plugins.entries.exa.config.webSearch, even on 2026.3.24.

This makes it hard to use Exa-compatible proxies / self-hosted gateways / reverse-proxied Exa endpoints.

Error Message

Adding baseUrl under plugins.entries.exa.config.webSearch causes config validation failure, with an error in the shape of:

Root Cause

Custom base URLs are useful for:

  • reverse proxies
  • API gateways
  • region routing
  • internal compatibility layers
  • rate-limit / auth wrappers

Without this, users trying to configure Exa similarly to other providers will hit a schema crash.

Fix Action

Fixed

PR fix notes

PR #54939: feat(exa): support custom baseUrl in webSearch config

Description (problem / solution / changelog)

Summary

Users trying to configure a custom baseUrl under plugins.entries.exa.config.webSearch hit a schema validation error:

plugins.entries.exa.config.webSearch: invalid config: must NOT have additional properties

This is because the Exa plugin's configSchema in openclaw.plugin.json had additionalProperties: false and only declared apiKey — no baseUrl field.

Changes

extensions/exa/openclaw.plugin.json — added baseUrl to the webSearch configSchema properties and a corresponding uiHint.

extensions/exa/src/exa-web-search-provider.ts — added baseUrl?: string to ExaConfig, reads it from resolveProviderWebSearchPluginConfig, and passes it to runExaSearch as the endpoint (falling back to the default https://api.exa.ai/search).

src/plugins/bundled-plugin-metadata.generated.ts — regenerated to include the new schema field.

Use case

Enables reverse proxies, API gateways, region routing, auth wrappers, and self-hosted Exa-compatible endpoints — consistent with how other providers (e.g. firecrawl) already support baseUrl.

Fixes #54928


AI Assistance

  • AI-assisted (Claude Sonnet 4.6 via OpenClaw)
  • Lightly tested — pnpm check (lint, format, type checks, boundary checks) passed; targeted unit tests added/verified
  • Full pnpm build && pnpm test not run (CI will validate)
  • Code reviewed and understood by human author
  • Codex review not run locally; CI Codex review will apply

Extension test results

pnpm test:extension exa: 1 test file, 10 tests — all passed

Changed files

  • docs/.generated/config-baseline.json (modified, +14/-0)
  • docs/.generated/config-baseline.jsonl (modified, +2/-1)
  • extensions/exa/openclaw.plugin.json (modified, +7/-0)
  • extensions/exa/src/exa-web-search-provider.ts (modified, +8/-1)
  • src/plugins/bundled-plugin-metadata.generated.ts (modified, +7/-0)

Code Example

{
  plugins: {
    entries: {
      exa: {
        enabled: true,
        config: {
          webSearch: {
            apiKey: "exa-...",
            baseUrl: "https://exa-proxy.example.com"
          }
        }
      }
    }
  },
  tools: {
    web: {
      search: {
        provider: "exa"
      }
    }
  }
}

---

plugins.entries.exa.config.webSearch: invalid config: must NOT have additional properties
RAW_BUFFERClick to expand / collapse

Summary

OpenClaw's built-in Exa web search provider still appears to reject a custom baseUrl in plugins.entries.exa.config.webSearch, even on 2026.3.24.

This makes it hard to use Exa-compatible proxies / self-hosted gateways / reverse-proxied Exa endpoints.

What I expected

Exa should support a custom base URL in main config, e.g.

{
  plugins: {
    entries: {
      exa: {
        enabled: true,
        config: {
          webSearch: {
            apiKey: "exa-...",
            baseUrl: "https://exa-proxy.example.com"
          }
        }
      }
    }
  },
  tools: {
    web: {
      search: {
        provider: "exa"
      }
    }
  }
}

What actually happens

Adding baseUrl under plugins.entries.exa.config.webSearch causes config validation failure, with an error in the shape of:

plugins.entries.exa.config.webSearch: invalid config: must NOT have additional properties

Current docs / release behavior observed

On a local install updated to 2026.3.24:

  • docs/tools/exa-search.md still documents only:
    • plugins.entries.exa.config.webSearch.apiKey
  • I could not find documentation or changelog notes indicating support for:
    • plugins.entries.exa.config.webSearch.baseUrl
  • Dist/build inspection also only exposed Exa's credential path for apiKey

Why this matters

Custom base URLs are useful for:

  • reverse proxies
  • API gateways
  • region routing
  • internal compatibility layers
  • rate-limit / auth wrappers

Without this, users trying to configure Exa similarly to other providers will hit a schema crash.

Request

Please add plugins.entries.exa.config.webSearch.baseUrl support.

extent analysis

Fix Plan

To add support for a custom baseUrl in the Exa web search provider, we need to update the configuration validation and the Exa plugin to use the custom base URL.

Step 1: Update Configuration Validation

We need to update the configuration validation to allow the baseUrl property under plugins.entries.exa.config.webSearch. This can be done by updating the JSON schema for the Exa configuration.

{
  "type": "object",
  "properties": {
    "plugins": {
      "type": "object",
      "properties": {
        "entries": {
          "type": "object",
          "properties": {
            "exa": {
              "type": "object",
              "properties": {
                "config": {
                  "type": "object",
                  "properties": {
                    "webSearch": {
                      "type": "object",
                      "properties": {
                        "apiKey": {"type": "string"},
                        "baseUrl": {"type": "string"} // Add this line
                      },
                      "required": ["apiKey"],
                      "additionalProperties": false
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Step 2: Update Exa Plugin

We need to update the Exa plugin to use the custom base URL. This can be done by modifying the exa.js file to use the baseUrl property when making requests to the Exa API.

// exa.js
const axios = require('axios');

// ...

const baseUrl = config.webSearch.baseUrl || 'https://default-exa-url.com';
const apiKey = config.webSearch.apiKey;

// ...

axios.get(`${baseUrl}/search`, {
  params: {
    q: query,
    api_key: apiKey
  }
})
.then(response => {
  // ...
})
.catch(error => {
  // ...
});

Verification

To verify that the fix worked, you can test the Exa web search provider with a custom base URL. You can do this by updating your configuration file to include the baseUrl property and then testing the search functionality.

{
  "plugins": {
    "entries": {
      "exa": {
        "enabled": true,
        "config": {
          "webSearch": {
            "apiKey": "exa-...",
            "baseUrl": "https://exa-proxy.example.com"
          }
        }
      }
    }
  }
}

If the fix worked, you should be able to use the Exa web search provider with a custom base URL without encountering any configuration validation errors.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING