Skip to main content
Moving files to or from a paused machine resumes it first.

Upload

The CLI handles everything below; use it unless you’re writing your own client:
POST /v1/machines/{id}/files/upload takes {"root", "files": [{"path", "size", "sha256", "content_base64"}]}. Paths are relative to root (default /project) or absolute. Each file in the response has a status: Commit uploaded files with POST /v1/machines/{id}/files/upload/complete and {"root", "files": [{"path", "sha256", "upload_id"}]}, using each file’s upload_id. Each file comes back written, or committing while it’s still being copied onto the machine.

Download

POST /v1/machines/{id}/files/download takes {"root", "paths": [...]}, files or folders, relative to root (default /project). Each file comes back with its path, size and sha256, and either content_base64 (small files) or a download_url to GET (larger files; valid 2 hours).

Ports

Run a server on the machine, such as a preview, a notebook or a viewer, and open it in your browser:
POST /v1/machines/{id}/ports with {"port": 8080} returns {port, url, expires_at}, where url is a link like https://k3v9q2m7x4b8n1c6z5w0.run.voyager.computer/. It serves HTTP and WebSockets while the machine runs, and stops working when it’s released or the link expires.
Anyone with the link can reach that port while the machine runs. Don’t share it, and don’t serve anything on it you wouldn’t want seen.