> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Exa Search

This document describes the Exa passthrough endpoints exposed by the platform gateway. It is based on Exa's Search, Get Contents, and Answer APIs, with platform route prefixes applied.

Base URL example: `https://api.novita.ai`

Search the web and optionally extract content from returned results.

## Request Headers

All endpoints require platform API authentication.

<ParamField header="Content-Type" type="string" required={true}>
  Use `application/json`.
</ParamField>

<ParamField header="Authorization" type="string" required={true}>
  Platform API key, formatted as `Bearer <api_key>`.
</ParamField>

## Request Body

<ParamField body="query" type="string" required={true}>
  Search query. Minimum length is 1.
</ParamField>

<ParamField body="includeDomains" type="string[]" required={false}>
  Restrict results to these domains. Maximum 1200 entries.
</ParamField>

<ParamField body="excludeDomains" type="string[]" required={false}>
  Exclude results from these domains. Maximum 1200 entries.
</ParamField>

<ParamField body="startCrawlDate" type="string" required={false}>
  Include links crawled after this ISO 8601 date-time.
</ParamField>

<ParamField body="endCrawlDate" type="string" required={false}>
  Include links crawled before this ISO 8601 date-time.
</ParamField>

<ParamField body="startPublishedDate" type="string" required={false}>
  Include links published after this ISO 8601 date-time.
</ParamField>

<ParamField body="endPublishedDate" type="string" required={false}>
  Include links published before this ISO 8601 date-time.
</ParamField>

<ParamField body="numResults" type="integer" required={false}>
  Number of results to return. Default is `10`; supported public range is `1` to `100`.
</ParamField>

<ParamField body="moderation" type="boolean" required={false}>
  Enable content moderation to filter unsafe content from search results. Default is `false`.
</ParamField>

<ParamField body="contents" type="object" required={false}>
  Content extraction options for search results. See [Search Contents Object](#search-contents-object).
</ParamField>

<ParamField body="additionalQueries" type="string[]" required={false}>
  Additional query variants for deep-search modes. Range is `1` to `10` entries.
</ParamField>

<ParamField body="type" type="string" required={false}>
  Search mode. Common values include `instant`, `fast`, `auto`, `deep-lite`, `deep`, and `deep-reasoning`.
</ParamField>

<ParamField body="category" type="string" required={false}>
  Data category hint. Known values include `company`, `research paper`, `news`, `personal site`, `financial report`, and `people`. See [Search Category Limits](#search-category-limits).
</ParamField>

<ParamField body="userLocation" type="string" required={false}>
  Two-letter ISO country code, such as `US`.
</ParamField>

<ParamField body="compliance" type="string" required={false}>
  Enterprise compliance mode, such as `hipaa`.
</ParamField>

<ParamField body="outputSchema" type="object" required={false}>
  JSON schema for structured synthesized output. See [Search Output Schema](#search-output-schema).
</ParamField>

<ParamField body="systemPrompt" type="string" required={false}>
  Extra instructions that guide synthesized output.
</ParamField>

### Search Contents Object

The `contents` object controls which content fields are extracted from search results.

<ParamField body="text" type="boolean | object" required={false}>
  Return page text or configure text extraction. See [Search Text Options](#search-text-options).
</ParamField>

<ParamField body="highlights" type="boolean | object" required={false}>
  Return selected highlight snippets or configure highlight extraction. See [Search Highlight Options](#search-highlight-options).
</ParamField>

<ParamField body="summary" type="object" required={false}>
  Return generated summaries or configure summary generation. See [Search Summary Options](#search-summary-options).
</ParamField>

<ParamField body="extras" type="object" required={false}>
  Return extra page data such as links, image links, rich links, or code blocks. See [Search Extras Options](#search-extras-options).
</ParamField>

<ParamField body="livecrawlTimeout" type="integer" required={false}>
  Timeout for live crawling in milliseconds.
</ParamField>

<ParamField body="maxAgeHours" type="integer" required={false}>
  Maximum cache age in hours. `0` requests fresh content; `-1` always uses cache.
</ParamField>

<ParamField body="subpages" type="integer" required={false}>
  Number of subpages to crawl. Range is `0` to `100`.
</ParamField>

<ParamField body="subpageTarget" type="string | string[]" required={false}>
  Term or terms used to find targeted subpages.
</ParamField>

### Search Category Limits

Some category values restrict which filters can be used.

<ParamField body="company" type="category" required={false}>
  Does not support `startPublishedDate`, `endPublishedDate`, `startCrawlDate`, `endCrawlDate`, or `excludeDomains`.
</ParamField>

<ParamField body="people" type="category" required={false}>
  Does not support `startPublishedDate`, `endPublishedDate`, `startCrawlDate`, `endCrawlDate`, or `excludeDomains`. `includeDomains` is limited to supported profile domains.
</ParamField>

### Search Text Options

<ParamField body="maxCharacters" type="integer" required={false}>
  Maximum number of text characters to return. Range is `1` to `10000`.
</ParamField>

<ParamField body="includeHtmlTags" type="boolean" required={false}>
  Include lightweight HTML tags instead of plain text.
</ParamField>

<ParamField body="verbosity" type="string" required={false}>
  Requested text verbosity.
</ParamField>

<ParamField body="includeSections" type="string[]" required={false}>
  Semantic page sections to include.
</ParamField>

<ParamField body="excludeSections" type="string[]" required={false}>
  Semantic page sections to exclude.
</ParamField>

### Search Highlight Options

<ParamField body="query" type="string" required={false}>
  Custom query used to select highlights.
</ParamField>

<ParamField body="maxCharacters" type="integer" required={false}>
  Maximum characters to return for highlights. Range is `1` to `10000`.
</ParamField>

### Search Summary Options

<ParamField body="query" type="string" required={false}>
  Custom instruction for summary generation.
</ParamField>

<ParamField body="schema" type="object" required={false}>
  Optional JSON schema for structured summary output.
</ParamField>

### Search Extras Options

<ParamField body="links" type="integer" required={false}>
  Number of links to return. Range is `0` to `1000`.
</ParamField>

<ParamField body="imageLinks" type="integer" required={false}>
  Number of image links to return. Range is `0` to `1000`.
</ParamField>

<ParamField body="richImageLinks" type="integer" required={false}>
  Number of rich image links to return. Range is `0` to `1000`.
</ParamField>

<ParamField body="richLinks" type="integer" required={false}>
  Number of rich links to return. Range is `0` to `1000`.
</ParamField>

<ParamField body="codeBlocks" type="integer" required={false}>
  Number of code blocks to return. Range is `0` to `1000`.
</ParamField>

### Search Output Schema

`outputSchema` accepts a JSON Schema object for structured output generation. Supported root types include `text` and `object`; object schemas should describe the expected JSON object returned by Exa.

<ParamField body="type" type="string" required={false}>
  JSON Schema root type, commonly `text` or `object`.
</ParamField>

<ParamField body="properties" type="object" required={false}>
  Field definitions for the structured output.
</ParamField>

<ParamField body="required" type="string[]" required={false}>
  Required property names.
</ParamField>

<ParamField body="items" type="object" required={false}>
  Array item schema when a property is an array.
</ParamField>

<ParamField body="additionalProperties" type="boolean | object" required={false}>
  Whether undeclared fields are allowed, or a schema for additional fields.
</ParamField>

## Request Example

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/exa/search' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "Latest research in LLMs",
    "numResults": 10,
    "type": "auto",
    "contents": {
      "text": {
        "maxCharacters": 2000
      },
      "highlights": {
        "query": "model architecture",
        "maxCharacters": 500
      },
      "summary": {
        "query": "Summarize the key findings"
      }
    }
  }'
```

## Response

<ResponseField name="requestId" type="string" required={false}>
  Unique request identifier.
</ResponseField>

<ResponseField name="results" type="object[]" required={false}>
  Search results.
</ResponseField>

<ResponseField name="output" type="object" required={false}>
  Structured or synthesized output when requested. See [Search Synthesis Output Object](#search-synthesis-output-object).
</ResponseField>

### Search Synthesis Output Object

<ResponseField name="content" type="string | object" required={false}>
  Generated content. It can be structured when `outputSchema` is provided.
</ResponseField>

<ResponseField name="grounding" type="object[]" required={false}>
  Field-level grounding or citation metadata when returned.
</ResponseField>

### Result Object

<ResponseField name="title" type="string" required={false}>
  Result title.
</ResponseField>

<ResponseField name="url" type="string" required={false}>
  Result URL.
</ResponseField>

<ResponseField name="publishedDate" type="string" required={false}>
  Published date when available.
</ResponseField>

<ResponseField name="author" type="string" required={false}>
  Author when available.
</ResponseField>

<ResponseField name="id" type="string" required={false}>
  Exa document ID.
</ResponseField>

<ResponseField name="image" type="string" required={false}>
  Associated image URL.
</ResponseField>

<ResponseField name="favicon" type="string" required={false}>
  Site favicon URL.
</ResponseField>

<ResponseField name="text" type="string" required={false}>
  Extracted page text when requested.
</ResponseField>

<ResponseField name="highlights" type="string[]" required={false}>
  Highlight snippets when requested.
</ResponseField>

<ResponseField name="highlightScores" type="number[]" required={false}>
  Scores for returned highlights.
</ResponseField>

<ResponseField name="summary" type="string" required={false}>
  Generated summary when requested.
</ResponseField>

<ResponseField name="subpages" type="object[]" required={false}>
  Subpage results when requested. See [Search Subpage Object](#search-subpage-object).
</ResponseField>

<ResponseField name="entities" type="object[]" required={false}>
  Structured entity data when returned. See [Search Entity Object](#search-entity-object).
</ResponseField>

<ResponseField name="extras" type="object" required={false}>
  Extra links, images, rich links, or code blocks when requested. See [Search Response Extras Object](#search-response-extras-object).
</ResponseField>

### Search Subpage Object

<ResponseField name="title" type="string" required={false}>
  Subpage title.
</ResponseField>

<ResponseField name="url" type="string" required={false}>
  Subpage URL.
</ResponseField>

<ResponseField name="id" type="string" required={false}>
  Exa document ID when available.
</ResponseField>

<ResponseField name="text" type="string" required={false}>
  Extracted text when requested.
</ResponseField>

<ResponseField name="summary" type="string" required={false}>
  Generated summary when requested.
</ResponseField>

<ResponseField name="highlights" type="string[]" required={false}>
  Highlight snippets when requested.
</ResponseField>

### Search Entity Object

<ResponseField name="name" type="string" required={false}>
  Entity name.
</ResponseField>

<ResponseField name="type" type="string" required={false}>
  Entity type when returned.
</ResponseField>

<ResponseField name="url" type="string" required={false}>
  Associated URL when returned.
</ResponseField>

<ResponseField name="description" type="string" required={false}>
  Entity description when returned.
</ResponseField>

<ResponseField name="metadata" type="object" required={false}>
  Additional entity metadata.
</ResponseField>

### Search Response Extras Object

<ResponseField name="links" type="string[] | object[]" required={false}>
  Links found on the page.
</ResponseField>

<ResponseField name="imageLinks" type="string[] | object[]" required={false}>
  Image links found on the page.
</ResponseField>

<ResponseField name="richImageLinks" type="object[]" required={false}>
  Image links with additional metadata.
</ResponseField>

<ResponseField name="richLinks" type="object[]" required={false}>
  Links with additional metadata.
</ResponseField>

<ResponseField name="codeBlocks" type="object[]" required={false}>
  Code blocks found on the page.
</ResponseField>

## Errors

The platform may return standard HTTP errors before forwarding the request, and Exa may return upstream errors after forwarding.

<ResponseField name="400" type="status" required={false}>
  Invalid request body or unsupported parameter value.
</ResponseField>

<ResponseField name="401" type="status" required={false}>
  Missing or invalid API key.
</ResponseField>

<ResponseField name="403" type="status" required={false}>
  Access denied by platform or upstream provider.
</ResponseField>

<ResponseField name="404" type="status" required={false}>
  Route or requested resource not found.
</ResponseField>

<ResponseField name="429" type="status" required={false}>
  Rate limit exceeded.
</ResponseField>

<ResponseField name="500" type="status" required={false}>
  Internal server error.
</ResponseField>

<ResponseField name="502" type="status" required={false}>
  Upstream provider error.
</ResponseField>

<ResponseField name="503" type="status" required={false}>
  Service unavailable.
</ResponseField>

## Notes

* All request bodies are JSON.
* Extra Exa parameters not listed here may be passed through.
* Response shapes can vary depending on request options.
* This document intentionally omits billing-related fields.

## References

For more details, see the [Exa Search API reference](https://exa.ai/docs/reference/search).
