Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/vers-vm-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
title: Orchestrator Control Plane commit_tags Vm API
description: ''
license:
name: ''
version: 0.1.0
servers:
- url: https://api.vers.sh
description: Base URL declared by the provider in apis.yml (roadmap#122).
tags:
- name: vm
paths:
/api/v1/vm/branch/by_commit/{commit_id}:
post:
tags:
- vm
operationId: branch_by_commit
parameters:
- name: commit_id
in: path
description: The commit id to branch off
required: true
schema:
type: string
- name: count
in: query
description: Number of VMs to branch (optional; default 1)
required: false
schema:
type: integer
format: int32
minimum: 0
responses:
'201':
description: Branch VM(s) created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'400':
description: Invalid VM ID
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
security:
- bearer_auth: []
/api/v1/vm/branch/by_ref/{repo_name}/{tag_name}:
post:
tags:
- vm
operationId: branch_by_ref
parameters:
- name: repo_name
in: path
description: The repository name
required: true
schema:
type: string
- name: tag_name
in: path
description: The tag name within the repository
required: true
schema:
type: string
- name: count
in: query
description: Number of VMs to branch (optional; default 1)
required: false
schema:
type: integer
format: int32
minimum: 0
responses:
'201':
description: Branch VM(s) created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'404':
description: Repository or tag not found
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
security:
- bearer_auth: []
/api/v1/vm/branch/by_tag/{tag_name}:
post:
tags:
- vm
operationId: branch_by_tag
parameters:
- name: tag_name
in: path
description: The tag name to branch off
required: true
schema:
type: string
- name: count
in: query
description: Number of VMs to branch (optional; default 1)
required: false
schema:
type: integer
format: int32
minimum: 0
responses:
'201':
description: Branch VM(s) created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'404':
description: Tag not found
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
security:
- bearer_auth: []
/api/v1/vm/branch/by_vm/{vm_id}:
post:
tags:
- vm
operationId: branch_by_vm
parameters:
- name: vm_id
in: path
description: VM to commit and then branch off of
required: true
schema:
type: string
- name: keep_paused
in: query
description: If true, keep VM paused after commit
required: false
schema:
type: boolean
- name: skip_wait_boot
in: query
description: If true, immediately return an error if VM is booting instead of waiting
required: false
schema:
type: boolean
- name: count
in: query
description: Number of VMs to branch (optional; default 1)
required: false
schema:
type: integer
format: int32
minimum: 0
responses:
'201':
description: Branch VM(s) created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'400':
description: Invalid VM ID
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
security:
- bearer_auth: []
/api/v1/vm/from_commit:
post:
tags:
- vm
operationId: restore_from_commit
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FromCommitVmRequest'
required: true
responses:
'201':
description: VM restored from commit successfully
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmResponse'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Cluster not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/new_root:
post:
tags:
- vm
operationId: create_new_root_vm
parameters:
- name: wait_boot
in: query
description: 'If true, wait for the newly-created VM to finish booting before returning. Default: false.'
required: false
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NewRootRequest'
required: true
responses:
'201':
description: VM created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmResponse'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}:
delete:
tags:
- vm
operationId: delete_vm
parameters:
- name: vm_id
in: path
description: VM ID to delete
required: true
schema:
type: string
- name: skip_wait_boot
in: query
description: 'If true, return an error immediately if the VM is still booting. Default: false'
required: false
schema:
type: boolean
responses:
'200':
description: VM deleted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/VmDeleteResponse'
'400':
description: Invalid VM ID
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/commit:
post:
tags:
- vm
operationId: commit_vm
parameters:
- name: vm_id
in: path
description: VM ID to commit
required: true
schema:
type: string
- name: keep_paused
in: query
description: If true, keep VM paused after commit
required: false
schema:
type: boolean
- name: skip_wait_boot
in: query
description: 'If true, return an error immediately if the VM is still booting. Default: false'
required: false
schema:
type: boolean
requestBody:
description: Optional commit metadata
content:
application/json:
schema:
$ref: '#/components/schemas/VmCommitRequest'
required: true
responses:
'201':
description: VM committed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/VmCommitResponse'
'400':
description: Invalid VM ID
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/disk:
patch:
tags:
- vm
operationId: resize_vm_disk
parameters:
- name: vm_id
in: path
description: VM ID whose disk to resize
required: true
schema:
type: string
format: uuid
- name: skip_wait_boot
in: query
description: 'If true, return an error immediately if the VM is still booting. Default: false'
required: false
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VmResizeDiskRequest'
required: true
responses:
'200':
description: VM disk resized successfully
'400':
description: Invalid request (e.g. new size not larger than current)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/exec:
post:
tags:
- vm
operationId: exec_vm
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VmExecRequest'
required: true
responses:
'200':
description: Command executed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/VmExecResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/exec/stream:
post:
tags:
- vm
operationId: exec_vm_stream
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VmExecRequest'
required: true
responses:
'200':
description: NDJSON stream of stdout/stderr chunks
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/exec/stream/attach:
post:
tags:
- vm
operationId: exec_vm_stream_attach
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VmExecStreamAttachRequest'
required: true
responses:
'200':
description: NDJSON stream replaying from cursor
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/files:
get:
tags:
- vm
operationId: read_file_vm
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
- name: path
in: query
description: Absolute path of the file to read
required: true
schema:
type: string
responses:
'200':
description: File contents
content:
application/json:
schema:
$ref: '#/components/schemas/VmReadFileResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
put:
tags:
- vm
operationId: write_file_vm
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VmWriteFileRequest'
required: true
responses:
'200':
description: File written successfully
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/label:
patch:
tags:
- vm
operationId: label_vm
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LabelVmRequest'
required: true
responses:
'200':
description: Labels set successfully
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/logs:
get:
tags:
- vm
operationId: vm_logs
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
- name: offset
in: query
description: 'Byte offset into the log file (default: 0)'
required: false
schema:
type: integer
format: int64
minimum: 0
- name: max_entries
in: query
description: Maximum number of log entries to return
required: false
schema:
type: integer
format: int32
minimum: 0
- name: stream
in: query
description: Filter by 'stdout' or 'stderr'
required: false
schema:
type: string
responses:
'200':
description: Exec logs retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/VmExecLogResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/metadata:
get:
tags:
- vm
operationId: get_vm_metadata
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
responses:
'200':
description: VM metadata
content:
application/json:
schema:
$ref: '#/components/schemas/VmMetadataResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/ssh_key:
get:
tags:
- vm
operationId: ssh_key
parameters:
- name: vm_id
in: path
description: Node ID
required: true
schema:
type: string
format: uuid
responses:
'200':
description: List all VMs on node
content:
application/json:
schema:
$ref: '#/components/schemas/VmSshKeyResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/state:
patch:
tags:
- vm
operationId: update_vm_state
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
- name: skip_wait_boot
in: query
description: If true, error immediately if the VM is not finished booting. Defaults to false
required: false
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VmUpdateStateRequest'
required: true
responses:
'200':
description: VM state updated successfully
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_id}/status:
get:
tags:
- vm
operationId: vm_status
parameters:
- name: vm_id
in: path
description: VM ID
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Get status of a specific VM
content:
application/json:
schema:
$ref: '#/components/schemas/VM'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/api/v1/vm/{vm_or_commit_id}/branch:
post:
tags:
- vm
operationId: branch_vm
parameters:
- name: vm_or_commit_id
in: path
description: Parent VM or commit ID
required: true
schema:
type: string
- name: keep_paused
in: query
description: If true, keep VM paused after commit. Only applicable when branching a VM ID.
required: false
schema:
type: boolean
- name: skip_wait_boot
in: query
description: If true, immediately return an error if VM is booting instead of waiting. Only applicable when branching a VM ID.
required: false
schema:
type: boolean
- name: count
in: query
description: Number of VMs to branch (optional; default 1)
required: false
schema:
type: integer
format: int32
minimum: 0
responses:
'201':
description: Branch VM created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/NewVmsResponse'
'400':
description: Invalid VM ID
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: VM not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
components:
schemas:
ErrorResponse:
type: object
properties:
error:
type: string
description: Reason of error
success:
type: boolean
description: 'Is always: false'
VmCreateVmConfig:
type: object
description: Struct representing configuration options common to all VMs
properties:
fs_size_mib:
type:
- integer
- 'null'
format: int32
description: The disk size, in MiB.
minimum: 0
image_name:
type:
- string
- 'null'
description: The filesystem base image name. Currently, must be 'default'
kernel_name:
type:
- string
- 'null'
description: The kernel name. Currently, must be 'default.bin'
labels:
type:
- object
- 'null'
additionalProperties:
type: string
propertyNames:
type: string
mem_size_mib:
type:
- integer
- 'null'
format: int32
description: The RAM size, in MiB.
minimum: 0
vcpu_count:
type:
- integer
- 'null'
format: int32
description: How many vCPUs to allocate to this VM (and its children)
minimum: 0
VmExecResponse:
type: object
description: Response body for POST /api/vm/{vm_id}/exec
required:
- exit_code
- stdout
- stderr
properties:
exec_id:
type:
- string
- 'null'
format: uuid
description: Exec identifier associated with this run.
exit_code:
type: integer
format: int32
description: Exit code returned by the command.
stderr:
type: string
description: UTF-8 decoded stderr (lossy).
stdout:
type: string
description: UTF-8 decoded stdout (lossy).
VmDeleteResponse:
type: object
description: Response body for DELETE /api/vm/{vm_id}
required:
- vm_id
properties:
vm_id:
type: string
VmUpdateStateRequest:
type: object
description: Request body for PATCH /api/vm/{vm_id}/state
required:
- state
properties:
state:
$ref: '#/components/schemas/VmUpdateStateEnum'
description: The requested state for the VM
VmWriteFileRequest:
type: object
description: Request body for PUT /api/vm/{vm_id}/files
required:
# --- truncated at 32 KB (40 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vers/refs/heads/main/openapi/vers-vm-api-openapi.yml