Get a session's timeline
The session's act steps in order, one row per step (skipped steps included): kind, start, duration, status, error, the target's box in the viewport, and a JPEG thumbnail when the session was created with `thumbnails: true`. Also the cursor path: every pointer event, from act steps and from `Input.dispatchMouseEvent` commands a CDP client sent over the session's socket, with its time since the session was created. Kept with the session (at most 1,000 steps, 20,000 points and 8 MiB of thumbnails; `dropped` counts what did not fit); a row's `url` and its error's `detail` are cut to 2,048 characters, and a CDP command whose `type` or `button` is not one of the documented values adds no point. Thumbnails are dropped 15 minutes after the session closes. The closed sessions of one organization keep at most 64 MiB of timelines together: the most recently closed keep theirs, older ones read empty, with what they held counted in `dropped`. The timeline is empty for a session closed by a node restart.
/v1/vision/sessions/{session_id}/timeline
Authentication
Path Parameters
session_id
string
required
path
"brs_01m5t3y30wcksxf22t9gwk9fwb"Responses
application/jsonobject
string
REQUIRED
session_timelinesession_id
string
REQUIRED
viewport
object
REQUIRED
width
integer
REQUIRED
height
integer
REQUIRED
steps
object[]
REQUIRED
act
integer
REQUIRED
index
integer
REQUIRED
kind
string
REQUIRED
navigate, click, hover, type, key, scroll, select, wait, evaluate, screenshot, markdownstarted_at
string (date-time)
REQUIRED
at_ms
integer
REQUIRED
duration_ms
number
REQUIRED
status
string
REQUIRED
ok, failed, skippedtarget
object | null
REQUIRED
x
number
REQUIRED
y
number
REQUIRED
width
number
REQUIRED
height
number
REQUIRED
url
string | null
REQUIRED
error
object
type
string (uri)
REQUIRED
title
string
REQUIRED
status
integer
REQUIRED
code
string
REQUIRED
detail
string
REQUIRED
instance
string
errors
object[]
pointer
string
REQUIRED
detail
string
REQUIRED
reason
string
required_scope
string
retry_after_s
integer
limit
object
id
string
REQUIRED
limit
number
REQUIRED
unit
string
REQUIRED
window_s
integer
current
number
current_status
string
upstream_status
integer
step
string
pack_error
object
code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
thumbnail
object | null
REQUIRED
format
string
REQUIRED
jpegwidth
integer
REQUIRED
height
integer
REQUIRED
data_base64
string
REQUIRED
cursor
object[]
REQUIRED
at_ms
integer
REQUIRED
x
number
REQUIRED
y
number
REQUIRED
type
string
REQUIRED
button
string
source
string
REQUIRED
act, cdpdropped
object
REQUIRED
steps
integer
REQUIRED
points
integer
REQUIRED
thumbnails
integer
REQUIRED
curl -X GET 'https://beta-api.b3os.org/v1/vision/sessions/brs_01m5t3y30wcksxf22t9gwk9fwb/timeline' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
const response = await fetch('https://beta-api.b3os.org/v1/vision/sessions/brs_01m5t3y30wcksxf22t9gwk9fwb/timeline', { method: 'GET', headers: { "Authorization": "Bearer YOUR_API_TOKEN" }});const data = await response.json();console.log(data);
import requestsheaders = { 'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.get('https://beta-api.b3os.org/v1/vision/sessions/brs_01m5t3y30wcksxf22t9gwk9fwb/timeline', headers=headers)print(response.json())
{ "object": "session_timeline", "session_id": "brs_01m5t3y30wcksxf22t9gwk9fwb", "viewport": { "width": 1280, "height": 800 }, "steps": [ { "act": 1, "index": 0, "kind": "click", "started_at": "2026-10-30T18:02:11.204Z", "at_ms": 5120, "duration_ms": 3.1, "status": "ok", "target": { "x": 540, "y": 380, "width": 200, "height": 40 }, "url": null, "thumbnail": null } ], "cursor": [ { "at_ms": 5122, "x": 640, "y": 400, "type": "mouseMoved", "source": "act" }, { "at_ms": 5122, "x": 640, "y": 400, "type": "mousePressed", "button": "left", "source": "act" }, { "at_ms": 5122, "x": 640, "y": 400, "type": "mouseReleased", "button": "left", "source": "act" } ], "dropped": { "steps": 0, "points": 0, "thumbnails": 0 }}
Try this endpoint
/v1/vision/sessions/{session_id}/timeline