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

Retrieve page content, summaries, metadata, and fetch statuses for URLs or Exa document IDs. This is a passthrough to Exa's Get Contents 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/contents' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "urls": ["https://arxiv.org/abs/1706.03762"],
    "text": true
  }'
```

Running the quickstart above returns:

```json theme={"system"}
{
  "requestId": "0a6bd28991288444b8748646c5bd4bd9",
  "results": [
    {
      "id": "https://arxiv.org/abs/1706.03762",
      "title": "Attention Is All You Need",
      "url": "https://arxiv.org/abs/1706.03762",
      "publishedDate": "2025-08-23T00:00:00.000Z",
      "author": "Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, et al.",
      "text": "# Attention Is All You Need\n\n2025. Preprint. 6,569 citations.\n\n## Authors\n\n- Ashish Vaswani (Google (United States)): h-index 28; 10,049 citations…",
      "entities": [
        {
          "id": "https://exa.ai/library/publication/985dxcclwqj",
          "type": "publication",
          "version": 1,
          "properties": {
            "title": "Attention Is All You Need",
            "year": 2025,
            "date": "2025-08-23",
            "type": "preprint",
            "language": "en",
            "citationCount": 6569,
            "authors": [
              {"name": "Ashish Vaswani", "id": null}
            ]
          }
        }
      ]
    }
  ],
  "statuses": [
    {
      "id": "https://arxiv.org/abs/1706.03762",
      "status": "success",
      "source": "cached"
    }
  ],
  "searchTime": 8.12
}
```

## 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="urls" type="string[]" required={true}>
  URLs to retrieve. This field is also backwards compatible with values previously supplied through `ids`. Range is `1` to `100` entries; each URL may be up to 2048 characters. Provide either `urls` or `ids`, but not both — supplying both returns a `400`.
</ParamField>

<ParamField body="ids" type="string[]" required={false}>
  Exa document IDs to retrieve. Range is `1` to `100` entries; each ID may be up to 2048 characters. Provide either `urls` or `ids`, but not both — supplying both returns a `400`.
</ParamField>

<ParamField body="compliance" type="string" required={false}>
  Enterprise compliance mode. Only `hipaa` is supported.
</ParamField>

<ParamField body="text" type="boolean | object" required={false}>
  Text extraction options. Default is `false`.

  <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}>
  Highlight extraction options. Default is `false`.

  <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}>
  Summary generation options. 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}>
  Extra outputs to return from each page.

  <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" required={false}>
  Live crawl timeout in milliseconds. Range is greater than `0` and up to `90000`; default is `10000`.
</ParamField>

<ParamField body="maxAgeHours" type="integer" required={false}>
  Maximum cache age in hours. Use `0` for fresh content and `-1` to always use cache. Range is `-1` to `720`.
</ParamField>

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

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

## Examples

### Extract text and highlights

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/exa/contents' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "urls": ["https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"],
    "text": {
      "maxCharacters": 4000
    },
    "highlights": {
      "query": "cache invalidation"
    }
  }'
```

### Summarize a page

Use `summary` with a query to get a focused summary instead of raw text.

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/exa/contents' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "urls": ["https://en.wikipedia.org/wiki/CRISPR"],
    "summary": {
      "query": "What is this technology used for?"
    }
  }'
```

### Include linked subpages

Use `subpages` with `subpageTarget` to also pull related pages the URL links to.

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/exa/contents' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "urls": ["https://docs.astro.build"],
    "text": true,
    "subpages": 3,
    "subpageTarget": "installation"
  }'
```

### Force fresh content

Set `maxAgeHours` to `0` to bypass the cache and live-crawl the page.

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/exa/contents' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "urls": ["https://www.githubstatus.com"],
    "text": true,
    "maxAgeHours": 0
  }'
```

## Response

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

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

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

    <ResponseField name="url" type="string" required={false}>
      Page 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 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 `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 page. Each entity is a `company`, `person`, or `publication`. It may be absent or empty depending on the 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="statuses" type="object[]" required={false}>
  Fetch status for each requested URL or document ID.

  <Expandable title="status properties">
    <ResponseField name="id" type="string" required={false}>
      Requested URL or document ID.
    </ResponseField>

    <ResponseField name="status" type="string" required={false}>
      Fetch status, such as `success` or `error`.
    </ResponseField>

    <ResponseField name="source" type="string" required={false}>
      Content source, such as `cached` or `crawled`.
    </ResponseField>

    <ResponseField name="error" type="object" required={false}>
      Error details when retrieval fails.

      <Expandable title="error properties">
        <ResponseField name="tag" type="string" required={false}>
          Machine-readable error tag, such as `CRAWL_NOT_FOUND`, `CRAWL_TIMEOUT`, or `SOURCE_NOT_AVAILABLE`.
        </ResponseField>

        <ResponseField name="httpStatusCode" type="integer" required={false}>
          HTTP status code encountered while fetching the source, such as `404`.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="searchTime" type="number" required={false}>
  Time taken to serve the request, in milliseconds. Requests served from Exa's cache (`source: "cached"`) return in a few milliseconds, while pages that must be crawled live (`source: "crawled"`) typically take on the order of one to several seconds.
</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 omitting both `urls` and `ids`.          |
| `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": {}
          }
        ]
      }
    ],
    "statuses": [
      {
        "id": "string",
        "status": "string",
        "source": "string",
        "error": {
          "tag": "string",
          "httpStatusCode": 0
        }
      }
    ],
    "searchTime": 0
  }
  ```

  ```json 400 theme={"system"}
  {
    "code": 400,
    "reason": "INVALID_REQUEST_BODY",
    "message": "Invalid request body | Validation error: must provide either ids or urls",
    "metadata": {
      "trace_id": "a4d532f86200dc7bb0df7fa6023860ca"
    }
  }
  ```

  ```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 Contents API reference](https://exa.ai/docs/reference/get-contents).
