Notte: Browser Automation API for AI Agents
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
| Endpoint | Method | Description | Price |
|---|---|---|---|
| /scrape | POST | Quick scrape without session | $0.01 |
| /scrape_from_html | POST | Extract from raw HTML | $0.002 |
| /sessions/start | POST | Start browser session | Dynamic |
| /sessions/{id} | GET | Get session status | Free |
| /sessions/{id}/stop | DELETE | Stop session | Free |
| /sessions/{id}/page/execute | POST | Execute action (click, type, etc.) | $0.002 |
| /sessions/{id}/page/observe | POST | Observe page state | $0.005 |
| /sessions/{id}/page/scrape | POST | Scrape current page | $0.003 |
| /sessions/{id}/page/screenshot | POST | Take screenshot | $0.001 |
| /sessions/{id}/cookies | GET | Get session cookies | Free |
| /sessions/{id}/cookies | POST | Set session cookies | $0.001 |
| /sessions/{id}/network/logs | GET | Get network logs | Free |
| /agents/start | POST | Start AI agent | Dynamic |
| /agents/{id} | GET | Get agent status | Free |
| /agents/{id}/stop | DELETE | Stop agent | Free |
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:
- Universal access: Any website, any workflow
- No API needed: Automate sites that don't offer APIs
- Dynamic content: Handle JavaScript, SPAs, and interactive elements
- Visual understanding: AI agents can interpret page layouts
- 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.