Exa-compatible SDKs
exa-py, exa-js, langchain-exa and other tools built on them, pointed at typesearch.
typesearch has a compatibility layer that speaks Exa’s API: the same endpoints (/search,
/findSimilar, /contents), parameters, response shapes and errors. Anything built on Exa’s SDKs that
lets you set the base URL works with a typesearch key.
| Tool | How |
|---|---|
exa-py | Exa(api_key=…, base_url="https://api.typesearch.ai/compat/exa") |
exa-py, async | AsyncExa(api_key=…, api_base="https://api.typesearch.ai/compat/exa") |
exa-js | new Exa(apiKey, "https://api.typesearch.ai/compat/exa") |
langchain-exa (Python) | exa_base_url="https://api.typesearch.ai/compat/exa": see LangChain |
@langchain/exa (JavaScript) | Pass it an exa-js client with the base URL: see LangChain |
from exa_py import Exa
exa = Exa(api_key=TYPESEARCH_API_KEY, base_url="https://api.typesearch.ai/compat/exa")
results = exa.search("EU AI Act enforcement", num_results=10, type="fast")The key goes in the x-api-key header, as the SDKs already send it. Every parameter, and what it becomes on
typesearch, is in Migrate from Exa.
What doesn’t work
Tools that hard-code Exa’s address can’t be pointed elsewhere: Exa’s own MCP server and its AI SDK package are two of them.
For MCP clients, use our MCP server; for the Vercel AI SDK, see Vercel AI SDK.
Tako and Perplexity
Their SDKs work the same way, against their own compatibility layers: see Migrate from Tako and Migrate from Perplexity.