> ## 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

Search the web and optionally extract content from returned results. This is a passthrough to Exa's Search API, exposed through the Novita gateway with a platform route prefix.

To authenticate with your Novita API key, get one from the [Novita dashboard](https://novita.ai/settings/key-management). Base URL: `https://api.novita.ai`.

## Quickstart

```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": "what makes a good API design",
    "contents": {"highlights": true}
  }'
```

Running the quickstart above returns the following at the time of publishing. The default request returns up to 10 results; two are shown here.

```json theme={"system"}
{
  "requestId": "de41749e9680ea844f760e0ffacc0246",
  "results": [
    {
      "id": "https://docs.cloud.google.com/apis/design",
      "title": "API design guide  |  Cloud API Design Guide  |  Google Cloud Documentation",
      "url": "https://docs.cloud.google.com/apis/design",
      "highlights": [
        "This is a general design guide for networked APIs. It has been used inside Google since 2014 and is the guide that Google follows when designing Cloud APIs and other Google APIs. This design guide is shared here to inform outside developers and to make it…"
      ],
      "image": "https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png",
      "favicon": "https://www.gstatic.com/devrel-devsite/prod/v544324a32f4e1e28baf5bd35dca83b6157fef32c5ffbe146b7ca395602e11426/clouddocs/images/favicons/onecloud/favicon.ico"
    },
    {
      "id": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design",
      "title": "Web API Design Best Practices - Azure Architecture Center | Microsoft Learn",
      "url": "https://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design",
      "author": "claytonsiemens77",
      "highlights": [
        "A RESTful web API implementation is a web API that employs Representational State Transfer (REST) architectural principles to achieve a stateless, loosely coupled interface between a client and service. A web API that is RESTful supports the standard HTTP…"
      ],
      "image": "https://learn.microsoft.com/en-us/media/open-graph-image.png"
    }
  ],
  "searchTime": 936.2
}
```

## 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} default="Bearer YOUR_API_KEY">
  Platform API key, formatted as `Bearer YOUR_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="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.

  <Expandable title="contents properties">
    <ParamField body="text" type="boolean | object" required={false}>
      Return page text, or an object to configure text extraction.

      <Expandable title="text properties">
        <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" default="compact" required={false}>
          Requested text verbosity. One of `compact`, `standard`, or `full`.
        </ParamField>

        <ParamField body="includeSections" type="string[]" required={false}>
          Semantic page sections to keep. Best-effort classification. Each entry is one of `header`, `navigation`, `banner`, `body`, `sidebar`, `footer`, or `metadata`.
        </ParamField>

        <ParamField body="excludeSections" type="string[]" required={false}>
          Semantic page sections to drop. Best-effort classification. Each entry is one of `header`, `navigation`, `banner`, `body`, `sidebar`, `footer`, or `metadata`.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="highlights" type="boolean | object" required={false}>
      Return selected highlight snippets, or an object to configure highlight extraction.

      <Expandable title="highlights properties">
        <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>
      </Expandable>
    </ParamField>

    <ParamField body="summary" type="boolean | object" required={false}>
      Generate a summary of each result. Pass `true` for a default summary, or an object to configure it.

      <Expandable title="summary properties">
        <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>
      </Expandable>
    </ParamField>

    <ParamField body="extras" type="object" required={false}>
      Return extra page data such as links, image links, rich links, or code blocks.

      <Expandable title="extras properties">
        <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>
      </Expandable>
    </ParamField>

    <ParamField body="livecrawlTimeout" type="integer" default={10000} required={false}>
      Timeout for live crawling in milliseconds. Must be greater than `0` and at most `90000`. Default is `10000`.
    </ParamField>

    <ParamField body="maxAgeHours" type="integer" required={false}>
      Maximum cache age in hours. `0` requests fresh content; `-1` always uses cache. Range is `-1` to `720`.
    </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. Each string must be `1` to `100` characters.
    </ParamField>
  </Expandable>
</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. One of `instant`, `fast`, `auto`, `deep-lite`, `deep`, or `deep-reasoning`.
</ParamField>

<ParamField body="category" type="string" required={false}>
  Data category hint. Known values include `company`, `research paper`, `news`, `personal site`, `financial report`, `publication`, and `people`.

  Some values restrict which filters can be used:

  * `company` does not support `startPublishedDate`, `endPublishedDate`, `startCrawlDate`, `endCrawlDate`, or `excludeDomains`.
  * `people` does not support `startPublishedDate`, `endPublishedDate`, `startCrawlDate`, `endCrawlDate`, or `excludeDomains`, and `includeDomains` is limited to supported profile domains.
</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. Only `hipaa` is supported.
</ParamField>

<ParamField body="outputSchema" type="object" required={false}>
  JSON Schema object for structured synthesized output. Supported root types include `text` and `object`; object schemas should describe the expected JSON object returned by Exa.

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

    <ParamField body="description" type="string" required={false}>
      Description of the structured output to guide generation.
    </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="additionalProperties" type="boolean | object" required={false}>
      Whether undeclared fields are allowed, or a schema for additional fields.
    </ParamField>
  </Expandable>
</ParamField>

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

## Examples

### Search with highlights

```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": "how do vector databases handle high-dimensional indexing",
    "numResults": 10,
    "type": "auto",
    "contents": {
      "highlights": true
    }
  }'
```

### Restrict to trusted domains

Use `includeDomains` to keep results within sources you trust.

```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": "postgres logical replication conflict handling",
    "includeDomains": ["postgresql.org", "aws.amazon.com"],
    "numResults": 5
  }'
```

### Recent results only

Combine the `news` category with a published-date floor to filter out stale pages.

```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": "offshore wind farm capacity additions",
    "category": "news",
    "startPublishedDate": "2026-01-01T00:00:00.000Z"
  }'
```

### Structured output from a deep search

Use `type: deep` with an `outputSchema` to get a synthesized, schema-shaped result.

```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": "which company acquired Instagram and in what year",
    "type": "deep",
    "outputSchema": {
      "type": "object",
      "properties": {
        "acquirer": {"type": "string"},
        "amountUsd": {"type": "string"},
        "yearAnnounced": {"type": "integer"}
      },
      "required": ["acquirer"]
    }
  }'
```

## Response

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

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

  <Expandable title="result properties">
    <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="summary" type="string" required={false}>
      Generated summary when requested.
    </ResponseField>

    <ResponseField name="subpages" type="object[]" required={false}>
      Subpage results when requested.

      <Expandable title="subpage properties">
        <ResponseField name="title" type="string" required={true}>
          Subpage title.
        </ResponseField>

        <ResponseField name="url" type="string" required={true}>
          Subpage 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>
      </Expandable>
    </ResponseField>

    <ResponseField name="extras" type="object" required={false}>
      Container for extra page data. Each child field is present only when its matching `contents.extras` count is requested, and may be an empty array when the page has no such data.

      <Expandable title="extras properties">
        <ResponseField name="links" type="string[]" required={false}>
          Extracted links when `extras.links` is requested.
        </ResponseField>

        <ResponseField name="imageLinks" type="string[]" required={false}>
          Image links when `extras.imageLinks` is requested.
        </ResponseField>

        <ResponseField name="richImageLinks" type="object[]" required={false}>
          Rich image links when `extras.richImageLinks` is requested.
        </ResponseField>

        <ResponseField name="richLinks" type="object[]" required={false}>
          Rich links when `extras.richLinks` is requested.
        </ResponseField>

        <ResponseField name="codeBlocks" type="object[]" required={false}>
          Code blocks when `extras.codeBlocks` is requested.

          <Expandable title="codeBlock properties">
            <ResponseField name="text" type="string" required={false}>
              Code block content.
            </ResponseField>

            <ResponseField name="source" type="string" required={false}>
              Where the block was extracted from, such as `text`.
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="entities" type="object[]" required={false}>
      Structured entities extracted from the result, most often returned for the `company`, `people`, and `publication` categories. It may be absent or empty depending on the query and page.

      <Expandable title="entity properties">
        <ResponseField name="id" type="string" required={false}>
          Stable entity identifier.
        </ResponseField>

        <ResponseField name="type" type="string" required={false}>
          Entity discriminator. One of `company`, `person`, or `publication`.
        </ResponseField>

        <ResponseField name="version" type="integer" required={false}>
          Entity schema version.
        </ResponseField>

        <ResponseField name="properties" type="object" required={false}>
          Type-specific fields. The shape depends on `type`.

          <Expandable title="company properties">
            <ResponseField name="name" type="string" required={false}>
              Company name.
            </ResponseField>

            <ResponseField name="foundedYear" type="integer" required={false}>
              Year the company was founded.
            </ResponseField>

            <ResponseField name="description" type="string" required={false}>
              Short company description.
            </ResponseField>

            <ResponseField name="workforce" type="object" required={false}>
              Workforce data.

              <Expandable title="workforce properties">
                <ResponseField name="total" type="number" required={false}>
                  Total headcount.
                </ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="headquarters" type="object" required={false}>
              Headquarters location.

              <Expandable title="headquarters properties">
                <ResponseField name="address" type="string" required={false}>
                  Street address.
                </ResponseField>

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

                <ResponseField name="postalCode" type="string" required={false}>
                  Postal code.
                </ResponseField>

                <ResponseField name="country" type="string" required={false}>
                  Country.
                </ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="financials" type="object" required={false}>
              Financial data.

              <Expandable title="financials properties">
                <ResponseField name="revenueAnnual" type="number" required={false}>
                  Annual revenue.
                </ResponseField>

                <ResponseField name="fundingTotal" type="number" required={false}>
                  Total funding raised.
                </ResponseField>

                <ResponseField name="fundingLatestRound" type="object" required={false}>
                  Most recent funding round.

                  <Expandable title="fundingLatestRound properties">
                    <ResponseField name="name" type="string" required={false}>
                      Round name, such as `Series C`.
                    </ResponseField>

                    <ResponseField name="date" type="string" required={false}>
                      Date of the round.
                    </ResponseField>

                    <ResponseField name="amount" type="number" required={false}>
                      Amount raised in the round.
                    </ResponseField>
                  </Expandable>
                </ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="webTraffic" type="object" required={false}>
              Web traffic data.

              <Expandable title="webTraffic properties">
                <ResponseField name="visitsMonthly" type="number" required={false}>
                  Monthly visits.
                </ResponseField>

                <ResponseField name="countryRank" type="integer" required={false}>
                  Rank within the country.
                </ResponseField>

                <ResponseField name="avgDurationSeconds" type="number" required={false}>
                  Average visit duration in seconds.
                </ResponseField>

                <ResponseField name="history" type="object[]" required={false}>
                  Historical traffic data points.

                  <Expandable title="history item properties">
                    <ResponseField name="value" type="number" required={false}>
                      Traffic value for the period.
                    </ResponseField>

                    <ResponseField name="dateFrom" type="string" required={false}>
                      Period start, formatted as `YYYY-MM`.
                    </ResponseField>

                    <ResponseField name="dateTo" type="string" required={false}>
                      Period end, formatted as `YYYY-MM`.
                    </ResponseField>
                  </Expandable>
                </ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="research" type="object" required={false}>
              Research output.

              <Expandable title="research properties">
                <ResponseField name="worksCount" type="integer" required={false}>
                  Number of published works.
                </ResponseField>

                <ResponseField name="citationCount" type="integer" required={false}>
                  Total citations.
                </ResponseField>

                <ResponseField name="areas" type="string[]" required={false}>
                  Research areas.
                </ResponseField>

                <ResponseField name="notableWorks" type="object[]" required={false}>
                  Notable works.

                  <Expandable title="notableWork item properties">
                    <ResponseField name="title" type="string" required={false}>
                      Work title.
                    </ResponseField>

                    <ResponseField name="year" type="integer" required={false}>
                      Publication year.
                    </ResponseField>

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

                    <ResponseField name="citationCount" type="integer" required={false}>
                      Number of citations.
                    </ResponseField>

                    <ResponseField name="doi" type="string" required={false}>
                      Digital Object Identifier.
                    </ResponseField>

                    <ResponseField name="id" type="string" required={false}>
                      Work identifier.
                    </ResponseField>

                    <ResponseField name="type" type="string" required={false}>
                      Work type. One of `article`, `book`, `book-chapter`, `dataset`, `dissertation`, `preprint`, `report`, or `review`.
                    </ResponseField>
                  </Expandable>
                </ResponseField>

                <ResponseField name="topResearchers" type="object[]" required={false}>
                  Leading researchers associated with the company.

                  <Expandable title="topResearcher item properties">
                    <ResponseField name="person" type="object" required={false}>
                      The researcher.

                      <Expandable title="person properties">
                        <ResponseField name="name" type="string" required={false}>
                          Researcher name.
                        </ResponseField>

                        <ResponseField name="id" type="string" required={false}>
                          Researcher identifier.
                        </ResponseField>
                      </Expandable>
                    </ResponseField>

                    <ResponseField name="worksCount" type="integer" required={false}>
                      Number of published works.
                    </ResponseField>

                    <ResponseField name="citationCount" type="integer" required={false}>
                      Total citations.
                    </ResponseField>
                  </Expandable>
                </ResponseField>
              </Expandable>
            </ResponseField>
          </Expandable>

          <Expandable title="person properties">
            <ResponseField name="name" type="string" required={false}>
              Full name.
            </ResponseField>

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

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

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

            <ResponseField name="workHistory" type="object[]" required={false}>
              Work history entries.

              <Expandable title="workHistory item properties">
                <ResponseField name="title" type="string" required={false}>
                  Job title.
                </ResponseField>

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

                <ResponseField name="dates" type="object" required={false}>
                  Date range.

                  <Expandable title="dates properties">
                    <ResponseField name="from" type="string" required={false}>
                      Start date.
                    </ResponseField>

                    <ResponseField name="to" type="string" required={false}>
                      End date.
                    </ResponseField>
                  </Expandable>
                </ResponseField>

                <ResponseField name="company" type="object" required={false}>
                  Employer.

                  <Expandable title="company properties">
                    <ResponseField name="id" type="string" required={false}>
                      Company identifier.
                    </ResponseField>

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

            <ResponseField name="educationHistory" type="object[]" required={false}>
              Education entries.

              <Expandable title="educationHistory item properties">
                <ResponseField name="degree" type="string" required={false}>
                  Degree earned.
                </ResponseField>

                <ResponseField name="dates" type="object" required={false}>
                  Date range.

                  <Expandable title="dates properties">
                    <ResponseField name="from" type="string" required={false}>
                      Start date.
                    </ResponseField>

                    <ResponseField name="to" type="string" required={false}>
                      End date.
                    </ResponseField>
                  </Expandable>
                </ResponseField>

                <ResponseField name="institution" type="object" required={false}>
                  Institution.

                  <Expandable title="institution properties">
                    <ResponseField name="id" type="string" required={false}>
                      Institution identifier.
                    </ResponseField>

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

            <ResponseField name="research" type="object" required={false}>
              Research output.

              <Expandable title="research properties">
                <ResponseField name="worksCount" type="integer" required={false}>
                  Number of published works.
                </ResponseField>

                <ResponseField name="citationCount" type="integer" required={false}>
                  Total citations.
                </ResponseField>

                <ResponseField name="hIndex" type="integer" required={false}>
                  h-index.
                </ResponseField>

                <ResponseField name="firstPublicationYear" type="integer" required={false}>
                  Year of first publication.
                </ResponseField>

                <ResponseField name="latestPublicationYear" type="integer" required={false}>
                  Year of most recent publication.
                </ResponseField>

                <ResponseField name="areas" type="string[]" required={false}>
                  Research areas.
                </ResponseField>

                <ResponseField name="notableWorks" type="object[]" required={false}>
                  Notable works.

                  <Expandable title="notableWork item properties">
                    <ResponseField name="title" type="string" required={false}>
                      Work title.
                    </ResponseField>

                    <ResponseField name="year" type="integer" required={false}>
                      Publication year.
                    </ResponseField>

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

                    <ResponseField name="citationCount" type="integer" required={false}>
                      Number of citations.
                    </ResponseField>

                    <ResponseField name="doi" type="string" required={false}>
                      Digital Object Identifier.
                    </ResponseField>

                    <ResponseField name="id" type="string" required={false}>
                      Work identifier.
                    </ResponseField>

                    <ResponseField name="type" type="string" required={false}>
                      Work type. One of `article`, `book`, `book-chapter`, `dataset`, `dissertation`, `preprint`, `report`, or `review`.
                    </ResponseField>
                  </Expandable>
                </ResponseField>
              </Expandable>
            </ResponseField>
          </Expandable>

          <Expandable title="publication properties">
            <ResponseField name="title" type="string" required={false}>
              Publication title.
            </ResponseField>

            <ResponseField name="year" type="integer" required={false}>
              Publication year.
            </ResponseField>

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

            <ResponseField name="type" type="string" required={false}>
              Publication type. One of `article`, `book`, `book-chapter`, `dataset`, `dissertation`, `preprint`, `report`, or `review`.
            </ResponseField>

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

            <ResponseField name="citationCount" type="integer" required={false}>
              Number of citations.
            </ResponseField>

            <ResponseField name="authors" type="object[]" required={false}>
              Authors.

              <Expandable title="author properties">
                <ResponseField name="name" type="string" required={false}>
                  Author name.
                </ResponseField>

                <ResponseField name="id" type="string" required={false}>
                  Author identifier.
                </ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="referenceCount" type="integer" required={false}>
              Number of references.
            </ResponseField>

            <ResponseField name="abstract" type="string" required={false}>
              Abstract text.
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="output" type="object" required={false}>
  Structured or synthesized output when requested.

  <Expandable title="output properties">
    <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 and citation metadata when returned.

      <Expandable title="grounding properties">
        <ResponseField name="field" type="string" required={false}>
          The field path in `output.content` this grounding applies to.
        </ResponseField>

        <ResponseField name="citations" type="object[]" required={false}>
          Sources supporting the field.

          <Expandable title="citation properties">
            <ResponseField name="url" type="string" required={true}>
              Source URL.
            </ResponseField>

            <ResponseField name="title" type="string" required={true}>
              Source title.
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="confidence" type="string" required={false}>
          Grounding confidence. One of `low`, `medium`, or `high`.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="searchTime" type="number" required={false}>
  Time taken to search in milliseconds.
</ResponseField>

## Errors

Errors are returned as a JSON envelope with `code`, `reason`, `message`, and `metadata`. The platform validates and authenticates the request before forwarding it to Exa, so some errors originate at the platform and others are surfaced from upstream.

| Status | `reason`               | Meaning                                                                      |
| ------ | ---------------------- | ---------------------------------------------------------------------------- |
| `400`  | `MISSING_API_KEY`      | The `Authorization` header is absent.                                        |
| `400`  | `INVALID_REQUEST_BODY` | The body failed validation, such as a missing or malformed `query`.          |
| `403`  | `INVALID_API_KEY`      | The API key is invalid or not authorized.                                    |
| `404`  | `PATH_NOT_FOUND`       | The route does not exist.                                                    |
| `429`  | `RATE_LIMIT_EXCEEDED`  | Too many requests. Slow down and retry with backoff.                         |
| `500`  | `TASK_FAILED`          | Internal or upstream provider failure. Transient failures are safe to retry. |
| `503`  | `SERVICE_UNAVAILABLE`  | The service is temporarily overloaded or down. Retry with backoff.           |

For validation failures, `message` is a JSON-encoded string carrying the detailed `error` and `tag`. The examples below show that inner detail decoded for readability.

<ResponseExample>
  ```json 200 theme={"system"}
  {
    "requestId": "string",
    "results": [
      {
        "id": "string",
        "title": "string",
        "url": "string",
        "publishedDate": "string",
        "author": "string",
        "image": "string",
        "favicon": "string",
        "text": "string",
        "highlights": ["string"],
        "summary": "string",
        "subpages": [
          {
            "title": "string",
            "url": "string",
            "publishedDate": "string",
            "author": "string",
            "id": "string",
            "image": "string",
            "favicon": "string"
          }
        ],
        "extras": {
          "links": ["string"],
          "imageLinks": ["string"],
          "richImageLinks": [{}],
          "richLinks": [{}],
          "codeBlocks": [{"text": "string", "source": "string"}]
        },
        "entities": [
          {
            "id": "string",
            "type": "string",
            "version": 0,
            "properties": {}
          }
        ]
      }
    ],
    "output": {
      "content": "string",
      "grounding": [
        {
          "field": "string",
          "citations": [
            {
              "url": "string",
              "title": "string"
            }
          ],
          "confidence": "string"
        }
      ]
    },
    "searchTime": 0
  }
  ```

  ```json 400 theme={"system"}
  {
    "code": 400,
    "reason": "INVALID_REQUEST_BODY",
    "message": "Invalid request body | Validation error: expected string, received undefined at \"query\"",
    "metadata": {
      "trace_id": "d1fbd8a046d4eb0d46f93c77c1ac59b4"
    }
  }
  ```

  ```json 403 theme={"system"}
  {
    "code": 403,
    "reason": "INVALID_API_KEY",
    "message": "invalid api-key",
    "metadata": {}
  }
  ```

  ```json 404 theme={"system"}
  {
    "code": 404,
    "reason": "PATH_NOT_FOUND",
    "message": "path not found for model",
    "metadata": {
      "trace_id": "3c3433f0cb475a04f9a4969b8c6ed903"
    }
  }
  ```

  ```json 429 theme={"system"}
  {
    "code": 429,
    "reason": "RATE_LIMIT_EXCEEDED",
    "message": "rate limit exceeded, please retry later",
    "metadata": {
      "trace_id": "5f2a9c7e41b8d0a36e9f4c2b7d81a0e5"
    }
  }
  ```

  ```json 500 theme={"system"}
  {
    "code": 500,
    "reason": "TASK_FAILED",
    "message": "upstream provider temporarily unavailable, please retry",
    "metadata": {
      "trace_id": "8846379c692d7218173460afe95640f1"
    }
  }
  ```

  ```json 503 theme={"system"}
  {
    "code": 503,
    "reason": "SERVICE_UNAVAILABLE",
    "message": "service temporarily unavailable",
    "metadata": {
      "trace_id": "b7e3f1a9d24c05e8f63a1b9c7e05d2f4"
    }
  }
  ```
</ResponseExample>

## 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).
