Quickstart
@unbrowse/client is a thin HTTP-first SDK. It calls beta-api.unbrowse.ai directly. No binary spawn, no local daemon, runs in the browser, on Node 18+, and on any edge runtime that exposes a fetch. Zero runtime dependencies.
1. Install
npm i @unbrowse/client2. Authenticate (web3-native)
The credential root is a wallet signature. A local self-custody ed25519 wallet is auto-created at ~/.unbrowse/wallet.json on first run — no signup required. The SDK signs each request as a fresh capability; the backend verifies the signature and authenticates you aswallet:<pubkey> — a full principal, never key-gated.
Optional web2 wrapper (deprecated). For account-bound flows (payouts accrual, dashboard sync, ToS surface tied to an email), sign in at unbrowse.ai/login (magic link), mint a key, and store it in UNBROWSE_API_KEY. A wallet-only caller is already a full principal; the key is layered only for account-bound continuity and will be retired.
3. Resolve an intent
import { Unbrowse, mergedAuthHeaders } from "@unbrowse/client";
// Web3-native: the wallet signature is the sole required credential.
const unbrowse = new Unbrowse({ walletSigner: mergedAuthHeaders });
const result = await unbrowse.resolve({
intent: "search hackernews for AI agent papers",
});
// result.available_operations: AvailableEndpoint[]
// result.status: "ok" | "empty" | "browse_session_open" | "auth_required" | ...
// result._request_id: paste into support if anything looks off4. Execute the picked endpoint
const data = await unbrowse.execute({
endpoint_id: result.available_operations![0].endpoint_id,
params: { q: "agents" },
});Two tool calls, never one
Unbrowse always returns a ranked shortlist from resolve. Your LLM picks one and calls execute. The shortlist is rich enough that an LLM can pick without re-prompting; we never auto-execute a guess.
Next
- Full API reference — every method, every type.
- Worker proxy + IProyal — route outbound fetches through Cloudflare or a residential IP.
- Errors — typed hierarchy you can
instanceof.