The sandbox's timeline, newest first
What happened in the sandbox, for its org only: lifecycle calls and
the statuses the sandbox reached, commands run through exec (command
line, exit code and duration), desktop actions, and, when
capture_content is enabled, the first and last 4 KiB of command
output, typed text, and screenshots with thumbnails. Each event says
who caused it. Content capture is off by default.
Environment values, vault values and stdin are never recorded, nor
is the output of a command that received stdin: its stdout reads
[output not recorded: command received stdin].
Before an event is stored, its command line, output, typed text and
errors are masked, best effort: the values of the sandbox’s vault
entries (at least 4 bytes, as injected when the sandbox was created
and as they are now) and environment variables (at least 8 bytes,
the sandbox’s and the command’s own) become [redacted NAME], and
common token formats become [redacted]: Authorization, Bearer and
Basic header values; sk-, ghp_, gho_, github_pat_, xoxb-
and xoxp- tokens; AWS access key IDs; PEM private keys; and the
values of token, secret, password and api_key pairs. Other
secrets in opted-in content may be recorded. The injected values are
held in memory only, so after a restart of the server a vault value
replaced since the sandbox was created is no longer masked.
Events are kept for retention.events_days, thumbnails for
retention.screenshots_days, and each org’s timeline has a size cap
beyond which its oldest events are deleted. Deleting a sandbox
deletes its timeline, so a deleted sandbox has none. Page with
before set to next_before.
/v1/sandboxes/{sandbox}/eventsAuthorizationBearer token · headerrequiredOrg-scoped API key, pols_....
sandboxstringrequiredSandbox ID (sbx_...) or name.
beforeinteger<int64>Return events older than this event ID (next_before of the previous page).
limitintegerAt most this many events.
typeSandboxEventType[]Only events of these types; repeat for several.
A page of the timeline.
eventsSandboxEvent[]requiredShow propertiesHide properties
SandboxEventidinteger<int64>requiredGrows with every event.
sandbox_idstringrequiredatstring<date-time>requiredtypeSandboxEventTyperequiredlifecycle: a lifecycle call or a status the sandbox reached.
exec: a command. computer: a desktop action. screenshot: a
screenshot of the desktop, present only when content capture is on.
lifecycleexeccomputerscreenshotactorEventActorrequiredWho caused the event.
Show propertiesHide properties
kindstringrequiredapi_key: a call with an API key (CLI, MCP, a client);
operator: a pols.so operator on the admin pages; system:
pols.so itself (the reconciler, the expiry, the monthly
sandbox-hours limit, the abuse protection).
api_keyoperatorsystemidstringThe API key's ID.
namestringrequiredThe key's name when the event happened, or the system's reason.
summarystringrequiredOne line describing the event.
lifecycleLifecycleEventDetailShow propertiesHide properties
actionstringrequiredcreate, fork (this sandbox was made as a fork of sandbox),
forked (a fork, sandbox, was made from this one), stop,
resume and delete are calls; status means the sandbox reached
status.
createforkforkedstopresumedeletestatusstatusSandboxStatusWhere the sandbox actually is. pending means not created in the
runtime yet, or still booting. running means booted: its guest
agent answers, so exec and file calls work. A booting sandbox keeps
its previous status, but its running interval (and billing) starts
when the VM starts. standby means its VM is frozen with its memory
kept because it was idle; the next call that needs it wakes it (see
Standby above). error means the reconciler gave up; delete it.
pendingrunningstoppeddeletederrorstandbyerrorstringWhy the sandbox stopped unexpectedly or failed, as last_error says.
sandboxstringThe other sandbox of a fork.
execExecEventDetailShow propertiesHide properties
commandstring[]requiredProgram and arguments, redacted and cut to 4 KiB in all.
cwdstringrootbooleanexit_codeintegerAbsent when the command did not finish (see error).
duration_msinteger<int64>requiredtimed_outbooleanerrorstringWhy there is no exit code.
stdoutstringWith content capture on, the first and last 4 KiB of standard output, redacted, without terminal escape sequences; a marker stands for the middle of a longer stream.
stderrstringThe same for standard error.
stdout_bytesinteger<int64>requiredThe full length of standard output.
stderr_bytesinteger<int64>requiredtruncatedbooleanThe middle of a stream was left out.
streamedbooleanThe output was streamed (NDJSON).
computerComputerEventDetailShow propertiesHide properties
actionComputerActionTyperequiredclick: click button at (x, y). double_click: double-click button at (x, y).
drag: press the left button at (x, y), move to (to_x,
to_y) and release. type: type text as keystrokes. key: press
keys. scroll: scroll amount wheel clicks in direction with
the pointer at (x, y).
clickdouble_clickdragtypekeyscrollxintegeryintegerto_xintegerto_yintegerbuttonstringtextstringWith content capture on, typed text, redacted and cut to 1 KiB.
keysstringdirectionstringamountintegererrorstringWhy the action failed.
screenshotScreenshotEventDetailShow propertiesHide properties
widthintegerrequiredheightintegerrequiredbytesinteger<int64>requiredThe size of the PNG the call returned.
thumbnailbooleanrequiredA thumbnail is stored (GET .../events/{event}/thumbnail).
next_beforeinteger<int64>Pass as before for the next, older page; absent on the last page.
retentionTimelineRetentionrequiredHow long the timeline keeps what it records.
Show propertiesHide properties
events_daysintegerrequiredEvents are deleted after this many days.
screenshots_daysintegerrequiredThumbnails are deleted after this many days.
Rate limited (rate_limited): too many requests or failed
authentications from this address, too many requests or
lifecycle calls for this org, or too many of its exec, file,
computer and CDP calls in progress at once. Retry after
Retry-After seconds.
errorobjectrequiredShow propertiesHide properties
codestringrequiredStable machine-readable code: bad_request (400),
unauthorized (401), forbidden (403), quota_exceeded
(403), not_found (404), conflict (409),
rate_limited (429, see Retry-After), internal (500),
runtime_error (502, the sandbox host failed),
unavailable (503, the feature is not configured on this
deployment), waking (503, the sandbox is still waking
from standby or booting; retry), timeout (504, or 408 when a request
body stalls).
messagestringrequiredError.
errorobjectrequiredShow propertiesHide properties
codestringrequiredStable machine-readable code: bad_request (400),
unauthorized (401), forbidden (403), quota_exceeded
(403), not_found (404), conflict (409),
rate_limited (429, see Retry-After), internal (500),
runtime_error (502, the sandbox host failed),
unavailable (503, the feature is not configured on this
deployment), waking (503, the sandbox is still waking
from standby or booting; retry), timeout (504, or 408 when a request
body stalls).
messagestringrequired