Desktops: capture the screen with POST /v2/desktops/{id}:screenshot and drive it with POST /v2/desktops/{id}:act
A screenshot returns the whole screen as base64, as png or jpeg (set quality, 1 to 100), with its width and height. An action moves, clicks, drags or scrolls the mouse by pixel, types text, presses xdotool key names such as ctrl+l or Return, reads the cursor position, lists the windows and focuses one, opens a URL in the desktop's Chromium, or launches a program. Both run inside the desktop's own sandbox. Returns 400 (invalid_request) when a field is outside its limits, 409 (desktop_not_running) when the desktop is not running, and 409 (desktop_failed) with the command's own error when it fails. Available in every SDK as desktops.screenshot and desktops.act.
Apps, Functions and Containers: volumes are mounted
A version whose spec.volumes names a volume now mounts it in each copy before its process starts. Before, the version failed with deploy_build_failed: volumes cannot be read here yet. A volume that is still being created is waited for; one that does not exist, or was deleted after the request was accepted, fails the version with not_found. A POST, PUT or PATCH that sets spec.volumes needs volumes:attach; without it, the request returns 403.
Sandboxes: mount a volume through v2
POST /v2/sandboxes accepts spec.volumes, a list of at most one {volume, path} entry naming a volume of the same project by its ID (vol_...). The volume is mounted read-write at its path before the sandbox's phase is running; a volume that is still being created is waited for. The sandbox writes the volume alone: while it holds it, no other sandbox mounts it, and it cannot be forked. The API key needs volumes:attach, and must be able to read the volume: without volumes:attach the request returns 403, and a volume the key cannot read, or that does not exist, returns 400. volumes is set when the sandbox is created and cannot be changed. Each path must be absolute, outside /proc, /sys and /dev, and neither at nor inside a file share's path; otherwise the request returns 400.