advanceSecondsnumber
Fast-forward this many game-seconds on a virtual clock (fast in wall time; capped at 300), tracing readState per tick.
hashstring
Deployment hash from deploy_game — verifies a fresh room (sim deployments run in deterministic lockstep).
inputobject
Scripted input for page 0 (the single-page shorthand).
inputsany[]
Per-page input for players: 2 — inputs[0] drives page 0, inputs[1] page 1 (page 0 falls back to input). Sequences run CONCURRENTLY on the one shared virtual clock, so two-player interactions (chase, collide, rally) are scriptable.
playersnumber
1 (default) or 2 — two pages in one room for sync verification.
readStatestring[]
Paths: "state.<key…>" or "player.<id|self>.<key…>"; in SIM rooms also "sim.<schema path>" (predicted state) and "render.<schema path>" (the smoothed view a correct game draws — use for motion/overshoot checks). "self" works as a player-id segment. Bad paths return the valid options.
roomstring
Live room code to inspect instead of minting a fresh room.
sandboxboolean
Score-safe verification: the capture room ranks submitScore calls on its own throwaway local board and never writes the project leaderboard — use when iterating on a game whose share link is already public. Fresh rooms only (with hash, not room).
screenshotboolean
Default true. Set false to skip the image (faster, probes only).
screenshotAtMsnumber[]
Mid-capture screenshots at these VIRTUAL ms stamps (<=8; same clock as the response's virtualMs — settle counts). Action shots mid-flight without timing the whole capture to end there; each lands within a frame or two, under players[i].screenshots.
settleMsnumber
Virtual boot budget before probing (default 3000).
simulateLatencyMsnumber
One-way latency per client↔server leg, in ms (fresh-minted via hash; max 2000). WORKS ON BOTH TIERS: sim rooms get it in exact ticks, classic rooms get every WebSocket frame held on the virtual clock. RUN THIS — a 0ms loopback is the one condition your game will never actually be played under, and on the CLASSIC tier YOU own the latency compensation, so 0ms testing means it is untested. Try 150 (cross-continent) and 250 (cross-ocean): another player's state arrives 2x this value later (two legs), so at 150 you are looking at 300ms-old positions. If bodies visibly sit behind where they should be, or a predicted object snaps, you are rendering staleness instead of replaying it forward — stamp what you send with room.now() and advance it by its age on arrival.
simulateLatencyTicksnumber
Same as simulateLatencyMs but exact, in sim ticks. SIM rooms only (ticks need a stepped runner); on classic use simulateLatencyMs.
traceSeriesboolean
Also return the actual sampled time series per numeric readState path — parallel {t, v} arrays (virtual ms, value; <=600 points, uniformly thinned). The trace aggregates answer 'did it ever'; the series answers 'WHEN exactly' (where a run died, when a phase flipped).
urlParamsobject | object[]
Extra query params for the page under test, e.g. { "seed": "42" } — make runs DETERMINISTIC if your game reads them (Math.random varies per run otherwise). A single object applies to every page; an ARRAY (one object per page, like inputs) gives each page its own — [{ name: "A", team: "red" }, { name: "B", team: "blue" }] with players: 2. Array length must match players.