Skip to main content

Getting started

Install the exa-py SDK
uv add exa-py
and then instantiate an Exa client
from exa_py import Exa

exa = Exa()  # Reads EXA_API_KEY from environment
# or explicitly: exa = Exa(api_key="your-api-key")

Get API Key

Follow this link to get your API key

search Method

Perform a search. By default, returns text contents with 10,000 max characters. Use contents=False to opt-out.

Input Example

# Basic search
result = exa.search(
  "hottest AI startups",
  num_results=2
)

# Deep search with query variations
deep_result = exa.search(
  "blog post about AI",
  type="deep",
  additional_queries=["AI blogpost", "machine learning blogs"],
  num_results=5
)

Input Parameters

ParameterTypeDescriptionDefault
querystrThe query string.Required
contentsOptional[Union[ContentsOptions, Literal[False]]]Options for retrieving page contents. Defaults to {"text": {"maxCharacters": 10000}}. Use False to disable contents. See ContentsOptions for available options (text, highlights, summary, context, etc.). Note: For deep search (type=‘deep’), context is always returned by the API.None
num_resultsOptional[int]Number of search results to return (default 10). For deep search, recommend leaving blank - number of results will be determined dynamically for your query.None
include_domainsOptional[List[str]]Domains to include in the search.None
exclude_domainsOptional[List[str]]Domains to exclude from the search.None
start_crawl_dateOptional[str]Only links crawled after this date.None
end_crawl_dateOptional[str]Only links crawled before this date.None
start_published_dateOptional[str]Only links published after this date.None
end_published_dateOptional[str]Only links published before this date.None
include_textOptional[List[str]]Strings that must appear in the page text.None
exclude_textOptional[List[str]]Strings that must not appear in the page text.None
typeOptional[Union[SearchType, str]]Search type - ‘auto’ (default), ‘fast’, ‘deep’, or ‘neural’.None
categoryOptional[Category]Data category to focus on (e.g. ‘company’, ‘news’, ‘research paper’).None
flagsOptional[List[str]]Experimental flags for Exa usage.None
moderationOptional[bool]If True, the search results will be moderated for safety.None
user_locationOptional[str]Two-letter ISO country code of the user (e.g. US).None
additional_queriesOptional[List[str]]Alternative query formulations for deep search to skip automatic LLM-based query expansion. Max 5 queries. Only applicable when type=‘deep’. Example: [“machine learning”, “ML algorithms”, “neural networks”]None

Return Example

{
  "autopromptString": "Here is a link to one of the hottest AI startups:",
  "results": [
    {
      "title": "Adept: Useful General Intelligence",
      "id": "https://www.adept.ai/",
      "url": "https://www.adept.ai/",
      "publishedDate": "2000-01-01",
      "author": null
    },
    {
      "title": "Home | Tenyx, Inc.",
      "id": "https://www.tenyx.com/",
      "url": "https://www.tenyx.com/",
      "publishedDate": "2019-09-10",
      "author": null
    }
  ],
  "requestId": "a78ebce717f4d712b6f8fe0d5d7753f8"
}

Result Object

FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.

find_similar Method

Finds similar pages to a given URL, potentially with domain filters and date filters. By default, returns text contents with 10,000 max characters. Use contents=False to opt-out.

Input Example

similar_results = exa.find_similar(
    "miniclip.com",
    num_results=2,
    exclude_source_domain=True
)

Input Parameters

ParameterTypeDescriptionDefault
urlstrThe URL to find similar pages for.Required
contentsOptional[Union[ContentsOptions, Literal[False]]]Options for retrieving page contents. Defaults to {"text": {"maxCharacters": 10000}}. Use False to disable contents. See ContentsOptions for available options (text, highlights, summary, context, etc.).None
num_resultsOptional[int]Number of results to return. Default is None (server default).None
include_domainsOptional[List[str]]Domains to include in the search.None
exclude_domainsOptional[List[str]]Domains to exclude from the search.None
start_crawl_dateOptional[str]Only links crawled after this date.None
end_crawl_dateOptional[str]Only links crawled before this date.None
start_published_dateOptional[str]Only links published after this date.None
end_published_dateOptional[str]Only links published before this date.None
include_textOptional[List[str]]Strings that must appear in the page text.None
exclude_textOptional[List[str]]Strings that must not appear in the page text.None
exclude_source_domainOptional[bool]Whether to exclude the source domain.None
categoryOptional[Category]Data category to focus on (e.g. ‘company’, ‘news’, ‘research paper’).None
flagsOptional[List[str]]Experimental flags.None

Return Example

{
  "results": [
    {
      "title": "Play New Free Online Games Every Day",
      "id": "https://www.minigames.com/new-games",
      "url": "https://www.minigames.com/new-games",
      "publishedDate": "2000-01-01",
      "author": null
    },
    {
      "title": "Play The best Online Games",
      "id": "https://www.minigames.com/",
      "url": "https://www.minigames.com/",
      "publishedDate": "2000-01-01",
      "author": null
    }
  ],
  "requestId": "08fdc6f20e9f3ea87f860af3f6ccc30f"
}

Result Object

FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.

get_contents Method

Retrieve contents for a list of URLs.

Input Example

# Get contents for a single URL
contents = exa.get_contents("https://example.com/article")

# Get contents for multiple URLs
contents = exa.get_contents([
    "https://example.com/article1",
    "https://example.com/article2"
])

Input Parameters

ParameterTypeDescriptionDefault
urlsUnion[str, List[str], List[_Result]]A single URL, list of URLs, or list of Result objects.Required

Return Example

{
  "results": [
    {
      "url": "https://example.com/article",
      "id": "https://example.com/article",
      "title": "Example Article",
      "text": "The full text content of the article..."
    }
  ]
}

Result Object

FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.

answer Method

Generate an answer to a query using Exa’s search and LLM capabilities.

Input Example

response = exa.answer("What is the capital of France?")

print(response.answer)       # e.g. "Paris"
print(response.citations)    # list of citations used

# If you want the full text of the citations in the response:
response_with_text = exa.answer(
    "What is the capital of France?",
    text=True
)
print(response_with_text.citations[0].text)  # Full page text

Input Parameters

ParameterTypeDescriptionDefault
querystrThe query to answer.Required
streamOptional[bool]-False
textOptional[bool]Whether to include full text in the results. Defaults to False.False
system_promptOptional[str]A system prompt to guide the LLM’s behavior when generating the answer.None
modelOptional[Literal[‘exa’, ‘exa-pro’]]The model to use for answering. Defaults to None.None
output_schemaOptional[JSONSchemaInput]JSON schema describing the desired answer structure.None
user_locationOptional[str]-None

Return Example

{
  "answer": "The capital of France is Paris.",
  "citations": [
    {
      "id": "https://www.example.com/france",
      "url": "https://www.example.com/france",
      "title": "France - Wikipedia",
      "publishedDate": "2023-01-01",
      "author": null,
      "text": "France, officially the French Republic, is a country in... [truncated for brevity]"
    }
  ]
}

Result Object

FieldTypeDescription
idstrThe temporary ID for the document.
urlstrThe URL of the search result.
titleOptional[str]The title of the search result.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]If available, the author of the content.
textOptional[str]The full page text from each search result.

stream_answer Method

Generate a streaming answer response.

Input Example

stream = exa.stream_answer("What is the capital of France?", text=True)

for chunk in stream:
    if chunk.content:
        print("Partial answer:", chunk.content)
    if chunk.citations:
        for citation in chunk.citations:
            print("Citation found:", citation.url)

Input Parameters

ParameterTypeDescriptionDefault
querystrThe query to answer.Required
textboolWhether to include full text in the results. Defaults to False.False
system_promptOptional[str]A system prompt to guide the LLM’s behavior when generating the answer.None
modelOptional[Literal[‘exa’, ‘exa-pro’]]The model to use for answering. Defaults to None.None
output_schemaOptional[JSONSchemaInput]JSON schema describing the desired answer structure.None
user_locationOptional[str]-None

Return Example

{
  "answer": "The capital of France is Paris.",
  "citations": [
    {
      "id": "https://www.example.com/france",
      "url": "https://www.example.com/france",
      "title": "France - Wikipedia",
      "publishedDate": "2023-01-01",
      "author": null,
      "text": "France, officially the French Republic, is a country in... [truncated for brevity]"
    }
  ]
}

Result Object

FieldTypeDescription
contentOptional[str]The partial text content of the answer
citationsOptional[List[AnswerResult]]List of citations if provided in this chunk

research.create Method

Create a new research request.

Input Example

from exa_py import Exa
import os

exa = Exa(os.environ["EXA_API_KEY"])

# Create a simple research task
instructions = "What is the latest valuation of SpaceX?"
schema = {
    "type": "object",
    "properties": {
        "valuation": {"type": "string"},
        "date": {"type": "string"},
        "source": {"type": "string"}
    }
}

task = exa.research.create(
    instructions=instructions,
    output_schema=schema
)

print(f"Task created with ID: {task.research_id}")

Input Parameters

ParameterTypeDescriptionDefault
instructionsstrThe research instructions describing what to research.Required
modelResearchModelThe model to use (‘exa-research-fast’, ‘exa-research’, or ‘exa-research-pro’).'exa-research-fast'
output_schemaOptional[Union[Dict[str, Any], Type[BaseModel]]]Optional JSON schema for structured output format.None

Return Example

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Result Object

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘completed’]-
finished_atfloatMilliseconds since epoch time
eventsOptional[List[ResearchEvent]]-
outputResearchOutput-
cost_dollarsCostDollars-

research.get Method

Get a research request by ID.

Input Example

# Get a research task by ID
task_id = "your-task-id-here"
task = exa.research.get(task_id)

print(f"Task status: {task.status}")
if task.status == "completed":
    print(f"Results: {task.output}")

Input Parameters

ParameterTypeDescriptionDefault
research_idstrThe unique identifier of the research task.Required
streamboolWhether to stream events as they occur.False
eventsboolWhether to include events in the response.False
output_schemaOptional[Type[BaseModel]]Optional Pydantic model for typed output validation.None

Return Example

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "completed",
  "instructions": "What is the latest valuation of SpaceX?",
  "schema": {
    "type": "object",
    "properties": {
      "valuation": {
        "type": "string"
      },
      "date": {
        "type": "string"
      },
      "source": {
        "type": "string"
      }
    }
  },
  "output": {
    "valuation": "$350 billion",
    "date": "December 2024",
    "source": "Financial Times"
  }
}

Result Object

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘completed’]-
finished_atfloatMilliseconds since epoch time
eventsOptional[List[ResearchEvent]]-
outputResearchOutput-
cost_dollarsCostDollars-

research.poll_until_finished Method

Poll until research is finished.

Input Example

# Create and poll a task until completion
task = exa.research.create(
    instructions="Get information about Paris, France",
    output_schema={
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "population": {"type": "string"},
            "founded_date": {"type": "string"}
        }
    }
)

# Poll until completion
result = exa.research.poll_until_finished(task.research_id)
print(f"Research complete: {result.output}")

Input Parameters

ParameterTypeDescriptionDefault
research_idstrThe unique identifier of the research task.Required
poll_intervalintMilliseconds between polling attempts.1000
timeout_msintMaximum time to wait in milliseconds before timing out.600000
eventsboolWhether to include events in the response.False
output_schemaOptional[Type[BaseModel]]Optional Pydantic model for typed output validation.None

Result Object

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘completed’]-
finished_atfloatMilliseconds since epoch time
eventsOptional[List[ResearchEvent]]-
outputResearchOutput-
cost_dollarsCostDollars-

research.list Method

List research requests.

Input Example

# List all research tasks
response = exa.research.list()
print(f"Found {len(response.data)} tasks")

# List with pagination
response = exa.research.list(limit=10)
if response.has_more:
    next_page = exa.research.list(cursor=response.next_cursor)

Input Parameters

ParameterTypeDescriptionDefault
cursorOptional[str]Pagination cursor from a previous response.None
limitOptional[int]Maximum number of results to return.None

Return Example

{
  "data": [
    {
      "id": "task-1",
      "status": "completed",
      "instructions": "Research SpaceX valuation"
    },
    {
      "id": "task-2",
      "status": "running",
      "instructions": "Compare GPU specifications"
    }
  ],
  "hasMore": true,
  "nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI0LTAxLTE1VDE4OjMwOjAwWiIsImlkIjoidGFzay0yIn0="
}

Result Object

FieldTypeDescription
dataList[ResearchDto]The list of research requests
has_moreboolWhether there are more results to paginate through
next_cursorOptional[str]The cursor to paginate through the next set of results

Types Reference

This section documents the TypedDict and dataclass types used throughout the SDK.

Content Options

These TypedDict classes configure content retrieval options for the contents parameter.

TextContentsOptions

A class representing the options that you can specify when requesting text
FieldTypeDescription
max_charactersintThe maximum number of characters to return. Default: None (no limit).
include_html_tagsboolIf true, include HTML tags in the returned text. Default false.
verbosityVERBOSITY_OPTIONSControls verbosity level of returned content. “compact” (default): main content only; “standard”: balanced; “full”: all sections. Requires max_age_hours=0 to take effect.
include_sectionsList[SECTION_TAG]Only include content from these semantic sections. Requires max_age_hours=0 to take effect.
exclude_sectionsList[SECTION_TAG]Exclude content from these semantic sections. Requires max_age_hours=0 to take effect.

SummaryContentsOptions

A class representing the options that you can specify when requesting summary
FieldTypeDescription
querystrThe query string for the summary. Summary will bias towards answering the query.
schemaJSONSchemaInputJSON schema for structured output from summary. Can be a Pydantic model (automatically converted) or a dict containing JSON Schema.

HighlightsContentsOptions

A class representing the options that you can specify when requesting highlights.
FieldTypeDescription
querystrThe query string for highlight generation. Highlights will be biased towards this query.
num_sentencesintThe number of sentences per highlight.
highlights_per_urlintThe number of highlights to return per URL.

ContextContentsOptions

Options for retrieving aggregated context from a set of search results.
FieldTypeDescription
max_charactersintThe maximum number of characters to include in the context string.

ExtrasOptions

A class representing additional extraction fields (e.g. links, images)
FieldTypeDescription
linksint-
image_linksint-

ContentsOptions

Options for retrieving page contents in search and find_similar methods. All fields are optional. If no content options are specified, text with max_characters=10000 is returned by default.
FieldTypeDescription
textUnion[TextContentsOptions, Literal[True]]Options for text extraction, or True for defaults.
highlightsUnion[HighlightsContentsOptions, Literal[True]]Options for highlight extraction, or True for defaults.
summaryUnion[SummaryContentsOptions, Literal[True]]Options for summary generation, or True for defaults.
contextUnion[ContextContentsOptions, Literal[True]]Options for context aggregation, or True for defaults.
max_age_hoursintMaximum age of cached content in hours. If content is older, it will be fetched fresh. Special values: 0 = always fetch fresh content, -1 = never fetch fresh (use cached content only). Example: 168 = fetch fresh for pages older than 7 days.
subpagesintNumber of subpages to crawl.
subpage_targetUnion[str, List[str]]Target subpage path(s) to crawl.
extrasExtrasOptionsAdditional extraction options (links, images).

Response Types

These dataclasses represent API response objects.

JSONSchema

Represents a JSON Schema definition used for structured summary output. .. deprecated:: 1.15.0 Use Pydantic models or dict[str, Any] directly instead. This will be removed in a future version. To learn more visit https://json-schema.org/overview/what-is-jsonschema.
FieldTypeDescription
schema_str-
titlestr-
descriptionstr-
typeLiteral[‘object’, ‘array’, ‘string’, ‘number’, ‘boolean’, ‘null’, ‘integer’]-
propertiesDict[str, JSONSchema]-
itemsUnion[JSONSchema, List[JSONSchema]]-
requiredList[str]-
enumList-
additionalPropertiesUnion[bool, JSONSchema]-
definitionsDict[str, JSONSchema]-
patternPropertiesDict[str, JSONSchema]-
allOfList[JSONSchema]-
anyOfList[JSONSchema]-
oneOfList[JSONSchema]-
not_JSONSchema-

CostDollarsSearch

Represents the cost breakdown for search.
FieldTypeDescription
neuralfloat-
keywordfloat-

CostDollarsContents

Represents the cost breakdown for contents.
FieldTypeDescription
textfloat-
summaryfloat-

CostDollars

Represents costDollars field in the API response.
FieldTypeDescription
totalfloat-
searchCostDollarsSearch-
contentsCostDollarsContents-

_Result

A class representing the base fields of a search result.
FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.

Result

A class representing a search result with optional text, summary, and highlights.
FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.
textOptional[str]The text content of the page.
summaryOptional[str]A summary of the page content.
highlightsOptional[List[str]]Relevant sentences from the page.
highlight_scoresOptional[List[float]]Scores for each highlight.

ResultWithText

A class representing a search result with text present.
FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.
textstrThe text of the search result page.

ResultWithSummary

A class representing a search result with summary present.
FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.
summarystr-

ResultWithTextAndSummary

A class representing a search result with text and summary present.
FieldTypeDescription
urlstrThe URL of the search result.
idstrThe temporary ID for the document.
titleOptional[str]The title of the search result.
scoreOptional[float]A number from 0 to 1 representing similarity.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]The author of the content (if available).
imageOptional[str]A URL to an image associated with the content (if available).
faviconOptional[str]A URL to the favicon (if available).
subpagesOptional[List[_Result]]Subpages of main page
extrasOptional[Dict]Additional metadata; e.g. links, images.
entitiesOptional[List[Entity]]Structured entity data for company or person searches.
textstr-
summarystr-

AnswerResult

A class representing a result for an answer.
FieldTypeDescription
idstrThe temporary ID for the document.
urlstrThe URL of the search result.
titleOptional[str]The title of the search result.
published_dateOptional[str]An estimate of the creation date, from parsing HTML content.
authorOptional[str]If available, the author of the content.
textOptional[str]The full page text from each search result.

StreamChunk

A class representing a single chunk of streaming data.
FieldTypeDescription
contentOptional[str]The partial text content of the answer
citationsOptional[List[AnswerResult]]List of citations if provided in this chunk

AnswerResponse

A class representing the response for an answer operation.
FieldTypeDescription
answerUnion[str, dict[str, Any]]The generated answer.
citationsList[AnswerResult]A list of citations used to generate the answer.

StreamAnswerResponse

A class representing a streaming answer response.

AsyncStreamAnswerResponse

A class representing a streaming answer response.

ContentStatus

A class representing the status of a content retrieval operation.
FieldTypeDescription
idstr-
statusstr-
sourcestr-

SearchResponse

A class representing the response for a search operation.
FieldTypeDescription
resultsList[T]A list of search results.
resolved_search_typeOptional[str]‘neural’ or ‘keyword’ if auto.
auto_dateOptional[str]A date for filtering if autoprompt found one.
contextOptional[str]Combined context string when requested via contents.context.
statusesOptional[List[ContentStatus]]Status list from get_contents.
cost_dollarsOptional[CostDollars]Cost breakdown.

CostDollars

FieldTypeDescription
totalfloat-
num_pagesfloat-
num_searchesfloat-
reasoning_tokensfloat-

Result

FieldTypeDescription
urlstr-

ResearchThinkOperation

FieldTypeDescription
typeLiteral[‘think’]-
contentstr-

ResearchSearchOperation

FieldTypeDescription
typeLiteral[‘search’]-
search_typeLiteral[‘neural’, ‘keyword’, ‘auto’, ‘fast’]-
querystr-
resultsList[Result]-
page_tokensfloat-
goalOptional[str]-

ResearchCrawlOperation

FieldTypeDescription
typeLiteral[‘crawl’]-
resultResult-
page_tokensfloat-
goalOptional[str]-

ResearchDefinitionEvent

FieldTypeDescription
event_typeLiteral[‘research-definition’]-
research_idstr-
created_atfloatMilliseconds since epoch time
instructionsstr-
output_schemaOptional[Dict[str, Any]]-

ResearchOutputCompleted

FieldTypeDescription
output_typeLiteral[‘completed’]-
contentstr-
cost_dollarsCostDollars-
parsedOptional[Dict[str, Any]]-

ResearchOutputFailed

FieldTypeDescription
output_typeLiteral[‘failed’]-
errorstr-

ResearchOutputEvent

FieldTypeDescription
event_typeLiteral[‘research-output’]-
research_idstr-
created_atfloatMilliseconds since epoch time
outputUnion[ResearchOutputCompleted, ResearchOutputFailed]-

ResearchPlanDefinitionEvent

FieldTypeDescription
event_typeLiteral[‘plan-definition’]-
research_idstr-
plan_idstr-
created_atfloatMilliseconds since epoch time

ResearchPlanOperationEvent

FieldTypeDescription
event_typeLiteral[‘plan-operation’]-
research_idstr-
plan_idstr-
operation_idstr-
created_atfloatMilliseconds since epoch time
dataResearchOperation-

ResearchPlanOutputTasks

FieldTypeDescription
output_typeLiteral[‘tasks’]-
reasoningstr-
tasks_instructionsList[str]-

ResearchPlanOutputStop

FieldTypeDescription
output_typeLiteral[‘stop’]-
reasoningstr-

ResearchPlanOutputEvent

FieldTypeDescription
event_typeLiteral[‘plan-output’]-
research_idstr-
plan_idstr-
created_atfloatMilliseconds since epoch time
outputUnion[ResearchPlanOutputTasks, ResearchPlanOutputStop]-

ResearchTaskDefinitionEvent

FieldTypeDescription
event_typeLiteral[‘task-definition’]-
research_idstr-
plan_idstr-
task_idstr-
created_atfloatMilliseconds since epoch time
instructionsstr-

ResearchTaskOperationEvent

FieldTypeDescription
event_typeLiteral[‘task-operation’]-
research_idstr-
plan_idstr-
task_idstr-
operation_idstr-
created_atfloatMilliseconds since epoch time
dataResearchOperation-

ResearchTaskOutput

FieldTypeDescription
output_typeLiteral[‘completed’]-
contentstr-

ResearchTaskOutputEvent

FieldTypeDescription
event_typeLiteral[‘task-output’]-
research_idstr-
plan_idstr-
task_idstr-
created_atfloatMilliseconds since epoch time
outputResearchTaskOutput-

ResearchOutput

FieldTypeDescription
contentstr-
parsedOptional[Dict[str, Any]]-

ResearchBaseDto

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-

ResearchPendingDto

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘pending’]-

ResearchRunningDto

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘running’]-
eventsOptional[List[ResearchEvent]]-

ResearchCompletedDto

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘completed’]-
finished_atfloatMilliseconds since epoch time
eventsOptional[List[ResearchEvent]]-
outputResearchOutput-
cost_dollarsCostDollars-

ResearchCanceledDto

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘canceled’]-
finished_atfloatMilliseconds since epoch time
eventsOptional[List[ResearchEvent]]-

ResearchFailedDto

FieldTypeDescription
research_idstrThe unique identifier for the research request
created_atfloatMilliseconds since epoch time
modelResearchModelThe model used for the research request
instructionsstrThe instructions given to this research request
output_schemaOptional[Dict[str, Any]]-
statusLiteral[‘failed’]-
finished_atfloatMilliseconds since epoch time
eventsOptional[List[ResearchEvent]]-
errorstrA message indicating why the request failed

ListResearchResponseDto

FieldTypeDescription
dataList[ResearchDto]The list of research requests
has_moreboolWhether there are more results to paginate through
next_cursorOptional[str]The cursor to paginate through the next set of results

ResearchCreateRequestDto

FieldTypeDescription
modelResearchModel-
instructionsstrInstructions for what research should be conducted
output_schemaOptional[Dict[str, Any]]-

Entity Types

These types represent structured entity data returned for company or person searches.

JSONSchemaInput

Input type for JSON schema parameters. Can be either a Pydantic model class (automatically converted to JSON Schema) or a raw JSON Schema dictionary. Type: Union[type[BaseModel], dict[str, Any]]

Category

Data category to focus on when searching. Each category returns results specialized for that content type. Type: Literal[‘company’, ‘research paper’, ‘news’, ‘pdf’, ‘tweet’, ‘personal site’, ‘financial report’, ‘people’]

SearchType

Search type that determines the search algorithm. ‘auto’ (default) automatically selects the best approach, ‘fast’ prioritizes speed, ‘deep’ performs comprehensive multi-query search, ‘neural’ uses embedding-based semantic search. Type: Literal[‘auto’, ‘fast’, ‘deep’, ‘neural’]

VERBOSITY_OPTIONS

Verbosity levels for content filtering.
  • compact: Most concise output, main content only (default)
  • standard: Balanced content with more detail
  • full: Complete content including all sections
Type: Literal[‘compact’, ‘standard’, ‘full’]

SECTION_TAG

Section tags for semantic content filtering. Type: Literal[‘unspecified’, ‘header’, ‘navigation’, ‘banner’, ‘body’, ‘sidebar’, ‘footer’, ‘metadata’]

Entity

Type: Union[CompanyEntity, PersonEntity]

ResearchModel

Type: Literal[‘exa-research-fast’, ‘exa-research’, ‘exa-research-pro’]

ResearchOperation

Type: Annotated[Union[ResearchThinkOperation, ResearchSearchOperation, ResearchCrawlOperation], Field(discriminator=‘type’)]

ResearchMetaEvent

Type: Union[ResearchDefinitionEvent, ResearchOutputEvent]

ResearchPlanEvent

Type: Union[ResearchPlanDefinitionEvent, ResearchPlanOperationEvent, ResearchPlanOutputEvent]

ResearchTaskEvent

Type: Union[ResearchTaskDefinitionEvent, ResearchTaskOperationEvent, ResearchTaskOutputEvent]

ResearchEvent

Type: Union[ResearchMetaEvent, ResearchPlanEvent, ResearchTaskEvent]

ResearchDto

Type: Annotated[Union[ResearchPendingDto, ResearchRunningDto, ResearchCompletedDto, ResearchCanceledDto, ResearchFailedDto], Field(discriminator=‘status’)]

EntityCompanyPropertiesWorkforce

Company workforce information.
FieldTypeDescription
totalOptional[int]-

EntityCompanyPropertiesHeadquarters

Company headquarters information.
FieldTypeDescription
addressOptional[str]-
cityOptional[str]-
postal_codeOptional[str]-
countryOptional[str]-

EntityCompanyPropertiesFundingRound

Funding round information.
FieldTypeDescription
nameOptional[str]-
dateOptional[str]-
amountOptional[int]-

EntityCompanyPropertiesFinancials

Company financial information.
FieldTypeDescription
revenue_annualOptional[int]-
funding_totalOptional[int]-
funding_latest_roundOptional[EntityCompanyPropertiesFundingRound]-

EntityCompanyPropertiesWebTraffic

Company web traffic information.
FieldTypeDescription
visits_monthlyOptional[int]-

EntityCompanyProperties

Structured properties for a company entity.
FieldTypeDescription
nameOptional[str]-
founded_yearOptional[int]-
descriptionOptional[str]-
workforceOptional[EntityCompanyPropertiesWorkforce]-
headquartersOptional[EntityCompanyPropertiesHeadquarters]-
financialsOptional[EntityCompanyPropertiesFinancials]-
web_trafficOptional[EntityCompanyPropertiesWebTraffic]-

EntityDateRange

Date range for work history entries.
FieldTypeDescription
from_dateOptional[str]-
to_dateOptional[str]-

EntityPersonPropertiesCompanyRef

Reference to a company in work history.
FieldTypeDescription
idOptional[str]-
nameOptional[str]-

EntityPersonPropertiesWorkHistoryEntry

A single work history entry for a person.
FieldTypeDescription
titleOptional[str]-
locationOptional[str]-
datesOptional[EntityDateRange]-
companyOptional[EntityPersonPropertiesCompanyRef]-

EntityPersonProperties

Structured properties for a person entity.
FieldTypeDescription
nameOptional[str]-
locationOptional[str]-
work_historyOptional[List[EntityPersonPropertiesWorkHistoryEntry]]-

CompanyEntity

Structured entity data for a company.
FieldTypeDescription
idstr-
typeLiteral[‘company’]-
versionint-
propertiesEntityCompanyProperties-

PersonEntity

Structured entity data for a person.
FieldTypeDescription
idstr-
typeLiteral[‘person’]-
versionint-
propertiesEntityPersonProperties-