CPU Virtual Machines
A CPU VM is a machine you administer through SSH. Varity does not build your code, wire application services, or assign it an application URL. For a managed application runtime, see What You Can Deploy.
Read the Live Catalog
Section titled “Read the Live Catalog”Profiles, regions, images, availability, resources, and prices are mutable. Read them from the authenticated catalog immediately before requesting a quote:
curl "https://varity.app/api/deployment-profiles?workload=virtual_machine&execution_class=cpu_virtual_machine" \ -H "Authorization: Bearer $VARITY_API_KEY"Keep the selected profile_id and one os_images[].id returned on that same
profile. Do not copy an identifier, region, disk size, or rate from
documentation into automation.
If you need additional storage, include additional_storage_gb in both the
quote and create requests. Read its current validation bounds and billing
fields from the OpenAPI contract and returned quote.
Create a Machine
Section titled “Create a Machine”-
Pick a profile and an image
Read the catalog and keep the
profile_id(formatmp-plus 24 hex characters) and oneos_images[].id.Terminal window curl "https://varity.app/api/deployment-profiles?workload=virtual_machine&execution_class=cpu_virtual_machine" \-H "Authorization: Bearer $VARITY_API_KEY" -
Get a quote
Terminal window curl -X POST https://varity.app/api/pricing/machine-quote \-H "Authorization: Bearer $VARITY_API_KEY" \-H "Content-Type: application/json" \-d '{"profile_id": "mp-0628f148846594bc2dd04c9c","execution_class": "cpu_virtual_machine","os_image": "os-ubuntu-24-04-lts-x64-70031bd79dea"}'The response carries
quote_token,quote_reference,resource_fingerprint,hourly_usd,authorization_usd,valid_until, andpricing_policy_version. The quote expires. Readvalid_untiland request a new one rather than retrying an old token. -
Create the machine
Terminal window curl -X POST https://varity.app/api/machines \-H "Authorization: Bearer $VARITY_API_KEY" \-H "Idempotency-Key: my-vm-create-001" \-H "Content-Type: application/json" \-d '{"name": "my-worker","profile_id": "mp-0628f148846594bc2dd04c9c","execution_class": "cpu_virtual_machine","os_image": "os-ubuntu-24-04-lts-x64-70031bd79dea","ssh_public_key": "ssh-ed25519 AAAA...","accelerator_quote_token": "<quote_token from step 2>"}'The quote’s
quote_tokenis sent asaccelerator_quote_token. The field name is the same for CPU VMs as for GPU machines.nameis lowercase letters, digits, and hyphens, up to 63 characters.Idempotency-Keyis required (8 to 128 characters).The response is
202withmachine_id,replayed, and anoperationblock. -
Poll until access appears
Terminal window curl https://varity.app/api/machines/$MACHINE_ID \-H "Authorization: Bearer $VARITY_API_KEY"accessisnulluntil the machine is ready, then becomesprotocol: "ssh"withhost,port, andusername.lifecycle.statusmoves throughaccepted,running, andsucceededorfailed.
Connect
Section titled “Connect”ssh -p <port> <username>@<host>Take all three values from the machine’s access block. There is no default username or port to assume.
Billing
Section titled “Billing”A CPU VM bills hourly and never costs more than its monthly maximum for compute in a month. Storage is billed separately.
The machine’s billing block reports:
stateispending,active, orstopped.customer_priceis the hourly rate, in microdollars.monthly_cap_microusdis present only forcpu_virtual_machine.month_to_dateholdscompute_microusd(never more thanmonthly_cap_microusdin a month),storage_microusd(no monthly maximum), andmonth_started_at. It isnulluntil the first billed hour completes, so a new machine legitimately shows nothing.
Restart
Section titled “Restart”curl -X POST https://varity.app/api/machines/$MACHINE_ID/actions \ -H "Authorization: Bearer $VARITY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"action": "restart"}'action is restart or soft_reboot. Both act in place: same machine, same SSH access, same billing. Rebooting does not pause charges.
Delete
Section titled “Delete”curl -X DELETE https://varity.app/api/machines/$MACHINE_ID \ -H "Authorization: Bearer $VARITY_API_KEY"Deletion is asynchronous, and acceptance is not proof of closure. Read the machine back and check lifecycle.cleanup_state. It reaches complete when release has actually finished. Deleting destroys the disk; there is no suspend state that keeps data while stopping charges.