<!-- twin of https://specstream.ai/migrate/parallel -->
# Parallel Search API compatible: change the address, keep the code

Compared on Nov 10, 2026. The page: https://specstream.ai/migrate/parallel

SpecStream answers Parallel's `POST /v1/search` in Parallel's own JSON, at $0.005 a search of up to 10 results in every mode. Every line below was measured on production on November 10, 2026 with the `parallel-web` Python SDK 1.3.7.

The switch is one line: `base_url="https://api.specstream.ai/parallel"` in place of `https://api.parallel.ai`, and a SpecStream key in `x-api-key`. Your code reads `results[].url`, `title`, `publish_date` and `excerpts` as before.

SpecStream scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks. It takes up to 8,800 searches a minute on one account.

[Get an API key](https://specstream.ai/signup?src=alternatives-migrate-parallel&utm_source=alternatives-md&utm_campaign=migrate-parallel&returnTo=%2Fworkspace%2Fsearch%3Froute%3Dparallel) New accounts get $10 of credit, no card. It covers 2,000 searches.

## Parallel Search API to SpecStream, parameter by parameter and field by field

| | SpecStream | Parallel Search API |
|---|---|---|
| Address | `POST https://api.specstream.ai/parallel/v1/search` | `POST https://api.parallel.ai/v1/search` |
| The key | A SpecStream key in `x-api-key` | A Parallel key in `x-api-key` |
| `mode` | `turbo` and `fast` return each result's search excerpt; `basic` and `advanced`, the default, read each page and return up to about 3,500 characters of it. Every mode costs $0.005 | `turbo` and `fast` cost $1 per 1,000 requests; `basic` and `advanced`, the default, $5 per 1,000 |
| `max_results` | In `advanced_settings`, 10 when you send none, up to 100 | In `advanced_settings`, defaults to 10. Public modes cap results at 20 |
| `search_queries` | One or more queries, searched as one search for any of them | One or more keyword queries, required |
| Filters and excerpts | `source_policy` `include_domains`, `exclude_domains` and `after_date`, `excerpt_settings.max_chars_per_result`, `max_chars_total` and `session_id` | The same `source_policy`, excerpt settings, `max_chars_total` and `session_id`. Excerpt length does not change the price |
| The reply | `search_id`, `session_id` and `results[]` with `url`, `title`, `publish_date` when the page has a date, and `excerpts`. Not returned: `warnings` and `usage` | `search_id`, `results[]` with `url`, `title`, `publish_date` and `excerpts`, `warnings`, `usage` and `session_id` |
| Errors | Parallel's `{"type": "error", "error": {...}}`: `422` for a mode or a field Parallel does not take, `401` with no key, `402` for an empty balance. A busy call answers `429` with `Retry-After` and charges nothing | `402` for insufficient credit, `422` when validation fails, `429` when rate limited |
| Price per 1,000 searches | $5 for up to 10 results in every mode, page text included. 20 results cost $0.011 a call | $1 to $5 per 1,000 requests with 10 results included, and $1 per 1,000 additional results |
| Calls a minute | Up to 8,800 searches a minute on one account | 600 a minute on `/v1/search` |
| Free to start | $10 of credit, no card, which covers 2,000 searches | $5 free monthly with a card on file, plus up to $80 at signup |

## The Parallel Search API reference, on SpecStream

### The call, before and after

```
# Before
curl -X POST https://api.parallel.ai/v1/search \
  -H "x-api-key: $PARALLEL_API_KEY" -H "Content-Type: application/json" \
  -d '{"search_queries": ["Mistral AI founders"], "mode": "fast"}'

# After
curl -X POST https://api.specstream.ai/parallel/v1/search \
  -H "x-api-key: $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
  -d '{"search_queries": ["Mistral AI founders"], "mode": "fast"}'
```

In the `parallel-web` Python SDK the change is the client line. The SDK also reads `PARALLEL_BASE_URL` from the environment.

```
# Before
client = Parallel(api_key=PARALLEL_API_KEY)

# After
client = Parallel(api_key=SPECSTREAM_API_KEY, base_url="https://api.specstream.ai/parallel")
```

Every parameter and field on this page is in the [pass table](https://specstream.ai/specstream/dialects/parallel.md), measured on production on November 10, 2026.

### Apps and SDKs that take the address as a setting

Each line was run on production on November 10, 2026 through that client's own request and reply code. Put your SpecStream key wherever the client takes its key.

LiteLLM 1.108.4: set `PARALLEL_AI_API_BASE` to `https://api.specstream.ai/parallel` and put your SpecStream key in `PARALLEL_AI_API_KEY`. The call stays `litellm.search(search_provider="parallel_ai")`.

LangChain, `langchain-parallel` 0.5.0: pass `base_url="https://api.specstream.ai/parallel"` to `ParallelWebSearchTool`, or set `PARALLEL_BASE_URL`.

OpenClaw: set `plugins.entries.parallel.config.webSearch.baseUrl` to `https://api.specstream.ai/parallel`. The plugin adds `/v1/search` itself.

Cherry Studio: in the Parallel provider, set API Host to `https://api.specstream.ai/parallel`.

### Every parameter the route uses

Used in the search: `search_queries` (one or more), `mode` (`turbo`, `fast`, `basic` or `advanced`), `advanced_settings.max_results`, and `advanced_settings.source_policy` with `include_domains`, `exclude_domains` and `after_date` as YYYY-MM-DD.

Used to shape the reply: `advanced_settings.excerpt_settings.max_chars_per_result`, `max_chars_total` (shared out evenly so every result keeps some text) and `session_id`, which comes back as sent.

Refused with Parallel's `422` body: a `mode` outside the four, and a field Parallel does not take, at the top of the body or in `advanced_settings`. A call with no key gets `401`.

### Every field that comes back

The reply has `search_id`, `results` and `session_id`. Each result has `url`, `title`, `publish_date` when the page has a date, and `excerpts`, a list with the result's text. The route does not return `warnings` or `usage`.

One field is added: `specstream`, with what the Search API returns beyond Parallel's fields, including the call's `price_usd`. A parser that reads Parallel's fields never sees it.

### $5 per 1,000 searches, in every mode

A call of up to 10 results costs $0.005 in every mode, and `basic` and `advanced` include the text of each page. Each started block of 10 more results adds $0.006: 20 results cost $0.011. A call stopped by a `429` charges nothing, and credit you buy never expires.

### The most accurate web search API, in about one second

On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=migrate-parallel) page.

A call in `fast` or `turbo` mode runs the fast search. Measured on production on November 9, 2026, its median was 0.82 s at 1 search a second and 1.07 s at 20 a second, the 95th percentile stayed between 1.09 and 1.73 s, and it answered 718 of 720. It takes up to 8,800 searches a minute on one account. A call in `basic` or `advanced` mode runs the default search, which reads the pages, at the same price.

### You decide what is kept, on each key

Create the key with `zero_retention` and a search made with it keeps no request text and no answer after the reply: it is not in the history, its answer is not reused for another call, and its log lines carry neither. `spend_cap_cents` is the most the key can spend.

```
curl -X POST https://api.specstream.ai/v1/account/keys \
  -H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "production", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500000, "zero_retention": true}'
```

### Search, pages and rows on one key

The same key reads up to 20 pages or documents a call with the [Extract API](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=migrate-parallel) at $0.80 per 1,000 pages, and a page with no text is not charged. [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=migrate-parallel) returns every match for a request in plain words as structured rows, at 5¢, 15¢ or $1 a row, with a source URL on every value. The most a run can cost is approved before it starts. The full comparison is on the [Parallel alternative](https://specstream.ai/alternatives/parallel?utm_source=alternatives&utm_campaign=migrate-parallel) page.

## What else Parallel Search API users price

### Exa

A search API on Exa's own index, at $7 per 1,000 requests on `auto` and $4 on `lite` for up to 10 results, with its own request and reply. SpecStream answers Exa's call as well, at `https://api.specstream.ai/exa`, for $0.005 a search.

### Tavily

A search API sold in credits at $0.008 each pay as you go: a basic search takes 1 credit and an advanced search 2. SpecStream answers Tavily's `POST /search` at `https://api.specstream.ai/tavily` for $0.005, basic or advanced.

### Brave Search API

A search API on Brave's own index at $5 per 1,000 requests, with $5 in free credits every month and 50 queries per second. SpecStream answers Brave's call at `https://api.specstream.ai/res/v1/web/search` at the same price per call and takes up to 8,800 searches a minute on one account.

## How to migrate, step by step

1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 2,000 searches.

2. Set the base address to `https://api.specstream.ai/parallel` where your code has `https://api.parallel.ai`, and send the SpecStream key in `x-api-key`. In Python:

```
import requests

BASE = "https://api.specstream.ai/parallel"  # was https://api.parallel.ai

reply = requests.post(
    f"{BASE}/v1/search",
    headers={"x-api-key": SPECSTREAM_KEY},
    json={
        "search_queries": ["Mistral AI founders"],
        "mode": "fast",
        "advanced_settings": {"max_results": 10},
    },
    timeout=30,
)
reply.raise_for_status()
for result in reply.json()["results"]:
    print(result["title"], result["url"], result["excerpts"][0][:200])
```

3. In JavaScript:

```
const res = await fetch("https://api.specstream.ai/parallel/v1/search", {
  method: "POST",
  headers: {
    "x-api-key": process.env.SPECSTREAM_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ search_queries: ["Mistral AI founders"], mode: "fast" }),
});
const data = await res.json();
for (const result of data.results) console.log(result.title, result.url);
```

4. Read `402` as an empty balance and `429` as a call to send again after `Retry-After`; neither is charged.

5. When your product needs every match in place of a results page, write the request in plain words. SpecStream reads it back as the conditions every row must meet and the facts to bring back, quotes the most it can cost, and delivers the rows after you approve.

## Frequently asked questions

### Is there a Parallel Search API compatible API?

Yes. SpecStream answers Parallel's `POST /v1/search` at `https://api.specstream.ai/parallel` in Parallel's JSON, checked on production on November 10, 2026, for $0.005 a search of up to 10 results.

### How do I migrate from the Parallel Search API?

Change one line: set `base_url` to `https://api.specstream.ai/parallel` (or `PARALLEL_BASE_URL`) and use a SpecStream key. The request body and the code that reads `results[]` stay as they are.

### How much does the Parallel Search API cost?

Parallel charges $1 per 1,000 requests in `turbo` and `fast` and $5 per 1,000 in `basic` and `advanced`, its default, plus $1 per 1,000 results beyond 10. SpecStream charges $5 per 1,000 searches of up to 10 results in every mode.

### Which apps and SDKs take the SpecStream address for Parallel Search API?

LiteLLM 1.108.4: set `PARALLEL_AI_API_BASE` to `https://api.specstream.ai/parallel` and put your SpecStream key in `PARALLEL_AI_API_KEY`. The call stays `litellm.search(search_provider="parallel_ai")`. LangChain, `langchain-parallel` 0.5.0: pass `base_url="https://api.specstream.ai/parallel"` to `ParallelWebSearchTool`, or set `PARALLEL_BASE_URL`. OpenClaw: set `plugins.entries.parallel.config.webSearch.baseUrl` to `https://api.specstream.ai/parallel`. The plugin adds `/v1/search` itself. Cherry Studio: in the Parallel provider, set API Host to `https://api.specstream.ai/parallel`.

### Does the parallel-web SDK work with SpecStream?

Yes. The `parallel-web` Python SDK 1.3.7 ran every check in the pass table with `base_url="https://api.specstream.ai/parallel"` and a SpecStream key, and `client.search` reads the reply into its own objects.

### Which Parallel fields does SpecStream not return?

Two: `warnings` and `usage`. Each result has `url`, `title` and `excerpts`, and `publish_date` when the page has a date; the reply has `search_id` and `session_id`.

### How many searches a minute can I send?

Up to 8,800 a minute on one account. A call over that answers `429` with a `Retry-After` header and charges nothing.

## Sources

SpecStream wrote this page. Each Parallel figure comes from Parallel's own pages, and each other provider's figure from that company's own page. The route's behavior is taken from its code and from the pass table measured on production on November 10, 2026.

- [Parallel search reference](https://docs.parallel.ai/api-reference/search/search.md), read Nov 10, 2026
- [Parallel search modes](https://docs.parallel.ai/search/modes.md), read Nov 10, 2026
- [Parallel advanced search settings](https://docs.parallel.ai/search/advanced-search-settings.md), read Nov 10, 2026
- [Parallel API pricing](https://docs.parallel.ai/getting-started/pricing.md), read Nov 10, 2026
- [Parallel rate limits](https://docs.parallel.ai/getting-started/rate-limits.md), read Nov 10, 2026
- [Parallel warnings and errors](https://docs.parallel.ai/resources/warnings-and-errors.md), read Nov 10, 2026
- [Parallel pricing](https://parallel.ai/pricing), read Nov 10, 2026
- [SpecStream pass table, Parallel route](https://specstream.ai/specstream/dialects/parallel.md), read Nov 10, 2026
- [Exa pricing](https://exa.ai/docs/admin/pricing.md), read Nov 9, 2026
- [Tavily API credits](https://docs.tavily.com/documentation/api-credits.md), read Nov 9, 2026
- [Brave Search API](https://brave.com/search/api/), read Nov 9, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream pricing](https://specstream.ai/pricing), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
