Saffron Browser developer surface
A high-concurrency sovereign headless browser, 100% wire-compatible with the Steel.dev API. Zero cloud markup, live SSE screencast, and a four-vector proxy mesh, with the same SDK you already use.
01Start in 45 seconds
Grab a free key from the homepage (1,000 requests, no card), then run your first scrape. Pick your stack:
$ curl https://api.saffronbrowser.com/v1/scrape \ -H "Authorization: Bearer sb_live_your_key" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com/pricing", "format": "markdown", "proxy": { "tier": "v6spray" } }'
# pip install steel-sdk from steel import Steel client = Steel( steel_api_key="sb_live_your_key", base_url="https://api.saffronbrowser.com/v1", ) res = client.scrape( url="https://example.com/pricing", format="markdown", proxy={"tier": "v6spray"}, ) print(res.markdown) # clean, LLM-ready
// npm i steel-sdk import { Steel } from "steel-sdk"; const client = new Steel({ apiKey: process.env.SAFFRON_KEY, baseUrl: "https://api.saffronbrowser.com/v1", }); const res = await client.scrape({ url: "https://example.com/pricing", format: "markdown", proxy: { tier: "v6spray" }, }); console.log(res.markdown);
// ~/.cursor/mcp.json { "mcpServers": { "saffron-browser": { "command": "npx", "args": ["-y", "@saffron/browser-mcp"], "env": { "SAFFRON_BROWSER_KEY": "sb_live_your_key" } } } }
// ~/Library/Application Support/Claude/claude_desktop_config.json { "mcpServers": { "saffron-browser": { "command": "npx", "args": ["-y", "@saffron/browser-mcp"], "env": { "SAFFRON_BROWSER_KEY": "sb_live_your_key" } } } }
02Switch from Steel in one line
Saffron speaks a 100% Steel.dev-compatible superset. Migrating existing code means changing exactly one parameter: base_url. Everything else (sessions, scrape, screenshot, CDP) is wire-identical.
Existing code immediately inherits Saffron's $0/GB egress, zero-charge block guarantee, and transatlantic residential mesh.
03Model Context Protocol (MCP)
Wire Saffron directly into an agent runtime. The MCP server exposes scrape, screenshot, and session tools to Claude Desktop and Cursor. Config lives in the Cursor MCP and Claude Desktop tabs of the quickstart above: one block, one key.
- Package
@saffron/browser-mcp, run withnpx -y @saffron/browser-mcp. - Auth via
SAFFRON_BROWSER_KEY=sb_live_…in the server env. - Restart the host app; the agent gets a browser without leaving its runtime.
04Authentication
Pass your Saffron key on every request. Three header names are accepted for drop-in compatibility:
Authorization: Bearer sb_live_your_keyx-steel-key: sb_live_your_keyx-grid-key: sb_live_your_keyKeys are prefixed sb_live_. Treat them as secrets: set them in env vars, never commit them. A blocked request (403/429) is billed $0.00.
05API reference
One-shot stateless scrape. Converts a target page into clean, LLM-ready markdown, through Cloudflare and bot shields, on the proxy tier you choose.
Request
{ "url": "https://example.com/pricing", "format": "markdown", "proxy": { "tier": "v6spray" // direct · v6spray · tor · residential } }
{ "ok": true, "url": "https://example.com/pricing", "title": "Example: Pricing", "markdown": "# Pricing\n\n- Starter: $10\n- Enterprise: Custom\n", "egressIp": "2a01:4f8:c17:…", "costCredits": 1 }
Stateless full-page or viewport screenshot of any URL, returned as a signed asset link or base64. Same proxy tiers as scrape.
Launch an isolated, stateful browser session and receive a CDP websocket endpoint to drive it with Playwright or Puppeteer.
Streams live JPEG frames over Server-Sent Events straight from Chrome DevTools Protocol at up to 10 FPS. Watch the agent browse in real time.
Multi-vector proxied HTTP fetch. Route a raw request through direct bare-metal, IPv6 spray ($0/GB), Tor, or US-East residential egress.