For AI agents: a documentation index is available at https://docs.parallel.ai/llms.txt. The full text of all docs is at https://docs.parallel.ai/llms-full.txt. You may also fetch any page as Markdown by appending
This guide maps the request you make today to its Parallel Search equivalent. Parallel Search takes keyword .md to its URL or sending Accept: text/markdown.search_queries, plus an optional natural language objective, and returns ranked, LLM-optimized excerpts in a single call. search_queries is the only required field, so most migrations are a one-field change. Picking a mode is optional; requests default to advanced.
| Coming from | Closest Parallel equivalent |
|---|---|
Exa instant or fast | Search with mode: "turbo" |
Exa auto | Search with mode: "basic" |
Exa deep-lite or deep | Task API or Chat API (synthesized output) |
Exa deep-reasoning | Task API |
Tavily fast or ultra-fast | Search with mode: "turbo" |
Tavily basic | Search with mode: "basic" |
Tavily advanced | Search with mode: "advanced" |
| SERP API | Search with mode: "turbo" or "basic" (one call, ranked excerpts) |
Built-in model search (e.g. OpenAI web_search) | Search as a function tool, any mode (OpenAI, Anthropic) |
Start with one field
Exa, Tavily, and SERP APIs all center on a single query string. The fastest migration is to pass that string as one entry insearch_queries. That alone is a complete, valid request, since mode is optional and defaults to advanced:
"mode": "turbo". For better results, also add an optional objective, a natural language description of your full intent, and split the query into 2-3 short keyword queries:
From Exa
| Exa parameter | Parallel equivalent |
|---|---|
query | search_queries (the only required field); optionally add an objective describing your full intent |
type: "instant" or "fast" | mode: "turbo" |
type: "auto" | mode: "basic" |
type: "deep-lite" or "deep" | Use the Task API or Chat API (both return synthesized output) |
type: "deep-reasoning" | Use the Task API |
numResults | advanced_settings.max_results |
additionalQueries | Add them as extra entries in search_queries; Parallel searches multiple queries in one call |
includeDomains / excludeDomains | advanced_settings.source_policy.include_domains / exclude_domains |
startPublishedDate | advanced_settings.source_policy.after_date (YYYY-MM-DD) |
userLocation | advanced_settings.location (ISO 3166-1 alpha-2 country code) |
contents.text (full page text) | Search returns compressed excerpts, not full page bodies. For full page contents, use the Extract API |
category: "company" or "people" | Consider Entity Search |
outputSchema / summary | Structured, synthesized outputs are the Task API or Chat API |
advanced_settings knobs only when you have a specific product constraint. Restrictive settings can reduce result quality.
From Tavily
Tavily’ssearch_depth tiers map one-to-one onto Parallel modes.
| Tavily parameter | Parallel equivalent |
|---|---|
query | search_queries (the only required field); optionally add an objective describing your full intent |
search_depth: "fast" or "ultra-fast" | mode: "turbo" |
search_depth: "basic" | mode: "basic" |
search_depth: "advanced" | mode: "advanced" |
max_results | advanced_settings.max_results |
include_domains / exclude_domains | advanced_settings.source_policy.include_domains / exclude_domains |
start_date | advanced_settings.source_policy.after_date (YYYY-MM-DD). Tavily time_range (relative, e.g. week) has no direct equivalent; convert to an absolute date first |
country | advanced_settings.location (ISO 3166-1 alpha-2; convert Tavily’s country name to a code) |
topic: "news" or "finance" | State the focus in your objective (for example “recent news about…” or “latest financial results for…”) |
include_answer | Search returns excerpts for your model to reason over. For grounded completions, use the Chat API |
include_raw_content | Full page contents are the Extract API |
x-api-key header rather than Authorization: Bearer, so a request that keeps the Tavily-style Bearer header returns 401.
From a SERP API
A SERP API returns a ranked list of links and snippets, but you must make subsequent fetches to extract usable information. Parallel Search combines everything into a single call. Instead of links you fetch and process, you get ranked, compressed excerpts sized for a model, so there is no fetch round and no chunking or ranking to build yourself. If a workflow still needs a specific page’s full contents, use the Extract API.- Python
- cURL
You search, then fetch and process each result in your own code:Parallel does it in one call:
From built-in model search
“Built-in model search” splits into two cases that migrate differently. Building on the API. If you call a provider’s hosted search tool in your own app (for example OpenAI’sweb_search in the Responses API), the provider runs the search inside its own walls. Migrate by registering Parallel Search as a function tool your app executes, which gives you mode control (Turbo today), the excerpts, and the provider choice.
What you parse now
Parallel returns aresults array. Each item has a url, title, publish_date, and excerpts (the compressed, relevant snippets your model reads), with a top-level warnings field worth checking on early calls:
| If your integration expects | With Parallel Search | Next step |
|---|---|---|
a relevance score to sort on | results come back already ranked | preserve the returned order; there is no per-result score |
full page text (Exa text, Tavily raw_content) | you get compressed excerpts, not full page bodies | use the Extract API for full contents |
a synthesized answer or report (Tavily include_answer, Exa summary / deep) | Search returns excerpts for your model to reason over | use the Chat API for grounded answers, or the Task API for multi-step research |
a list of people or companies (Exa category) | Search retrieves pages and excerpts across the web | use Entity Search |
images | not returned | — |
Verify your migration
Before moving production traffic, run your top queries in the Playground and start with the mapped mode. On your first calls, check the responsewarnings field for any parameters that were adjusted or ignored, and confirm Pricing and Rate Limits for your volume.