Getting started
Install the exa-py SDK- uv
- pip
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
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| query | str | The query string. | Required |
| contents | Optional[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_results | Optional[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_domains | Optional[List[str]] | Domains to include in the search. | None |
| exclude_domains | Optional[List[str]] | Domains to exclude from the search. | None |
| start_crawl_date | Optional[str] | Only links crawled after this date. | None |
| end_crawl_date | Optional[str] | Only links crawled before this date. | None |
| start_published_date | Optional[str] | Only links published after this date. | None |
| end_published_date | Optional[str] | Only links published before this date. | None |
| include_text | Optional[List[str]] | Strings that must appear in the page text. | None |
| exclude_text | Optional[List[str]] | Strings that must not appear in the page text. | None |
| type | Optional[Union[SearchType, str]] | Search type - ‘auto’ (default), ‘fast’, ‘deep’, or ‘neural’. | None |
| category | Optional[Category] | Data category to focus on (e.g. ‘company’, ‘news’, ‘research paper’). | None |
| flags | Optional[List[str]] | Experimental flags for Exa usage. | None |
| moderation | Optional[bool] | If True, the search results will be moderated for safety. | None |
| user_location | Optional[str] | Two-letter ISO country code of the user (e.g. US). | None |
| additional_queries | Optional[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
Result Object
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[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
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| url | str | The URL to find similar pages for. | Required |
| contents | Optional[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_results | Optional[int] | Number of results to return. Default is None (server default). | None |
| include_domains | Optional[List[str]] | Domains to include in the search. | None |
| exclude_domains | Optional[List[str]] | Domains to exclude from the search. | None |
| start_crawl_date | Optional[str] | Only links crawled after this date. | None |
| end_crawl_date | Optional[str] | Only links crawled before this date. | None |
| start_published_date | Optional[str] | Only links published after this date. | None |
| end_published_date | Optional[str] | Only links published before this date. | None |
| include_text | Optional[List[str]] | Strings that must appear in the page text. | None |
| exclude_text | Optional[List[str]] | Strings that must not appear in the page text. | None |
| exclude_source_domain | Optional[bool] | Whether to exclude the source domain. | None |
| category | Optional[Category] | Data category to focus on (e.g. ‘company’, ‘news’, ‘research paper’). | None |
| flags | Optional[List[str]] | Experimental flags. | None |
Return Example
Result Object
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[List[Entity]] | Structured entity data for company or person searches. |
get_contents Method
Retrieve contents for a list of URLs.
Input Example
Input Parameters
Return Example
Result Object
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[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
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| query | str | The query to answer. | Required |
| stream | Optional[bool] | - | False |
| text | Optional[bool] | Whether to include full text in the results. Defaults to False. | False |
| system_prompt | Optional[str] | A system prompt to guide the LLM’s behavior when generating the answer. | None |
| model | Optional[Literal[‘exa’, ‘exa-pro’]] | The model to use for answering. Defaults to None. | None |
| output_schema | Optional[JSONSchemaInput] | JSON schema describing the desired answer structure. | None |
| user_location | Optional[str] | - | None |
Return Example
Result Object
| Field | Type | Description |
|---|---|---|
| id | str | The temporary ID for the document. |
| url | str | The URL of the search result. |
| title | Optional[str] | The title of the search result. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | If available, the author of the content. |
| text | Optional[str] | The full page text from each search result. |
stream_answer Method
Generate a streaming answer response.
Input Example
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| query | str | The query to answer. | Required |
| text | bool | Whether to include full text in the results. Defaults to False. | False |
| system_prompt | Optional[str] | A system prompt to guide the LLM’s behavior when generating the answer. | None |
| model | Optional[Literal[‘exa’, ‘exa-pro’]] | The model to use for answering. Defaults to None. | None |
| output_schema | Optional[JSONSchemaInput] | JSON schema describing the desired answer structure. | None |
| user_location | Optional[str] | - | None |
Return Example
Result Object
| Field | Type | Description |
|---|---|---|
| content | Optional[str] | The partial text content of the answer |
| citations | Optional[List[AnswerResult]] | List of citations if provided in this chunk |
research.create Method
Create a new research request.
Input Example
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| instructions | str | The research instructions describing what to research. | Required |
| model | ResearchModel | The model to use (‘exa-research-fast’, ‘exa-research’, or ‘exa-research-pro’). | 'exa-research-fast' |
| output_schema | Optional[Union[Dict[str, Any], Type[BaseModel]]] | Optional JSON schema for structured output format. | None |
Return Example
Result Object
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘completed’] | - |
| finished_at | float | Milliseconds since epoch time |
| events | Optional[List[ResearchEvent]] | - |
| output | ResearchOutput | - |
| cost_dollars | CostDollars | - |
research.get Method
Get a research request by ID.
Input Example
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| research_id | str | The unique identifier of the research task. | Required |
| stream | bool | Whether to stream events as they occur. | False |
| events | bool | Whether to include events in the response. | False |
| output_schema | Optional[Type[BaseModel]] | Optional Pydantic model for typed output validation. | None |
Return Example
Result Object
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘completed’] | - |
| finished_at | float | Milliseconds since epoch time |
| events | Optional[List[ResearchEvent]] | - |
| output | ResearchOutput | - |
| cost_dollars | CostDollars | - |
research.poll_until_finished Method
Poll until research is finished.
Input Example
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| research_id | str | The unique identifier of the research task. | Required |
| poll_interval | int | Milliseconds between polling attempts. | 1000 |
| timeout_ms | int | Maximum time to wait in milliseconds before timing out. | 600000 |
| events | bool | Whether to include events in the response. | False |
| output_schema | Optional[Type[BaseModel]] | Optional Pydantic model for typed output validation. | None |
Result Object
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘completed’] | - |
| finished_at | float | Milliseconds since epoch time |
| events | Optional[List[ResearchEvent]] | - |
| output | ResearchOutput | - |
| cost_dollars | CostDollars | - |
research.list Method
List research requests.
Input Example
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| cursor | Optional[str] | Pagination cursor from a previous response. | None |
| limit | Optional[int] | Maximum number of results to return. | None |
Return Example
Result Object
| Field | Type | Description |
|---|---|---|
| data | List[ResearchDto] | The list of research requests |
| has_more | bool | Whether there are more results to paginate through |
| next_cursor | Optional[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 thecontents parameter.
TextContentsOptions
A class representing the options that you can specify when requesting text
| Field | Type | Description |
|---|---|---|
| max_characters | int | The maximum number of characters to return. Default: None (no limit). |
| include_html_tags | bool | If true, include HTML tags in the returned text. Default false. |
| verbosity | VERBOSITY_OPTIONS | Controls verbosity level of returned content. “compact” (default): main content only; “standard”: balanced; “full”: all sections. Requires max_age_hours=0 to take effect. |
| include_sections | List[SECTION_TAG] | Only include content from these semantic sections. Requires max_age_hours=0 to take effect. |
| exclude_sections | List[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
| Field | Type | Description |
|---|---|---|
| query | str | The query string for the summary. Summary will bias towards answering the query. |
| schema | JSONSchemaInput | JSON 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.
| Field | Type | Description |
|---|---|---|
| query | str | The query string for highlight generation. Highlights will be biased towards this query. |
| num_sentences | int | The number of sentences per highlight. |
| highlights_per_url | int | The number of highlights to return per URL. |
ContextContentsOptions
Options for retrieving aggregated context from a set of search results.
| Field | Type | Description |
|---|---|---|
| max_characters | int | The maximum number of characters to include in the context string. |
ExtrasOptions
A class representing additional extraction fields (e.g. links, images)
| Field | Type | Description |
|---|---|---|
| links | int | - |
| image_links | int | - |
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.
| Field | Type | Description |
|---|---|---|
| text | Union[TextContentsOptions, Literal[True]] | Options for text extraction, or True for defaults. |
| highlights | Union[HighlightsContentsOptions, Literal[True]] | Options for highlight extraction, or True for defaults. |
| summary | Union[SummaryContentsOptions, Literal[True]] | Options for summary generation, or True for defaults. |
| context | Union[ContextContentsOptions, Literal[True]] | Options for context aggregation, or True for defaults. |
| max_age_hours | int | Maximum 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. |
| subpages | int | Number of subpages to crawl. |
| subpage_target | Union[str, List[str]] | Target subpage path(s) to crawl. |
| extras | ExtrasOptions | Additional 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.
| Field | Type | Description |
|---|---|---|
| schema_ | str | - |
| title | str | - |
| description | str | - |
| type | Literal[‘object’, ‘array’, ‘string’, ‘number’, ‘boolean’, ‘null’, ‘integer’] | - |
| properties | Dict[str, JSONSchema] | - |
| items | Union[JSONSchema, List[JSONSchema]] | - |
| required | List[str] | - |
| enum | List | - |
| additionalProperties | Union[bool, JSONSchema] | - |
| definitions | Dict[str, JSONSchema] | - |
| patternProperties | Dict[str, JSONSchema] | - |
| allOf | List[JSONSchema] | - |
| anyOf | List[JSONSchema] | - |
| oneOf | List[JSONSchema] | - |
| not_ | JSONSchema | - |
CostDollarsSearch
Represents the cost breakdown for search.
| Field | Type | Description |
|---|---|---|
| neural | float | - |
| keyword | float | - |
CostDollarsContents
Represents the cost breakdown for contents.
| Field | Type | Description |
|---|---|---|
| text | float | - |
| summary | float | - |
CostDollars
Represents costDollars field in the API response.
| Field | Type | Description |
|---|---|---|
| total | float | - |
| search | CostDollarsSearch | - |
| contents | CostDollarsContents | - |
_Result
A class representing the base fields of a search result.
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[List[Entity]] | Structured entity data for company or person searches. |
Result
A class representing a search result with optional text, summary, and highlights.
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[List[Entity]] | Structured entity data for company or person searches. |
| text | Optional[str] | The text content of the page. |
| summary | Optional[str] | A summary of the page content. |
| highlights | Optional[List[str]] | Relevant sentences from the page. |
| highlight_scores | Optional[List[float]] | Scores for each highlight. |
ResultWithText
A class representing a search result with text present.
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[List[Entity]] | Structured entity data for company or person searches. |
| text | str | The text of the search result page. |
ResultWithSummary
A class representing a search result with summary present.
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[List[Entity]] | Structured entity data for company or person searches. |
| summary | str | - |
ResultWithTextAndSummary
A class representing a search result with text and summary present.
| Field | Type | Description |
|---|---|---|
| url | str | The URL of the search result. |
| id | str | The temporary ID for the document. |
| title | Optional[str] | The title of the search result. |
| score | Optional[float] | A number from 0 to 1 representing similarity. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | The author of the content (if available). |
| image | Optional[str] | A URL to an image associated with the content (if available). |
| favicon | Optional[str] | A URL to the favicon (if available). |
| subpages | Optional[List[_Result]] | Subpages of main page |
| extras | Optional[Dict] | Additional metadata; e.g. links, images. |
| entities | Optional[List[Entity]] | Structured entity data for company or person searches. |
| text | str | - |
| summary | str | - |
AnswerResult
A class representing a result for an answer.
| Field | Type | Description |
|---|---|---|
| id | str | The temporary ID for the document. |
| url | str | The URL of the search result. |
| title | Optional[str] | The title of the search result. |
| published_date | Optional[str] | An estimate of the creation date, from parsing HTML content. |
| author | Optional[str] | If available, the author of the content. |
| text | Optional[str] | The full page text from each search result. |
StreamChunk
A class representing a single chunk of streaming data.
| Field | Type | Description |
|---|---|---|
| content | Optional[str] | The partial text content of the answer |
| citations | Optional[List[AnswerResult]] | List of citations if provided in this chunk |
AnswerResponse
A class representing the response for an answer operation.
| Field | Type | Description |
|---|---|---|
| answer | Union[str, dict[str, Any]] | The generated answer. |
| citations | List[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.
| Field | Type | Description |
|---|---|---|
| id | str | - |
| status | str | - |
| source | str | - |
SearchResponse
A class representing the response for a search operation.
| Field | Type | Description |
|---|---|---|
| results | List[T] | A list of search results. |
| resolved_search_type | Optional[str] | ‘neural’ or ‘keyword’ if auto. |
| auto_date | Optional[str] | A date for filtering if autoprompt found one. |
| context | Optional[str] | Combined context string when requested via contents.context. |
| statuses | Optional[List[ContentStatus]] | Status list from get_contents. |
| cost_dollars | Optional[CostDollars] | Cost breakdown. |
CostDollars
| Field | Type | Description |
|---|---|---|
| total | float | - |
| num_pages | float | - |
| num_searches | float | - |
| reasoning_tokens | float | - |
Result
| Field | Type | Description |
|---|---|---|
| url | str | - |
ResearchThinkOperation
| Field | Type | Description |
|---|---|---|
| type | Literal[‘think’] | - |
| content | str | - |
ResearchSearchOperation
| Field | Type | Description |
|---|---|---|
| type | Literal[‘search’] | - |
| search_type | Literal[‘neural’, ‘keyword’, ‘auto’, ‘fast’] | - |
| query | str | - |
| results | List[Result] | - |
| page_tokens | float | - |
| goal | Optional[str] | - |
ResearchCrawlOperation
| Field | Type | Description |
|---|---|---|
| type | Literal[‘crawl’] | - |
| result | Result | - |
| page_tokens | float | - |
| goal | Optional[str] | - |
ResearchDefinitionEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘research-definition’] | - |
| research_id | str | - |
| created_at | float | Milliseconds since epoch time |
| instructions | str | - |
| output_schema | Optional[Dict[str, Any]] | - |
ResearchOutputCompleted
| Field | Type | Description |
|---|---|---|
| output_type | Literal[‘completed’] | - |
| content | str | - |
| cost_dollars | CostDollars | - |
| parsed | Optional[Dict[str, Any]] | - |
ResearchOutputFailed
| Field | Type | Description |
|---|---|---|
| output_type | Literal[‘failed’] | - |
| error | str | - |
ResearchOutputEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘research-output’] | - |
| research_id | str | - |
| created_at | float | Milliseconds since epoch time |
| output | Union[ResearchOutputCompleted, ResearchOutputFailed] | - |
ResearchPlanDefinitionEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘plan-definition’] | - |
| research_id | str | - |
| plan_id | str | - |
| created_at | float | Milliseconds since epoch time |
ResearchPlanOperationEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘plan-operation’] | - |
| research_id | str | - |
| plan_id | str | - |
| operation_id | str | - |
| created_at | float | Milliseconds since epoch time |
| data | ResearchOperation | - |
ResearchPlanOutputTasks
| Field | Type | Description |
|---|---|---|
| output_type | Literal[‘tasks’] | - |
| reasoning | str | - |
| tasks_instructions | List[str] | - |
ResearchPlanOutputStop
| Field | Type | Description |
|---|---|---|
| output_type | Literal[‘stop’] | - |
| reasoning | str | - |
ResearchPlanOutputEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘plan-output’] | - |
| research_id | str | - |
| plan_id | str | - |
| created_at | float | Milliseconds since epoch time |
| output | Union[ResearchPlanOutputTasks, ResearchPlanOutputStop] | - |
ResearchTaskDefinitionEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘task-definition’] | - |
| research_id | str | - |
| plan_id | str | - |
| task_id | str | - |
| created_at | float | Milliseconds since epoch time |
| instructions | str | - |
ResearchTaskOperationEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘task-operation’] | - |
| research_id | str | - |
| plan_id | str | - |
| task_id | str | - |
| operation_id | str | - |
| created_at | float | Milliseconds since epoch time |
| data | ResearchOperation | - |
ResearchTaskOutput
| Field | Type | Description |
|---|---|---|
| output_type | Literal[‘completed’] | - |
| content | str | - |
ResearchTaskOutputEvent
| Field | Type | Description |
|---|---|---|
| event_type | Literal[‘task-output’] | - |
| research_id | str | - |
| plan_id | str | - |
| task_id | str | - |
| created_at | float | Milliseconds since epoch time |
| output | ResearchTaskOutput | - |
ResearchOutput
| Field | Type | Description |
|---|---|---|
| content | str | - |
| parsed | Optional[Dict[str, Any]] | - |
ResearchBaseDto
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
ResearchPendingDto
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘pending’] | - |
ResearchRunningDto
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘running’] | - |
| events | Optional[List[ResearchEvent]] | - |
ResearchCompletedDto
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘completed’] | - |
| finished_at | float | Milliseconds since epoch time |
| events | Optional[List[ResearchEvent]] | - |
| output | ResearchOutput | - |
| cost_dollars | CostDollars | - |
ResearchCanceledDto
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘canceled’] | - |
| finished_at | float | Milliseconds since epoch time |
| events | Optional[List[ResearchEvent]] | - |
ResearchFailedDto
| Field | Type | Description |
|---|---|---|
| research_id | str | The unique identifier for the research request |
| created_at | float | Milliseconds since epoch time |
| model | ResearchModel | The model used for the research request |
| instructions | str | The instructions given to this research request |
| output_schema | Optional[Dict[str, Any]] | - |
| status | Literal[‘failed’] | - |
| finished_at | float | Milliseconds since epoch time |
| events | Optional[List[ResearchEvent]] | - |
| error | str | A message indicating why the request failed |
ListResearchResponseDto
| Field | Type | Description |
|---|---|---|
| data | List[ResearchDto] | The list of research requests |
| has_more | bool | Whether there are more results to paginate through |
| next_cursor | Optional[str] | The cursor to paginate through the next set of results |
ResearchCreateRequestDto
| Field | Type | Description |
|---|---|---|
| model | ResearchModel | - |
| instructions | str | Instructions for what research should be conducted |
| output_schema | Optional[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
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.
| Field | Type | Description |
|---|---|---|
| total | Optional[int] | - |
EntityCompanyPropertiesHeadquarters
Company headquarters information.
| Field | Type | Description |
|---|---|---|
| address | Optional[str] | - |
| city | Optional[str] | - |
| postal_code | Optional[str] | - |
| country | Optional[str] | - |
EntityCompanyPropertiesFundingRound
Funding round information.
| Field | Type | Description |
|---|---|---|
| name | Optional[str] | - |
| date | Optional[str] | - |
| amount | Optional[int] | - |
EntityCompanyPropertiesFinancials
Company financial information.
| Field | Type | Description |
|---|---|---|
| revenue_annual | Optional[int] | - |
| funding_total | Optional[int] | - |
| funding_latest_round | Optional[EntityCompanyPropertiesFundingRound] | - |
EntityCompanyPropertiesWebTraffic
Company web traffic information.
| Field | Type | Description |
|---|---|---|
| visits_monthly | Optional[int] | - |
EntityCompanyProperties
Structured properties for a company entity.
| Field | Type | Description |
|---|---|---|
| name | Optional[str] | - |
| founded_year | Optional[int] | - |
| description | Optional[str] | - |
| workforce | Optional[EntityCompanyPropertiesWorkforce] | - |
| headquarters | Optional[EntityCompanyPropertiesHeadquarters] | - |
| financials | Optional[EntityCompanyPropertiesFinancials] | - |
| web_traffic | Optional[EntityCompanyPropertiesWebTraffic] | - |
EntityDateRange
Date range for work history entries.
| Field | Type | Description |
|---|---|---|
| from_date | Optional[str] | - |
| to_date | Optional[str] | - |
EntityPersonPropertiesCompanyRef
Reference to a company in work history.
| Field | Type | Description |
|---|---|---|
| id | Optional[str] | - |
| name | Optional[str] | - |
EntityPersonPropertiesWorkHistoryEntry
A single work history entry for a person.
| Field | Type | Description |
|---|---|---|
| title | Optional[str] | - |
| location | Optional[str] | - |
| dates | Optional[EntityDateRange] | - |
| company | Optional[EntityPersonPropertiesCompanyRef] | - |
EntityPersonProperties
Structured properties for a person entity.
| Field | Type | Description |
|---|---|---|
| name | Optional[str] | - |
| location | Optional[str] | - |
| work_history | Optional[List[EntityPersonPropertiesWorkHistoryEntry]] | - |
CompanyEntity
Structured entity data for a company.
| Field | Type | Description |
|---|---|---|
| id | str | - |
| type | Literal[‘company’] | - |
| version | int | - |
| properties | EntityCompanyProperties | - |
PersonEntity
Structured entity data for a person.
| Field | Type | Description |
|---|---|---|
| id | str | - |
| type | Literal[‘person’] | - |
| version | int | - |
| properties | EntityPersonProperties | - |

