SDKs
Availability
Two ways to automate
Most scripts need no SDK at all: start a profile through the local API (or the desktop app) and connect Playwright, Puppeteer or any CDP client to the endpoint it returns. The profile's identity, proxy, cookies and extensions are already applied by the background service.
import { chromium } from "playwright";
// Copy the token shown in Desktop → Automation into ANT0_TOKEN.const token = process.env.ANT0_TOKEN;if (!token) throw new Error("Set ANT0_TOKEN before running this script");
const res = await fetch("http://127.0.0.1:27100/v1/profiles/Shop%20DE/start", { method: "POST", headers: { authorization: `Bearer ${token}`, "content-type": "application/json" }, body: JSON.stringify({}),});if (!res.ok) throw new Error(`Profile start failed: HTTP ${res.status}`);const session = await res.json(); // Session response, not a runtime wrapperconst browser = await chromium.connectOverCDP(session.ws_endpoint);With private SDK access, the SDKs cover a second case: launching Ant0 Browser directly from your own code, with an identity you choose and without the desktop app in the loop. They wrap Playwright's launcher and add the identity layer, launch-ticket handling, geo resolution and helpers.
Node SDK
import { launch } from "ant0-browser";
const browser = await launch({ executablePath: "/path/to/ant0-browser/chrome", identity: { mode: "synthetic", key: "research-1" }, proxy: { server: "http://host:8000", username: "user", password: "pass" },});const page = await browser.newPage();await page.goto("https://example.com");await browser.close();
Set ANT0_BROWSER_BINARY instead of passing executablePath on every call.
Current source entry points:
launch()andlaunchPersistentContext(): Playwright browsers with the identity applied.serve(): a raw CDP endpoint (cdpUrl,pid,isAlive(),close()) for other clients.launchPlan(): for supervisors that spawn the browser themselves; returns the executable, arguments, environment and user-data directory.- Native, captured and persisted synthetic identities; fingerprint-profile encoding, geometry and coherence warnings.
- Humanised input wrappers and rendering checks; optional geo (
resolveGeo()) and Widevine helpers.
Python SDK
from ant0browser import launch
browser = launch( executable_path=r"C:\path\to\ant0-browser\chrome.exe", identity={"mode": "synthetic", "key": "research-1"},)page = browser.new_page()page.goto("https://example.com")browser.close()The async API mirrors launch and persistent contexts:
from ant0browser.async_api import launch
browser = await launch(executable_path="/path/to/chrome", identity={"mode": "native"}) serve() and the ant0-browser-serve command give a local CDP endpoint; the
helper set matches the Node SDK (identities, templates, humanised input, rendering checks, geo,
Widevine).
Identity options
Omitting identity means native mode: the browser presents the machine
it runs on. { mode: "synthetic", key } derives a coherent identity from the key,
so the same key gives the same identity on every run. Explicit switches go under
overrides: platform, platformVersion, brand,
brandVersion, gpuVendor, gpuRenderer, hardware and display
fields, location, timezone, acceptLanguage, WebRTC, GPU and
noise controls, storageQuota, canvasBridge and tlsProfile
(snake_case in Python). Overrides take precedence over captured or synthetic profiles.
Network calls
launch and serve can make a loopback request to the local background
service for the engine's launch ticket; the service's account connections are listed in
What leaves your computer. Optional SDK helpers connect
only when called:
| Helper | Endpoint | Purpose |
|---|---|---|
resolveGeo() | ip.ant0.link; last-resort fallbacks api.ipify.org and ip-api.com, through the configured proxy | Exit-IP and country lookup. The primary service keeps no request logs; third-party fallbacks have their own policies. |
resolveGeo() | releases.ant0.link | GeoIP database (about 52 MB), fetched directly when a proxy check finds the 30-day local cache missing or stale. |
| release install | ANT0_BROWSER_RELEASE_URL (opt-in) | Signed engine releases, verified against the key embedded in the SDK. |
Geo data attribution: this product uses the IP2Location LITE database (lite.ip2location.com); includes GeoLite2 data created by MaxMind (maxmind.com); IP geolocation by DB-IP (db-ip.com).
Known engine behaviours
- SOCKS5 with a username and password is not supported by the engine (Chromium has no such client). The SDKs refuse it; use an HTTP proxy with credentials, a SOCKS5 proxy that allows your IP, or the background service's relay by starting the profile through Ant0.
- The first cookie command after launch is slow. Chromium 149 answers the first
Storage.*CDP command about 25 seconds after launch; later calls are immediate. Give early cookie operations a 60-second budget. - Launch tickets. Engine releases from
ant0.2on refuse to start without a ticket issued by a signed-in background service; the SDKs fetch one automatically when the service is reachable. Without one the engine exits with code 90.
© 2026 Ant0