Skip to content

Commit 309985c

Browse files
nihalwashereclaude
andcommitted
Proxy mode rename across all docs
- stealth->premium, auto removed across all 38 .mdx files - Major rewrites: proxy-modes.mdx, choosing-a-proxy-mode.mdx, proxy-tiers.mdx, proxy-configuration.mdx - Updated openapi.json, SDK docs, self-hosted docs - proxyEscalated removed from all API reference docs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 10e16b2 commit 309985c

38 files changed

Lines changed: 240 additions & 327 deletions

api-reference/account/history.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ title: "Usage history"
33
openapi: "openapi.json GET /v1/usage/history"
44
---
55

6-
Paginated log of recent requests for the workspace. Each entry records the URL, duration, status, cache hit, proxy mode (`standard` / `stealth`), credits charged, and timestamp.
6+
Paginated log of recent requests for the workspace. Each entry records the URL, duration, status, cache hit, proxy mode (`standard` / `premium`), credits charged, and timestamp.
77

88
Use this endpoint to audit spend, find spike culprits, or build a stats dashboard. The dashboard's Activity view is a thin wrapper on top of this feed.

api-reference/read.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ See [The read primitive](/home/concepts/read-primitive) for a narrative overview
1313

1414
## Proxy mode
1515

16-
Set `proxyMode` to `"standard"` (1 credit, fast), `"stealth"` (3 credits, bypasses bot walls), or `"auto"` (default, which tries standard first and escalates to stealth on block). The response metadata tells you which mode actually ran. See [Proxy modes](/home/concepts/proxy-modes).
16+
Set `proxyMode` to `"standard"` (1 credit, fast, default) or `"premium"` (3 credits, residential proxies, bypasses bot walls). The response metadata tells you which mode ran. See [Proxy modes](/home/concepts/proxy-modes).
1717

1818
## Idempotency
1919

home/cli.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ Options:
9797
--exclude-tags <sel> CSS selectors to remove (comma-separated)
9898
--wait-for <selector> Wait for element before capturing
9999
--timeout <ms> Timeout in milliseconds (default: 30000)
100-
--proxy-mode <mode> standard, stealth, auto
100+
--proxy-mode <mode> standard, premium
101101
```
102102

103103
## Crawl a site

home/concepts/caching.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Cases where you should leave cache on (most of the time):
7878

7979
## Cost savings
8080

81-
A page that costs 1 credit in `standard` or 3 credits in `stealth` costs 0 credits on a cache hit. If you're doing development work against the same set of URLs all day, your first loop is the expensive one; everything after that is free until the TTL expires.
81+
A page that costs 1 credit in `standard` or 3 credits in `premium` costs 0 credits on a cache hit. If you're doing development work against the same set of URLs all day, your first loop is the expensive one; everything after that is free until the TTL expires.
8282

8383
## Next
8484

home/concepts/credits-and-billing.mdx

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ Reader is metered in **credits**. Every successful scrape consumes credits accor
1010
| Operation | Cost |
1111
| --- | --- |
1212
| Scrape in `standard` mode | **1 credit** per page |
13-
| Scrape in `stealth` mode | **3 credits** per page |
14-
| Scrape in `auto` mode | 1 credit if resolved to standard, 3 credits if escalated to stealth |
13+
| Scrape in `premium` mode | **3 credits** per page |
1514
| Cache hit | **0 credits** (any mode) |
1615
| Failed scrape (timeout, upstream error, block) | **0 credits** |
1716
| Crawl | 1 credit per page discovered and scraped |
@@ -53,7 +52,7 @@ if (credits.balance < 100) {
5352

5453
Reader charges credits **after** a scrape succeeds, not before. The pre-flight check only verifies you have enough to *start* the request; the actual deduction happens once the content is in your response.
5554

56-
For `auto` mode, the pre-flight check is optimistic: it assumes 1 credit per page (the `standard` price). If `auto` escalates and the real cost ends up at 3x, your balance can briefly dip below zero for that request. Your next request gets a `402 insufficient_credits` error until your credits reset.
55+
The pre-flight check verifies you have the correct number of credits for the mode you selected: 1 credit for `standard`, 3 credits for `premium`.
5756

5857
## Insufficient credits
5958

@@ -79,12 +78,7 @@ Before running a large batch, estimate the bill:
7978
cost = (number of URLs) × (credits per page for the mode you expect)
8079
```
8180

82-
For `auto` mode, estimate the mix based on what you know:
83-
84-
- 90%+ of typical web pages resolve to `standard` (1 credit)
85-
- Sites known to bot-wall hard (Amazon, LinkedIn, booking sites) will resolve to `stealth` (3 credits)
86-
87-
When in doubt, run a pilot of 50 URLs first and check `metadata.proxyMode` across the results. You'll have a real escalation rate instead of a guess. See [Cost estimation](/home/guides/production/cost-estimation).
81+
Know your target sites before running large batches. Standard works for 90%+ of the web. Sites known to require bot bypass (Amazon, LinkedIn, booking sites) need `premium`. See [Cost estimation](/home/guides/production/cost-estimation).
8882

8983
## Browser session costs
9084

home/concepts/errors.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ See the [Credit exhaustion guide](/home/guides/production/credit-exhaustion).
131131

132132
**HTTP:** 504
133133

134-
**Cause:** The scrape exceeded the per-URL deadline (default 30s). This includes both the datacenter and residential proxy attempts.
134+
**Cause:** The scrape exceeded the per-URL deadline (default 30s). This includes any proxy tier attempts.
135135

136136
**What to do:** Retry, or try a different proxy mode if the site is consistently slow.
137137

home/concepts/formats-and-extraction.mdx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ Every scrape result includes metadata about the page and the request:
109109
"duration": 487,
110110
"cached": false,
111111
"proxyMode": "standard",
112-
"proxyEscalated": false,
113112
"scrapedAt": "2026-04-04T12:00:00Z"
114113
}
115114
}
@@ -119,7 +118,7 @@ Every scrape result includes metadata about the page and the request:
119118
- `statusCode`: what the target site returned
120119
- `duration`: how long Reader spent on the request, in ms
121120
- `cached`: whether the content was served from Reader's cache
122-
- `proxyMode`, `proxyEscalated`: see [Proxy modes](/home/concepts/proxy-modes)
121+
- `proxyMode`: which mode ran (`"standard"` or `"premium"`). See [Proxy modes](/home/concepts/proxy-modes)
123122
- `scrapedAt`: when the content was captured
124123

125124
## Next

home/concepts/proxy-modes.mdx

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,60 @@
11
---
22
title: "Proxy modes"
3-
description: "Three ways Reader can fetch a page: standard, stealth, and auto. Pick one, or let Reader decide."
3+
description: "Two ways Reader can fetch a page: standard and premium. Pick one, or use the default."
44
---
55

66
Not every page is equally easy to fetch. A static blog post loads in a hundred milliseconds. A product detail page behind aggressive bot protection might refuse you three times before finally serving content. Reader handles both. You pick how.
77

8-
## The three modes
8+
## The two modes
99

1010
| Mode | What it's for | Cost | Typical latency |
1111
| --- | --- | --- | --- |
12-
| `standard` | Fast and affordable. Works for the vast majority of the web: blogs, docs, news, APIs, marketing pages. | **1 credit** per page | Fast |
13-
| `stealth` | Bypasses aggressive bot walls. Use when `standard` gets blocked. | **3 credits** per page | Slower |
14-
| `auto` (default) | Reader picks. Starts with `standard` and escalates to `stealth` only if a block is detected. | Billed per mode actually used | Varies |
12+
| `standard` (default) | Fast and affordable. Works for the vast majority of the web: blogs, docs, news, APIs, marketing pages. | **1 credit** per page | Fast |
13+
| `premium` | Bypasses aggressive bot walls. Use when `standard` gets blocked. | **3 credits** per page | Slower |
1514

1615
You set the mode with `proxyMode` on the request:
1716

1817
```json
1918
{
2019
"url": "https://shop.example.com/item/42",
21-
"proxyMode": "auto"
20+
"proxyMode": "premium"
2221
}
2322
```
2423

25-
Omit `proxyMode` entirely and Reader defaults to `auto`. This is the recommended default for 95% of use cases.
24+
Omit `proxyMode` entirely and Reader defaults to `standard`.
2625

27-
## How `auto` works
26+
## When to use `premium`
2827

29-
When you request `auto`, Reader tries `standard` first. If the page comes back clean, you're billed 1 credit and done. If the response looks like a block (a CAPTCHA, a 403 with a challenge page, a CDN bot wall), Reader retries with `stealth` automatically and you're billed 3 credits for that page.
28+
Force `proxyMode: "premium"` when the target site actively blocks datacenter proxies. Amazon product pages, LinkedIn profiles, booking sites, many e-commerce platforms, and most large social networks require premium residential proxies to get clean content.
3029

31-
You can see what actually happened in the response:
32-
33-
```json
34-
{
35-
"data": {
36-
"url": "https://shop.example.com/item/42",
37-
"markdown": "...",
38-
"metadata": {
39-
"proxyMode": "stealth",
40-
"proxyEscalated": true,
41-
"duration": 2341
42-
}
43-
}
44-
}
30+
```ts
31+
await reader.read({
32+
url: "https://www.amazon.com/dp/B08N5WRWNW",
33+
proxyMode: "premium",
34+
});
4535
```
4636

47-
- `metadata.proxyMode` is **always the mode that actually ran**: `"standard"` or `"stealth"`, never `"auto"`.
48-
- `metadata.proxyEscalated` is `true` only when `auto` escalated from standard to stealth. For explicit mode requests it's always `false`.
49-
50-
Track `proxyEscalated` in your logs if you want to understand which sites are bot-walled; they'll flag themselves.
37+
## When to use `standard`
5138

52-
## When to override `auto`
39+
`standard` is the default and works for the vast majority of the web. Use it explicitly when you want to guarantee cost at exactly 1 credit per page, or when you want a clear error signal if a site blocks you (rather than silently paying more).
5340

54-
Most callers never should. But there are two cases where it helps:
55-
56-
**Force `stealth` when you already know the site is hostile.** Amazon product pages, LinkedIn profiles, booking sites, many e-commerce platforms, most "big social" networks: `auto` will eventually land on `stealth` for these anyway, but forcing it skips the wasted `standard` attempt and gets you clean data on the first try.
57-
58-
**Force `standard` when you want to guarantee the cheaper tier.** If you're running a 100k-URL batch against a known-friendly site (your own blog, a partner's docs, a public API) and you want to cap spend at exactly 1 credit per page, set `proxyMode: "standard"` explicitly. You'll get an error response instead of a `stealth` escalation if anything does get blocked, and you can decide what to do case by case.
59-
60-
For a deeper decision guide, see [Choosing a proxy mode](/home/guides/advanced/choosing-a-proxy-mode).
41+
```ts
42+
await reader.read({
43+
url: "https://docs.example.com/api/v1/reference",
44+
proxyMode: "standard",
45+
});
46+
```
6147

6248
## Pre-flight credit checks
6349

6450
Reader checks your balance before the scrape runs:
6551

66-
- **Explicit `stealth`**: rejected upfront if your balance is below 3 credits per page.
67-
- **`standard` or `auto`**: rejected upfront if your balance is below 1 credit per page (the optimistic cost).
68-
69-
If `auto` escalates mid-request and the true cost comes out to 3x what the pre-flight estimated, the charge still goes through, and your balance can briefly go negative on the last request of a burst. Your next request gets a `402 insufficient_credits` error until you top up or your credits reset. This matches how most metered billing systems work.
52+
- **`premium`**: rejected upfront if your balance is below 3 credits per page.
53+
- **`standard`**: rejected upfront if your balance is below 1 credit per page.
7054

7155
## Cache hits are free
7256

73-
A scrape served from cache is **0 credits regardless of mode**. If the cached version was captured with `standard` and you now ask for it with `stealth`, Reader still serves the cached copy and bills you nothing. The mode you requested only matters when Reader has to actually fetch the page.
57+
A scrape served from cache is **0 credits regardless of mode**. If the cached version was captured with `standard` and you now ask for it with `premium`, Reader still serves the cached copy and bills you nothing. The mode you requested only matters when Reader has to actually fetch the page.
7458

7559
See [Caching](/home/concepts/caching) for how keys and TTLs work.
7660

home/concepts/read-primitive.mdx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ Response (200):
4141
"duration": 487,
4242
"cached": false,
4343
"proxyMode": "standard",
44-
"proxyEscalated": false,
4544
"scrapedAt": "2026-04-04T12:00:00Z"
4645
}
4746
}
@@ -89,7 +88,7 @@ Use the `id` to poll `GET /v1/jobs/{id}`, stream progress with SSE, or subscribe
8988
You tell Reader **what** to fetch. Reader decides **how**:
9089

9190
- How to render the page (full browser with JavaScript execution and stealth evasion).
92-
- Whether to escalate the proxy from datacenter to residential when a block is detected (see [Proxy modes](/home/concepts/proxy-modes)).
91+
- Which proxy mode to use based on your `proxyMode` setting (see [Proxy modes](/home/concepts/proxy-modes)).
9392
- Whether to serve from cache.
9493
- How to parallelize a batch.
9594

@@ -122,5 +121,5 @@ See [Errors](/home/concepts/errors) for the full code catalog.
122121
## Next
123122

124123
- [Scrape vs crawl](/home/concepts/scrape-vs-crawl): when to pick which mode
125-
- [Proxy modes](/home/concepts/proxy-modes): `standard`, `stealth`, and `auto`
124+
- [Proxy modes](/home/concepts/proxy-modes): `standard` and `premium`
126125
- [Async jobs](/home/concepts/async-jobs): poll, stream, or webhook-notify

home/concepts/scrape-vs-crawl.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,4 @@ See [Browser Sessions](/home/concepts/browser-sessions) for details.
105105

106106
- [Browser sessions](/home/concepts/browser-sessions): full browser automation
107107
- [Async jobs](/home/concepts/async-jobs): how to watch a batch or crawl finish
108-
- [Choosing a proxy mode](/home/guides/advanced/choosing-a-proxy-mode): when to force stealth
108+
- [Choosing a proxy mode](/home/guides/advanced/choosing-a-proxy-mode): when to use premium

0 commit comments

Comments
 (0)