# Exa Search - Documentation

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown is available with `Accept: text/markdown` and `.md` URL variants.

Source: /docs/api-reference/model-apis-exa-search

# Exa Search

POST

/

v3

/

exa

/

search

Try it

Exa Search

cURL

```
curl --request POST \
--url https://api.novita.ai/v3/exa/search \
--header 'Authorization: &#x3C;authorization>' \
--header 'Content-Type: &#x3C;content-type>' \
--data '
{
"query": "&#x3C;string>",
"includeDomains": [
"&#x3C;string>"
],
"excludeDomains": [
"&#x3C;string>"
],
"startCrawlDate": "&#x3C;string>",
"endCrawlDate": "&#x3C;string>",
"startPublishedDate": "&#x3C;string>",
"endPublishedDate": "&#x3C;string>",
"numResults": 123,
"moderation": true,
"contents": {},
"additionalQueries": [
"&#x3C;string>"
],
"type": "&#x3C;string>",
"category": "&#x3C;string>",
"userLocation": "&#x3C;string>",
"compliance": "&#x3C;string>",
"outputSchema": {},
"systemPrompt": "&#x3C;string>",
"text": {},
"highlights": {},
"summary": {},
"extras": {},
"livecrawlTimeout": 123,
"maxAgeHours": 123,
"subpages": 123,
"subpageTarget": [
"&#x3C;string>"
],
"company": {},
"people": {},
"maxCharacters": 123,
"includeHtmlTags": true,
"verbosity": "&#x3C;string>",
"includeSections": [
"&#x3C;string>"
],
"excludeSections": [
"&#x3C;string>"
],
"schema": {},
"links": 123,
"imageLinks": 123,
"richImageLinks": 123,
"richLinks": 123,
"codeBlocks": 123,
"properties": {},
"required": [
"&#x3C;string>"
],
"items": {},
"additionalProperties": {}
}
'
```

```
import requestsurl = "https://api.novita.ai/v3/exa/search"payload = { "query": "&#x3C;string>", "includeDomains": ["&#x3C;string>"], "excludeDomains": ["&#x3C;string>"], "startCrawlDate": "&#x3C;string>", "endCrawlDate": "&#x3C;string>", "startPublishedDate": "&#x3C;string>", "endPublishedDate": "&#x3C;string>", "numResults": 123, "moderation": True, "contents": {}, "additionalQueries": ["&#x3C;string>"], "type": "&#x3C;string>", "category": "&#x3C;string>", "userLocation": "&#x3C;string>", "compliance": "&#x3C;string>", "outputSchema": {}, "systemPrompt": "&#x3C;string>", "text": {}, "highlights": {}, "summary": {}, "extras": {}, "livecrawlTimeout": 123, "maxAgeHours": 123, "subpages": 123, "subpageTarget": ["&#x3C;string>"], "company": {}, "people": {}, "maxCharacters": 123, "includeHtmlTags": True, "verbosity": "&#x3C;string>", "includeSections": ["&#x3C;string>"], "excludeSections": ["&#x3C;string>"], "schema": {}, "links": 123, "imageLinks": 123, "richImageLinks": 123, "richLinks": 123, "codeBlocks": 123, "properties": {}, "required": ["&#x3C;string>"], "items": {}, "additionalProperties": {}}headers = { "Content-Type": "&#x3C;content-type>", "Authorization": "&#x3C;authorization>"}response = requests.post(url, json=payload, headers=headers)print(response.text)
```

```
const options = { method: 'POST', headers: {'Content-Type': '&#x3C;content-type>', Authorization: '&#x3C;authorization>'}, body: JSON.stringify({ query: '&#x3C;string>', includeDomains: ['&#x3C;string>'], excludeDomains: ['&#x3C;string>'], startCrawlDate: '&#x3C;string>', endCrawlDate: '&#x3C;string>', startPublishedDate: '&#x3C;string>', endPublishedDate: '&#x3C;string>', numResults: 123, moderation: true, contents: {}, additionalQueries: ['&#x3C;string>'], type: '&#x3C;string>', category: '&#x3C;string>', userLocation: '&#x3C;string>', compliance: '&#x3C;string>', outputSchema: {}, systemPrompt: '&#x3C;string>', text: {}, highlights: {}, summary: {}, extras: {}, livecrawlTimeout: 123, maxAgeHours: 123, subpages: 123, subpageTarget: ['&#x3C;string>'], company: {}, people: {}, maxCharacters: 123, includeHtmlTags: true, verbosity: '&#x3C;string>', includeSections: ['&#x3C;string>'], excludeSections: ['&#x3C;string>'], schema: {}, links: 123, imageLinks: 123, richImageLinks: 123, richLinks: 123, codeBlocks: 123, properties: {}, required: ['&#x3C;string>'], items: {}, additionalProperties: {} })};fetch('https://api.novita.ai/v3/exa/search', options) .then(res => res.json()) .then(res => console.log(res)) .catch(err => console.error(err));
```

```
&#x3C;?php$curl = curl_init();curl_setopt_array($curl, [ CURLOPT_URL => "https://api.novita.ai/v3/exa/search", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode([ 'query' => '&#x3C;string>', 'includeDomains' => [ '&#x3C;string>' ], 'excludeDomains' => [ '&#x3C;string>' ], 'startCrawlDate' => '&#x3C;string>', 'endCrawlDate' => '&#x3C;string>', 'startPublishedDate' => '&#x3C;string>', 'endPublishedDate' => '&#x3C;string>', 'numResults' => 123, 'moderation' => true, 'contents' => [ ], 'additionalQueries' => [ '&#x3C;string>' ], 'type' => '&#x3C;string>', 'category' => '&#x3C;string>', 'userLocation' => '&#x3C;string>', 'compliance' => '&#x3C;string>', 'outputSchema' => [ ], 'systemPrompt' => '&#x3C;string>', 'text' => [ ], 'highlights' => [ ], 'summary' => [ ], 'extras' => [ ], 'livecrawlTimeout' => 123, 'maxAgeHours' => 123, 'subpages' => 123, 'subpageTarget' => [ '&#x3C;string>' ], 'company' => [ ], 'people' => [ ], 'maxCharacters' => 123, 'includeHtmlTags' => true, 'verbosity' => '&#x3C;string>', 'includeSections' => [ '&#x3C;string>' ], 'excludeSections' => [ '&#x3C;string>' ], 'schema' => [ ], 'links' => 123, 'imageLinks' => 123, 'richImageLinks' => 123, 'richLinks' => 123, 'codeBlocks' => 123, 'properties' => [ ], 'required' => [ '&#x3C;string>' ], 'items' => [ ], 'additionalProperties' => [ ] ]), CURLOPT_HTTPHEADER => [ "Authorization: &#x3C;authorization>", "Content-Type: &#x3C;content-type>" ],]);$response = curl_exec($curl);$err = curl_error($curl);curl_close($curl);if ($err) { echo "cURL Error #:" . $err;} else { echo $response;}
```

```
package mainimport (	"fmt"	"strings"	"net/http"	"io")func main() {	url := "https://api.novita.ai/v3/exa/search"	payload := strings.NewReader("{\n \"query\": \"&#x3C;string>\",\n \"includeDomains\": [\n \"&#x3C;string>\"\n ],\n \"excludeDomains\": [\n \"&#x3C;string>\"\n ],\n \"startCrawlDate\": \"&#x3C;string>\",\n \"endCrawlDate\": \"&#x3C;string>\",\n \"startPublishedDate\": \"&#x3C;string>\",\n \"endPublishedDate\": \"&#x3C;string>\",\n \"numResults\": 123,\n \"moderation\": true,\n \"contents\": {},\n \"additionalQueries\": [\n \"&#x3C;string>\"\n ],\n \"type\": \"&#x3C;string>\",\n \"category\": \"&#x3C;string>\",\n \"userLocation\": \"&#x3C;string>\",\n \"compliance\": \"&#x3C;string>\",\n \"outputSchema\": {},\n \"systemPrompt\": \"&#x3C;string>\",\n \"text\": {},\n \"highlights\": {},\n \"summary\": {},\n \"extras\": {},\n \"livecrawlTimeout\": 123,\n \"maxAgeHours\": 123,\n \"subpages\": 123,\n \"subpageTarget\": [\n \"&#x3C;string>\"\n ],\n \"company\": {},\n \"people\": {},\n \"maxCharacters\": 123,\n \"includeHtmlTags\": true,\n \"verbosity\": \"&#x3C;string>\",\n \"includeSections\": [\n \"&#x3C;string>\"\n ],\n \"excludeSections\": [\n \"&#x3C;string>\"\n ],\n \"schema\": {},\n \"links\": 123,\n \"imageLinks\": 123,\n \"richImageLinks\": 123,\n \"richLinks\": 123,\n \"codeBlocks\": 123,\n \"properties\": {},\n \"required\": [\n \"&#x3C;string>\"\n ],\n \"items\": {},\n \"additionalProperties\": {}\n}")	req, _ := http.NewRequest("POST", url, payload)	req.Header.Add("Content-Type", "&#x3C;content-type>")	req.Header.Add("Authorization", "&#x3C;authorization>")	res, _ := http.DefaultClient.Do(req)	defer res.Body.Close()	body, _ := io.ReadAll(res.Body)	fmt.Println(string(body))}
```

```
HttpResponse&#x3C;String> response = Unirest.post("https://api.novita.ai/v3/exa/search") .header("Content-Type", "&#x3C;content-type>") .header("Authorization", "&#x3C;authorization>") .body("{\n \"query\": \"&#x3C;string>\",\n \"includeDomains\": [\n \"&#x3C;string>\"\n ],\n \"excludeDomains\": [\n \"&#x3C;string>\"\n ],\n \"startCrawlDate\": \"&#x3C;string>\",\n \"endCrawlDate\": \"&#x3C;string>\",\n \"startPublishedDate\": \"&#x3C;string>\",\n \"endPublishedDate\": \"&#x3C;string>\",\n \"numResults\": 123,\n \"moderation\": true,\n \"contents\": {},\n \"additionalQueries\": [\n \"&#x3C;string>\"\n ],\n \"type\": \"&#x3C;string>\",\n \"category\": \"&#x3C;string>\",\n \"userLocation\": \"&#x3C;string>\",\n \"compliance\": \"&#x3C;string>\",\n \"outputSchema\": {},\n \"systemPrompt\": \"&#x3C;string>\",\n \"text\": {},\n \"highlights\": {},\n \"summary\": {},\n \"extras\": {},\n \"livecrawlTimeout\": 123,\n \"maxAgeHours\": 123,\n \"subpages\": 123,\n \"subpageTarget\": [\n \"&#x3C;string>\"\n ],\n \"company\": {},\n \"people\": {},\n \"maxCharacters\": 123,\n \"includeHtmlTags\": true,\n \"verbosity\": \"&#x3C;string>\",\n \"includeSections\": [\n \"&#x3C;string>\"\n ],\n \"excludeSections\": [\n \"&#x3C;string>\"\n ],\n \"schema\": {},\n \"links\": 123,\n \"imageLinks\": 123,\n \"richImageLinks\": 123,\n \"richLinks\": 123,\n \"codeBlocks\": 123,\n \"properties\": {},\n \"required\": [\n \"&#x3C;string>\"\n ],\n \"items\": {},\n \"additionalProperties\": {}\n}") .asString();
```

```
require 'uri'require 'net/http'url = URI("https://api.novita.ai/v3/exa/search")http = Net::HTTP.new(url.host, url.port)http.use_ssl = truerequest = Net::HTTP::Post.new(url)request["Content-Type"] = '&#x3C;content-type>'request["Authorization"] = '&#x3C;authorization>'request.body = "{\n \"query\": \"&#x3C;string>\",\n \"includeDomains\": [\n \"&#x3C;string>\"\n ],\n \"excludeDomains\": [\n \"&#x3C;string>\"\n ],\n \"startCrawlDate\": \"&#x3C;string>\",\n \"endCrawlDate\": \"&#x3C;string>\",\n \"startPublishedDate\": \"&#x3C;string>\",\n \"endPublishedDate\": \"&#x3C;string>\",\n \"numResults\": 123,\n \"moderation\": true,\n \"contents\": {},\n \"additionalQueries\": [\n \"&#x3C;string>\"\n ],\n \"type\": \"&#x3C;string>\",\n \"category\": \"&#x3C;string>\",\n \"userLocation\": \"&#x3C;string>\",\n \"compliance\": \"&#x3C;string>\",\n \"outputSchema\": {},\n \"systemPrompt\": \"&#x3C;string>\",\n \"text\": {},\n \"highlights\": {},\n \"summary\": {},\n \"extras\": {},\n \"livecrawlTimeout\": 123,\n \"maxAgeHours\": 123,\n \"subpages\": 123,\n \"subpageTarget\": [\n \"&#x3C;string>\"\n ],\n \"company\": {},\n \"people\": {},\n \"maxCharacters\": 123,\n \"includeHtmlTags\": true,\n \"verbosity\": \"&#x3C;string>\",\n \"includeSections\": [\n \"&#x3C;string>\"\n ],\n \"excludeSections\": [\n \"&#x3C;string>\"\n ],\n \"schema\": {},\n \"links\": 123,\n \"imageLinks\": 123,\n \"richImageLinks\": 123,\n \"richLinks\": 123,\n \"codeBlocks\": 123,\n \"properties\": {},\n \"required\": [\n \"&#x3C;string>\"\n ],\n \"items\": {},\n \"additionalProperties\": {}\n}"response = http.request(request)puts response.read_body
```

200

```
{
"400": {},
"401": {},
"403": {},
"404": {},
"429": {},
"500": {},
"502": {},
"503": {},
"requestId": "&#x3C;string>",
"results": [
{}
],
"output": {},
"content": {},
"grounding": [
{}
],
"title": "&#x3C;string>",
"url": "&#x3C;string>",
"publishedDate": "&#x3C;string>",
"author": "&#x3C;string>",
"id": "&#x3C;string>",
"image": "&#x3C;string>",
"favicon": "&#x3C;string>",
"text": "&#x3C;string>",
"highlights": [
"&#x3C;string>"
],
"highlightScores": [
123
],
"summary": "&#x3C;string>",
"subpages": [
{}
],
"entities": [
{}
],
"extras": {},
"name": "&#x3C;string>",
"type": "&#x3C;string>",
"description": "&#x3C;string>",
"metadata": {},
"links": [
{}
],
"imageLinks": [
{}
],
"richImageLinks": [
{}
],
"richLinks": [
{}
],
"codeBlocks": [
{}
]
}
```

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)

Quickstart

```
curl -X POST 'https://api.novita.ai/v3/exa/search' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"query": "latest open-source LLM releases",
"contents": {"highlights": true}
}'
```

##

[​](#request-headers)

Request Headers

All endpoints require platform API authentication.

[​](#param-content-type)

Content-Type

string

required

Use `application/json`.

[​](#param-authorization)

Authorization

string

required

Platform API key, formatted as `Bearer <api_key>`.

##

[​](#request-body)

Request Body

[​](#param-query)

query

string

required

Search query. Minimum length is 1.

[​](#param-include-domains)

includeDomains

string[]

Restrict results to these domains. Maximum 1200 entries.

[​](#param-exclude-domains)

excludeDomains

string[]

Exclude results from these domains. Maximum 1200 entries.

[​](#param-start-crawl-date)

startCrawlDate

string

Include links crawled after this ISO 8601 date-time.

[​](#param-end-crawl-date)

endCrawlDate

string

Include links crawled before this ISO 8601 date-time.

[​](#param-start-published-date)

startPublishedDate

string

Include links published after this ISO 8601 date-time.

[​](#param-end-published-date)

endPublishedDate

string

Include links published before this ISO 8601 date-time.

[​](#param-num-results)

numResults

integer

Number of results to return. Default is `10`; supported public range is `1` to `100`.

[​](#param-moderation)

moderation

boolean

Enable content moderation to filter unsafe content from search results. Default is `false`.

[​](#param-contents)

contents

object

Content extraction options for search results. See [Search Contents Object](#search-contents-object).

[​](#param-additional-queries)

additionalQueries

string[]

Additional query variants for deep-search modes. Range is `1` to `10` entries.

[​](#param-type)

type

string

Search mode. Common values include `instant`, `fast`, `auto`, `deep-lite`, `deep`, and `deep-reasoning`.

[​](#param-category)

category

string

Data category hint. Known values include `company`, `research paper`, `news`, `personal site`, `financial report`, and `people`. See [Search Category Limits](#search-category-limits).

[​](#param-user-location)

userLocation

string

Two-letter ISO country code, such as `US`.

[​](#param-compliance)

compliance

string

Enterprise compliance mode, such as `hipaa`.

[​](#param-output-schema)

outputSchema

object

JSON schema for structured synthesized output. See [Search Output Schema](#search-output-schema).

[​](#param-system-prompt)

systemPrompt

string

Extra instructions that guide synthesized output.

###

[​](#search-contents-object)

Search Contents Object

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

[​](#param-text)

text

boolean | object

Return page text or configure text extraction. See [Search Text Options](#search-text-options).

[​](#param-highlights)

highlights

boolean | object

Return selected highlight snippets or configure highlight extraction. See [Search Highlight Options](#search-highlight-options).

[​](#param-summary)

summary

object

Return generated summaries or configure summary generation. See [Search Summary Options](#search-summary-options).

[​](#param-extras)

extras

object

Return extra page data such as links, image links, rich links, or code blocks. See [Search Extras Options](#search-extras-options).

[​](#param-livecrawl-timeout)

livecrawlTimeout

integer

Timeout for live crawling in milliseconds.

[​](#param-max-age-hours)

maxAgeHours

integer

Maximum cache age in hours. `0` requests fresh content; `-1` always uses cache.

[​](#param-subpages)

subpages

integer

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

[​](#param-subpage-target)

subpageTarget

string | string[]

Term or terms used to find targeted subpages.

###

[​](#search-category-limits)

Search Category Limits

Some category values restrict which filters can be used.

[​](#param-company)

company

category

Does not support `startPublishedDate`, `endPublishedDate`, `startCrawlDate`, `endCrawlDate`, or `excludeDomains`.

[​](#param-people)

people

category

Does not support `startPublishedDate`, `endPublishedDate`, `startCrawlDate`, `endCrawlDate`, or `excludeDomains`. `includeDomains` is limited to supported profile domains.

###

[​](#search-text-options)

Search Text Options

[​](#param-max-characters)

maxCharacters

integer

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

[​](#param-include-html-tags)

includeHtmlTags

boolean

Include lightweight HTML tags instead of plain text.

[​](#param-verbosity)

verbosity

string

Requested text verbosity.

[​](#param-include-sections)

includeSections

string[]

Semantic page sections to include.

[​](#param-exclude-sections)

excludeSections

string[]

Semantic page sections to exclude.

###

[​](#search-highlight-options)

Search Highlight Options

[​](#param-query-1)

query

string

Custom query used to select highlights.

[​](#param-max-characters-1)

maxCharacters

integer

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

###

[​](#search-summary-options)

Search Summary Options

[​](#param-query-2)

query

string

Custom instruction for summary generation.

[​](#param-schema)

schema

object

Optional JSON schema for structured summary output.

###

[​](#search-extras-options)

Search Extras Options

[​](#param-links)

links

integer

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

[​](#param-image-links)

imageLinks

integer

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

[​](#param-rich-image-links)

richImageLinks

integer

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

[​](#param-rich-links)

richLinks

integer

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

[​](#param-code-blocks)

codeBlocks

integer

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

###

[​](#search-output-schema)

Search Output Schema

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

[​](#param-type-1)

type

string

JSON Schema root type, commonly `text` or `object`.

[​](#param-properties)

properties

object

Field definitions for the structured output.

[​](#param-required)

required

string[]

Required property names.

[​](#param-items)

items

object

Array item schema when a property is an array.

[​](#param-additional-properties)

additionalProperties

boolean | object

Whether undeclared fields are allowed, or a schema for additional fields.

##

[​](#examples)

Examples

###

[​](#search-with-highlights)

Search with highlights

```
curl -X POST 'https://api.novita.ai/v3/exa/search' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"query": "latest open-source LLM releases",
"numResults": 10,
"type": "auto",
"contents": {
"highlights": true
}
}'
```

###

[​](#restrict-to-trusted-domains)

Restrict to trusted domains

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

```
curl -X POST 'https://api.novita.ai/v3/exa/search' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"query": "kubernetes horizontal pod autoscaling guide",
"includeDomains": ["kubernetes.io", "cloud.google.com"],
"numResults": 5
}'
```

###

[​](#recent-results-only)

Recent results only

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

```
curl -X POST 'https://api.novita.ai/v3/exa/search' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"query": "electric vehicle battery breakthroughs",
"category": "news",
"startPublishedDate": "2026-01-01T00:00:00.000Z"
}'
```

###

[​](#structured-output-from-a-deep-search)

Structured output from a deep search

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

```
curl -X POST 'https://api.novita.ai/v3/exa/search' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"query": "who is the current CTO of OpenAI",
"type": "deep",
"outputSchema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"title": {"type": "string"}
},
"required": ["name"]
}
}'
```

##

[​](#response)

Response

[​](#param-request-id)

requestId

string

Unique request identifier.

[​](#param-results)

results

object[]

Search results.

[​](#param-output)

output

object

Structured or synthesized output when requested. See [Search Synthesis Output Object](#search-synthesis-output-object).

###

[​](#search-synthesis-output-object)

Search Synthesis Output Object

[​](#param-content)

content

string | object

Generated content. It can be structured when `outputSchema` is provided.

[​](#param-grounding)

grounding

object[]

Field-level grounding or citation metadata when returned.

###

[​](#result-object)

Result Object

[​](#param-title)

title

string

Result title.

[​](#param-url)

url

string

Result URL.

[​](#param-published-date)

publishedDate

string

Published date when available.

[​](#param-author)

author

string

Author when available.

[​](#param-id)

id

string

Exa document ID.

[​](#param-image)

image

string

Associated image URL.

[​](#param-favicon)

favicon

string

Site favicon URL.

[​](#param-text-1)

text

string

Extracted page text when requested.

[​](#param-highlights-1)

highlights

string[]

Highlight snippets when requested.

[​](#param-highlight-scores)

highlightScores

number[]

Scores for returned highlights.

[​](#param-summary-1)

summary

string

Generated summary when requested.

[​](#param-subpages-1)

subpages

object[]

Subpage results when requested. See [Search Subpage Object](#search-subpage-object).

[​](#param-entities)

entities

object[]

Structured entity data when returned. See [Search Entity Object](#search-entity-object).

[​](#param-extras-1)

extras

object

Extra links, images, rich links, or code blocks when requested. See [Search Response Extras Object](#search-response-extras-object).

###

[​](#search-subpage-object)

Search Subpage Object

[​](#param-title-1)

title

string

Subpage title.

[​](#param-url-1)

url

string

Subpage URL.

[​](#param-id-1)

id

string

Exa document ID when available.

[​](#param-text-2)

text

string

Extracted text when requested.

[​](#param-summary-2)

summary

string

Generated summary when requested.

[​](#param-highlights-2)

highlights

string[]

Highlight snippets when requested.

###

[​](#search-entity-object)

Search Entity Object

[​](#param-name)

name

string

Entity name.

[​](#param-type-2)

type

string

Entity type when returned.

[​](#param-url-2)

url

string

Associated URL when returned.

[​](#param-description)

description

string

Entity description when returned.

[​](#param-metadata)

metadata

object

Additional entity metadata.

###

[​](#search-response-extras-object)

Search Response Extras Object

[​](#param-links-1)

links

string[] | object[]

Links found on the page.

[​](#param-image-links-1)

imageLinks

string[] | object[]

Image links found on the page.

[​](#param-rich-image-links-1)

richImageLinks

object[]

Image links with additional metadata.

[​](#param-rich-links-1)

richLinks

object[]

Links with additional metadata.

[​](#param-code-blocks-1)

codeBlocks

object[]

Code blocks found on the page.

##

[​](#errors)

Errors

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

[​](#param-400)

400

status

Invalid request body or unsupported parameter value.

[​](#param-401)

401

status

Missing or invalid API key.

[​](#param-403)

403

status

Access denied by platform or upstream provider.

[​](#param-404)

404

status

Route or requested resource not found.

[​](#param-429)

429

status

Rate limit exceeded.

[​](#param-500)

500

status

Internal server error.

[​](#param-502)

502

status

Upstream provider error.

[​](#param-503)

503

status

Service unavailable.

##

[​](#notes)

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)

References

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

Last modified on July 15, 2026
