> ## Documentation Index
> Fetch the complete documentation index at: https://docs.novita.ai/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.

**Content-Type** `string` *required*

Use `application/json`.

**Authorization** `string` *required* (default: Bearer YOUR\_API\_KEY)

Platform API key, formatted as `Bearer YOUR_API_KEY`.

## Request Body

**urls** `string[]` *required*

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`.

**ids** `string[]`

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`.

**compliance** `string`

Enterprise compliance mode. Only `hipaa` is supported.

**text** `boolean | object`

Text extraction options. Default is `false`.

**text properties**

**maxCharacters** `integer`

Maximum number of text characters to return. Range is `1` to `10000`.

**includeHtmlTags** `boolean`

Include lightweight HTML tags instead of plain text.

**verbosity** `string` (default: compact)

Requested text verbosity. One of `compact`, `standard`, or `full`.

**includeSections** `string[]`

Semantic page sections to keep. Best-effort classification. Each entry is one of `header`, `navigation`, `banner`, `body`, `sidebar`, `footer`, or `metadata`.

**excludeSections** `string[]`

Semantic page sections to drop. Best-effort classification. Each entry is one of `header`, `navigation`, `banner`, `body`, `sidebar`, `footer`, or `metadata`.

**highlights** `boolean | object`

Highlight extraction options. Default is `false`.

**highlights properties**

**query** `string`

Custom query used to select highlights.

**maxCharacters** `integer`

Maximum characters to return for highlights. Range is `1` to `10000`.

**summary** `boolean | object`

Summary generation options. Pass `true` for a default summary, or an object to configure it.

**summary properties**

**query** `string`

Custom instruction for summary generation.

**schema** `object`

Optional JSON schema for structured summary output.

**extras** `object`

Extra outputs to return from each page.

**extras properties**

**links** `integer`

Number of links to return. Range is `0` to `1000`.

**imageLinks** `integer`

Number of image links to return. Range is `0` to `1000`.

**richImageLinks** `integer`

Number of rich image links to return. Range is `0` to `1000`.

**richLinks** `integer`

Number of rich links to return. Range is `0` to `1000`.

**codeBlocks** `integer`

Number of code blocks to return. Range is `0` to `1000`.

**livecrawlTimeout** `integer`

Live crawl timeout in milliseconds. Range is greater than `0` and up to `90000`; default is `10000`.

**maxAgeHours** `integer`

Maximum cache age in hours. Use `0` for fresh content and `-1` to always use cache. Range is `-1` to `720`.

**subpages** `integer`

Number of subpages to crawl. Range is `0` to `100`; default is `0`.

**subpageTarget** `string | string[]`

Term or terms used to find targeted subpages. String values are limited to 100 characters.

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

**requestId** `string`

Unique request identifier.

**results** `object[]`

Content results.

**result properties**

**title** `string`

Page title.

**url** `string`

Page URL.

**publishedDate** `string`

Published date when available.

**author** `string`

Author when available.

**id** `string`

Exa document ID.

**image** `string`

Associated image URL.

**favicon** `string`

Site favicon URL.

**text** `string`

Extracted text when requested.

**highlights** `string[]`

Highlight snippets when requested.

**summary** `string`

Generated summary when requested.

**subpages** `object[]`

Subpage results when requested.

**subpage properties**

**title** `string` *required*

Subpage title.

**url** `string` *required*

Subpage URL.

**publishedDate** `string`

Published date when available.

**author** `string`

Author when available.

**id** `string`

Exa document ID.

**image** `string`

Associated image URL.

**favicon** `string`

Site favicon URL.

**extras** `object`

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.

**extras properties**

**links** `string[]`

Extracted links when `extras.links` is requested.

**imageLinks** `string[]`

Image links when `extras.imageLinks` is requested.

**richImageLinks** `object[]`

Rich image links when `extras.richImageLinks` is requested.

**richLinks** `object[]`

Rich links when `extras.richLinks` is requested.

**codeBlocks** `object[]`

Code blocks when `extras.codeBlocks` is requested.

**codeBlock properties**

**text** `string`

Code block content.

**source** `string`

Where the block was extracted from, such as `text`.

**entities** `object[]`

Structured entities extracted from the page. Each entity is a `company`, `person`, or `publication`. It may be absent or empty depending on the page.

**entity properties**

**id** `string`

Stable entity identifier.

**type** `string`

Entity discriminator. One of `company`, `person`, or `publication`.

**version** `integer`

Entity schema version.

**properties** `object`

Type-specific fields. The shape depends on `type`.

**company properties**

**name** `string`

Company name.

**foundedYear** `integer`

Year the company was founded.

**description** `string`

Short company description.

**workforce** `object`

Workforce data.

**workforce properties**

**total** `number`

Total headcount.

**headquarters** `object`

Headquarters location.

**headquarters properties**

**address** `string`

Street address.

**city** `string`

City.

**postalCode** `string`

Postal code.

**country** `string`

Country.

**financials** `object`

Financial data.

**financials properties**

**revenueAnnual** `number`

Annual revenue.

**fundingTotal** `number`

Total funding raised.

**fundingLatestRound** `object`

Most recent funding round.

**fundingLatestRound properties**

**name** `string`

Round name, such as `Series C`.

**date** `string`

Date of the round.

**amount** `number`

Amount raised in the round.

**webTraffic** `object`

Web traffic data.

**webTraffic properties**

**visitsMonthly** `number`

Monthly visits.

**countryRank** `integer`

Rank within the country.

**avgDurationSeconds** `number`

Average visit duration in seconds.

**history** `object[]`

Historical traffic data points.

**history item properties**

**value** `number`

Traffic value for the period.

**dateFrom** `string`

Period start, formatted as `YYYY-MM`.

**dateTo** `string`

Period end, formatted as `YYYY-MM`.

**research** `object`

Research output.

**research properties**

**worksCount** `integer`

Number of published works.

**citationCount** `integer`

Total citations.

**areas** `string[]`

Research areas.

**notableWorks** `object[]`

Notable works.

**notableWork item properties**

**title** `string`

Work title.

**year** `integer`

Publication year.

**venue** `string`

Publication venue.

**citationCount** `integer`

Number of citations.

**doi** `string`

Digital Object Identifier.

**id** `string`

Work identifier.

**type** `string`

Work type. One of `article`, `book`, `book-chapter`, `dataset`, `dissertation`, `preprint`, `report`, or `review`.

**topResearchers** `object[]`

Leading researchers associated with the company.

**topResearcher item properties**

**person** `object`

The researcher.

**person properties**

**name** `string`

Researcher name.

**id** `string`

Researcher identifier.

**worksCount** `integer`

Number of published works.

**citationCount** `integer`

Total citations.

**person properties**

**name** `string`

Full name.

**firstName** `string`

First name.

**lastName** `string`

Last name.

**location** `string`

Location.

**workHistory** `object[]`

Work history entries.

**workHistory item properties**

**title** `string`

Job title.

**location** `string`

Location.

**dates** `object`

Date range.

**dates properties**

**from** `string`

Start date.

**to** `string`

End date.

**company** `object`

Employer.

**company properties**

**id** `string`

Company identifier.

**name** `string`

Company name.

**educationHistory** `object[]`

Education entries.

**educationHistory item properties**

**degree** `string`

Degree earned.

**dates** `object`

Date range.

**dates properties**

**from** `string`

Start date.

**to** `string`

End date.

**institution** `object`

Institution.

**institution properties**

**id** `string`

Institution identifier.

**name** `string`

Institution name.

**research** `object`

Research output.

**research properties**

**worksCount** `integer`

Number of published works.

**citationCount** `integer`

Total citations.

**hIndex** `integer`

h-index.

**firstPublicationYear** `integer`

Year of first publication.

**latestPublicationYear** `integer`

Year of most recent publication.

**areas** `string[]`

Research areas.

**notableWorks** `object[]`

Notable works.

**notableWork item properties**

**title** `string`

Work title.

**year** `integer`

Publication year.

**venue** `string`

Publication venue.

**citationCount** `integer`

Number of citations.

**doi** `string`

Digital Object Identifier.

**id** `string`

Work identifier.

**type** `string`

Work type. One of `article`, `book`, `book-chapter`, `dataset`, `dissertation`, `preprint`, `report`, or `review`.

**publication properties**

**title** `string`

Publication title.

**year** `integer`

Publication year.

**date** `string`

Publication date.

**type** `string`

Publication type. One of `article`, `book`, `book-chapter`, `dataset`, `dissertation`, `preprint`, `report`, or `review`.

**language** `string`

Language.

**citationCount** `integer`

Number of citations.

**authors** `object[]`

Authors.

**author properties**

**name** `string`

Author name.

**id** `string`

Author identifier.

**referenceCount** `integer`

Number of references.

**abstract** `string`

Abstract text.

**statuses** `object[]`

Fetch status for each requested URL or document ID.

**status properties**

**id** `string`

Requested URL or document ID.

**status** `string`

Fetch status, such as `success` or `error`.

**source** `string`

Content source, such as `cached` or `crawled`.

**error** `object`

Error details when retrieval fails.

**error properties**

**tag** `string`

Machine-readable error tag, such as `CRAWL_NOT_FOUND`, `CRAWL_TIMEOUT`, or `SOURCE_NOT_AVAILABLE`.

**httpStatusCode** `integer`

HTTP status code encountered while fetching the source, such as `404`.

**searchTime** `number`

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.

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

```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"
  }
}
```

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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.