Migrating providers
Banana Peel routes browser work across many runners. Prefer the native Browser Agent API for new integrations. If you already use a provider SDK, thin compatibility wrappers (HTTP + in-repo TypeScript packages under packages/wrappers/*) let you change base URL + key first, then adopt routing.
Recommended: native Responses call
// Preferred for new code — Banana Peel Browser Agent API
const res = await fetch(`${process.env.BANANA_PEEL_BASE}/api/v1/responses`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BANANA_PEEL_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "banana-peel",
input: "Return JSON with the title and link count",
url: "https://example.com",
routing: "smart",
}),
});From Browserbase
Point @browserbasehq/sdk at Banana Peel's /api base and authenticate with a bp_live_… key. Sessions — live browsers you drive yourself — are proxied to a real Browserbase account, so your CDP / Playwright flow stays the same.
import Browserbase from "@browserbasehq/sdk";
import { chromium } from "playwright-core";
import { browserbaseSdkOptions } from "@bananapeel/browserbase";
// Or skip the helper and set apiKey + baseURL yourself.
const bb = new Browserbase(
browserbaseSdkOptions({
apiKey: process.env.BANANA_PEEL_API_KEY, // bp_live_…
// baseURL → ${BANANA_PEEL_BASE}/api so SDK hits /api/v1/sessions
}),
);
// projectId is optional / stripped — BP proxies to its Browserbase account
const session = await bb.sessions.create({});
const browser = await chromium.connectOverCDP(session.connectUrl);
// Prefer agent tasks? Use POST /api/v1/responses — routing: "smart" (default),
// or pin "browserbase" for provider parityDetails: Browserbase wrapper.
From Steel / Browser Use / Skyvern / Hyperbrowser
Use the matching wrapper package or HTTP route, or skip wrappers and call /api/v1/responses with routing set to that runner (or smart).
import { Steel } from "@bananapeel/steel";
// Local: import { Steel } from "../packages/wrappers/steel/src";
const client = new Steel({
apiKey: process.env.BANANA_PEEL_API_KEY, // bp_live_…
// baseURL defaults to production Cloud Run
});
// Agent task — smart-routed across all runners by default,
// Banana Peel envelope included
const task = await client.tasks.create({
task: "Get the page title",
url: "https://example.com",
// routing: "steel", // optional pin for provider parity (or ["steel", "browserbase"])
});
const done = await client.tasks.waitForCompletion(task.id);
console.log(done.output, done.banana_peel?.runner);
// Optional: Steel sessions proxy (needs STEEL_API_KEY on the BP deployment)
// Or point official steel-sdk at Banana Peel:
// new Steel({ steelAPIKey: bpKey, baseURL: bpBase + "/api/wrappers/steel" })- Steel —
@bananapeel/steel/POST /api/wrappers/steel/tasks - Browser Use —
@bananapeel/browser-use - Skyvern —
@bananapeel/skyvern - Hyperbrowser —
@bananapeel/hyperbrowser