Web pages by query, ranked, with titles, URLs and dates.
Perform a search with an Exa prompt-engineered query and retrieve a list of relevant results. Optionally get contents.
Job web.search
telipot run exa.web.search \
--input-json '{"query":"openrouter","numResults":1,"type":"instant"}' \
--quotePrice
$0.004–$0.015 / requestexa.web.search
Whose account it uses
What it sends
{
"query": "openrouter",
"numResults": 1,
"type": "instant"
}Your Exa login is added for you. Your AI never sees it.
What it costs
$0.004–$0.015
per request · billed per call
| rate | $4 to $15 per 1,000 requests, billed per call |
| source | docs · exa.ai/docs/admin/pricing · checked 2026-10-05 |
| confidence | documented |
| settles on | The charge Exa reports in costDollars.total |
| note | Base price per request for up to 10 results. Each result above 10 adds $1 per 1,000 results and each AI page summary adds $1 per 1,000 pages, which no row here can carry, so the charge the response reports in costDollars.total is the one to settle on. |
Preview the price first. --quote runs nothing.
For developers · run it
Shell · runs the task on the named account
telipot run exa.web.search \
--input-json '{"query":"openrouter","numResults":1,"type":"instant"}'query string · required · at least 1 | The query string for the search. Write it in natural language, naming the subject and, when it matters, the kind of source and the time period. |
numResults integer · 1 to 100 · default 10 | Number of results to return. Limits vary by search type. The maximum public limit is 100 results; contact sales (hello@exa.ai) for more. The base price covers up to 10 results and each result above 10 is billed at $1 per 1,000 results. |
type string · one of "instant", "fast", "auto", "deep-lite", "deep", "deep-reasoning" · default "auto" | The search mode. auto is balanced and recommended for most applications; fast has reduced latency; instant has the minimum response time; deep-lite is lightweight research with synthesized results at a consistent 4 seconds; deep is multi-step research with synthesis; deep-reasoning adds stronger reasoning. instant is billed at $4 per 1,000 requests, fast and auto at $7, deep-lite and deep at $12, deep-reasoning at $15. |
category string | A data category to focus on. Known categories are company, publication, news, personal site, financial report and people; other strings are accepted as category hints. The people category returns profiles of named individuals and company returns company pages, and this one task serves both. The company and people categories do not support startPublishedDate, endPublishedDate or excludeDomains, and using them returns a 400. |
includeDomains array · at most 1200 | Domains or domain paths to search, each a hostname such as example.com, a hostname with a path prefix such as example.com/docs, or a wildcard subdomain such as *.example.com. Use this instead of a site operator in the query. |
excludeDomains array · at most 1200 | Domains or domain paths to leave out, in the same forms as includeDomains. |
startPublishedDate string | Only links with a published date after this are returned. ISO 8601 date-time. |
endPublishedDate string | Only links with a published date before this are returned. ISO 8601 date-time. |
userLocation string | The two-letter ISO country code of the user. |
moderation boolean · default false | Enable content moderation to filter unsafe content from search results. |
contents object | What to return for each result, nested under this field, such as { highlights: true } for query-relevant excerpts or { text: { maxCharacters: 2000 } } for page text, with maxAgeHours, subpages and extras as further options. Without it each result carries metadata such as title, URL and publication date. AI page summaries are billed at $1 per 1,000 pages. |
additionalQueries array · 1 to 10 | Additional query variations used alongside the main query for broader results. Only works with a deep search type. |
outputSchema object | JSON schema for synthesized output. Supported root types are text and object. When given, the response includes an output object whose content matches the schema. Works with every search type and adds about 2 seconds of synthesis latency. Object schemas are limited to 10 properties in total and 2 levels of nesting, and every array must define items. |
objective string · at most 4096 | Goal for this search turn; say which documents should rank first, which should be excluded, and what specific facts or figures to pull from them. |
systemPrompt string | Additional instructions that guide generated output, such as source preferences, novelty constraints or duplication constraints. |
requestId string | |
results object[] | |
searchTime number | Server-side processing time in milliseconds |
costDollars object | Estimated dollar cost of the completed request; billing is computed from usage counters, not from this object. |
output object | Synthesized output, returned when outputSchema is provided |
Full output schema · JSONNested fields and constraints
Output JSON Schema
{
"type": "object",
"required": [
"results"
],
"properties": {
"requestId": {
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url"
],
"properties": {
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"id": {
"type": "string",
"description": "Temporary document id, accepted by the contents route"
},
"publishedDate": {
"type": "string",
"description": "Estimated creation date parsed from the page"
},
"author": {
"type": [
"string",
"null"
]
},
"image": {
"type": "string"
},
"favicon": {
"type": "string"
},
"text": {
"type": "string",
"description": "Full page text, present only when requested"
},
"highlights": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"subpages": {
"type": "array",
"items": {
"type": "object"
}
},
"entities": {
"type": "array",
"items": {
"type": "object"
}
},
"extras": {
"type": "object"
}
}
}
},
"searchTime": {
"type": "number",
"description": "Server-side processing time in milliseconds"
},
"costDollars": {
"type": "object",
"description": "Estimated dollar cost of the completed request; billing is computed from usage counters, not from this object.",
"properties": {
"total": {
"type": "number"
},
"search": {
"type": "object",
"properties": {
"neural": {
"type": "number"
},
"keyword": {
"type": "number"
}
}
},
"summary": {
"type": "number"
},
"contents": {
"type": "object",
"properties": {
"text": {
"type": "number"
},
"highlights": {
"type": "number"
},
"summary": {
"type": "number"
}
}
}
}
},
"output": {
"type": "object",
"description": "Synthesized output, returned when outputSchema is provided",
"required": [
"content",
"grounding"
],
"properties": {
"content": {
"type": [
"string",
"object"
]
},
"grounding": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"citations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"title": {
"type": "string"
},
"id": {
"type": "string"
}
}
}
},
"confidence": {
"type": "string"
}
}
}
}
}
}
}
}A real answer
examples/exa.web.search.json
{
"requestId": "3601539a56015e854455a44813897a03",
"results": [
{
"id": "https://openrouter.ai/",
"title": "OpenRouter",
"url": "https://openrouter.ai/",
"image": "https://openrouter.ai/dynamic-og?pathname=default&title=OpenRouter&description=The+unified+interface+for+every+model.+Find+the+best+models+%26+prices+for+your+prompts&v=2",
"entities": [
{}
]
}
],
"searchTime": 7.4,
"costDollars": {
"total": 0.004,
"search": {
"neural": 0.004
}
}
}
