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.

# 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..."
import requests headers = {"X-API-Key": "mw_sk_live_abc123..."} resp = requests.get("https://api.moveweight.net/v1/vms", headers=headers) print(resp.json())
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.

CodeMeaning
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:

HeaderDescription
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 https://api.moveweight.net/v1/vms \ -H "X-API-Key: mw_sk_live_abc123..."
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']}")
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:

{ "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

ParameterTypeDescription
namestringRequiredVM name (lowercase, alphanumeric + hyphens)
cpuintegerRequiredNumber of vCPUs (1-64)
ramintegerRequiredRAM in GB (1-256)
storageintegerOptionalNVMe storage in GB (default: 20)
regionstringOptionalDeployment region (default: us-east)
imagestringOptionalOS image (default: ubuntu-24.04)
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" }'
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']}")
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.

{ "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

ParameterTypeDescription
gpustringRequiredGPU type: rtx4090, a100, h100
countintegerOptionalNumber of GPUs (default: 1)
regionstringOptionalDeployment region
spotbooleanOptionalUse spot pricing (60% off)
imagestringOptionalPre-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 https://api.moveweight.net/v1/storage/buckets \ -H "X-API-Key: mw_sk_live_abc123..."
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

ParameterTypeDescription
typestringRequiredA, AAAA, CNAME, MX, TXT, SRV
namestringRequiredRecord name (e.g. "api" for api.example.com)
valuestringRequiredRecord value (IP, hostname, etc.)
ttlintegerOptionalTTL 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 -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 }'
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']}")
Need help? Visit support.moveweight.net or email [email protected].