Skip to main content

Sessions

Sessions keep a worker reserved for you across multiple requests, maintaining browser state (cookies, tabs, local storage) between calls.

Plan Requirement

Sessions require a Standard or Pro plan.

Start a Session

Add session.preserve: true to your request. The response includes a sessionId and the workerId — save both for subsequent requests.

{
"actions": [
{ "openNewTab": "https://example.com/login" },
{ "fill": ["input[name=email]", "user@example.com"] },
{ "fill": ["input[name=password]", "password123"] },
{ "click": "button[type=submit]" },
{ "waitForElement": ".dashboard" }
],
"session": { "preserve": true }
}

Response:

{
"success": true,
"data": { "success": true },
"workerId": "-Om8GAObZSvE8trPMPZF",
"sessionId": "sess_a1b2c3d4e5f6",
"duration": 5400
}

Continue a Session

Send the sessionId and workerId from the previous response:

{
"actions": [
{ "click": ".settings-link" },
{ "screenshot": "viewport" }
],
"workerId": "-Om8GAObZSvE8trPMPZF",
"session": { "id": "sess_a1b2c3d4e5f6" }
}

The session timeout is automatically refreshed on each request.

Close a Session

When you're done, close the session to release the worker:

{
"actions": [
{ "screenshot": "viewport" }
],
"workerId": "-Om8GAObZSvE8trPMPZF",
"session": {
"id": "sess_a1b2c3d4e5f6",
"close": true
}
}

Custom Session Timeout

Default session timeout is 5 minutes. Set a custom timeout (60 seconds to 30 minutes):

{
"actions": [...],
"session": {
"preserve": true,
"timeout": 600000
}
}

Override an Existing Session

Force-close any existing session and claim a worker:

{
"actions": [...],
"session": { "override": true }
}

Session Lifecycle Summary

ActionRequestResult
Startsession: { preserve: true }Worker reserved, sessionId returned
ContinueworkerId + session: { id: "..." }Reuses worker, refreshes timeout
CloseworkerId + session: { id: "...", close: true }Worker released to online
Overridesession: { override: true }Force-claims a reserved worker
Custom timeoutsession: { preserve: true, timeout: 600000 }10-minute session

Example: Multi-Step Workflow

// Step 1: Login and start session
POST /v1/
{
"actions": [
{ "openNewTab": "https://app.example.com/login" },
{ "fill": ["#email", "user@example.com"] },
{ "fill": ["#password", "pass123"] },
{ "click": "#login-btn" },
{ "waitForElement": ".dashboard" }
],
"session": { "preserve": true }
}
// → Returns sessionId + workerId

// Step 2: Navigate and extract data
POST /v1/
{
"actions": [
{ "click": ".reports-link" },
{ "waitForElement": ".report-table" },
{ "extractAll": "tr.report-row", "options": {
"fieldMap": { "name": "td:first-child", "value": "td:last-child" },
"save": "reports"
}},
{ "getSavedData": ["reports"] }
],
"workerId": "-Om8GAObZSvE8trPMPZF",
"session": { "id": "sess_a1b2c3d4e5f6" }
}

// Step 3: Close session
POST /v1/
{
"actions": [
{ "screenshot": "fullpage" }
],
"workerId": "-Om8GAObZSvE8trPMPZF",
"session": { "id": "sess_a1b2c3d4e5f6", "close": true }
}