---
title: "Extend a session"
method: POST
path: "/v1/browser_sessions/{browser_session_id}/extend"
tags: ["Browser Sessions"]
---

# Extend a session

`POST /v1/browser_sessions/{browser_session_id}/extend`

Extend a live browser session by a number of minutes. Sessions are created with a timeout of at most 240 minutes and can be extended, one or more times, up to a total lifetime of 360 minutes (6 hours). The minutes are added to the session's current deadline. A request for more than the remaining headroom is granted the remainder, and the response carries a warning. The response's `timeout` is the session's new total budget in minutes, counted from when the session started.

## Path parameters

- `browser_session_id` string, required — The ID of the browser session. browser_session_id starts with `pbs_`

## Headers

- `x-api-key` string, nullable — Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.

## Request body

- ExtendBrowserSessionRequest
  - `additional_minutes` integer, required — Minutes to add to the session's current deadline. A session can be extended, one or more times, up to a total lifetime of 360 minutes (6 hours) counted from when it started; a request for more than the remaining headroom is granted the remainder and the response carries a warning.

## Response `200`

Successfully extended browser session

- BrowserSessionResponse — Response model for browser session information.
  - `browser_session_id` string, required — Unique identifier for the browser session. browser_session_id starts with `pbs_`.
  - `organization_id` string, required — ID of the organization that owns this session
  - `status` string, nullable — Current status of the browser session
  - `runnable_type` string, nullable — Type of the current runnable associated with this session (workflow, task etc)
  - `runnable_id` string, nullable — ID of the current runnable
  - `timeout` integer, nullable — Timeout in minutes for the session. Timeout is applied after the session is started. Defaults to 60 minutes.
  - `browser_address` string, nullable — Url for connecting to the browser
  - `app_url` string, nullable — Url for the browser session page
  - `extensions` Extensions[], nullable — A list of extensions installed in the browser session.
  - `browser_type` 'msedge' | 'chrome' | 'stealth-chromium'
  - `browser_profile_id` string, nullable — ID of the browser profile loaded into this session, if any. browser_profile_id starts with `bp_`.
  - `generate_browser_profile` boolean — Whether this session's browser profile will be saved when it ends so it can become a reusable browser profile.
  - `vnc_streaming_supported` boolean — Whether the browser session supports VNC streaming
  - `stream_transport` string, nullable — Live-view transport for this session: "vnc" or "cdp". Resolved on the single-session fetch only; null elsewhere.
  - `download_path` string, nullable — The path where the browser session downloads files
  - `downloaded_files` FileInfo[], nullable — The list of files downloaded by the browser session
    - `url` string, required — URL to access the file
    - `checksum` string, nullable — SHA-256 checksum of the file
    - `filename` string, nullable — Original filename
    - `file_size` integer, nullable — Size of the file in bytes
    - `modified_at` string, date-time, nullable — Modified time of the file
    - `artifact_id` string, nullable — Artifact row id for refresh-on-read
  - `recordings` FileInfo[], nullable — The list of video recordings from the browser session
    - `url` string, required — URL to access the file
    - `checksum` string, nullable — SHA-256 checksum of the file
    - `filename` string, nullable — Original filename
    - `file_size` integer, nullable — Size of the file in bytes
    - `modified_at` string, date-time, nullable — Modified time of the file
    - `artifact_id` string, nullable — Artifact row id for refresh-on-read
  - `started_at` string, date-time, nullable — Timestamp when the session was started
  - `completed_at` string, date-time, nullable — Timestamp when the session was completed
  - `created_at` string, date-time, required — Timestamp when the session was created (the timestamp for the initial request)
  - `modified_at` string, date-time, required — Timestamp when the session was last modified
  - `deleted_at` string, date-time, nullable — Timestamp when the session was deleted, if applicable
  - `warning` string, nullable — Advisory message about how the request was adjusted, if it was. Set when a requested timeout above the maximum was capped at creation, when an extension was granted less than it asked for, or when an extension was accepted but not yet confirmed; null otherwise.

## Other responses

- `202` — Accepted - the extension was requested but its effect could not be confirmed yet. The body carries the session as last recorded and a `warning`; read `timeout` back with a GET rather than retrying, because each retry adds again.
- `403` — Unauthorized - Invalid or missing authentication
- `404` — Browser session not found
- `409` — Conflict - the browser session has ended, is about to expire, is already at its maximum lifetime, or runs on infrastructure whose lifetime is fixed at creation
- `422` — Validation Error

## Changes

- **2026-09-09** `b090d5083c5b` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/skyvern-ai/apis/skyvern-api-2/changes/v1/browser_sessions/:browser_session_id/extend/post.md)

---

[API](https://skmtc.dev/skyvern-ai/apis/skyvern-api-2.md) · [All operations](https://skmtc.dev/skyvern-ai/apis/skyvern-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/skyvern-ai/apis/skyvern-api-2/revisions/d62300a896c8?raw)
