Exa
App · AI Search & Memory · 19 actions
Search the web, read and summarize pages, answer questions with cited sources, run research agents that build and enrich lists, and monitor the web for new results, using Exa.
Actions
| Action | What it does |
|---|---|
| Answer a question | Ask a question and get a written answer from Exa, along with the web pages the answer was based on. |
| Cancel a research agent run | Cancel a queued or running research agent run straight away, without its results. |
| Check a research agent run | Check a research agent run by its ID and get the result once it has finished. |
| Create a monitor | Have Exa run a search on a schedule and send only what is new since the last run to a web address, such as news about a competitor or new funding rounds in a market. |
| Delete a monitor | Delete a monitor for good. |
| Delete a research agent run | Permanently delete a stored research agent run and its result. |
| Find similar pages | Find web pages that are similar to a page you provide. |
| Get a monitor | Get a monitor's search, schedule and status by its ID. |
| Get a monitor run | Get one run of a monitor by its ID, with what it found. |
| Get page contents | Get the full text of one or more web pages by their web address. |
| List monitor runs | List a monitor's runs, newest first, with what each found. |
| List monitors | List your team's monitors. |
| List research agent runs | List your team's research agent runs, newest first. |
| Run a monitor now | Run a monitor straight away, whatever its schedule, and get the pages it finds that no earlier run returned. |
| Run a research agent | Hand Exa Agent a research task, such as building a list of companies or enriching records you already have, and get back a cited answer or structured data. |
| Search the web | Search the web with Exa and get a list of matching pages, and optionally a written answer drawn from them. |
| Stop a research agent run early | Have an Ultra research agent run finish now and keep what it has found so far. |
| Summarize web pages | Summarize one or more web pages by their web address, focused on a question or topic you provide. |
| Update a monitor | Change a monitor's search, schedule or destination, or pause and resume it. |
Answer a question
Ask a question and get a written answer from Exa, along with the web pages the answer was based on.
Inputs
- Question
querytextRequired - The question to answer, such as 'What is the latest valuation of SpaceX?'.
- Include source page text
include_sources_texttrue/false - Also return the text of each source page alongside the answer. Leave off unless a later step needs to read the sources.Default:
false. - Instructions
system_prompttext - Guidance on how to answer, such as the sources to prefer, the tone, or how long the answer should be.
- Answer fields (JSON Schema)
output_schematext - A JSON Schema for the answer, to get named fields back instead of text, for example {"type": "object", "properties": {"valuation": {"type": "string"}, "date": {"type": "string"}}}. Leave blank for a written answer.
- Country
user_locationtext - Favour results for readers in this country, as a two-letter code such as US, GB or FR.
Outputs
answertext- The written answer, or named fields when an answer schema was given.
source_countnumber- How many sources were used.
sourceslist- The web pages the answer was based on.
Example output
{
"answer": "SpaceX was most recently valued at $350 billion.",
"source_count": 1,
"sources": [
{
"id": "https://example.com/spacex-valuation",
"title": "SpaceX valuation report",
"url": "https://example.com/spacex-valuation"
}
]
}Cancel a research agent run
Cancel a queued or running research agent run straight away, without its results. Usage so far is still billed. A run that already finished is returned as it is.
Inputs
- Run ID
run_idtextRequired - The research agent run's ID, as returned by 'Run a research agent', for example 'agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5'.
Outputs
answertext- The agent's written answer or summary.
completedtrue/false- Whether the run finished and its result is included.
completed_attext- When the run finished.
cost_dollarsnumber- What the run cost, in US dollars.
created_attext- When the run started.
efforttext- The effort level the run used.
groundinglist- The sources behind each part of the answer: the field, its citations (title and web address) and Exa's confidence.
querytext- What the agent was asked.
run_idtext- Exa's ID for this run. Pass it to 'Check a research agent run' to collect a result later.
statustext- queued, running, completed, failed or cancelled.
stop_reasontext- Why the run stopped: schema_satisfied, budget_reached, time_limit_reached, stopped, error or cancelled.
structuredobject- The result in the shape the output schema asked for. Empty when no schema was given. Fields the evidence could not support are empty.
Example output
{
"answer": null,
"completed": false,
"completed_at": "2026-10-14T09:01:12.000Z",
"cost_dollars": 0.1,
"created_at": "2026-10-14T09:00:00.000Z",
"effort": "medium",
"grounding": [],
"query": "Find three open source vector databases and who maintains each.",
"run_id": "agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5",
"status": "cancelled",
"stop_reason": "cancelled",
"structured": null
}Check a research agent run
Check a research agent run by its ID and get the result once it has finished. Use this to collect a run that outlasted the wait on 'Run a research agent'.
Inputs
- Run ID
run_idtextRequired - The research agent run's ID, as returned by 'Run a research agent', for example 'agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5'.
Outputs
answertext- The agent's written answer or summary.
completedtrue/false- Whether the run finished and its result is included.
completed_attext- When the run finished.
cost_dollarsnumber- What the run cost, in US dollars.
created_attext- When the run started.
efforttext- The effort level the run used.
groundinglist- The sources behind each part of the answer: the field, its citations (title and web address) and Exa's confidence.
querytext- What the agent was asked.
run_idtext- Exa's ID for this run. Pass it to 'Check a research agent run' to collect a result later.
statustext- queued, running, completed, failed or cancelled.
stop_reasontext- Why the run stopped: schema_satisfied, budget_reached, time_limit_reached, stopped, error or cancelled.
structuredobject- The result in the shape the output schema asked for. Empty when no schema was given. Fields the evidence could not support are empty.
Example output
{
"answer": "Milvus (Zilliz), Qdrant (Qdrant Solutions) and Weaviate (Weaviate B.V.).",
"completed": true,
"completed_at": "2026-10-14T09:01:12.000Z",
"cost_dollars": 0.1,
"created_at": "2026-10-14T09:00:00.000Z",
"effort": "medium",
"grounding": [
{
"citations": [
{
"title": "Milvus",
"url": "https://milvus.io/docs/overview.md"
}
],
"confidence": "high",
"field": "databases[0].maintainer"
}
],
"query": "Find three open source vector databases and who maintains each.",
"run_id": "agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5",
"status": "completed",
"stop_reason": "schema_satisfied",
"structured": {
"databases": [
{
"maintainer": "Zilliz",
"name": "Milvus"
},
{
"maintainer": "Qdrant Solutions",
"name": "Qdrant"
},
{
"maintainer": "Weaviate B.V.",
"name": "Weaviate"
}
]
}
}Create a monitor
Have Exa run a search on a schedule and send only what is new since the last run to a web address, such as news about a competitor or new funding rounds in a market.
Inputs
- What to watch for
querytextRequired - The search to repeat, describing the ongoing news or pages to track, for example 'new battery recycling plants announced in North America'. Don't add dates: each run only returns what earlier runs did not.
- Send results to
webhook_urltextRequired - The https:// address Exa sends each finished run to. It must be public: Exa refuses localhost, private addresses and example.com. Exa signs every delivery with the 'webhook_secret' this step returns.
- Name
nametext - A name to recognise the monitor by.
- How often
periodtext - How often the monitor runs. Runs can start up to 30 minutes late. Choose 'Only when run from a workflow' to run it with 'Run a monitor now' alone.One of:
1h(Every hour),6h(Every 6 hours),12h(Every 12 hours),1d(Every day),7d(Every week),manual(Only when run from a workflow). Default:1d. - Results per run
num_resultsnumber - The most new pages each run returns (1-100).From 1 to 100. Default:
10. - Websites to include
include_domainslist - Only show results from these websites (for example, nytimes.com). A path such as exa.ai/blog or a wildcard such as *.substack.com also works.
- Websites to exclude
exclude_domainslist - Leave out results from these websites (for example, reddit.com).
- Include relevant excerpts
include_highlightstrue/false - Include the passages of each page that best match the search.Default:
true. - What to write up
output_schematext - Describe what Exa should write up from each run's new results, for example 'Each announcement with the company and where it is'. Or paste a JSON Schema whose "type" is "object" to get named fields back. Leave blank for a short text summary.
- Labels
metadataobject - Names and values Exa keeps with the monitor and sends with every delivery, such as team: sales, to route the results.
Outputs
created_attext- When the monitor was created.
metadataobject- The monitor's labels.
monitor_idtext- Exa's ID for the monitor.
nametext- The monitor's name.
next_run_attext- When it next runs.
output_schemaobject- What Exa writes up from each run's results.
periodtext- How often it runs, such as 1d. Empty when it runs only when triggered.
querytext- What the monitor searches for.
searchobject- The monitor's full search settings.
statustext- active (runs on its schedule and when run now), paused (does not run at all until made active again) or disabled (Exa turned it off after repeated failures).
updated_attext- When the monitor was last changed.
webhook_secrettext- The secret Exa signs deliveries with. Exa shows it only this once, so store it if you check signatures.
webhook_urltext- Where Exa sends each finished run.
Example output
{
"created_at": "2026-10-14T09:00:00.000Z",
"metadata": null,
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"name": "Battery recycling expansion",
"next_run_at": "2026-10-15T09:00:00.000Z",
"output_schema": {
"type": "text"
},
"period": "1d",
"query": "new battery recycling facilities announced in North America",
"search": {
"contents": {
"highlights": true
},
"numResults": 10,
"query": "new battery recycling facilities announced in North America"
},
"status": "active",
"updated_at": "2026-10-14T09:00:00.000Z",
"webhook_secret": "whsec_example",
"webhook_url": "https://example.com/webhooks/exa"
}Delete a monitor
Delete a monitor for good. Its schedule stops at once.
Inputs
- Monitor ID
monitor_idtextRequired - The monitor's ID, as returned by 'Create a monitor'.
Outputs
created_attext- When the monitor was created.
deletedtrue/false- Whether the monitor was deleted.
metadataobject- The monitor's labels.
monitor_idtext- Exa's ID for the monitor.
nametext- The monitor's name.
next_run_attext- When it next runs.
output_schemaobject- What Exa writes up from each run's results.
periodtext- How often it runs, such as 1d. Empty when it runs only when triggered.
querytext- What the monitor searches for.
searchobject- The monitor's full search settings.
statustext- active (runs on its schedule and when run now), paused (does not run at all until made active again) or disabled (Exa turned it off after repeated failures).
updated_attext- When the monitor was last changed.
webhook_urltext- Where Exa sends each finished run.
Example output
{
"created_at": "2026-10-14T09:00:00.000Z",
"deleted": true,
"metadata": null,
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"name": "Battery recycling expansion",
"next_run_at": "2026-10-15T09:00:00.000Z",
"output_schema": {
"type": "text"
},
"period": "1d",
"query": "new battery recycling facilities announced in North America",
"search": {
"contents": {
"highlights": true
},
"numResults": 10,
"query": "new battery recycling facilities announced in North America"
},
"status": "active",
"updated_at": "2026-10-14T09:00:00.000Z",
"webhook_url": "https://example.com/webhooks/exa"
}Delete a research agent run
Permanently delete a stored research agent run and its result.
Inputs
- Run ID
run_idtextRequired - The research agent run's ID, as returned by 'Run a research agent', for example 'agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5'.
Outputs
deletedtrue/false- Whether the run was deleted.
run_idtext- The deleted run's ID.
Example output
{
"deleted": true,
"run_id": "agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5"
}Find similar pages
Find web pages that are similar to a page you provide. Exa has deprecated this in favour of search, so for new workflows use 'Search the web' with a query describing the page.
Inputs
- Web page address
urltextRequired - The web address (URL) of the page to find similar pages for.
- Number of results
num_resultsnumber - How many similar pages to return (1-100). Defaults to 10.Default:
10. - Skip the same website
exclude_source_domaintrue/false - Leave out other pages from the same website as the page you provided.Default:
false.
Outputs
result_countnumber- How many results were returned.
resultslist- The similar web pages.
Example output
{
"result_count": 1,
"results": [
{
"id": "similar-123",
"score": 0.87,
"title": "Related Article",
"url": "https://similar-site.com/article"
}
]
}Get a monitor
Get a monitor's search, schedule and status by its ID.
Inputs
- Monitor ID
monitor_idtextRequired - The monitor's ID, as returned by 'Create a monitor'.
Outputs
created_attext- When the monitor was created.
metadataobject- The monitor's labels.
monitor_idtext- Exa's ID for the monitor.
nametext- The monitor's name.
next_run_attext- When it next runs.
output_schemaobject- What Exa writes up from each run's results.
periodtext- How often it runs, such as 1d. Empty when it runs only when triggered.
querytext- What the monitor searches for.
searchobject- The monitor's full search settings.
statustext- active (runs on its schedule and when run now), paused (does not run at all until made active again) or disabled (Exa turned it off after repeated failures).
updated_attext- When the monitor was last changed.
webhook_urltext- Where Exa sends each finished run.
Example output
{
"created_at": "2026-10-14T09:00:00.000Z",
"metadata": null,
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"name": "Battery recycling expansion",
"next_run_at": "2026-10-15T09:00:00.000Z",
"output_schema": {
"type": "text"
},
"period": "1d",
"query": "new battery recycling facilities announced in North America",
"search": {
"contents": {
"highlights": true
},
"numResults": 10,
"query": "new battery recycling facilities announced in North America"
},
"status": "active",
"updated_at": "2026-10-14T09:00:00.000Z",
"webhook_url": "https://example.com/webhooks/exa"
}Get a monitor run
Get one run of a monitor by its ID, with what it found.
Inputs
- Monitor ID
monitor_idtextRequired - The monitor's ID, as returned by 'Create a monitor'.
- Run ID
run_idtextRequired - The run's ID, from 'Run a monitor now' or 'List monitor runs'.
Outputs
completedtrue/false- Whether the run finished.
completed_attext- When the run finished.
contenttext- What Exa wrote up from the new pages: text, or named fields when the monitor has a JSON Schema.
created_attext- When the run was created.
duration_msnumber- How long the run took, in milliseconds.
fail_reasontext- Why the run failed, such as insufficient_credits or source_not_available. Empty unless it failed.
groundinglist- The sources behind each part of the answer: the field, its citations (title and web address) and Exa's confidence.
monitor_idtext- The monitor that ran.
result_countnumber- How many new pages it found.
resultslist- The pages this run found that no earlier run of the monitor returned.
run_idtext- Exa's ID for the run.
statustext- pending, running, completed, failed or cancelled.
Example output
{
"completed": true,
"completed_at": "2026-10-14T09:00:21.000Z",
"content": "A recycler opened a 20,000-tonne battery plant in Nevada.",
"created_at": "2026-10-14T09:00:00.000Z",
"duration_ms": 21000,
"fail_reason": null,
"grounding": [
{
"citations": [
{
"title": "Recycler opens Nevada battery plant",
"url": "https://example.com/news/nevada-battery-plant"
}
],
"confidence": "high",
"field": "content"
}
],
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"result_count": 1,
"results": [
{
"highlights": [
"The plant will process 20,000 tonnes a year."
],
"publishedDate": "2026-10-13T00:00:00.000Z",
"title": "Recycler opens Nevada battery plant",
"url": "https://example.com/news/nevada-battery-plant"
}
],
"run_id": "01k4da2b7c9d1e3f5g7h9j1k3m",
"status": "completed"
}Get page contents
Get the full text of one or more web pages by their web address.
Inputs
- Web page addresses
urlslistRequired - A list of web addresses (URLs) of the pages to read, such as those from an earlier search. Pass a list even when there is only one page.
- Character limit per page
max_charactersnumber - Trim each page to this many characters. Leave blank to get the whole page.At least 1.
- Page freshness (hours)
max_age_hoursnumber - Use Exa's stored copy of a page only when it is younger than this many hours; otherwise Exa fetches the page again. 0 always fetches a fresh copy (slower) and -1 never does. Leave blank for Exa's default.From -1 to 720.
- Linked pages to read
subpagesnumber - Also read up to this many pages linked from each page, such as a company's About and Pricing pages (0-100). They come back under each page's 'subpages'.From 0 to 100.
- Linked pages to look for
subpage_targetlist - Words that pick which linked pages to read, such as pricing or about. Only used with 'Linked pages to read'.
Outputs
content_countnumber- How many pages were returned.
contentslist- The text content of each page.
failedlist- Pages Exa could not read, each with its web address and the reason, such as CRAWL_NOT_FOUND.
failed_countnumber- How many pages could not be read.
Example output
{
"content_count": 1,
"contents": [
{
"id": "https://example.com/article",
"text": "Full article content here...",
"title": "Example Article",
"url": "https://example.com/article"
}
],
"failed": [],
"failed_count": 0
}List monitor runs
List a monitor's runs, newest first, with what each found.
Inputs
- Monitor ID
monitor_idtextRequired - The monitor's ID, as returned by 'Create a monitor'.
- Results per page
limitnumber - How many to return at once (1-100). Defaults to 20.From 1 to 100. Default:
20. - Next page
cursortext - To get the next page, the 'next_cursor' from the previous page. Leave blank for the first page.
Outputs
has_moretrue/false- Whether there are more runs to fetch.
next_cursortext- Pass as 'Next page' to get the next page.
run_countnumber- How many runs are on this page.
runslist- The runs, each with its ID, status and the new pages it found.
Example output
{
"has_more": false,
"next_cursor": null,
"run_count": 1,
"runs": [
{
"completed": true,
"completed_at": "2026-10-14T09:00:21.000Z",
"content": "A recycler opened a 20,000-tonne battery plant in Nevada.",
"created_at": "2026-10-14T09:00:00.000Z",
"duration_ms": 21000,
"fail_reason": null,
"grounding": [
{
"citations": [
{
"title": "Recycler opens Nevada battery plant",
"url": "https://example.com/news/nevada-battery-plant"
}
],
"confidence": "high",
"field": "content"
}
],
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"result_count": 1,
"results": [
{
"highlights": [
"The plant will process 20,000 tonnes a year."
],
"publishedDate": "2026-10-13T00:00:00.000Z",
"title": "Recycler opens Nevada battery plant",
"url": "https://example.com/news/nevada-battery-plant"
}
],
"run_id": "01k4da2b7c9d1e3f5g7h9j1k3m",
"status": "completed"
}
]
}List monitors
List your team's monitors.
Inputs
- Status
statustext - Only list monitors in this state. Leave blank for all.One of:
active,paused,disabled. - Name contains
nametext - Only list monitors whose name contains this text.
- Results per page
limitnumber - How many to return at once (1-100). Defaults to 20.From 1 to 100. Default:
20. - Next page
cursortext - To get the next page, the 'next_cursor' from the previous page. Leave blank for the first page.
Outputs
has_moretrue/false- Whether there are more monitors to fetch.
monitor_countnumber- How many monitors are on this page.
monitorslist- The monitors, each with its ID, name, status, search and schedule.
next_cursortext- Pass as 'Next page' to get the next page.
Example output
{
"has_more": false,
"monitor_count": 1,
"monitors": [
{
"created_at": "2026-10-14T09:00:00.000Z",
"metadata": null,
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"name": "Battery recycling expansion",
"next_run_at": "2026-10-15T09:00:00.000Z",
"output_schema": {
"type": "text"
},
"period": "1d",
"query": "new battery recycling facilities announced in North America",
"search": {
"contents": {
"highlights": true
},
"numResults": 10,
"query": "new battery recycling facilities announced in North America"
},
"status": "active",
"updated_at": "2026-10-14T09:00:00.000Z",
"webhook_url": "https://example.com/webhooks/exa"
}
],
"next_cursor": null
}List research agent runs
List your team's research agent runs, newest first.
Inputs
- Results per page
limitnumber - How many to return at once (1-100). Defaults to 20.From 1 to 100. Default:
20. - Next page
cursortext - To get the next page, the 'next_cursor' from the previous page. Leave blank for the first page.
Outputs
has_moretrue/false- Whether there are more runs to fetch.
next_cursortext- Pass as 'Next page' to get the next page.
run_countnumber- How many runs are on this page.
runslist- The runs, each with its ID, status, task, answer and cost.
Example output
{
"has_more": false,
"next_cursor": null,
"run_count": 1,
"runs": [
{
"answer": "Milvus (Zilliz), Qdrant (Qdrant Solutions) and Weaviate (Weaviate B.V.).",
"completed": true,
"completed_at": "2026-10-14T09:01:12.000Z",
"cost_dollars": 0.1,
"created_at": "2026-10-14T09:00:00.000Z",
"effort": "medium",
"grounding": [
{
"citations": [
{
"title": "Milvus",
"url": "https://milvus.io/docs/overview.md"
}
],
"confidence": "high",
"field": "databases[0].maintainer"
}
],
"query": "Find three open source vector databases and who maintains each.",
"run_id": "agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5",
"status": "completed",
"stop_reason": "schema_satisfied",
"structured": {
"databases": [
{
"maintainer": "Zilliz",
"name": "Milvus"
},
{
"maintainer": "Qdrant Solutions",
"name": "Qdrant"
},
{
"maintainer": "Weaviate B.V.",
"name": "Weaviate"
}
]
}
}
]
}Run a monitor now
Run a monitor straight away, whatever its schedule, and get the pages it finds that no earlier run returned. The results also go to the monitor's web address. The monitor must be active: Exa refuses to run a paused one.
Inputs
- Monitor ID
monitor_idtextRequired - The monitor's ID, as returned by 'Create a monitor'.
- How long to wait
wait_secondsnumber - How long this step waits for the run's results, in seconds (default 120, maximum 600; 0 starts the run without waiting). If the run is still going when the wait runs out, use 'Get a monitor run' later.From 0 to 600. Default:
120.
Outputs
completedtrue/false- Whether the run finished.
completed_attext- When the run finished.
contenttext- What Exa wrote up from the new pages: text, or named fields when the monitor has a JSON Schema.
created_attext- When the run was created.
duration_msnumber- How long the run took, in milliseconds.
fail_reasontext- Why the run failed, such as insufficient_credits or source_not_available. Empty unless it failed.
groundinglist- The sources behind each part of the answer: the field, its citations (title and web address) and Exa's confidence.
monitor_idtext- The monitor that ran.
result_countnumber- How many new pages it found.
resultslist- The pages this run found that no earlier run of the monitor returned.
run_idtext- Exa's ID for the run.
statustext- pending, running, completed, failed or cancelled.
timed_outtrue/false- True when the wait ran out before the run finished. The run keeps going on Exa's side.
triggeredtrue/false- Whether Exa started a run.
Example output
{
"completed": true,
"completed_at": "2026-10-14T09:00:21.000Z",
"content": "A recycler opened a 20,000-tonne battery plant in Nevada.",
"created_at": "2026-10-14T09:00:00.000Z",
"duration_ms": 21000,
"fail_reason": null,
"grounding": [
{
"citations": [
{
"title": "Recycler opens Nevada battery plant",
"url": "https://example.com/news/nevada-battery-plant"
}
],
"confidence": "high",
"field": "content"
}
],
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"result_count": 1,
"results": [
{
"highlights": [
"The plant will process 20,000 tonnes a year."
],
"publishedDate": "2026-10-13T00:00:00.000Z",
"title": "Recycler opens Nevada battery plant",
"url": "https://example.com/news/nevada-battery-plant"
}
],
"run_id": "01k4da2b7c9d1e3f5g7h9j1k3m",
"status": "completed",
"timed_out": false,
"triggered": true
}Run a research agent
Hand Exa Agent a research task, such as building a list of companies or enriching records you already have, and get back a cited answer or structured data. The agent runs many searches, reads the pages and checks what it finds.
Inputs
- Task
querytextRequired - What the agent should find, written as a self-contained request: the kind of thing, how many, the criteria and the evidence needed. For example, 'Find 10 US fintech companies that raised a Series A this year, with their website and lead investor'.
- Effort
efforttext - How much research to do, and so what the run costs. Medium suits most single-topic research. Automatic adapts to the task, which suits lists of unknown size, and Ultra is the most thorough; both are billed by use up to a cap. Longer runs can outlast the wait below, in which case this step hands back a run ID to collect later.One of:
minimal(Minimal ($0.012 per run)),low(Low ($0.025 per run)),medium(Medium ($0.10 per run, recommended)),high(High ($0.50 per run)),xhigh(Extra high ($1 per run)),auto(Automatic (billed by use, up to $5)),ultra(Ultra (billed by use, up to $20, slowest)). Default:medium. - Result fields (JSON Schema)
output_schematext - A JSON Schema for the result, to get named fields back in 'structured', for example a list of companies with a name and website each. Set 'maxItems' on lists to bound the cost. Leave blank for a written answer.
- Instructions
system_prompttext - Guidance on how the agent should research and present the result, such as the sources to trust or what counts as a match.
- Records to enrich
input_recordslist - Records you already have for the agent to research or fill in, such as the rows from an earlier step. Each record is a set of named values.
- Records to leave out
exclude_recordslist - Records or entities the agent should not return, such as companies already on your list.
- Continue from run
previous_run_idtext - The ID of an earlier run to follow up on, for example with 'Find 10 more'. The new run gets its own ID.
- Premium data sources
data_sourceslist - Exa Connect partners the agent may also query, alongside the web. Their use is billed on top of the run.One or more of:
fiber(Fiber.ai (companies and people)),financial_datasets(Financial Datasets (US stocks and filings)),similarweb(Similarweb (web traffic)),baselayer(Baselayer (US business verification)),affiliate(Affiliate.com (products)),particle(Particle (podcast transcripts)),jinko(Jinko (flights and hotels)),polymarket(Polymarket (prediction markets)),macrobond(Macrobond (economic data)). - Spending cap (US dollars)
max_cost_dollarsnumber - The most this run may spend, $1-$100. Leave blank for Exa's default cap ($5 for Automatic, $20 for Ultra).Only when Effort is Automatic (billed by use, up to $5) or Ultra (billed by use, up to $20, slowest). From 1 to 100.
- Time limit (minutes)
max_duration_minutesnumber - Have the run wrap up with what it has found after this many minutes (5-180).Only when Effort is Ultra (billed by use, up to $20, slowest). From 5 to 180.
- How long to wait
max_wait_secondsnumber - How long this step waits for the run to finish, in seconds (default 300, maximum 900; 0 starts the run without waiting). If the run is still going when the wait runs out, the step succeeds and returns its run ID, so use 'Check a research agent run' later to collect the result.From 0 to 900. Default:
300.
Outputs
answertext- The agent's written answer or summary.
completedtrue/false- Whether the run finished and its result is included.
completed_attext- When the run finished.
cost_dollarsnumber- What the run cost, in US dollars.
created_attext- When the run started.
efforttext- The effort level the run used.
groundinglist- The sources behind each part of the answer: the field, its citations (title and web address) and Exa's confidence.
querytext- What the agent was asked.
run_idtext- Exa's ID for this run. Pass it to 'Check a research agent run' to collect a result later.
statustext- queued, running, completed, failed or cancelled.
stop_reasontext- Why the run stopped: schema_satisfied, budget_reached, time_limit_reached, stopped, error or cancelled.
structuredobject- The result in the shape the output schema asked for. Empty when no schema was given. Fields the evidence could not support are empty.
timed_outtrue/false- True when the wait ran out before the run finished. The run keeps going on Exa's side.
Example output
{
"answer": "Milvus (Zilliz), Qdrant (Qdrant Solutions) and Weaviate (Weaviate B.V.).",
"completed": true,
"completed_at": "2026-10-14T09:01:12.000Z",
"cost_dollars": 0.1,
"created_at": "2026-10-14T09:00:00.000Z",
"effort": "medium",
"grounding": [
{
"citations": [
{
"title": "Milvus",
"url": "https://milvus.io/docs/overview.md"
}
],
"confidence": "high",
"field": "databases[0].maintainer"
}
],
"query": "Find three open source vector databases and who maintains each.",
"run_id": "agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5",
"status": "completed",
"stop_reason": "schema_satisfied",
"structured": {
"databases": [
{
"maintainer": "Zilliz",
"name": "Milvus"
},
{
"maintainer": "Qdrant Solutions",
"name": "Qdrant"
},
{
"maintainer": "Weaviate B.V.",
"name": "Weaviate"
}
]
},
"timed_out": false
}Search the web
Search the web with Exa and get a list of matching pages, and optionally a written answer drawn from them.
Inputs
- Query
querytextRequired - What to search for.
- Number of results
num_resultsnumber - How many results to return (1-100). Defaults to 10.Default:
10. - Search type
typetext - How hard Exa works on the search. 'Automatic' suits almost every case; the faster types trade some quality for speed, and the deep types research across several steps and can take up to a minute.One of:
auto(Automatic (recommended)),fast,instant(Instant (lowest quality)),deep-lite(Deep (lightweight)),deep(Deep (multi-step research)),deep-reasoning(Deep (maximum reasoning, slowest)). Default:auto. - Focus on a category
categorytext - Narrow results to a specific type of page. Leave blank to search everything. Companies and People are drawn from Exa's own indexes and don't support the date filters or 'Websites to exclude'.One of:
company(Companies),people(People (professional profiles)),publication(Publications (research papers)),news,personal site(Personal sites),financial report(Financial reports). - Websites to include
include_domainslist - Only show results from these websites (for example, nytimes.com). A path such as exa.ai/blog or a wildcard such as *.substack.com also works.
- Websites to exclude
exclude_domainslist - Leave out results from these websites (for example, reddit.com).
- Published after
start_published_datedate - Only show pages published on or after this date, in YYYY-MM-DD format.
- Published before
end_published_datedate - Only show pages published on or before this date, in YYYY-MM-DD format.
- Include relevant excerpts
include_highlightstrue/false - Include the passages of each page that best match the search, so later steps can read the findings without fetching every page.Default:
true. - Include page text
include_texttrue/false - Also include the text of each page, trimmed to 8,000 characters. Leave off unless a later step needs the full page, since the excerpts above are usually enough.Default:
false. - Summarize each result
summary_querytext - Have Exa write a short summary of each result, focused on this question or topic, for example 'What does the company sell?'. Summaries are billed per result. Leave blank for none.
- Answer to write from the results
output_schematext - Describe the answer Exa should write from what it finds, for example 'A short comparison of each tool's pricing'. Or paste a JSON Schema whose "type" is "object" to get named fields back instead (at most 10 fields, two levels deep). Exa returns it as 'answer', with the sources behind each part in 'grounding'. Leave blank for results only.
- Instructions
system_prompttext - Guidance on how Exa should search and write, such as which sources to prefer or what to leave out.
- Extra search queries
additional_querieslist - Up to 10 more queries the deep search should also run, each a genuinely different angle on the question (not a rewording).Only when Search type is Deep (multi-step research), Deep (lightweight) or Deep (maximum reasoning, slowest).
- Country
user_locationtext - Favour results for readers in this country, as a two-letter code such as US, GB or FR.
- Page freshness (hours)
max_age_hoursnumber - Use Exa's stored copy of a page only when it is younger than this many hours; otherwise Exa fetches the page again. 0 always fetches a fresh copy (slower) and -1 never does. Leave blank for Exa's default.From -1 to 720.
Outputs
answertext- The answer Exa wrote from the results: text, or named fields for a JSON Schema. Only present when an answer was asked for.
groundinglist- The sources behind each part of the answer: the field, its citations (title and web address) and Exa's confidence.
result_countnumber- How many results were returned.
resultslist- The matching web pages, each with its title, web address, published date and the excerpts, text or summary asked for.
Example output
{
"result_count": 1,
"results": [
{
"highlights": [
"The most relevant passage of the page."
],
"id": "https://example.com/article",
"publishedDate": "2026-09-30T00:00:00.000Z",
"title": "Example Article",
"url": "https://example.com/article"
}
]
}Stop a research agent run early
Have an Ultra research agent run finish now and keep what it has found so far. Exa can only stop Ultra runs early; cancel any other run instead. A run that already finished is returned as it is.
Inputs
- Run ID
run_idtextRequired - The research agent run's ID, as returned by 'Run a research agent', for example 'agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5'.
Outputs
answertext- The agent's written answer or summary.
completedtrue/false- Whether the run finished and its result is included.
completed_attext- When the run finished.
cost_dollarsnumber- What the run cost, in US dollars.
created_attext- When the run started.
efforttext- The effort level the run used.
groundinglist- The sources behind each part of the answer: the field, its citations (title and web address) and Exa's confidence.
querytext- What the agent was asked.
run_idtext- Exa's ID for this run. Pass it to 'Check a research agent run' to collect a result later.
statustext- queued, running, completed, failed or cancelled.
stop_reasontext- Why the run stopped: schema_satisfied, budget_reached, time_limit_reached, stopped, error or cancelled.
structuredobject- The result in the shape the output schema asked for. Empty when no schema was given. Fields the evidence could not support are empty.
Example output
{
"answer": "Milvus (Zilliz), Qdrant (Qdrant Solutions) and Weaviate (Weaviate B.V.).",
"completed": true,
"completed_at": "2026-10-14T09:01:12.000Z",
"cost_dollars": 0.1,
"created_at": "2026-10-14T09:00:00.000Z",
"effort": "ultra",
"grounding": [
{
"citations": [
{
"title": "Milvus",
"url": "https://milvus.io/docs/overview.md"
}
],
"confidence": "high",
"field": "databases[0].maintainer"
}
],
"query": "Find three open source vector databases and who maintains each.",
"run_id": "agent_run_01j8f2k4h6m9p3q5r7t9v1w3x5",
"status": "completed",
"stop_reason": "stopped",
"structured": {
"databases": [
{
"maintainer": "Zilliz",
"name": "Milvus"
},
{
"maintainer": "Qdrant Solutions",
"name": "Qdrant"
},
{
"maintainer": "Weaviate B.V.",
"name": "Weaviate"
}
]
}
}Summarize web pages
Summarize one or more web pages by their web address, focused on a question or topic you provide.
Inputs
- Web page addresses
urlslistRequired - A list of web addresses (URLs) of the pages to summarize, such as those from an earlier search. Pass a list even when there is only one page.
- Focus question or topic
querytextRequired - A question or topic to focus the summary on.
Outputs
content_countnumber- How many pages were summarized.
failedlist- Pages Exa could not read, each with its web address and the reason, such as CRAWL_NOT_FOUND.
failed_countnumber- How many pages could not be read.
summarieslist- Each page's summary with its web address and title.
summarytext- The summaries of every page, one paragraph each.
Example output
{
"content_count": 1,
"failed": [],
"failed_count": 0,
"summaries": [
{
"summary": "This is a summary of the requested documents...",
"title": "Example Article",
"url": "https://example.com/article"
}
],
"summary": "This is a summary of the requested documents..."
}Update a monitor
Change a monitor's search, schedule or destination, or pause and resume it. Only the settings you fill in change.
Inputs
- Monitor ID
monitor_idtextRequired - The monitor's ID, as returned by 'Create a monitor'.
- Name
nametext - A new name for the monitor.
- Status
statustext - Pause the monitor or make it active again. Exa does not run a paused monitor, on its schedule or on demand.One of:
active,paused. - What to watch for
querytext - A new search for the monitor to repeat.
- How often
periodtext - A new schedule for the monitor.One of:
1h(Every hour),6h(Every 6 hours),12h(Every 12 hours),1d(Every day),7d(Every week),manual(Only when run from a workflow). - Results per run
num_resultsnumber - The most new pages each run returns (1-100).From 1 to 100.
- Websites to include
include_domainslist - Only show results from these websites (for example, nytimes.com). A path such as exa.ai/blog or a wildcard such as *.substack.com also works.
- Websites to exclude
exclude_domainslist - Leave out results from these websites (for example, reddit.com).
- What to write up
output_schematext - Describe what Exa should write up from each run's new results, for example 'Each announcement with the company and where it is'. Or paste a JSON Schema whose "type" is "object" to get named fields back. Leave blank for a short text summary.
- Send results to
webhook_urltext - A new https:// address to send each finished run to.
Outputs
created_attext- When the monitor was created.
metadataobject- The monitor's labels.
monitor_idtext- Exa's ID for the monitor.
nametext- The monitor's name.
next_run_attext- When it next runs.
output_schemaobject- What Exa writes up from each run's results.
periodtext- How often it runs, such as 1d. Empty when it runs only when triggered.
querytext- What the monitor searches for.
searchobject- The monitor's full search settings.
statustext- active (runs on its schedule and when run now), paused (does not run at all until made active again) or disabled (Exa turned it off after repeated failures).
updated_attext- When the monitor was last changed.
webhook_urltext- Where Exa sends each finished run.
Example output
{
"created_at": "2026-10-14T09:00:00.000Z",
"metadata": null,
"monitor_id": "01k4d9w6y3h7p2m8n5q1r0s4tv",
"name": "Battery recycling expansion",
"next_run_at": "2026-10-15T09:00:00.000Z",
"output_schema": {
"type": "text"
},
"period": "1d",
"query": "new battery recycling facilities announced in North America",
"search": {
"contents": {
"highlights": true
},
"numResults": 10,
"query": "new battery recycling facilities announced in North America"
},
"status": "paused",
"updated_at": "2026-10-14T09:00:00.000Z",
"webhook_url": "https://example.com/webhooks/exa"
}