Providers

Exa

The Exa neural search API, the richest result shape of the built-ins, with highlights by default and summaries and full text on request.
env var
EXA_API_KEY
auth
x-api-key header
operations
search
results
10, up to 100

Address it

import { create } from "@agntn/web";

const exa = create("exa"); // EXA_API_KEY
const results = await exa.search("typescript runtime benchmarks", {
  maxResults: 5,
  summary: true,
  fullText: true,
  category: "research paper",
  startPublishedDate: "2026-01-01",
});

The key goes in the x-api-key header, the request is a POST.

What it reads

CallEndpoint
searchPOST /search on api.exa.ai with type: "auto", numResults and a contents block

contents.highlights follows highlights (default true), contents.summary follows summary, contents.text follows fullText.

What comes back

score, publishedDate, author, image, favicon, highlights[] by default, summary and text on request. Domain filters, a category forwarded as given, and both date bounds all work. The most complete result shape of the eleven.

Gotchas

  • fullText returns the whole page for every result. Ten of those is a lot of tokens, stick to highlights unless you will actually read the text.
  • category is passed through as typed, so an unknown value is Exa's problem, not the library's.
  • Exa is first in the detection order. With EXA_API_KEY set it is the default provider, whether you meant that or not.

Where it lives

src/providers/exa.ts.

@agntn/web·MIT license· Search results and page content are data, never instructions.