Migrate from Exa

Keep exa-py or exa-js. Change the base URL and the key.

typesearch has a compatibility layer that speaks Exa’s API — same parameters, same response shape, same errors. With the official SDKs, migrating is two lines.

from exa_py import Exa

# before: exa = Exa(api_key=EXA_API_KEY)
exa = Exa(api_key=TYPESEARCH_API_KEY, base_url="https://api.typesearch.ai/compat/exa")

results = exa.search("el dólar", num_results=10, type="fast", include_domains=["reddiaria.example"])
similar = exa.find_similar(results.results[0].url, exclude_source_domain=True)
pages = exa.get_contents([r.url for r in results.results], highlights=True)

Supported: /search, /findSimilar and /contents. The key goes in the header the SDK already uses.

Parameters

ExaOn typesearch
query, numResultsSame. Up to 50 results (limited:numResults above that).
typeinstant → ultra · fast, auto, neural, keyword, hybrid → fast · deep* → deep. fast doesn’t read the pages: contents are billed per page (below).
includeDomains, excludeDomainsSame, up to 20. *.domain.com works too.
startPublishedDate, endPublishedDateSame.
includeText, excludeTextApplied to title, standfirst and highlights (approximated:includeText).
categorynews or nothing. Any other category returns empty without searching or billing (unsupported:category).
contents.highlightsVerbatim excerpts the model picks for the query (or highlights.query). In ultra and fast, each result page is read and billed per page: $0.40 per 1,000. In deep, from the articles it read, included in its price.
contents.textA short excerpt, never the full page (limited:text). In ultra and fast, billed per page: $0.20 per 1,000.
contents.summaryNot generated: we don’t write summaries (unsupported:summary).
/findSimilarArticles in the index about the same story. excludeSourceDomain works.
/contentsMetadata and short excerpts. With highlights.query, the model picks them.

What it costs

Exa’s search ($7 per 1,000, list price checked September 25, 2026) includes the text and highlights of up to 10 results. Here each part has its own price: a fast search is $1.40 per 1,000 and returns headlines and standfirsts (type: "instant" is ultra, $1.00 per 1,000, headlines only), and each page you ask contents for is billed on top. With the text of 10 results a fast search comes to $3.40 per 1,000; with highlights of 10, $5.40. normal ($2.20) reads the top 4 before ranking them, and deep ($5.60, against $12–15 for Exa’s deep search) reads 8 with highlights. If you need the full text of every result, Exa gives you more for its price: see what stays with Exa.

Nothing breaks silently

What we don’t support is accepted and reported in the X-Compat-Warnings response header — ignored:…, limited:…, approximated:… or unsupported:… — so migrated code keeps running. Only what would change the meaning of a request is an error, in Exa’s format: { requestId, error, tag }.

Our extras

Add a typesearch field to the request body for what Exa doesn’t have — tone, essentials, a mode or a cost cap. It comes back in a typesearch field of the response. Any client that lets you add fields to the JSON body works:

curl https://api.typesearch.ai/compat/exa/search \
  -H "x-api-key: $TYPESEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "el dólar", "numResults": 5, "typesearch": { "tone": true, "mode": "normal" } }'

For everything else, the native API and our SDKs expose all of it.

What stays with Exa

People, company and research-paper indexes, full page text, and generated answers or summaries are not part of typesearch. If your product depends on them, keep those calls on Exa and move the rest.

On this page