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.