---
title: Exa API Integration on Truto
slug: exa
category: Default
canonical: "https://truto.one/integrations/detail/exa/"
---

# Exa API Integration on Truto



**Category:** Default  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 56 tools for Exa that AI agents can call directly.

- **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.

## How it works

1. **Link your customer's Exa account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Exa.** The Proxy API is a 1-to-1 mapping of the Exa API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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

- **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.

## FAQs

### 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.
