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

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

Jina Reader bills tokens by the length of each page, and its Reader page prints no dollar rate. SpecStream answers the same `POST` to r.jina.ai in Jina's own text and JSON for $0.0008 a page.

The switch is one line: `https://api.specstream.ai/jina` in place of `https://r.jina.ai/`, and a SpecStream key as the Bearer token. The page goes in the body as `url`, as Jina's POST form sends it.

The Extract API behind this route scores 0.908 F1 on WCXB. A page read costs $0.80 per 1,000, and a page that gives no text is not charged.

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

## Jina Reader to SpecStream, call by call and field by field

| | SpecStream | Jina Reader |
|---|---|---|
| Address | `POST https://api.specstream.ai/jina` with `url` in a form or JSON body | `POST https://r.jina.ai/` with `url` in the body, or the page address after `https://r.jina.ai/` |
| The key | A SpecStream key as `Authorization: Bearer` | A Jina key as `Authorization: Bearer`. It raises the rate limit and charges tokens by content length |
| Reply forms | Text with `Title:`, `URL Source:`, `Published Time:` and `Markdown Content:`. `X-Return-Format: text` gives the text alone. `Accept: application/json` gives `code`, `status` and `data` | JSON with the URL, title, content and timestamp when the page has one |
| Fields in `data` | `title`, `url`, `content` (`text` with `X-Return-Format: text`) and `publishedTime`. Not returned: `description`, `links`, `images`, `warning`, `metadata` and `usage.tokens` | The page content, and its links and images when asked. The token count of each response |
| Errors | Jina's own body: `401` AuthenticationFailedError, `400` ParamValidationError, `422` SubmittedDataMalformedError for a page with no text. A busy call gets `429` RateLimitTriggeredError with `Retry-After` and is not charged | Tokens are not deducted for failed requests |
| Price | $0.0008 a page, $0.80 per 1,000 pages. A page that gives no text is not charged | Tokens by content length, topped up as you go. The Reader page prints no dollar rate |
| Free to start | $10 of credit, no card, which covers 12,500 page reads. Credit never expires | 10M free tokens on every new API key |

## The Jina Reader call, on SpecStream

### The call, before and after

```
# Before
curl -X POST https://r.jina.ai/ -H "Authorization: Bearer $JINA_API_KEY" -d "url=$URL"

# After
curl -X POST https://api.specstream.ai/jina -H "Authorization: Bearer $SPECSTREAM_API_KEY" -d "url=$URL"
```

The body, the headers and the parser stay. The reply starts with `Title:` and `URL Source:`, then `Markdown Content:`, as Jina's does. The address form `https://r.jina.ai/<url>` is not served: send the page as `url` in the body.

### What the route reads, and what it refuses

Read and applied: `url` in a form body or a JSON body, `Accept: application/json` for the JSON reply, and `X-Return-Format` set to `markdown` or `text`. With `text` the JSON reply carries `data.text` in place of `data.content`.

Refused in Jina's own form: no `Authorization` header gets `401` AuthenticationFailedError, no `url` gets `400` ParamValidationError, and a host that does not resolve gets `422` SubmittedDataMalformedError. Every call was measured on production on Nov 10, 2026, and the full [pass table](https://specstream.ai/specstream/dialects/jina.md) lists each parameter and its result.

### Every field that comes back

The JSON reply has `code` 200, `status` 20000 and `data` with `title`, `url`, `content` and `publishedTime` when the page has a date. The route does not return `data.description`, `links`, `images`, `warning`, `metadata` or `usage.tokens`.

One field is added: `specstream`, with the call's `price_usd` and request ID. A parser that reads Jina's fields never sees it.

### $0.80 per 1,000 pages, in dollars

Jina charges tokens by the length of each page, so a long page costs more than a short one. On SpecStream every page read costs $0.0008, whatever its length, and a page that gives no text is not charged. A busy call gets `429` with `Retry-After` and charges nothing, and credit you buy never expires.

### 0.908 F1 on WCXB, and the search scores on the same key

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

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

Create the key with `zero_retention` and a page read made with it keeps no request text and no answer after the reply. `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 searches the live web with the [Search API](https://specstream.ai/search-api?utm_source=alternatives&utm_campaign=migrate-jina) at $5 per 1,000 searches of up to 10 results. [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=migrate-jina) 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 Reader alternative](https://specstream.ai/alternatives/jina-reader?utm_source=alternatives&utm_campaign=migrate-jina) page.

## What else Jina Reader users price

### Firecrawl

A scrape API at 1 credit per page, with 1,000 free credits a month and the Hobby plan at $19 a month, in its own request and reply. SpecStream reads a page for $0.0008 and answers the Jina call your code already sends.

### Exa Contents

Page text from Exa at $1 per 1,000 pages for each content type you ask for, in Exa's request and reply. SpecStream reads 1,000 pages for $0.80 and keeps Jina's reply shape.

### Tavily Extract

Every 5 successful URL extractions cost 1 credit, at $0.008 a credit on pay as you go, in Tavily's own reply. SpecStream charges $0.80 per 1,000 pages with no credits and no monthly reset.

## 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.

2. Set the address to `https://api.specstream.ai/jina` where your code has `https://r.jina.ai/`, send the page as `url` in the body, and send the SpecStream key as the Bearer token. In Python:

```
import requests

reply = requests.post(
    "https://api.specstream.ai/jina",  # was https://r.jina.ai/
    headers={"Authorization": f"Bearer {SPECSTREAM_KEY}", "Accept": "application/json"},
    json={"url": "https://en.wikipedia.org/wiki/Web_scraping"},
    timeout=60,
)
reply.raise_for_status()
data = reply.json()["data"]
print(data["title"], data["url"])
print(data["content"][:500])
```

3. In JavaScript:

```
const res = await fetch("https://api.specstream.ai/jina", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SPECSTREAM_KEY}`,
    Accept: "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ url: "https://en.wikipedia.org/wiki/Web_scraping" }),
});
const { data } = await res.json();
console.log(data.title, data.content.slice(0, 500));
```

4. Read `429` as a call to send again after `Retry-After`, and `422` as a page that gave no text. Neither is charged.

## Frequently asked questions

### Is there a Jina Reader compatible API?

Yes. SpecStream answers Jina Reader's `POST` at `https://api.specstream.ai/jina` in Jina's own text and JSON forms, at $0.80 per 1,000 pages, as measured on production on Nov 10, 2026. The request and the parser stay; the address and the key change.

### How do I migrate from Jina Reader?

Change one line: `https://r.jina.ai/` becomes `https://api.specstream.ai/jina`, with a SpecStream key as the Bearer token. Send the page as `url` in a form or JSON body; the `r.jina.ai/<url>` address form is not served.

### How much does Jina Reader cost?

Jina bills tokens by content length, and every new key comes with 10M free tokens; its Reader page prints no dollar rate. SpecStream charges $0.0008 a page, $0.80 per 1,000, and a new account gets $10 of credit with no card.

### Is there a Jina Reader SDK whose address I can change?

No: as of Nov 10, 2026 Jina publishes no Reader client library, and its docs show HTTP calls. Change the address in your own `requests`, `fetch` or curl call.

### Which Jina Reader fields does SpecStream not return?

Six in `data`: `description`, `links`, `images`, `warning`, `metadata` and `usage.tokens`. It returns `title`, `url`, `content` or `text`, and `publishedTime` when the page has a date.

### What happens when a page cannot be read?

The route answers `422` SubmittedDataMalformedError in Jina's body, and the call is not charged. A busy call gets `429` with `Retry-After`, also not charged.

## 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 comes from its code and the pass table measured on production.

- [Jina Reader](https://jina.ai/reader), read Nov 10, 2026
- [Jina docs for agents](https://docs.jina.ai/llms.txt), read Nov 10, 2026
- [SpecStream Jina Reader pass table](https://specstream.ai/specstream/dialects/jina.md), read Nov 10, 2026
- [Firecrawl pricing](https://www.firecrawl.dev/pricing), read Nov 10, 2026
- [Exa pricing](https://exa.ai/docs/admin/pricing.md), read Nov 10, 2026
- [Tavily API credits](https://docs.tavily.com/documentation/api-credits.md), read Nov 10, 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
