Partner Spotlight

Notte: Browser Automation API for AI Agents

Christian Pickett

Christian Pickett

Co-founder

AI agents need to interact with websites. Fill forms, click buttons, navigate flows, extract data. But running browsers at scale is painful — CAPTCHAs, bot detection, session management, infrastructure.

Today we're highlighting Notte, a browser automation API designed for AI agents, now available on Orthogonal.

What is Notte?

Notte provides managed browser sessions with AI-powered automation. Start a headless browser, execute actions, scrape content, or let an AI agent complete multi-step tasks autonomously. Built-in CAPTCHA solving and proxy rotation handle the hard parts.

Key Features

Managed Browser Sessions

Spin up Chrome or Firefox browsers on demand. Configure proxies, viewports, and user agents. Sessions auto-clean after timeout.

AI Agent Automation

Describe a task in plain English, let the AI agent figure out the clicks and keystrokes. Multi-step workflows without writing selectors.

Page Scraping

Extract structured content from any page. Use selectors for precision or let AI handle the extraction.

CAPTCHA Solving

Built-in CAPTCHA solving handles reCAPTCHA, hCaptcha, and image challenges automatically.

Using Notte with Orthogonal

Quick Scrape (No Session)

// Using @orth/sdk // Install: npm install @orth/sdk import Orthogonal from "@orth/sdk"; const orthogonal = new Orthogonal({ apiKey: process.env.ORTHOGONAL_API_KEY, }); // Scrape a URL without managing sessions const output = await orthogonal.run({ api: "notte", path: "/scrape", body: { url: "https://news.ycombinator.com" } }); console.log(output); // Returns: { // markdown: "...", // Page content as markdown // structured: {...}, // Extracted data // images: [...] // Image URLs // }

Start a Browser Session

// Start a managed browser session const session = await orthogonal.run({ api: "notte", path: "/sessions/start", body: { browser_type: "chromium", headless: true, proxies: true, solve_captchas: true, viewport_width: 1920, viewport_height: 1080, idle_timeout_minutes: 5 } }); const sessionId = session.session_id; console.log("Session started:", sessionId);

Navigate and Execute Actions

// Navigate to a page await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/execute`, body: { type: "goto", url: "https://example.com/login" } }); // Fill a field await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/execute`, body: { type: "fill", selector: "input[name='email']", value: "user@example.com" } }); // Click a button await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/execute`, body: { type: "click", selector: "button[type='submit']" } });

Scrape Current Page

// Extract content from current page in session const content = await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/scrape`, body: { only_main_content: true, scrape_links: true } }); console.log(content.markdown);

Observe Page State

// Get available actions on current page const state = await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/observe`, body: { instruction: "Find the search input and submit button" } }); console.log(state); // Returns clickable elements, input fields, etc.

Take Screenshot

// Capture screenshot const screenshot = await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/screenshot`, body: { full_page: false } }); console.log(screenshot.url);

Run AI Agent

// Let an AI agent complete a task const agent = await orthogonal.run({ api: "notte", path: "/agents/start", body: { task: "Search for 'AI agents' on Google and extract the top 5 results", session_id: sessionId, url: "https://google.com", max_steps: 10, use_vision: true } }); // Poll for completion const agentId = agent.agent_id; let result; do { await new Promise(r => setTimeout(r, 2000)); result = await orthogonal.run({ api: "notte", path: `/agents/${agentId}`, query: {} }); } while (result.status === "running"); console.log(result);

Clean Up Session

// Stop and clean up session when done await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/stop`, query: { session_id: sessionId } });

Using x402 Protocol

Notte on Orthogonal supports x402 for autonomous agent payments using USDC stablecoins.

// Install: npm install x402-fetch viem import { wrapFetchWithPayment } from "x402-fetch"; import { privateKeyToAccount } from "viem/accounts"; const account = privateKeyToAccount(process.env.PRIVATE_KEY); const fetchWithPayment = wrapFetchWithPayment(fetch, account); // Scrape URL with automatic USDC payment const url = "https://x402.orth.sh/notte/scrape"; const response = await fetchWithPayment(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ url: "https://example.com" }) }); const data = await response.json(); console.log(data);

Available Endpoints

EndpointMethodDescriptionPrice
/scrapePOSTQuick scrape without session$0.01
/scrape_from_htmlPOSTExtract from raw HTML$0.002
/sessions/startPOSTStart browser sessionDynamic
/sessions/{id}GETGet session statusFree
/sessions/{id}/stopDELETEStop sessionFree
/sessions/{id}/page/executePOSTExecute action (click, type, etc.)$0.002
/sessions/{id}/page/observePOSTObserve page state$0.005
/sessions/{id}/page/scrapePOSTScrape current page$0.003
/sessions/{id}/page/screenshotPOSTTake screenshot$0.001
/sessions/{id}/cookiesGETGet session cookiesFree
/sessions/{id}/cookiesPOSTSet session cookies$0.001
/sessions/{id}/network/logsGETGet network logsFree
/agents/startPOSTStart AI agentDynamic
/agents/{id}GETGet agent statusFree
/agents/{id}/stopDELETEStop agentFree

Use Cases

Web Scraping

Extract data from any website. Handle JavaScript rendering, pagination, and dynamic content automatically.

Form Automation

Automate form submissions, signups, and multi-step workflows. CAPTCHA solving included.

Testing & QA

Run browser-based tests against live websites. Take screenshots for visual regression.

Price Monitoring

Monitor product prices, availability, and changes across e-commerce sites.

Data Collection

Gather training data, research content, or competitive intelligence from the web.

AI Agent Workflows

Let AI agents browse the web autonomously. "Book me a flight" becomes possible when your agent can interact with airline websites.

Why Browser Automation for Agents?

Many APIs don't exist. Agents need to interact with websites the way humans do:

  1. Universal access: Any website, any workflow
  2. No API needed: Automate sites that don't offer APIs
  3. Dynamic content: Handle JavaScript, SPAs, and interactive elements
  4. Visual understanding: AI agents can interpret page layouts
  5. Scale: Managed infrastructure handles the complexity

Try It Today

Sign up for Orthogonal and get $10 free credits to try Notte and dozens of other APIs. No API keys to manage, no accounts to create.

Get Started | View on Orthogonal | Notte Website