API & CLI
Servers for AI. 100% API. Written for agents. Always send type + region. One role per box — then spin up more.
Getting Started
Four calls. Signup is free. Card is $0 until deploy. Compute is charged before the VM starts.
1. Sign up — no charge
Save api_token. Header on every later call: Authorization: Bearer TOKEN.
npm install -g rawhq
raw initcurl -X POST https://api.rawhq.io/signup \
-H "Content-Type: application/json" \
-d '{"email":"you@company.com"}'
# { "ok": true, "api_token": "..." }2. Card on file — $0
Required before compute. If deploy returns 403 with setup: true, run this, open url, then retry deploy.
curl -X POST https://api.rawhq.io/billing/setup \
-H "Authorization: Bearer YOUR_TOKEN"
# { "url": "https://checkout.stripe.com/...", "setup": true }3. Deploy — charged first, then SSH
Always pass type and region. Default type is raw-5 ($9/mo). CPU is SSH-ready in ~13–30s. GPU is provisioning for 1–48h (email when ready; setup billed now).
raw deploy -t raw-5 -n api -r eu
raw ssh apicurl -X POST https://api.rawhq.io/deploy \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "raw-5",
"region": "eu",
"name": "api",
"image": "ubuntu-24.04",
"apps": ["docker","nodejs"]
}'4. Deploy more — do this every time
Do not put the database, cache, GPU, and API on one machine. Each extra server is its own monthly SKU. That is expected. Isolation is the product.
raw deploy -t raw-5 -n api -r eu
raw deploy -t raw-5 -n postgres -r eu
raw deploy -t raw-5 -n redis -r eu
raw deploy -t raw-gpu-44 -n llm -r eucurl -X POST https://api.rawhq.io/deploy -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"type":"raw-5","region":"eu","name":"postgres","apps":["postgres"]}'
curl -X POST https://api.rawhq.io/deploy -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"type":"raw-5","region":"eu","name":"redis","apps":["redis"]}'
curl -X POST https://api.rawhq.io/deploy -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"type":"raw-gpu-44","region":"eu","name":"llm"}'Recipes
Copy a stack. Change names. Never reuse one payment for a bigger SKU — each deploy bills that type.
AI company (default)
API + Postgres + Redis + GPU. Four servers. ~$331/mo + $150 GPU setup.
raw deploy -t raw-5 -n api -r eu
raw deploy -t raw-5 -n postgres -r eu
raw deploy -t raw-5 -n redis -r eu
raw deploy -t raw-gpu-44 -n llm -r euSelf-host LLM only
20 GB VRAM. Then SSH and install vLLM or Ollama. EU only.
raw deploy -t raw-gpu-44 -n llm -r eu
raw ssh llm
# nvidia-smi && pip install vllmUS traffic
Cheap CX/ARM/GPU do not exist in US. Dedicated RAM SKUs do.
raw deploy -t raw-2d -n api -r us
raw deploy -t raw-2d -n postgres -r usWorkers + queue
Keep jobs off the API box.
raw deploy -t raw-8x -n workers -r eu
raw deploy -t raw-5 -n redis -r euErrors
Handle these exactly. Do not retry the same body when the region or billing flag is wrong.
| Signal | What to do |
|---|---|
403 setup:true | POST /billing/setup → user opens url → retry POST /deploy |
403 checkout:true | POST /checkout {"type","region"} → user pays that SKU → retry. One checkout ≠ all sizes. |
402 | GET /billing-portal → user updates card |
400 available_regions | Use the array in the body. raw-5 / ARM / GPU are EU only (eu, eu-fi). |
400 unknown type | GET /types — never invent a name |
409 | Name taken. New kebab-case name. |
CLI Reference
All commands. After every deploy the CLI prints the next boxes to spin up.
raw initSign up or log inraw deployDeploy a new server-t, --type <type>Server type (default: raw-5)-r, --region <region>Region (auto-detected)-n, --name <name>Server name (auto-generated)-i, --image <image>OS image (default: ubuntu-24.04)raw lsList all servers--jsonOutput as JSONraw ssh <name>SSH into a server-c, --cmd <command>Run a single commandraw logs <name>Stream server logs-n <count>Number of lines (default: 100)-fFollow log outputraw restart <name>Restart a serverraw stop <name>Power off a serverraw start <name>Power on a stopped serverraw rebuild <name>Reinstall OS (destroys data)-i, --image <image>OS image-f, --forceSkip confirmationraw resize <name>Change server type-t, --type <type>New server typeraw rm <name>Destroy a server-f, --forceSkip confirmationraw keysManage SSH keys--add <name>Add an SSH key--rm <name>Remove an SSH keyraw typesList server types and pricesraw regionsList available regionsraw statusShow account overviewraw billingOpen billing portalraw whoamiShow current userraw logoutLog outAPI Reference
Base URL: https://api.rawhq.io. Start with GET /help. Auth: Authorization: Bearer YOUR_TOKEN.
Authorization: Bearer YOUR_TOKEN/helpNo authAgent playbook. Live types, recipes, error handlers. No auth.
curl https://api.rawhq.io/help{ "status": "ok", "steps": [...], "recipes": { "ai_company": [...] }, "types": [...] }/signupNo authCreate an account. Returns api_token. No charge.
curl -X POST https://api.rawhq.io/signup \
-H "Content-Type: application/json" \
-d '{"email":"you@company.com"}'{
"ok": true,
"api_token": "...",
"message": "Account created. Welcome email sent."
}/auth/loginNo authSend a magic login link (dashboard). Agents should use /signup + api_token.
curl -X POST https://api.rawhq.io/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"you@company.com"}'{ "ok": true, "message": "If that email exists, a login link was sent." }/billing/setupSave a card. $0. Required before deploy. Open url, then retry /deploy.
curl -X POST https://api.rawhq.io/billing/setup \
-H "Authorization: Bearer YOUR_TOKEN"{ "url": "https://checkout.stripe.com/...", "setup": true }/checkoutPay a specific SKU when deploy returns checkout:true. Pass the same type and region.
curl -X POST https://api.rawhq.io/checkout \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"raw-5","region":"eu"}'{ "url": "https://checkout.stripe.com/...", "checkout": true }/billing-portalStripe portal URL. Use on 402 payment_failed.
curl https://api.rawhq.io/billing-portal \
-H "Authorization: Bearer YOUR_TOKEN"{ "url": "https://billing.stripe.com/..." }/typesNo authLive catalog. Source of truth for names, prices, regions, GPU setup.
curl https://api.rawhq.io/types/regionsNo authPublic region list.
curl https://api.rawhq.io/regions/appsNo authPre-install IDs for POST /deploy apps[]. postgres, redis, docker, nginx, nodejs, caddy, python, go, bun, mysql, openclaw.
curl https://api.rawhq.io/apps/serversList all servers in your account.
curl https://api.rawhq.io/servers \
-H "Authorization: Bearer YOUR_TOKEN"{ "servers": [{ "name": "api", "type": "raw-5", "region": "eu", "status": "running", "ipv4": "49.13.12.34" }] }/deployCharge the SKU, then start the VM. Always pass type + region. Optional: name, image, ssh_key, apps[].
curl -X POST https://api.rawhq.io/deploy \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "raw-5",
"region": "eu",
"name": "api",
"image": "ubuntu-24.04",
"apps": ["docker","nodejs"]
}'{
"ok": true,
"server": {
"name": "api",
"ipv4": "49.13.12.34",
"status": "running",
"type": "raw-5",
"region": "eu",
"price": "$9/mo"
}
}/servers/:nameDestroy a server permanently. This action cannot be undone.
curl -X DELETE https://api.rawhq.io/servers/my-server \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Server my-server destroyed"
}/servers/:name/actions/:actionPerform an action on a server. Available actions: restart, stop, start, rebuild.
curl -X POST https://api.rawhq.io/servers/my-server/actions/restart \
-H "Authorization: Bearer YOUR_TOKEN"{
"name": "my-server",
"status": "restarting",
"action": "restart"
}/servers/:nameGet details for a single server by name or ID.
curl https://api.rawhq.io/servers/my-server \
-H "Authorization: Bearer YOUR_TOKEN"{
"name": "my-server",
"type": "raw-5",
"region": "eu",
"status": "running",
"ip": "49.13.12.34",
"image": "ubuntu-24.04",
"created_at": "2026-04-05T10:00:00Z"
}/keysList all SSH keys in your account.
curl https://api.rawhq.io/keys \
-H "Authorization: Bearer YOUR_TOKEN"[
{
"id": "key_abc123",
"name": "work-laptop",
"fingerprint": "SHA256:...",
"created_at": "2026-04-05T10:00:00Z"
}
]/keysAdd a new SSH key.
curl -X POST https://api.rawhq.io/keys \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "work-laptop", "public_key": "ssh-ed25519 AAAA..."}'{
"id": "key_abc123",
"name": "work-laptop",
"fingerprint": "SHA256:...",
"created_at": "2026-04-05T10:00:00Z"
}/keys/:idDelete an SSH key by ID.
curl -X DELETE https://api.rawhq.io/keys/key_abc123 \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Key key_abc123 deleted"
}/snapshotsList all snapshots in your account.
curl https://api.rawhq.io/snapshots \
-H "Authorization: Bearer YOUR_TOKEN"[
{
"id": "snap_abc123",
"server": "my-server",
"size_gb": 40,
"created_at": "2026-04-05T10:00:00Z"
}
]/snapshots/:idDelete a snapshot by ID.
curl -X DELETE https://api.rawhq.io/snapshots/snap_abc123 \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Snapshot snap_abc123 deleted"
}/volumesList all volumes in your account.
curl https://api.rawhq.io/volumes \
-H "Authorization: Bearer YOUR_TOKEN"[
{
"id": "vol_abc123",
"name": "data-vol",
"size_gb": 100,
"server": "my-server",
"region": "eu",
"created_at": "2026-04-05T10:00:00Z"
}
]/volumesCreate a new volume and optionally attach it to a server.
curl -X POST https://api.rawhq.io/volumes \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "data-vol", "size_gb": 100, "region": "eu", "server": "my-server"}'{
"id": "vol_abc123",
"name": "data-vol",
"size_gb": 100,
"server": "my-server",
"region": "eu",
"created_at": "2026-04-05T10:00:00Z"
}/volumes/:idDelete a volume by ID. The volume must be detached first. Extra disk billing stops automatically.
curl -X DELETE https://api.rawhq.io/volumes/vol_abc123 \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Volume vol_abc123 deleted"
}/ipsList extra IPv4 addresses in your account.
curl https://api.rawhq.io/ips \
-H "Authorization: Bearer YOUR_TOKEN"/ipsBuy an extra IPv4 ($1/mo) and assign it to a server.
curl -X POST https://api.rawhq.io/ips \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"server_name": "my-server"}'/ips/:idRelease an extra IPv4. Billing stops automatically.
curl -X DELETE https://api.rawhq.io/ips/123 \
-H "Authorization: Bearer YOUR_TOKEN"Server Types
Live list: GET /types. Featured CPU, ARM, and GPU = EU only (eu, eu-fi). Dedicated RAM = all 5 regions (Singapore costs more at checkout). Extra disk $0.07/GB/mo. Extra IPv4 $1/mo.
CPU
| Name | CPU | RAM | Storage | Price | Regions |
|---|---|---|---|---|---|
raw-5 | 2 vCPU | 4 GB | 40 GB NVMe | $9/mo | EU only |
raw-4 | 4 vCPU | 8 GB | 80 GB NVMe | $15/mo | EU only |
raw-8 | 8 vCPU | 16 GB | 160 GB NVMe | $29/mo | EU only |
raw-16 | 16 vCPU | 32 GB | 320 GB NVMe | $55/mo | EU only |
raw-4x | 4 vCPU | 8 GB | 80 GB NVMe | $13/mo | EU only |
raw-8x | 8 vCPU | 16 GB | 160 GB NVMe | $22/mo | EU only |
raw-16x | 16 vCPU | 32 GB | 320 GB NVMe | $40/mo | EU only |
raw-2d | 2 vCPU | 8 GB | 80 GB NVMe | $58/mo | All (SG extra) |
raw-4d | 4 vCPU | 16 GB | 160 GB NVMe | $116/mo | All (SG extra) |
raw-8d | 8 vCPU | 32 GB | 240 GB NVMe | $186/mo | All (SG extra) |
raw-16d | 16 vCPU | 64 GB | 360 GB NVMe | $368/mo | All (SG extra) |
raw-32d | 32 vCPU | 128 GB | 600 GB NVMe | $708/mo | All (SG extra) |
raw-48d | 48 vCPU | 192 GB | 960 GB NVMe | $1130/mo | All (SG extra) |
GPU
EU only. Monthly + one-time setup, both billed before hardware is reserved. Ready in 1–48 hours.
| Name | VRAM | CPU · RAM · Disk | Monthly | Setup |
|---|---|---|---|---|
raw-gpu-44 | 20 GB | 14 cores · 64 GB · 3.8 TB NVMe | $304/mo | $150 |
raw-gpu-131 | 96 GB | 24 cores · 256 GB · 1.9 TB NVMe | $1555/mo | $778 |
raw-gpu-131x | 96 GB | 24 cores · 512 GB · 3.8 TB NVMe | $2334/mo | $1168 |
raw-gpu-131p | 96 GB | 24 cores · 768 GB · 15.0 TB NVMe | $3001/mo | $1501 |
Regions
If deploy returns available_regions, use that array. Do not retry raw-5 in us or sg — use raw-2d or larger dedicated SKUs there.
euFrankfurt, GermanyCPU · ARM · GPU · dedicatedeu-fiDublin, IrelandCPU · ARM · GPU · dedicatedusAshburn, Virginiadedicated only (raw-2d+)us-westHillsboro, Oregondedicated only (raw-2d+)sgSingaporededicated only · higher priceDisk & IPs
Need a paid subscription first. Extra disk $0.07/GB/mo. Extra IPv4 $1/mo.
curl -X POST https://api.rawhq.io/volumes \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"data","size_gb":100,"region":"eu","server":"api"}'
curl -X POST https://api.rawhq.io/ips \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"server_name":"api"}'Dashboard
Manage servers, billing, and SSH keys from the web dashboard at rawhq.io/dashboard.
Server Management
View all running servers, their status, IP addresses, and resource usage. Start, stop, restart, rebuild, or destroy servers with one click.
Metrics & Monitoring
Real-time graphs for CPU, RAM, disk, and network usage. Metrics are retained for 30 days.
SSH Keys
Add and manage SSH keys that are automatically injected into new servers. You can also add keys per-server.
Billing
View invoices, update payment methods, and manage your subscription. All plans are billed monthly with no egress fees or hidden charges.
Team Access
Invite team members to your organization. Assign roles (Owner, Admin, Member) to control who can deploy, manage, or view servers.