Exa Agent is an async, high-compute, usage-based endpoint that handles list building, enrichment, and deep research tasks that require dozens of structured output fields and complex reasoning. Each run can return a natural-language answer, schema-validated JSON, field-level grounding, metadata, and a cost breakdown. You can retrieve completed runs later, list past runs, replay events, or continue from a previously completed run.Documentation Index
Fetch the complete documentation index at: https://exa.ai/docs/llms.txt
Use this file to discover all available pages before exploring further.
When to use Exa Agent
Use Exa Agent when a workflow needs more than a single search or extraction call:- Build lists from open-ended criteria, then enrich each result
- Research entities across many fields with citations
- Run multi-hop tasks like “find companies, then find their decision makers”
- Produce structured JSON from a long-running web research task
- Continue from a previous run with a follow-up request like “find 10 more results”
Quickstart
This example starts a run that builds a structured list of people matching your criteria. It returns JSON inoutput.structured.
1. Install the Exa SDK
2. Set your API key
betas=["agent-2026-05-07"] or betas: ["agent-2026-05-07"], which sets the required Exa-Beta header.
3. Create a run
Accept: text/event-stream when creating a run to receive server-sent events as the run is queued, started, and completed:
4. Poll for completion
If you do not stream events, save the returnedid and poll the run until it reaches a terminal status.
output.text: a natural-language answeroutput.structured: validated JSON when you provideoutputSchemaoutput.grounding: citations for text or structured fields, when emittedcostDollars: the run’s cost breakdown
Return structured JSON
UseoutputSchema when you need /agent to return in specific format. When you specify an outputSchema, the returned object will contain an output matching your outputSchema in output.structured.
outputSchema supports the JSON Schema specification.
To request contact information, describe the desired contact fields in outputSchema. Use standard JSON Schema shapes such as { "type": "string", "format": "email" } for email addresses, { "type": "string", "format": "phone" } for phone numbers, and { "type": "string", "format": "uri" } for URLs. Bound list sizes with maxItems when possible so the maximum contact-enrichment cost is predictable.
Use effort to set a cost and reasoning effort preference for a run. Supported values are low, medium, high, xhigh, and auto; the default is auto.
Process input rows
Useinput.data when you have records that you want to enrich.
Continue from a previous run
UsepreviousRunId to ask follow-ups to the run’s previous response. Follow-up runs will share the same run ID as the previousRunId supplied.
Find a run ID
List recent runs and inspect their statuses:Production Workflows
Most production workflows center around three fields:query: what the agent should doinput.data: the data the agent should processoutputSchema: the shape of the result you want back
input.data, produce a concise research brief for each one, and returns structured JSON that matches the outputSchema.
Pricing
Exa Agent is in beta and pricing may change before launch.
| Component | Price |
|---|---|
| Agent Compute Units | 1 ACU / $0.0001 |
| Search tool calls | $7 / 1,000 searches |
| Email contact enrichment | $0.02 / email |
| Phone number contact enrichment | $0.07 / phone number |
| Browser use | Coming soon |
usage.agentComputeUnits measures model computation across the full run. More complex queries, or queries that contain a large input.data field will generally take more reasoning steps and make more tool calls, and will generally consumer more ACUs.
Your Agent concurrency limit is one fifth of your account QPS. For pay-as-you-go accounts with default QPS, this means two active Agent runs at a time.

