Migrating from Exa
Point your existing Exa client at Brime — no code changes.
Brime exposes Exa's wire format under /exa/v1/*. Three endpoints supported (/search, /answer, /contents) plus streaming for search and answer.
One-line migration
from exa_py import Exa
client = Exa(
api_key="sk-brime-...",
base_url="https://api.brime.dev/exa",
)
result = client.search("Tesla Cybertruck recall 2025")import Exa from "exa-js";
const exa = new Exa("sk-brime-...", { baseUrl: "https://api.brime.dev/exa" });
const result = await exa.search("Tesla Cybertruck recall 2025");What's compatible
| Exa endpoint | Brime path | Status |
|---|---|---|
/search | /exa/v1/search | ✅ Full (synthesised when type=neural/deep*) |
/answer | /exa/v1/answer | ✅ Full |
/contents | /exa/v1/contents | ✅ Full |
/findSimilar | — | ❌ Vector retrieval not yet (engine work) |
/research/v0/tasks | — | ❌ Not yet |
stream: true is supported on /search and /answer — frames come as OpenAI chat.completion.chunk envelopes.
Field mapping
| Exa field | Brime behaviour |
|---|---|
type: neural | deep | deep-lite | deep-reasoning | instant | All map to Brime ranking (vector retrieval is on the roadmap) |
category (people / company / paper / news / personal / financial) | Silently ignored |
userLocation | Silently ignored (no per-country routing) |
additionalQueries | Silently ignored |
outputSchema | Silently ignored (no structured output yet) |
useAutoprompt | Silently ignored (no query expansion) |
contents.highlights | Always [] |
contents.summary | Always "" |
contents.subpages | Always [] |
contents.livecrawl + livecrawlTimeout | Silently ignored |
costDollars | Synthesised from Brime credits (rough estimate) |
Hit a parity gap that's not listed? Open an issue at github.com/orgs/brime-dev/repositories.
Authentication
Both Authorization: Bearer <key> and Exa's x-api-key: <key> header work. Use whichever your client sets by default.
Streaming
Exa chat.completion.chunk envelope is preserved:
data: {"id":"...","choices":[{"delta":{"content":"The ECB held rates at 3.25% in October 2025..."}}]}
data: {"id":"...","citations":[{"url":"https://en.wikipedia.org/wiki/Generative_artificial_intelligence"}]}
data: [DONE]The streaming layer is synthesised — Brime runs the underlying call synchronously, then chunks the response into SSE frames. Real LLM token-level streaming is on the roadmap.
Pricing
Brime credits. See Pricing.
When to use the Exa adapter vs the native brime SDK
- Use the Exa adapter to keep an existing Exa codebase running with minimum churn.
- Use the native
brimeSDK when starting fresh — wider feature surface (deep research, SSE replay, idempotency).