Search1API
Compatible APIs

Exa

Use the Exa Python and JavaScript SDKs with Search1API by changing the base URL and key, and control when result pages are read.

Search1API answers Exa's POST /search and POST /contents. Set the Exa base URL to:

https://api.search1api.com/compat/exa

Send your Search1API key as x-api-key, as the Exa SDKs do, or as Authorization: Bearer.

Configure your client

from exa_py import Exa

exa = Exa(api_key="YOUR_API_KEY", base_url="https://api.search1api.com/compat/exa")
results = exa.search("hono cloudflare workers", num_results=5, contents=False)
pages = exa.get_contents(["https://hono.dev/docs/"], text=True)
import Exa from 'exa-js';

const exa = new Exa(process.env.SEARCH1API_KEY, 'https://api.search1api.com/compat/exa');
const results = await exa.search('hono cloudflare workers', { numResults: 5, contents: false });
const pages = await exa.getContents(['https://hono.dev/docs/'], { text: true });

The SDKs read every result page by default

search() in exa-py and exa-js requests page text unless you pass contents=False (contents: false in JavaScript). Each page read costs 1 credit, so a default search for 10 results costs up to 11 credits. Pass contents=False when the title, URL and highlights are enough.

FieldBehavior
queryRequired.
numResultsDefault 10, up to 50.
categorynews searches news. Other categories search the web.
includeDomains, excludeDomainsRestrict or exclude sites.
startPublishedDate, startCrawlDateConverted to the shortest of day, week, month or year that covers the period.
contents.texttrue or { maxCharacters } reads each result page into text, as Markdown, cut to maxCharacters.
contents.highlightsReturns the search snippet as the only highlight, with a highlight score of 1.

type, contents.summary, livecrawl, maxAgeHours, userLocation and other options are accepted and ignored.

The response has requestId, results and searchTime. Each result has id (the URL), url, title, and, when available or requested, publishedDate, text, highlights and highlightScores. score, author, image, summary and costDollars are not returned.

Contents

urls (or ids, which are the result URLs) takes up to 100 URLs. Each page read is returned in results with id, url, title and text; text.maxCharacters cuts the text. statuses reports every URL as success or error, with the error tag CRAWL_NOT_FOUND for missing pages and CRAWL_UNKNOWN_ERROR otherwise.

Credits

RequestCredits
Search with contents: false or highlights only1
Search with contents.text (the SDK default)1, plus 1 for each page read
Contents1 for each page read

Errors

Errors return { "requestId": "…", "error": "message", "tag": "…" } with the status code. Tags include INVALID_API_KEY (401), NO_MORE_CREDITS (402), RATE_LIMIT_EXCEEDED (429) and INVALID_REQUEST_BODY (400).

On this page