Smart routing for browser agents

Browser agents, routed to win.

One request. Smart routing picks the runner most likely to succeed on your domain — and races fallbacks the moment anything blocks.

$10 trial credits · pay per run · no seats

The network

Works with 250+ runner combinations.

50+ single runners — hosted agents, browser infrastructure providers, and open-source frameworks — exposed as 250+ routable combinations behind one API.

Quickstart

One request. Structured result.

Set BANANA_PEEL_API_KEY and call POST /api/v1/responses with routing: smart.

quickstartbash
$ curl -s https://bananapeel.com/api/v1/responses \
    -H "Authorization: Bearer $BANANA_PEEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "banana-peel",
      "input": "Extract the title from https://example.com",
      "routing": "smart"
    }'

{
  "status": "completed",
  "output_text": "Example Domain",
  "banana_peel": {
    "runner": "browserbase",
    "routing": "smart",
    "attempts": 1,
    "cost_usd": 0.011
  }
}
250+
runner combinations on the network
94.2%
routed success rate
Millions
sites covered

The routing layer

Built for agents. Engineered like infrastructure.

POST /api/v1/responses with a routing mode — smart, a named runner, a category, or a short list. One key, one bill, every engine.

Every run updates a per-domain scoreboard. routing: smart exploits the last runner that succeeded on your domain and re-explores when the picture changes.

When a run blocks, Banana Peel races two or three runners at once. First success wins; you see every attempt on the receipt.

Every response carries its receipts — screenshots, artifacts, session details, per-attempt costs — so you can audit what ran and why.

EVIDENCEartifacts · sessions · costsRUNNERSbrowserbase · steel · skyvernROUTINGrouting: smartAPIPOST /api/v1/responsesAI DEVELOPERSAI AGENTS

How smart routing works

The router does the remembering, so your code doesn't.

01/

Exploit what works

routing: smart starts with the runner that last succeeded on your domain. No cold guesses — the first attempt is already informed.

02/

Learn from every run

Each success, failure, and block updates a live runner-by-domain scoreboard. The router gets sharper with every task that flows through it.

03/

Race the fallback

A blocked run doesn't retry in line — it fans out to two or three runners in parallel. First success wins, and every attempt is itemized on your receipt.

The scoreboard is public. Runner benchmark, straight from live traffic.

View live benchmark

Drop-in wrappers

Keep your client. Change the key.

Point Browserbase, Steel, Browser Use, Skyvern, or Hyperbrowser at Banana Peel with a bp_live_… key. Tasks get smart routing across all runners by default (pin your old provider only if you want parity). In-repo TypeScript shims mirror familiar methods; new code should start with /api/v1/responses.

@bananapeel/browserbase

Browserbase migration guide
migration · Browserbasediff
import Browserbase from "@browserbasehq/sdk"; const bb = new Browserbase({-  apiKey: process.env.BROWSERBASE_API_KEY,+  apiKey: process.env.BANANA_PEEL_API_KEY, // bp_live_…+  baseURL: process.env.BANANA_PEEL_BASE + "/api",}); const session = await bb.sessions.create({-  projectId: "your_project_id",+  // projectId optional — stripped server-side});// session.connectUrl → real Browserbase CDP (proxied)

Pricing

Pay per run. Never per seat.

Start with $10 in welcome credits at a 0% platform fee. After your first top-up, each run costs the runner's listed price plus 5% — no seats, no subscriptions, and every attempt is itemized on your receipt.

$10
welcome credits
0%
fee on trial
5%
fee after top-up

Stop retrying.
Start routing.

Mint a key, make one request, and watch the run — evidence included — in the console.

Command Palette

Search for a command to run...