Default
Exa
API integration
Ship Default features without building the integration. Full Exa API access via Proxy and 50+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Talk to usUse Cases
Why integrate with Exa
Common scenarios for SaaS companies building Exa integrations for their customers.
Embed AI-native web research in your product
Give your users an in-app research copilot that pulls clean, cited web content instead of building scraping pipelines or shipping raw Google links. Truto handles the Exa auth and request lifecycle so you can focus on the UX.
Enrich CRM and ATS records with live web data
Let sales and recruiting users one-click enrich accounts, contacts, and candidates using Exa's company and people search plus content extraction. Truto normalizes the auth and pagination across every customer connection.
Power scheduled brand and competitor monitoring
Offer end users 'trackers' that watch for news, product launches, or regulatory changes using Exa Monitors and Webhooks. Truto manages webhook subscriptions and delivery so net-new results flow straight into your app.
Run agentic deep research inside customer workflows
Use Exa Agent Runs and Research Tasks to generate structured, cited reports for use cases like due diligence memos, market briefs, or account plans. Truto exposes a consistent API surface for kicking off, polling, and cancelling long-running jobs.
Build curated entity lists with AI enrichment
Let users define a target list (companies, people, domains) as an Exa Webset and attach enrichments like 'extract pricing' or 'summarize positioning'. Truto handles the async create, search, and enrichment calls end-to-end.
What You Can Build
Ship these features with Truto + Exa
Concrete product features your team can ship faster by leveraging Truto’s Exa integration instead of building from scratch.
One-click account and people enrichment
Trigger exa_companies_search and exa_people_search from any record in your app and write structured firmographic or professional data back to your database.
In-app answer engine with citations
Wire a chat or command bar to create_a_exa_answer and create_a_exa_content so user questions return synthesized, source-linked responses inside your product.
Scheduled monitors with webhook-driven digests
Let users configure recurring queries via create_a_exa_monitor and subscribe to create_a_exa_webhook so new, deduplicated results power email, Slack, or in-app alerts.
Async Webset builder for target lists
Expose a UI where users define a Webset via create_a_exa_webset, attach create_a_exa_webset_enrichment steps, and stream completed rows back into your tables.
Deep research reports as a feature
Kick off create_a_exa_research_task or create_a_exa_agent_run with a structured output schema and render the resulting JSON as branded reports, memos, or briefs.
Per-tenant API key management
Use the Exa API key endpoints to provision, rotate, and meter create_a_exa_api_key access per customer workspace, with usage visibility via get_single_exa_api_key_usage_by_id.
SuperAI
Exa AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
create_a_exa_nevermined_purchase
Purchase an Exa API key with $7 of credits via Nevermined x402 card delegation. For a first-time payer, provisions a new key; for a returning payer, adds $7 of credits to the existing key. Returns: status, apiKey, expiresAt.
delete_a_exa_agent_run_by_id
Delete an exa agent run by id. Returns an empty 204 response on success. Required: id.
get_single_exa_agent_run_by_id
Retrieve an exa agent run by id. Poll this endpoint until the run reaches a terminal state. Returns: id, status (one of queued, running, completed, failed, cancelled). Required: id.
create_a_exa_agent_run
Create a new exa agent run. Returns: id, status reflecting the initial state of the newly created run.
list_all_exa_agent_runs
List all exa agent runs. Returns: id, status per run.
create_a_exa_run
Create an asynchronous Exa Agent run with a natural-language query. Returns: id, query, status, createdAt. Required: query. Optionally provide outputSchema for validated structured JSON output, input.data or input.exclusion to control row processing, or previousRunId to continue from a completed prior run.
list_all_exa_runs
List Exa Agent runs for your team, ordered newest to oldest. Returns: id, query, status, createdAt.
list_all_exa_run_events
List stored Exa agent run events for a given run, returned as a paginated JSON array. Returns event records including id, type, and data for each stored event in the run. Required: run_id.
create_a_exa_answer
Submit a question to exa's answer endpoint, which performs an Exa search and uses an LLM to generate either a direct answer (e.g. factual queries) or a detailed summary with citations (e.g. open-ended queries). Returns: answer, citations. Supports token streaming via stream and structured JSON output via outputSchema. Required: query.
create_a_exa_content
Extract clean, LLM-ready content from one or more URLs using the exa Contents API. Returns: title, url, id, text, highlights, summary, publishedDate, author, image, favicon. Required: urls.
get_single_exa_content_by_id
Get full page content, highlights, or summaries for one or more known URLs using exa. Returns: title, url, id, text, highlights, summary, publishedDate, author, image, favicon. Required: urls.
list_all_exa_contents
List extracted content results for multiple URLs via the exa Contents API. Returns: title, url, id, text, highlights, summary, publishedDate, author, image, favicon. Required: urls.
create_a_exa_context
Search exa for relevant code snippets and examples from open-source repositories, GitHub repos, docs pages, and Stack Overflow posts. Returns: requestId, query, response (formatted code snippets and contextual examples), resultsCount, costDollars, searchTime, and outputTokens. Required: query.
exa_monitors_bulk_update
Perform a batch action (delete, pause, or unpause) on Exa monitors matching the provided filters. Returns: data, has_more. Required: action. Use dry_run: true (the default) to preview which monitors would be affected before committing; repeat requests until has_more is false to process all matches.
create_a_exa_monitor
Create a new Exa monitor that runs recurring searches on a schedule and delivers results to a webhook endpoint with automatic deduplication. Returns: id, search, trigger, status, webhookSecret. Store webhookSecret securely — it is returned only once at creation time.
delete_a_exa_monitor_by_id
Delete an Exa monitor by id. This action cannot be undone. Returns an empty 204 response on success. Required: id.
get_single_exa_monitor_by_id
Get a single Exa monitor by id. Returns: id, search, trigger, status. Required: id.
list_all_exa_monitors
List all Exa monitors for the authenticated team. Returns: id, search, trigger, status. Supports filtering by status; results use cursor-based pagination.
update_a_exa_monitor_by_id
Update an existing Exa monitor by id. All body fields are optional; for search, send only the fields to change. Set trigger to null to remove the schedule. Returns: id, search, trigger, status. Required: id.
get_single_exa_monitor_run_by_id
Get a single exa monitor run by its ID, including the full output when the run has completed. Returns: id, output. Required: monitor_id, id.
list_all_exa_monitor_runs
List all runs for an exa monitor in reverse chronological order using cursor-based pagination. Returns: id, output. Required: monitor_id.
create_a_exa_research_task
Create an asynchronous exa research task that explores the web, gathers sources, synthesizes findings, and returns results with citations. Returns: researchId for polling completion status. Providing an outputSchema generates structured JSON; omitting it produces a detailed markdown report. Deprecated May 1, 2026 — migrate to /search with type "deep-reasoning".
list_all_exa_research_tasks
List exa research tasks using cursor-based pagination (max 50 per page). Returns: researchId per task. Deprecated May 1, 2026 — migrate to /search with type "deep-reasoning".
create_a_exa_search
Search the exa web index and extract content from matching pages. Returns result items including url, title, publishedDate, and content fields (text, highlights, summary) populated based on the contents parameter. Required: query.
list_all_exa_searches
List exa web search results matching a natural language query. Returns result items including url, title, publishedDate, and content fields (text, highlights, summary) populated based on the contents parameter. Required: query.
create_a_exa_api_key
Create a new exa API key for your team with an optional name and rate limit. Returns: id, name, rateLimit, teamId, createdAt.
delete_a_exa_api_key_by_id
Permanently delete an exa API key by id. Returns an empty 204 response on success. Required: id.
get_single_exa_api_key_by_id
Get a specific exa API key by id. Returns: id, name, rateLimit, teamId, createdAt. Required: id.
list_all_exa_api_keys
List all exa API keys belonging to your team. Returns: id, name, rateLimit, teamId, createdAt for each key.
update_a_exa_api_key_by_id
Update the name and/or rate limit of an existing exa API key by id. Returns: id, name, rateLimit, teamId, createdAt. Required: id.
exa_companies_search
Search exa's index of 50M+ companies using natural language queries across industry, funding stage, headcount, geography, and technology. Returns: title, url, and entities — each entity containing id, type, and structured properties including name, foundedYear, headquarters, financials, and webTraffic. Required: query.
exa_news_search
Search exa's real-time news index — spanning major publications, trade press, and niche outlets — using semantic or keyword queries with native date filtering. Returns: url, title, publishedDate, score, id. Required: query.
list_all_exa_search
Search exa for news and web content using natural language queries. Returns a list of results including url, title, score, publishedDate, and optional contents fields (text, highlights, summary). Required: query. numResults accepts 1–100 and defaults to 10.
exa_people_search
Search Exa's index of 1B+ professional profiles using a natural language query. Returns per-result: title, url, and entities containing structured person metadata such as name, location, workHistory, and educationHistory. Required: query.
create_a_exa_agent_run_cancellation
Cancel an in-progress exa agent run by its run_id. Sends a cancellation request to stop the specified run. Returns an empty 204 response on success. Required: run_id.
create_a_exa_monitor_trigger
Trigger an Exa monitor run immediately in exa, bypassing its scheduled interval. Works for monitors with `active` or `paused` status. Returns an empty 204 response on success. Required: monitor_id.
get_single_exa_api_key_usage_by_id
Get usage analytics and billing data for a specific exa API key. Returns api_key_id, usage, and costs, making it suitable for building billing dashboards, monitoring spend, and generating per-key cost-allocation reports. Required: api_key_id.
create_a_exa_webset
Create a new exa Webset that asynchronously searches, verifies, and enriches web results against specified criteria. Returns: id, status, metadata, created_at, updated_at.
list_all_exa_websets
List all exa Websets. Returns: id, status, metadata, created_at, updated_at.
get_single_exa_webset_by_id
Get a single exa Webset by id. Optionally pass expand=["items"] to include the Webset's collected items in the response. Returns: id, status, metadata, created_at, updated_at, items. Required: id.
update_a_exa_webset_by_id
Update an exa Webset by id. Returns: id, status, metadata, created_at, updated_at. Required: id.
delete_a_exa_webset_by_id
Delete an exa Webset by id. Returns the deleted Webset object including id, status, metadata, created_at, and updated_at. Required: id.
create_a_exa_webset_cancellation
Cancel an exa Webset, halting any active searches and transitioning the Webset status to 'canceled'. Returns the updated Webset object including its id, object, status, metadata, created_at, and updated_at. Required: webset_id.
create_a_exa_webset_search
Create a new search within an exa Webset. Returns: id, object, status, query, entity, criteria, progress, createdAt, updatedAt. Required: webset_id, query, count. Criteria list is capped at 5 items; if omitted, exa auto-detects criteria from the query.
get_single_exa_webset_search_by_id
Get a single exa Webset search by id. Returns: id, object, status, query, entity, criteria, progress, websetId, createdAt, updatedAt. Required: webset_id, id.
create_a_exa_webset_search_cancellation
Cancel a running exa webset search, immediately stopping its execution. Returns the updated WebsetSearch object including id, object, status (set to 'canceled'), query, entity, and criteria. Required: webset_id, search_id.
create_a_exa_webset_enrichment
Create an exa Webset enrichment, instructing an AI agent to extract or compute a specific data point for every item in the Webset. Returns: id, status, description, format, title, webset_id, options, instructions, metadata, created_at, updated_at. Required: webset_id, description.
get_single_exa_webset_enrichment_by_id
Get a single exa Webset enrichment by id. Returns: id, status, description, format, title, webset_id, options, instructions, metadata, created_at, updated_at. Required: webset_id, id.
delete_a_exa_webset_enrichment_by_id
Delete an exa Webset enrichment by id. Returns an empty 204 response on success. Required: webset_id, id.
create_a_exa_webset_enrichment_cancellation
Cancel a pending exa webset enrichment. Returns the updated enrichment object including id, status, webset_id, description, format, options, instructions, metadata, created_at, and updated_at. Required: webset_id, enrichment_id.
create_a_exa_webhook
Create a new Exa webhook to receive event notifications at a specified URL. Returns: id, url, events, createdAt. Required: url. If events is omitted, all event types are delivered by default.
list_all_exa_webhooks
List all Exa webhooks configured for your account. Returns: id, url, events, createdAt per webhook.
get_single_exa_webhook_by_id
Get a single Exa webhook by id. Returns: id, url, events, createdAt. Required: id.
update_a_exa_webhook_by_id
Update an existing Exa webhook by id. Returns: id, url, events, createdAt. Required: id.
delete_a_exa_webhook_by_id
Delete an Exa webhook by id. Returns an empty 204 response on success. Required: id.
list_all_exa_webhook_attempts
List delivery attempts for a specific exa webhook. Returns: id, eventId, eventType, webhookId, url, successful, responseStatusCode, responseBody, responseHeaders, attempt, attemptedAt, and object. Required: webhook_id.
Why Truto
Why use Truto’s MCP server for Exa
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 550+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Exa in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Exa account
Use Truto’s frontend SDK to connect your customer’s Exa account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Exa
Truto’s Proxy API is a 1-to-1 mapping of the Exa API. You call us, we call Exa, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Exa’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Exa on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How does authentication to Exa work for our end users?
Exa uses API key authentication. Through Truto, each of your end users connects their own Exa API key, and Truto securely stores and injects it on every request so you never handle credentials directly.
Which Exa capabilities are available through this integration?
Truto exposes Exa's core surfaces: Search (including companies, people, and news), Contents, Answer, Agent Runs, Research Tasks, Websets with Searches and Enrichments, Monitors, Webhooks, and API key management. Each is callable as a discrete Truto tool.
How are long-running operations like Agent Runs and Websets handled?
These are asynchronous in Exa. You create the job (e.g. create_a_exa_agent_run, create_a_exa_webset), then poll the corresponding get_single_* endpoint or subscribe to webhooks. Cancellation endpoints are available for runs, websets, and enrichments.
Can we receive real-time updates from Exa Monitors?
Yes. Register a webhook via create_a_exa_webhook and Exa will push new, deduplicated monitor results as they appear. Truto normalizes delivery and you can inspect list_all_exa_webhook_attempts for debugging.
How fresh is the data Exa returns?
Exa maintains continuously updated indices for web content, news, companies, and people. Monitors run on a scheduled cadence and only emit net-new results, while ad-hoc Search and Content calls hit live indices at request time.
Can we meter or cap usage per end-user workspace?
Yes. You can provision separate Exa API keys per tenant using create_a_exa_api_key, track consumption via get_single_exa_api_key_usage_by_id, and revoke or update keys with the delete and update endpoints.
Exa
Get Exa integrated into your app
Our team understands what it takes to make a Exa integration successful. A short, crisp 30 minute call with folks who understand the problem.