The Recording Downloads API turns a session’s recording into downloadable MP4 files, one per recorded page (tab). Assembly runs asynchronously: request the downloads, then poll for status and a short-lived download URL. To stream playback in-app instead of downloading files, use the Session Replay API.
Quickstart
Given asessionId from a session that has ended, request the downloads, then poll until each page is COMPLETED.
- Node.js
- Python
- cURL
How it works
Assembly of the recording is asynchronous, driven by two calls on the same path:Request the downloads (POST)
POST /v1/sessions/{id}/recording/downloads enqueues one MP4 per recorded page (tab). Assuming the session has ended and is still within its retention window, it returns 202 and marks every page PENDING. Re-posting re-enqueues all pages and retries any that failed, so it is safe to call again.Poll for status (GET)
GET /v1/sessions/{id}/recording/downloads returns the current state of each page. Poll it until the pages you need reach COMPLETED (or FAILED).Status values
Each page reports one of four states:| Status | Meaning |
|---|---|
NOT_REQUESTED | You haven’t requested a download for the session yet. |
PENDING | Browserbase is assembling the MP4 (queued or in progress). |
COMPLETED | The MP4 is ready; downloadUrl is present on non-BYOS projects. |
FAILED | Assembly failed. POST again to retry the page. |
Response shape
Each entry corresponds to one recorded page (tab).pageIdidentifies the recorded page within the session, ascending from"0".downloadUrlandcompletedAtare present only whenstatusisCOMPLETEDon a standard (non-BYOS) project.
Multitab
Browserbase records up to 10 tabs open concurrently per session, and produces one MP4 per recorded page. Request downloads once; poll the list to collect each page’s file as it finishes.Download URL expiration
Browserbase signs eachdownloadUrl, and it expires six hours after the API issues it. The GET endpoint re-mints the URL on every call, so if a link expires, list the downloads again to get a fresh one.
Availability window
You can assemble recording downloads while Browserbase still retains the session’s recording source, for up to 31 days after the session ends on non-BYOS projects. After that, the source is gone and the API returns410 Gone.
Downloads become available only after a session ends. Requesting them for a running session returns
409 Conflict.Bring your own storage (BYOS)
On projects using Bring Your Own Storage, Browserbase writes each assembled MP4 to your own S3 bucket instead of Browserbase storage. The API still reports per-pagestatus but omits downloadUrl and completedAt, so fetch the files from your bucket. BYOS projects retain the recording source for 24 hours.
Rate limits
The POST endpoint is limited to 5 requests per minute per project, since each call kicks off assembly. BYOS enables higher rate limits for enterprise customers. See Concurrency & Rate Limits for the retry pattern.Recording downloads vs. Session replay
- Recording downloads produce standalone MP4 files you fetch and store (best for archiving and offline review).
- Session replay streams the recording as HLS for embedded, in-app playback.
Disabling recordings
Sessions created withrecordSession: false produce no recording, so there is nothing to download; both endpoints return 404 Not Found. See Session Recording.
Troubleshooting
GET returns409 Conflict:
- The session has not ended yet. Browserbase assembles downloads only after a session completes.
410 Gone:
- The recording aged out of its retention window (up to 31 days on non-BYOS projects, 24 hours when using BYOS). Browserbase can no longer assemble it.
PENDING:
- Large recordings take longer to assemble. Keep polling; re-POST only if a page reports
FAILED.
downloadUrl is missing on a COMPLETED page:
- The project uses BYOS. The MP4 is in your own bucket; the API does not return a signed URL for BYOS renditions.
Related
Session replay
Stream a session’s recording as HLS for embedded, in-app playback.
Session recording
Replay every session as a video recording to debug after the fact.
Bring your own storage
Route recording renditions to your own S3 bucket.
Recording downloads API
API reference for requesting and listing per-page MP4 downloads.