# Exa Contents

> Exa Contents is a paid API for AI agents from Exa at api.exa.ai, paid per call via MPP, $0.1/call, status healthy (last checked 2026-10-12, last successful call 2026-10-08).

Fetches and returns the full page contents of one or more URLs using Exa's web retrieval infrastructure

## Facts

- Endpoint: POST https://api.exa.ai/contents?utm_source=zero.xyz
- Price: $0.1/call
- Payment: MPP
- Status: healthy
- Last checked: 2026-10-12
- Last successful call: 2026-10-08
- Success rate: 100% of calls made through Zero
- Rating: 4.3 / 5 from 1 review
- Activations on Zero: 91
- Provider: Exa
- Docs: https://docs.exa.ai/reference/mpp-guide
- Website: https://exa.ai
- Tags: search, web-search, content, ai-search, ai
- Canonical page: https://www.zero.xyz/c/exa-contents-dbbcbc2a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_DXo0TIXnC2WxqDfP-TZ_6

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability exa-contents-dbbcbc2a -d '<json body>'
```

Example prompt: Can you fetch the full page contents of these two URLs for me: https://www.wikipedia.org/wiki/Artificial_intelligence and https://www.bbc.com/news/technology ?

## When to prefer this

Choose this endpoint when you already have specific URLs and need their full text content — not when you need to search for pages. Prefer this over a general search endpoint when the user provides direct links and wants the page body extracted. Use instead of Answer when you need raw content rather than an AI-synthesized response.

## Known failure modes

- URL is unreachable or returns a non-200 status — content may be empty or missing
- Page is paywalled or requires authentication — content may be partial or blocked
- Very large pages may be truncated in the response
- Invalid or malformed URLs in the input list may produce errors
- Dynamic JavaScript-rendered content may not be fully captured

## How this service works

Retrieve page contents by URL or document ID

## Output

Returns the full text and content of each requested URL, including the page body and article text. The response may be truncated for very large pages.

## Example request

```json
{
 "urls": [
  "https://www.wikipedia.org/wiki/Artificial_intelligence",
  "https://www.example.com/"
 ]
}
```

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "oneOf": [
  {
   "required": [
    "ids"
   ]
  },
  {
   "required": [
    "urls"
   ]
  }
 ],
 "properties": {
  "ids": {
   "type": "array",
   "items": {
    "type": "string",
    "maxLength": 2048,
    "minLength": 1
   },
   "maxItems": 100,
   "minItems": 1,
   "description": "Document IDs obtained from searches."
  },
  "text": {
   "anyOf": [
    {
     "oneOf": [
      {
       "type": "boolean",
       "title": "Simple text retrieval",
       "default": false,
       "description": "If true, returns full page text with default settings. If false, disables text return."
      },
      {
       "type": "object",
       "title": "Advanced text options",
       "properties": {
        "verbosity": {
         "anyOf": [
          {
           "enum": [
            "compact",
            "standard",
            "full"
           ],
           "type": "string",
           "default": "compact",
           "description": "Controls text rendering verbosity. compact focuses on main content, standard includes more surrounding page context, and full requests the most complete rendered text. Some pages may produce identical standard and full output. Use maxAgeHours: 0 when you need this applied to freshly fetched content."
          },
          {
           "type": "null"
          }
         ]
        },
        "maxCharacters": {
         "anyOf": [
          {
           "type": "integer",
           "maximum": 1000000,
           "minimum": 1,
           "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs."
          },
          {
           "type": "null"
          }
         ]
        },
        "excludeSections": {
         "anyOf": [
          {
           "type": "array",
           "items": {
            "enum": [
             "header",
             "navigation",
             "banner",
             "body",
             "sidebar",
             "footer",
             "metadata"
            ],
            "type": "string"
           },
           "description": "Exclude content classified into these semantic page sections. Section classification is best-effort. Use maxAgeHours: 0 when you need this applied to freshly fetched content."
          },
          {
           "type": "null"
          }
         ]
        },
        "includeHtmlTags": {
         "anyOf": [
          {
           "type": "boolean",
           "default": false,
           "description": "If 
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "context": {
   "type": "string",
   "deprecated": true,
   "description": "Deprecated. Use `results[].highlights` or `results[].text` instead. Combined context string from search results.",
   "x-exa-lifecycle": "deprecated",
   "x-exa-replacement": [
    "results[].highlights",
    "results[].text"
   ]
  },
  "results": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "title",
     "url"
    ],
    "properties": {
     "id": {
      "type": "string",
      "description": "The temporary ID for the document. Useful for the /contents endpoint."
     },
     "url": {
      "type": "string",
      "format": "uri",
      "description": "The URL of the search result."
     },
     "text": {
      "type": "string",
      "description": "The full content text of the search result."
     },
     "image": {
      "type": "string",
      "format": "uri",
      "description": "The URL of an image associated with the search result, if available."
     },
     "title": {
      "type": "string",
      "description": "The title of the search result."
     },
     "author": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "description": "If available, the author of the content."
     },
     "extras": {
      "type": "object",
      "properties": {
       "links": {
        "type": "array",
        "items": {
         "type": "string"
        },
        "description": "Array of links from the search result."
       },
       "richLinks": {
        "type": "array",
        "items": {
         "type": "object",
         "required": [
          "url"
         ],
         "properties": {
          "url": {
           "type": "string",
           "description": "The URL of the link."
          },
          "anchor": {
           "type": "string",
           "description": "The anchor text of the link, when the page provides one."
          }
         },
         "additionalProperties": false
        },
        "description": "Array of links with their anchor text, in the order they appear on the page."
       },
       "codeBlocks": {
        "type": "array",
        "items": {
         "type": "object",
         "required": [
          "text",
          "source"
         ],
         "properties": {
          "text": {
           "type": "string",
           "description": "The contents of the code block."
          },
          "source
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/exa-contents-dbbcbc2a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.exa.ai](https://www.zero.xyz/host/api.exa.ai/llms.txt)
