Smol Machines Nodes API
Cluster node enrollment and status
Cluster node enrollment and status
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/smol-machines-nodes-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: smolfleet Nodes API
description: Control plane for smolvm — deploy and run machines across a cluster.
license:
name: Apache-2.0
version: 0.1.0
servers:
- url: https://api.smolmachines.com
description: Hosted smolfleet
tags:
- name: Nodes
description: Cluster node enrollment and status
paths:
/v1/nodes:
get:
tags:
- Nodes
operationId: node_list
responses:
'200':
description: List nodes
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/NodeInfo'
summary: Node list
x-summary-source: derived
/v1/nodes/register:
post:
tags:
- Nodes
operationId: node_register
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NodeInfo'
required: true
responses:
'200':
description: Node registered
content:
application/json:
schema:
$ref: '#/components/schemas/NodeInfo'
summary: Node register
x-summary-source: derived
/v1/nodes/{id}/credential:
delete:
tags:
- Nodes
operationId: node_credential_revoke
parameters:
- name: id
in: path
description: Node id
required: true
schema:
type: string
responses:
'204':
description: Credential revoked
summary: Node credential revoke
x-summary-source: derived
/v1/nodes/{id}/drain:
post:
tags:
- Nodes
operationId: node_drain
parameters:
- name: id
in: path
description: Node id
required: true
schema:
type: string
responses:
'200':
description: Node draining
summary: Node drain
x-summary-source: derived
/v1/nodes/{id}/heartbeat:
post:
tags:
- Nodes
operationId: node_heartbeat
parameters:
- name: id
in: path
description: Node id
required: true
schema:
type: string
responses:
'200':
description: Heartbeat accepted
summary: Node heartbeat
x-summary-source: derived
components:
schemas:
NodeInfo:
type: object
required:
- id
- address
- smolvmAddress
- status
- totalCpus
- availableCpus
- totalMemoryMb
- availableMemoryMb
- totalDiskGb
- availableDiskGb
- labels
- registeredAt
properties:
address:
type: string
availableCpus:
type: integer
format: int32
minimum: 0
availableDiskGb:
type: integer
format: int64
minimum: 0
availableMemoryMb:
type: integer
format: int64
minimum: 0
id:
type: string
labels:
type: object
additionalProperties:
type: string
propertyNames:
type: string
lastHeartbeatAt:
type:
- string
- 'null'
registeredAt:
type: string
runtime:
type: string
description: 'The runtime this node speaks (e.g. `"smolvm"`). The control plane resolves
a driver from this name; `smolvm_address` is that runtime''s endpoint.
Defaults to `"smolvm"` so a node that doesn''t report a runtime (the only
runtime today) is handled transparently.'
smolvmAddress:
type: string
description: The runtime endpoint (HTTP address) on this node.
status:
type: string
totalCpus:
type: integer
format: int32
minimum: 0
totalDiskGb:
type: integer
format: int64
minimum: 0
totalMemoryMb:
type: integer
format: int64
minimum: 0
usedCpus:
type: number
format: double
description: 'Real CPU usage as fractional CPUs (e.g., 2.5 = 2.5 CPUs worth of load).
Reported by the node from hypervisor/process stats. Separate from
`available_cpus` (which is allocation-based bookkeeping).'
usedDiskGb:
type: integer
format: int64
description: 'Real disk space consumed by VM overlay/storage files in GB. Reported
from filesystem stat of VM disk images. Separate from
`available_disk_gb` (which reflects the entire host filesystem).'
minimum: 0
usedMemoryMb:
type: integer
format: int64
description: 'Real memory usage in MB. Reported by the node from RSS of VM processes.
Separate from `available_memory_mb` (which is allocation-based bookkeeping).'
minimum: 0