MoveWeight Cloud API
RESTful API for managing cloud infrastructure. JSON requests and responses. Base URL: https://api.moveweight.net/v1
Quick start: Generate an API key in your
Dashboard under Settings → API Keys. All endpoints require authentication.
Authentication
Include your API key in the X-API-Key header or as a Bearer token.
cURL
Python
Node.js
Copy # API Key header
curl https://api.moveweight.net/v1/vms \
-H "X-API-Key: mw_sk_live_abc123..."
# Or Bearer token
curl https://api.moveweight.net/v1/vms \
-H "Authorization: Bearer mw_sk_live_abc123..."
Copy import requests
headers = {"X-API-Key" : "mw_sk_live_abc123..." }
resp = requests.get("https://api.moveweight.net/v1/vms" , headers=headers)
print (resp.json())
Copy const resp = await fetch('https://api.moveweight.net/v1/vms' , {
headers: { 'X-API-Key' : 'mw_sk_live_abc123...' }
});
const data = await resp.json();
Error Handling
The API uses standard HTTP status codes. Errors include a JSON body with error and message fields.
Code Meaning
200Success
201Created
400Bad request — invalid parameters
401Unauthorized — missing or invalid API key
403Forbidden — insufficient permissions
404Not found
429Rate limited
500Server error — contact support
Rate Limits
API requests are rate limited per API key. Limits are returned in response headers:
Header Description
X-RateLimit-LimitMax requests per window
X-RateLimit-RemainingRemaining requests
X-RateLimit-ResetUnix timestamp when limit resets
Default: 1,000 requests/minute for read endpoints, 100 requests/minute for write endpoints.
Virtual Machines
List VMs
GET /v1/vms
Returns a paginated list of all VMs in your account.
cURL
Python
Node.js
Copy curl https://api.moveweight.net/v1/vms \
-H "X-API-Key: mw_sk_live_abc123..."
Copy resp = requests.get("https://api.moveweight.net/v1/vms" , headers=headers)
vms = resp.json()["vms" ]
for vm in vms:
print (f"{vm['name']} — {vm['status']}" )
Copy const { vms } = await fetch('https://api.moveweight.net/v1/vms' , {
headers: { 'X-API-Key' : 'mw_sk_live_abc123...' }
}).then(r => r.json());
vms.forEach(vm => console.log(vm.name, vm.status));
Response:
Copy {
"vms" : [
{
"id" : "vm-a1b2c3" ,
"name" : "web-prod-01" ,
"cpu" : 4 ,
"ram" : "8GB" ,
"storage" : "100GB NVMe" ,
"status" : "running" ,
"region" : "us-east" ,
"ip" : "10.0.1.42" ,
"created_at" : "2026-05-28T14:22:00Z"
}
],
"total" : 1 ,
"page" : 1
}
Create VM
POST /v1/vms
Parameter Type Description
namestring Required VM name (lowercase, alphanumeric + hyphens)
cpuinteger Required Number of vCPUs (1-64)
raminteger Required RAM in GB (1-256)
storageinteger Optional NVMe storage in GB (default: 20)
regionstring Optional Deployment region (default: us-east)
imagestring Optional OS image (default: ubuntu-24.04)
cURL
Python
Node.js
Copy curl -X POST https://api.moveweight.net/v1/vms \
-H "X-API-Key: mw_sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"name": "api-server",
"cpu": 4,
"ram": 8,
"storage": 100,
"region": "us-east",
"image": "ubuntu-24.04"
}'
Copy resp = requests.post("https://api.moveweight.net/v1/vms" ,
headers=headers,
json={
"name" : "api-server" ,
"cpu" : 4 ,
"ram" : 8 ,
"storage" : 100 ,
"region" : "us-east"
}
)
vm = resp.json()
print (f"Created: {vm['id']} — {vm['status']}" )
Copy const resp = await fetch('https://api.moveweight.net/v1/vms' , {
method: 'POST' ,
headers: {
'X-API-Key' : 'mw_sk_live_abc123...' ,
'Content-Type' : 'application/json'
},
body: JSON.stringify({
name: 'api-server' , cpu: 4 , ram: 8 ,
storage: 100 , region: 'us-east'
})
});
const vm = await resp.json();
GPU Instances
List Available GPUs
GET /v1/gpu/instances
Returns available GPU types, pricing, and current stock by region.
Copy {
"available" : [
{ "gpu" : "RTX 4090" , "vram" : "24GB" , "price" : "$0.35/hr" , "stock" : 42 , "region" : "us-east" },
{ "gpu" : "A100 80GB" , "vram" : "80GB" , "price" : "$1.20/hr" , "stock" : 12 , "region" : "us-east" },
{ "gpu" : "H100" , "vram" : "80GB" , "price" : "$2.80/hr" , "stock" : 6 , "region" : "eu-west" }
],
"note" : "No egress charges. Spot instances at 60% discount."
}
Request GPU Instance
POST /v1/gpu/request
Parameter Type Description
gpustring Required GPU type: rtx4090, a100, h100
countinteger Optional Number of GPUs (default: 1)
regionstring Optional Deployment region
spotboolean Optional Use spot pricing (60% off)
imagestring Optional Pre-configured ML image (pytorch, tensorflow, cuda)
Object Storage
List Buckets
GET /v1/storage/buckets
S3-compatible object storage. $5/TB/month, no egress fees.
cURL
Python (boto3)
Copy curl https://api.moveweight.net/v1/storage/buckets \
-H "X-API-Key: mw_sk_live_abc123..."
Copy import boto3
s3 = boto3.client('s3' ,
endpoint_url='https://s3.moveweight.net' ,
aws_access_key_id='mw_sk_live_abc123...' ,
aws_secret_access_key='mw_secret_xyz789...'
)
buckets = s3.list_buckets()
for b in buckets['Buckets' ]:
print (b['Name' ])
DNS
List DNS Zones
GET /v1/dns/zones
Managed DNS with <5 second global propagation. DNSSEC enabled by default.
Add DNS Record
POST /v1/dns/zones/{zone_id}/records
Parameter Type Description
typestring Required A, AAAA, CNAME, MX, TXT, SRV
namestring Required Record name (e.g. "api" for api.example.com)
valuestring Required Record value (IP, hostname, etc.)
ttlinteger Optional TTL in seconds (default: 300)
Model Hosting
Deploy Model
POST /v1/models/deploy
Deploy an ML model for inference. Supports HuggingFace, ONNX, TensorFlow SavedModel, and PyTorch formats.
cURL
Python
Copy curl -X POST https://api.moveweight.net/v1/models/deploy \
-H "X-API-Key: mw_sk_live_abc123..." \
-d '{
"name": "my-llm",
"source": "huggingface:meta-llama/Llama-3-8B",
"gpu": "rtx4090",
"quantization": "4bit",
"replicas": 2
}'
Copy resp = requests.post(
"https://api.moveweight.net/v1/models/deploy" ,
headers=headers,
json={
"name" : "my-llm" ,
"source" : "huggingface:meta-llama/Llama-3-8B" ,
"gpu" : "rtx4090" ,
"quantization" : "4bit" ,
"replicas" : 2
}
)
model = resp.json()
print (f"Endpoint: {model['endpoint']}" )