Persistent sessions
Persistent sessions let an agent reuse browser cookies across separate scrape and browse calls without receiving the cookie values itself.
Create a session
curl --request POST https://www.crawlvolt.com/v1/sessions \
--header "Authorization: Bearer $CRAWLVOLT_API_KEY" \
--header "Content-Type: application/json" \
--data '{ "ttl_seconds": 3600 }'{
"id": "ses_01f4...",
"status": "active",
"created_at": "2026-08-02T11:30:00Z",
"updated_at": "2026-08-02T11:30:00Z",
"expires_at": "2026-08-02T12:30:00Z",
"cookie_count": 0
}The preview accepts a lifetime from 5 minutes to 24 hours and allows at most 20 active sessions per account and project.
Reuse browser state
Pass the id to either product route. CrawlVolt loads the encrypted cookie jar before navigation and replaces it with the browser's resulting jar after a successful call.
curl --request POST https://www.crawlvolt.com/v1/browse \
--header "Authorization: Bearer $CRAWLVOLT_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"url": "https://app.example.com/login",
"session_id": "ses_01f4...",
"actions": [
{ "action": "fill", "selector": "input[name=email]", "value": "agent@example.com" },
{ "action": "fill", "selector": "input[name=password]", "value": "..." },
{ "action": "click", "selector": "button[type=submit]" },
{ "action": "wait", "selector": "main[data-authenticated=true]" }
],
"formats": ["markdown"]
}'The response contains session metadata but never cookie values. The normal page or browser-action quota still applies.
Inspect or revoke
curl https://www.crawlvolt.com/v1/sessions/ses_01f4... \
--header "Authorization: Bearer $CRAWLVOLT_API_KEY"curl --request DELETE https://www.crawlvolt.com/v1/sessions/ses_01f4... \
--header "Authorization: Bearer $CRAWLVOLT_API_KEY"Revocation is immediate. Expired and revoked sessions return 404, including when the id belongs to another account or project.
Storage and concurrency
Cookie jars are encrypted with AES-256-GCM under the operator-managed WEBDASH_SESSION_MASTER_KEY. The ciphertext is cryptographically bound to the session id, account and project, so moving it to another row cannot disclose a usable jar.
Use one in-flight request per session. Concurrent writes are rejected with 409 session_conflict instead of silently overwriting newer browser state.