Create computer
Provision a new computer in a workspace.
template_ref create restores the template’s golden snapshot, which boots far faster than the plain base image. Without one the computer cold-boots from the base image.Request
400. The older name project_id is also accepted; workspace_id wins when you send both.409, and omitting the field returns 400.linux, windows, macos, android, or ios. Any other value returns 400. windows needs a Scale plan or a purchased Windows licence, otherwise it returns 403 with code WINDOWS_REQUIRES_SCALE. ios is a physical handset rather than a virtual computer. Every value other than linux only succeeds where the fleet has a host that supports it, otherwise create returns 422 with code OS_UNAVAILABLE.4, 8, 16, 32, or 64. With os: "macos", 12 is also accepted. 0 is treated as 4. Any other value returns 400. A value above your plan’s per-computer ceiling is rejected with 403, not clamped. Ignored for os: "ios", which always records 4.0.5, 1, 2, 4, 8, or 16. 0 is treated as 1. Any other value returns 400. A value above your plan’s per-computer ceiling is rejected with 403, not clamped. Ignored for os: "ios", which always records 1.40 GB on current paid plans). 0 counts as omitted. A negative or non-numeric value, or one above your plan’s per-computer ceiling, is rejected with 400 and code disk_exceeds_quota, not clamped.WIDTHxHEIGHTxDEPTH format (e.g. 1024x768x24, 1920x1080x24). Omitted means 1280x720x24, or 1920x1080x24 for macos. With a template_ref, omitting it keeps the template’s own resolution.2q (2 GB VRAM) or 4q (4 GB VRAM). "none", "", false, and "false" are treated as omitted. Any other value returns 400. Linux only: combining it with another os returns 400 with code GPU_REQUIRES_LINUX. Omitted means a CPU-only computer. If no GPU host can take the create, the request either returns 503 GPU_HOST_UNAVAILABLE or falls back to a CPU computer, in which case the 201 body carries gpu_downgraded and warning.namespace/name@version, for example system/claude-code@1.0.0 (curated) or default/my-template@1.0.0 (your own). A malformed ref returns 400; a template whose build is not ready returns 409 with code TEMPLATE_NOT_READY. Explicit cpu, ram, and disk_size_gb override the template’s own hardware. The template’s own cpu and ram are clamped to your plan’s per-computer ceiling rather than rejected; its disk is not, so a template disk above your ceiling returns 400 with code disk_exceeds_quota. Omitted means a plain base-image computer.Common configurations
cpu: 8 and cpu: 16 therefore pass the value check and then return 403 with code PER_COMPUTER_CPU_CAP.
Your own per-computer ceiling starts below the cap and depends on your plan. See https://orgo.ai/pricing.
Response
Returns the created computer.workspace_id, carrying the same value.WIDTHxHEIGHTxDEPTH format.creating, running, restarting, updating, suspended, frozen, stopped, error, deleted. A successful create returns running. See Get computer for what each value means.http://{host}:{port}. This is an internal fleet address, not a dashboard link and not the endpoint you connect to. Use connection_url to connect. It is rewritten whenever the computer restarts, is started again, or has its RAM resized.instance_id, carrying the same value.www.orgo.ai.https://www.orgo.ai/desktops/{instance_id}). Append /ws/websockify, /ws/terminal, or /ws/audio for the WebSocket endpoints; HTTP Desktop API calls go to https://www.orgo.ai/api/desktops/{instance_id}/proxy/{endpoint}.?token=, and Bearer token for its Desktop API proxy. Rotates on every restart. Do not persist it. Take a fresh value from POST /computers or GET /computers/{id}. null when the stored credential cannot be decrypted.provider, id, name, webUrl, vncHost, vncPort, apiPort, serverAddress, resolution, and fromPool (always false), plus hypervisor and templateTerminals when they apply.hardware. The host’s launch record for the new computer, without the host’s name or the source its state was restored from.true only when you asked for a gpu and no GPU host was available, so a CPU computer was created instead.gpu_downgraded, explaining the downgrade.Example
Response
Errors
Every error body carrieserror. Most also carry a machine-readable code, and some carry extra fields, listed below.
UPGRADE_REQUIRED, VM_SLOT_ADDON, RAM_ADDON, VCPU_ADDON, PER_COMPUTER_RAM_CAP, PER_COMPUTER_CPU_CAP, CHANGE_PLAN, PLAN_LIMIT, and the code-less grandfathered case) also carry canManageCapacity, which tells you whether you are the workspace owner and can raise the limit yourself. Where a plan change would fix it, they also carry upgradeTier. WINDOWS_REQUIRES_SCALE carries upgradeTier alone.
Unavailable operating systems
An accepted OS value can still be unavailable in your workspace. When no eligible host supports it, create returns422 with code OS_UNAVAILABLE. Failed provisioning removes its placeholder record, so you can retry the name. Temporary capacity failures remain retryable service errors.
The 300 GB disk cap is a product maximum, not an included allowance. Current Scale includes a 150 GB per-computer ceiling; unused storage add-ons can raise it to 300 GB. Complimentary current Scale has the same resource limits as paid current Scale.Authorizations
API key authentication. Get your key at orgo.ai/workspaces
Body
ID of the workspace to create the computer in
"550e8400-e29b-41d4-a716-446655440000"
Computer name
1"agent-1"
Operating system. Omitted, you get linux. Any other value returns 400. windows needs a Scale plan or a purchased Windows licence, otherwise it returns 403 with code WINDOWS_REQUIRES_SCALE. ios is a physical handset rather than a virtual computer. Every value other than linux only succeeds where the fleet has a host that supports it, otherwise create returns 422 with code OS_UNAVAILABLE.
linux, windows, macos, android, ios vCPU cores. Omitted, you get 1. Capped by the workspace owner's plan.
0.5, 1, 2, 4, 8, 16 RAM in GB. Omitted, you get 4. 12 is accepted only with os: "macos"; with any other os it returns 400. Capped by the workspace owner's plan.
4, 8, 12, 16, 32, 64 Disk size in GB. Omit to use template sizing or the owner plan birth size (40 GB on current paid plans). Your plan and unused storage add-ons determine the ceiling, up to 300 GB on current plans. A 150 GB plan ceiling does not include a free 300 GB disk.
Display resolution in WIDTHxHEIGHTxDEPTH format. Omitted, 1280x720x24, or 1920x1080x24 for macos. With a template_ref, omitting it keeps the template's own resolution.
"1280x720x24"
vGPU slice to attach: 2q (2 GB VRAM) or 4q (4 GB VRAM). "none", "", false, and "false" are treated as omitted; any other value returns 400. Linux only: combining it with another os returns 400 with code GPU_REQUIRES_LINUX. Omitted, you get a CPU-only computer. If no GPU host can take the create, it either returns 503 with code GPU_HOST_UNAVAILABLE or falls back to a CPU computer, and the 201 body then carries gpu_downgraded and warning.
2q, 4q Launch from a template's golden snapshot instead of a base image. Format namespace/name@version, e.g. system/claude-code@1.0.0 (curated) or default/my-template@1.0.0 (your own). The hardware fields above override the template's defaults. The template's build must be ready.
"system/claude-code@1.0.0"
Response
Computer created
A computer. No single response carries every field: POST /computers returns workspace_id, project_id, instance_id, fly_instance_id, and the connect fields, plus hardware and launch when the host reports them; GET /computers/{id} returns project_id, project_name, permissions, fly_instance_id, the connect fields, private_screens, and hardware; a computer embedded in a workspace carries the stored row. Each operation's example shows what that operation returns.
Unique computer identifier
"a3bb189e-8bf9-3888-9912-ace4e6543002"
Computer name
"agent-1"
ID of the workspace the computer belongs to. Returned by POST /computers; GET /computers/{id} returns it as project_id.
"550e8400-e29b-41d4-a716-446655440000"
Name of the parent workspace
"production"
Operating system. ios is a physical handset rather than a virtual computer.
linux, windows, macos, android, ios "linux"
RAM in GB. 12 occurs only on macOS.
4, 8, 12, 16, 32, 64 4
vCPU cores.
0.5, 1, 2, 4, 8, 16 1
Current status
creating, running, restarting, updating, suspended, frozen, stopped, error, deleted "running"
Base URL of the computer's own API on the host that runs it, as http://<host>:<port>. Plain HTTP, and reachable only from inside Orgo's network. It is not a dashboard link and not an endpoint you can call. Use connection_url from your own code.
"http://198.51.100.24:8081"
Stable identifier for the underlying compute instance, returned by POST /computers. Use it for connection URLs and to reference the computer across restarts. GET /computers/{id} returns the same value as fly_instance_id.
"a3881618"
Same-origin host for the computer's connection endpoints: www.orgo.ai. Empty while the computer has no instance id, such as when it is frozen.
"www.orgo.ai"
Same-origin connection base (https://www.orgo.ai/desktops/{instance_id}). Append /ws/websockify, /ws/terminal, or /ws/audio for WebSocket endpoints; HTTP Desktop API calls go to https://www.orgo.ai/api/desktops/{instance_id}/proxy/{endpoint}.
"https://www.orgo.ai/desktops/a3881618"
VNC / WebSocket Bearer token. Rotates on restart, on start, and on a RAM resize, so do not persist it. null when you have view-only access to the workspace, or when the stored credential cannot be decrypted.
"a06db12a8683df96"
ID of the parent workspace, under its older name. POST /computers returns it as a deprecated alias of workspace_id; GET /computers/{id} returns only this name.
"550e8400-e29b-41d4-a716-446655440000"
The instance id under its legacy name. The same value POST /computers returns as instance_id. GET /computers/{id} returns only this name. null while the computer has no host (frozen).
"a3881618"
What your role in the workspace allows.
Returned by GET /computers/{id}. true when the computer's workspace keeps screens private, so the Orgo dashboard keeps the screen covered until someone chooses to show it.
false
The computer's placement and connection record: provider, id, name, webUrl, vncHost, vncPort, apiPort, serverAddress, resolution, and fromPool, plus hypervisor and templateTerminals when they apply. GET /computers/{id} and the workspace endpoints remove every field whose name contains password, secret, token, api_key, or authorized_keys, in any letter case and at any depth.
What the computer runs on, from its current VM's launch record. GET /computers/{id} always returns it, null when the host has not reported a launch record for the computer's current VM. POST /computers returns it, with launch, only when the host reports how it launched the computer.
Returned by POST /computers alongside hardware, when the host reports how it launched the computer: the host's launch record for the new computer, without the host's name or the source its state was restored from.
Display resolution in WIDTHxHEIGHTxDEPTH format. Returned by POST /computers.
"1280x720x24"
Returned by POST /computers only, present and true when you asked for a gpu and a CPU computer was created instead.
Present only alongside gpu_downgraded, explaining the downgrade.