Skip to content

Proxies

Every connection Chrome makes leaves through the browser’s exit. There are three kinds:

Mode Address How to ask Cost
direct The machine’s own, a US datacenter The default: omit proxyCountryCode, or send null Free
managed A residential address in a country proxyCountryCode: "de" $3 a GB
custom Your proxy customProxy: { host, port, username, password } Free
browser = client.browsers.create(proxy_country_code="gb", timeout=30)

Countries are ISO codes in lower case, as at Browser Use (uk works for Great Britain too). The dashboard’s Sessions page lists the countries offered. A country without residential addresses answers 422.

By default the address is sticky: the browser keeps one address for as long as the provider holds it (up to 24 hours), and the same profile and country get it back next time, which keeps sign-ins stable. For scraping, send proxySticky: false and every new connection gets another address.

{
"customProxy": {
"host": "proxy.example.com",
"port": 8080,
"username": "user",
"password": "secret",
"protocol": "http"
}
}

The proxy must be on a public address. Its credentials go to the machine and are never stored. caBundle, caBundleUrl and ignoreCertErrors are not available yet.

PATCH /browsers/{id}/proxy switches the exit without restarting Chrome: tabs, cookies and storage stay, open connections are closed, and the next ones go the new way.

Terminal window
# Another country
curl -X PATCH https://api.datum.org/api/v4/browsers/$ID/proxy \
-H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" -H "Content-Type: application/json" \
-d '{"mode": "managed", "country": "fr"}'
# A new address, same country
-d '{"rotate": true}'
# Off
-d '{"mode": "direct"}'

GET /browsers/{id}/proxy answers the exit now, with the address it leaves from (exitIp).