Docs.
Whole bare-metal servers — 8× B300 per node, NVLink inside the node, InfiniBand between your nodes, no virtualization and no neighbors. You get root over SSH. The base image is Ubuntu LTS with the NVIDIA driver, CUDA toolkit, Docker and the NVIDIA Container Toolkit preinstalled; exact versions are pinned per rack and shown at provisioning. OS selection and one-click reinstall arrive with the provider API.
Add your SSH public key in Settings before launching — every key of your organization is injected into root on every node at provisioning.
ssh root@<node-ip> # the IP appears on the Instances tab
nvidia-smi # all 8 GPUs present
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smiOptional. Paste a script in the order ticket (or pass initScript via API) — it runs once as root on every node of the instance right after provisioning. Output goes to /root/init.log. Keep it idempotent.
#!/bin/bash
pip install uv && uv pip install --system vllm
huggingface-cli download meta-llama/Llama-3.3-70B-InstructLocal NVMe is fast scratch, not durable storage: drives are wiped at termination (including immediate auto-termination at zero balance and term end). Pull data in at start, push checkpoints out continuously:
# в одну сторону
aws s3 sync s3://my-datasets/imagenet /data/imagenet
# в обратную — чекпоинты каждые N шагов
aws s3 sync /data/checkpoints s3://my-bucket/run-42/Create a token in Settings → API tokens and send it asAuthorization: Bearer theai_…. A token carries full org access — store it like a password.
| Endpoint | What it does |
|---|---|
GET /api/nodes | rack: SKUs, per-GPU-hour prices, node availability, contract ladder |
POST /api/orders | launch: {skuId, nodeIds[], contract, name?, initScript?} — one GPU model per order |
GET /api/instances | your instances with status, IP, nodes |
POST /api/instances | {id, action: "terminate"} — access revoked, nodes wiped and returned |
GET /api/billing | balance, burn per hour, ledger history |
GET · POST /api/keys | list / add org SSH keys: {label, publicKey} — handy for CI before the first order |
export T=theai_xxxxxxxxxxxx
curl -s https://cloud.theai.com/api/nodes | jq '.skus[].nodes[] | {id, status}'
curl -s -X POST https://cloud.theai.com/api/orders \
-H "Authorization: Bearer $T" -H "Content-Type: application/json" \
-d '{"skuId":"B300","nodeIds":["N01","N02"],"contract":"M1"}'
curl -s -X POST https://cloud.theai.com/api/instances \
-H "Authorization: Bearer $T" -H "Content-Type: application/json" \
-d '{"id":"<instance-id>","action":"terminate"}'| Error | Meaning |
|---|---|
400 no_ssh_keys | add an SSH key first — nodes are unreachable without it |
402 insufficient_balance | PAYG needs balance cover; reserved terms — per agreement |
403 verification_required | export-control screening is completed during onboarding |
409 nodes_taken | someone grabbed the nodes first — re-read /api/nodes |
429 rate_limited | orders 10/min, instance actions 30/min per org |
Building a price comparison or marketplace listing? There's a public, unauthenticated JSON feed of our rate card — no token needed: GET /api/v1/pricing.
Prepaid balance; pay-as-you-go is billed per minute of RUNNING — no minimum order size. Reserved terms (1 month / 3 months / 6 months / 1 year) are secured with a 30% prepayment (take-or-pay); the remaining schedule is agreed individually — monthly invoicing is standard. Reservation refund terms: see the FAQ on the main page.
At zero balance, PAYG instances are terminated immediately and drives are wiped — there is no grace period. We warn you ahead: email at ~24h and ~4h of remaining balance at the current burn rate, plus a live runway indicator in the console. Set a low-balance alert and keep checkpoints synced off-node (see §4). Details: Terms · Refund Policy.
capacity@theai.com — capacity, wire/USDC onboarding, GB300 NVL72 quotes. cloud@theai.com — everything else.