Create a VM
Command line
The orl CLI wraps this endpoint:
orl vms create --name <name> --ssh-key-ids <ssh-key-ids>Authorization
apiKey OpenRelay API key. Send it as Authorization: Bearer or_… (legacy vl_… keys still work).
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/orgs/string/vms/create" \ -H "Content-Type: application/json" \ -d '{ "name": "cuda-devbox", "gpuModelId": "rtx-4090", "gpuCount": 1, "imageUrl": "ghcr.io/acme/cuda-devbox:latest", "diskSizeGb": 100, "sshKeyIds": [ "key_2f9c1a" ], "envVars": { "HF_TOKEN": "hf_xxxxxxxx" } }'{ "id": "string", "organizationId": "string", "name": "string", "status": "string", "statusReason": "string", "gpuModelId": "string", "gpuCount": 0, "endpointUrl": "string", "volumeGb": 0, "public": true, "createdAt": "string", "provisioningStage": "string", "resourceSize": "string", "tier": "string", "diskSizeGb": 0, "gpuModelName": "string", "pricePerHourCents": 0, "serviceType": "string", "managedBy": "string", "capabilityTier": "string", "computeClass": "string", "imageUrl": "string"}GPU utilization, memory, power and temperature time series for a pod GET
Host-side NVIDIA telemetry for a pod's GPUs, sampled on the node that runs it and returned as one continuous time grid. Every series and every GPU in a response shares that grid: the value at index i of any values array was measured at start plus i times stepSeconds, and a null means the node reported no sample at that point. The window ends now and covers only the periods this pod actually held the GPUs it is reported against, so a card that ran another customer's pod earlier never contributes a sample here. A GPU attached to a VM is passed through to the guest, so the host cannot read it. That case answers 200 with an accelerator status of unavailable and an empty gpus list rather than an error, and so do a pod that has not started yet, a pod that was not running in the selected range, and a metrics store that cannot be reached: the accelerator object is the answer, and the client renders its detail sentence. A host that stopped reporting while the pod is still running answers degraded with the history up to the last sample still attached. This operation is exposed as an agent tool by default, in the same class as a pod's burn rate: "how busy were my GPUs" is a read-only question about a resource the caller already owns.
Stop a VM POST
Stops the workload and releases its GPU. A VM keeps its disk; a pod keeps its /workspace volume and its node, and can be started again with restart.