<!-- twin of https://specstream.ai/migrate/jina-search -->
# Jina Search (s.jina.ai) compatible: change the address

Compared on Nov 10, 2026. The page: https://specstream.ai/migrate/jina-search

SpecStream answers the `s.jina.ai` search in Jina's own JSON and text forms, at $0.005 a search of up to 10 results with each page's text. Every line below was measured on production on November 10, 2026.

The switch is one address: `https://api.specstream.ai/jina-search/` in place of `https://s.jina.ai/`, and a SpecStream key as the Bearer token. Your code reads `data[].title`, `url`, `description` and `content` 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. A search costs one price, whatever the length of the pages.

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

## Jina Search to SpecStream, parameter by parameter and field by field

| | SpecStream | Jina Search (s.jina.ai) |
|---|---|---|
| Address | `https://api.specstream.ai/jina-search/` with `q`, as a `GET`, a `POST` with a JSON body, or the query as the path | `POST https://s.jina.ai/` with `q` |
| The key | A SpecStream key as `Authorization: Bearer` | A Jina key in the Authorization header |
| `count` and `num` | 0 to 20, 10 when you send none or 0. `page` moves to the next results | `num` 0 to 20, default 10, and `page` |
| Sites | `site` and the `X-Site` header keep the results on one site | The `X-Site` header, for searches in one domain |
| Page text | Each result's page is read and its text returned in `content` by default, at no extra cost. `X-Respond-With: no-content` returns the results alone | Returns the top five results with their URLs and contents in LLM friendly text |
| The reply | With `Accept: application/json`: `code`, `status` and `data[]` with `title`, `url`, `description` and `content`. Any other `Accept` gets Jina's text form, `[1] Title:` and the rest. Not returned: `publishedTime`, `favicon` and token counts | `code`, `status` and `data[]` of page objects with `title`, `description`, `url`, `content` and `publishedTime` |
| `type` | Web results. `type` `images` or `news` gets `400` with Jina's error body | `web`, `images` or `news` |
| Price | $0.005 a search of up to 10 results, page text included, whatever the length of the pages | Priced by tokens processed. Every request costs at least 10,000 tokens |
| Free to start | $10 of credit, no card, which covers 2,000 searches | 10M free tokens with every new API key |

## The Jina Search reference, on SpecStream

### The call, before and after

```
# Before
curl -G "https://s.jina.ai/" --data-urlencode "q=Who founded Mistral AI and when?" \
  -H "Authorization: Bearer $JINA_API_KEY" -H "Accept: application/json"

# After
curl -G "https://api.specstream.ai/jina-search/" --data-urlencode "q=Who founded Mistral AI and when?" \
  -H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Accept: application/json"
```

LangChain's `JinaSearchAPIWrapper` (langchain-community 0.4.2) takes the address in `base_url`, with the SpecStream key in `JINA_API_KEY`:

```
# Before
search = JinaSearchAPIWrapper()

# After
search = JinaSearchAPIWrapper(base_url="https://api.specstream.ai/jina-search/")
```

Every parameter and field on this page is in the [pass table](https://specstream.ai/specstream/dialects/jina-search.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.

LangChain, `langchain-community` 0.4.2: set `base_url` on `JinaSearch` to `https://api.specstream.ai/jina-search?q=`. The wrapper adds the query straight after the address, so the value ends in `?q=`.

agno: pass `search_url="https://api.specstream.ai/jina-search/"` to `JinaReaderTools`, with your SpecStream key in `JINA_API_KEY`.

Cherry Studio: in the Jina provider, set the API host for search to `https://api.specstream.ai/jina-search`.

### Every parameter the route uses

Used in the search: `q` in the address or a JSON body, or the query as the path; `count` or `num` (0 to 20); `page`; `site` and the `X-Site` header. A query that holds a `/` goes in `q`.

Used to shape the reply: `X-Respond-With: no-content` returns the results without page text, and the `Accept` header picks the form, JSON with `application/json` and Jina's text form otherwise.

Refused with Jina's error body `{"data": null, "code", "name", "status", "message", "readableMessage"}`: a `type` other than `web` gets `400`.

### Every field that comes back

The JSON reply has `code` 200, `status` 20000 and `data`. Each item has `title`, `url`, `description` and `content`, the text of its page. The route does not return `publishedTime`, `date`, `favicon` or `usage.tokens`.

The text form has, for each result, `[i] Title:`, `[i] URL Source:` and `[i] Description:` lines, then the page's text after an empty line, as `s.jina.ai` writes it.

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

### $0.005 a search, whatever the length of the pages

Jina prices a search by the tokens it processes, from 10,000 tokens a request. On SpecStream a call of up to 10 results costs $0.005 with the text of every page, and 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-jina-search) page.

A call with `X-Respond-With: no-content` 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 that returns page text, the default, 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-jina-search) 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-jina-search) 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 [Jina Search alternative](https://specstream.ai/alternatives/jina-search?utm_source=alternatives&utm_campaign=migrate-jina-search) page.

## What else Jina Search 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.

### Serper

Google results as JSON, sold in credit packs from $1.00 per 1,000 for 50,000 credits, and the credits are valid for 6 months. Credit you buy on SpecStream never expires, and Serper's own call is answered at `https://api.specstream.ai/serper`.

## 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 address to `https://api.specstream.ai/jina-search/` where your code has `https://s.jina.ai/`, and send the SpecStream key as the Bearer token. In Python:

```
import requests

BASE = "https://api.specstream.ai/jina-search/"  # was https://s.jina.ai/

reply = requests.get(
    BASE,
    params={"q": "Who founded Mistral AI and when?", "num": 10},
    headers={"Authorization": f"Bearer {SPECSTREAM_KEY}", "Accept": "application/json"},
    timeout=60,
)
reply.raise_for_status()
for item in reply.json()["data"]:
    print(item["title"], item["url"], item["content"][:200])
```

3. In JavaScript:

```
const url = new URL("https://api.specstream.ai/jina-search/");
url.searchParams.set("q", "Who founded Mistral AI and when?");
const res = await fetch(url, {
  headers: {
    Authorization: `Bearer ${process.env.SPECSTREAM_KEY}`,
    Accept: "application/json",
    "X-Respond-With": "no-content",
  },
});
const data = await res.json();
for (const item of data.data) console.log(item.title, item.url);
```

4. Read `402` `InsufficientBalanceError` 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 Jina Search (s.jina.ai) compatible API?

Yes. SpecStream answers the `s.jina.ai` search at `https://api.specstream.ai/jina-search/` in Jina's JSON and text forms, checked on production on November 10, 2026, for $0.005 a search of up to 10 results.

### How do I migrate from Jina Search?

Change one address: `https://api.specstream.ai/jina-search/` in place of `https://s.jina.ai/`, and a SpecStream key as the Bearer token. The request and the code that reads `data[]` stay as they are.

### How much does Jina Search cost?

Jina prices search by tokens processed, from 10,000 tokens a request, and every new API key gets 10M free tokens. SpecStream charges $0.005 a search of up to 10 results with each page's text.

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

LangChain, `langchain-community` 0.4.2: set `base_url` on `JinaSearch` to `https://api.specstream.ai/jina-search?q=`. The wrapper adds the query straight after the address, so the value ends in `?q=`. agno: pass `search_url="https://api.specstream.ai/jina-search/"` to `JinaReaderTools`, with your SpecStream key in `JINA_API_KEY`. Cherry Studio: in the Jina provider, set the API host for search to `https://api.specstream.ai/jina-search`.

### Does LangChain's JinaSearchAPIWrapper work with SpecStream?

Yes. In langchain-community 0.4.2, `JinaSearchAPIWrapper(base_url="https://api.specstream.ai/jina-search/")` with the SpecStream key in `JINA_API_KEY` returned 10 results, each with content, link, snippet and title.

### Does SpecStream return page text like s.jina.ai?

Yes, by default: each of the 10 results carries its page's text in `content`, at $0.005 a call. Send `X-Respond-With: no-content` for the results alone.

### Which Jina fields does SpecStream not return?

Three: `publishedTime`, `favicon` and the token counts in `usage`. Each item has `title`, `url`, `description` and `content`.

### What happens when search is busy?

The route answers `429` `RateLimitTriggeredError` with a `Retry-After` header and charges nothing. One account can send up to 8,800 searches a minute.

## Sources

SpecStream wrote this page. Each Jina figure comes from Jina'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.

- [Jina API docs](https://docs.jina.ai/llms.txt), read Nov 10, 2026
- [Jina Reader and Search](https://jina.ai/reader), read Nov 10, 2026
- [Jina OpenAPI](https://docs.jina.ai/openapi.json), read Nov 10, 2026
- [LangChain JinaSearchAPIWrapper](https://raw.githubusercontent.com/langchain-ai/langchain-community/main/libs/community/langchain_community/utilities/jina_search.py), read Nov 10, 2026
- [SpecStream pass table, Jina Search route](https://specstream.ai/specstream/dialects/jina-search.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
- [Serper](https://serper.dev/), 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
