Cloud and teams
Run profiles on remote machines.
On this page
A remote session runs one of your profiles on a machine in Donut’s fleet, with the profile’s own operating system. Your computer can sleep, or run other work. The profile keeps its fingerprint, cookies and proxy. When the session ends, the remote machine uploads the changes and your computer downloads them before it opens the profile again.
Starting a remote session on demand needs Pro, Team or Enterprise. Solo can run scheduled recipes and Cookie Bot on the fleet, but cannot start a session by hand or from code. Sessions spend remote hours: 200 a month on Pro, and 200 for each paid seat on Team, shared.
What a profile needs
- Sync in Regular Sync mode. A remote machine cannot open an end-to-end encrypted profile.
- A fingerprint for Windows, macOS or Linux. The session runs on a machine with that system.
- No other session of the profile: the remote session holds the profile’s lock.
- If the profile has a proxy or VPN, the remote machine must reach it. A proxy on
127.0.0.1exists only on your computer.
Start a session
Remote sessions start from code, an agent or a schedule:
- The local REST API:
POST /v1/profiles/{id}/run-remote. - Remote MCP, with the
remotetoolset. See Remote MCP. - A scheduled recipe with Remote fleet as the target.
While a session runs, the profile shows Running on a remote machine. Stop the session to bring the profile back.
Over the local API
# Start the profile on a machine of its own operating system
curl -sS -X POST http://127.0.0.1:10108/v1/profiles/<profile id>/run-remote \
-H "Authorization: Bearer $DONUT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'
# {"profile_id":"…","session_id":"…","platform":"windows","status":"provisioning"}
# Poll until the session is ready
curl -sS http://127.0.0.1:10108/v1/remote-sessions/<session id> \
-H "Authorization: Bearer $DONUT_API_KEY"Attach Playwright through your desktop app. It relays the remote browser’s CDP over the local API, so your script never needs your Donut account credential:
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP({
endpointURL: `ws://127.0.0.1:10108/v1/remote-sessions/${sessionId}/cdp`,
headers: { Authorization: `Bearer ${process.env.DONUT_API_KEY}` },
});Other routes:
DELETE /v1/remote-sessions/{id}stops the session and answers with the billed seconds.GET /v1/remote-sessionslists your sessions.GET /v1/remote-hoursshows the hours used and left.POST /v1/profiles/{id}/cloud-syncturns on sync and says if the profile can run remotely.
run-remote answers 400 when the profile does not sync, 402 without a plan that includes automation, 409 when the profile is locked by another session, and 503 when no machine of that system is free. The URL must be http, https or about:blank.
Checked against the app on .