> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Exa Search Integration for AI Agents & Workflows

> AI-powered semantic search engine for intelligent web search, content extraction, similarity matching, and answer generation

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/exa-search.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=d1fe79d96ad38dd6cd02c79f96a0d57a" alt="Exa Search logo" width="72" height="72" data-path="logos/exa-search.svg" />

## Overview

Add **Exa Search** to any ModuleX agent or workflow. AI-powered semantic web search, content extraction, similarity matching, and answer generation against the Exa REST API (`api.exa.ai`).

<Info>
  **Categories**: Web Search & Scraping · Data · Search · **Auth**: API Key, ModuleX Managed Key · **Actions**: 4
</Info>

## Authentication

<Tabs>
  <Tab title="API Key">
    ### API Key Authentication

    Authenticate using your Exa API key

    <Steps>
      <Step title="Step 1">
        Go to [https://dashboard.exa.ai](https://dashboard.exa.ai) and sign up or log in
      </Step>

      <Step title="Step 2">
        Navigate to 'API Keys' section
      </Step>

      <Step title="Step 3">
        Create a new API key or copy your existing one
      </Step>

      <Step title="Step 4">
        Paste the API key below
      </Step>
    </Steps>

    #### Required Credentials

    | Field       | Description                            | Required | Format                                 |
    | ----------- | -------------------------------------- | -------- | -------------------------------------- |
    | Exa API Key | Your Exa API key from dashboard.exa.ai | Yes      | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
  </Tab>

  <Tab title="ModuleX Managed Key">
    ### ModuleX Managed Key

    Use ModuleX's managed API keys with usage tracked against your weekly credit limit
  </Tab>
</Tabs>

## Available Actions

<AccordionGroup>
  <Accordion title="search — Perform semantic web search using Exa's AI-powered search engine. Supports multiple search types (auto, neural, deep, fast) and category filtering.">
    ### Parameters

    <ResponseField name="query" type="string" required>
      Search query string
    </ResponseField>

    <ResponseField name="num_results" type="integer">
      Number of results to return (1-100) (Default: `10`)
    </ResponseField>

    <ResponseField name="search_type" type="string">
      Search type: 'auto' (default), 'neural', 'deep', or 'fast' (Default: `auto`)
    </ResponseField>

    <ResponseField name="category" type="string">
      Filter results by content category
    </ResponseField>

    <ResponseField name="include_domains" type="array">
      List of domains to include in search results
    </ResponseField>

    <ResponseField name="exclude_domains" type="array">
      List of domains to exclude from search results
    </ResponseField>

    <ResponseField name="start_published_date" type="string">
      Filter results published after this date (ISO 8601 format)
    </ResponseField>

    <ResponseField name="end_published_date" type="string">
      Filter results published before this date (ISO 8601 format)
    </ResponseField>

    <ResponseField name="include_text" type="boolean">
      Whether to include page text content in results (Default: `true`)
    </ResponseField>

    <ResponseField name="include_highlights" type="boolean">
      Whether to include relevant text highlights (Default: `false`)
    </ResponseField>

    <ResponseField name="include_summary" type="boolean">
      Whether to include AI-generated summaries (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SearchResultItem": {
          "additionalProperties": false,
          "description": "A single result row in ``search``.",
          "properties": {
            "title": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Title"
            },
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Url"
            },
            "published_date": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Published Date"
            },
            "author": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Author"
            },
            "score": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Score"
            },
            "text": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Text"
            },
            "highlights": {
              "items": {
                "type": "string"
              },
              "title": "Highlights",
              "type": "array"
            },
            "summary": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Summary"
            }
          },
          "title": "SearchResultItem",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "results": {
          "items": {
            "$ref": "#/$defs/SearchResultItem"
          },
          "title": "Results",
          "type": "array"
        },
        "total_results": {
          "default": 0,
          "title": "Total Results",
          "type": "integer"
        },
        "search_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Search Type"
        },
        "request_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Request Id"
        }
      },
      "required": [
        "success"
      ],
      "title": "SearchOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_contents — Extract full page contents, summaries, and metadata from a list of URLs. Uses cached results with optional live crawling.">
    ### Parameters

    <ResponseField name="urls" type="array" required>
      List of URLs to extract content from
    </ResponseField>

    <ResponseField name="include_text" type="boolean">
      Whether to include full page text (Default: `true`)
    </ResponseField>

    <ResponseField name="include_highlights" type="boolean">
      Whether to include relevant text highlights (Default: `false`)
    </ResponseField>

    <ResponseField name="highlights_per_url" type="integer">
      Number of highlight snippets per URL (Default: `3`)
    </ResponseField>

    <ResponseField name="include_summary" type="boolean">
      Whether to include AI-generated summary (Default: `false`)
    </ResponseField>

    <ResponseField name="livecrawl" type="string">
      Live crawl option: 'never', 'fallback', 'preferred', 'always' (Default: `fallback`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ContentItem": {
          "additionalProperties": false,
          "description": "A single result row in ``get_contents``.",
          "properties": {
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Url"
            },
            "title": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Title"
            },
            "published_date": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Published Date"
            },
            "author": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Author"
            },
            "text": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Text"
            },
            "highlights": {
              "items": {
                "type": "string"
              },
              "title": "Highlights",
              "type": "array"
            },
            "summary": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Summary"
            }
          },
          "title": "ContentItem",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "results": {
          "items": {
            "$ref": "#/$defs/ContentItem"
          },
          "title": "Results",
          "type": "array"
        },
        "total_results": {
          "default": 0,
          "title": "Total Results",
          "type": "integer"
        },
        "request_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Request Id"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetContentsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="find_similar — Find pages similar to a given URL using semantic similarity. Ideal for discovering related content, competitive analysis, and research expansion.">
    ### Parameters

    <ResponseField name="url" type="string" required>
      URL to find similar pages for
    </ResponseField>

    <ResponseField name="num_results" type="integer">
      Number of similar results to return (1-100) (Default: `10`)
    </ResponseField>

    <ResponseField name="include_domains" type="array">
      List of domains to include in results
    </ResponseField>

    <ResponseField name="exclude_domains" type="array">
      List of domains to exclude from results
    </ResponseField>

    <ResponseField name="exclude_source_domain" type="boolean">
      Whether to exclude results from the source URL's domain (Default: `true`)
    </ResponseField>

    <ResponseField name="category" type="string">
      Filter by content category
    </ResponseField>

    <ResponseField name="include_text" type="boolean">
      Include page text content in results (Default: `true`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SimilarResultItem": {
          "additionalProperties": false,
          "description": "A single result row in ``find_similar``.",
          "properties": {
            "title": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Title"
            },
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Url"
            },
            "published_date": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Published Date"
            },
            "author": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Author"
            },
            "score": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Score"
            },
            "text": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Text"
            }
          },
          "title": "SimilarResultItem",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Source Url"
        },
        "results": {
          "items": {
            "$ref": "#/$defs/SimilarResultItem"
          },
          "title": "Results",
          "type": "array"
        },
        "total_results": {
          "default": 0,
          "title": "Total Results",
          "type": "integer"
        },
        "request_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Request Id"
        }
      },
      "required": [
        "success"
      ],
      "title": "FindSimilarOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="answer — Get an AI-generated answer to a question informed by Exa search results. Provides accurate answers with citations from authoritative sources.">
    ### Parameters

    <ResponseField name="query" type="string" required>
      Question to answer using web search
    </ResponseField>

    <ResponseField name="num_results" type="integer">
      Number of search results to use for generating answer (Default: `5`)
    </ResponseField>

    <ResponseField name="search_type" type="string">
      Search type for finding sources (Default: `auto`)
    </ResponseField>

    <ResponseField name="include_domains" type="array">
      Domains to prioritize for answers
    </ResponseField>

    <ResponseField name="exclude_domains" type="array">
      Domains to exclude from answer sources
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "AnswerSource": {
          "additionalProperties": false,
          "description": "A single citation in ``answer``'s sources list.",
          "properties": {
            "title": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Title"
            },
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Url"
            },
            "published_date": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Published Date"
            }
          },
          "title": "AnswerSource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "answer": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Answer"
        },
        "sources": {
          "items": {
            "$ref": "#/$defs/AnswerSource"
          },
          "title": "Sources",
          "type": "array"
        },
        "request_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Request Id"
        }
      },
      "required": [
        "success"
      ],
      "title": "AnswerOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Standard tier**: \~60 req/min.
* **Deep search**: \~20 req/min (higher compute cost).
* **Pricing** (approx., per legacy manifest):
  * Neural search 1–25 results: \$0.005
  * Neural search 26–100: \$0.025
  * Deep search 1–25: \$0.015
  * Deep search 26–100: \$0.075
  * Content per page: \$0.001
* **Error model**: non-2xx responses and timeouts are caught and
  returned as `success=False` + `error` rather than raising. Plan for
  retries on the agent side based on the error string.

## Related integrations

<CardGroup cols={3}>
  <Card title="Firecrawl" href="/integrations/tools/firecrawl" />

  <Card title="Linkup" href="/integrations/tools/linkup" />

  <Card title="Serper" href="/integrations/tools/serper" />
</CardGroup>

## Links

* [Exa Search](https://exa.ai)
