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/client

2. 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 off

4. 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