GPU.ai has a new look. The compute is the same.Read about the redesign  

developers: one key, every way in

One key. Every way in.

The gpu CLI, official Python and TypeScript SDKs, REST API, MCP server, and OpenAI-compatible inference — one API key unlocks all of it. Pick a tool below and make your first call in minutes.

$curl -fsSL https://gpu.ai/install | sh

gpu cli

The whole platform, one verb at a time

One binary, no config file. Install it, log in once, and launching a GPU is a command in the shell you already have open.

Install

$curl -fsSL https://gpu.ai/install | sh

First call

$gpu gpu-types list
zsh · gpulive
$

sdks

Typed clients in Python and TypeScript

Both are generated from the same OpenAPI spec the API serves, so the client can't drift from the endpoint it calls.

PYTHON
# pip install gpuai-sdk
import gpuai_sdk

cfg = gpuai_sdk.Configuration(host="https://api.gpu.ai/v1")

with gpuai_sdk.ApiClient(cfg) as client:
    types_page = gpuai_sdk.GpuTypesApi(client).list_gpu_types(limit=5)
    for t in types_page.data:
        print(f"{t.gpu_type:<12} vram={t.vram_gb}GB")
TYPESCRIPT
// npm install @gpuai/sdk
const { Configuration, GpuTypesApi } = require('@gpuai/sdk');

async function main() {
  const cfg = new Configuration({ basePath: 'https://api.gpu.ai/v1' });
  const types = await new GpuTypesApi(cfg).listGpuTypes({ limit: 5 });
  for (const t of types.data) {
    console.log(`${t.gpuType.padEnd(12)} vram=${t.vramGb}GB`);
  }
}
main();

rest api

No SDK required

Plain HTTPS and JSON, with cursor pagination and idempotency keys on every mutation. The catalog is public, so your first call needs no key at all.

CURL
curl https://api.gpu.ai/v1/gpu-types

inference

Change the base URL. Keep the code.

Chat, images, and video speak the OpenAI wire format, so the client library you already import keeps working — swap two lines and you're billed per token instead of per hour.

PYTHON
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://api.gpu.ai/v1",
    api_key=os.environ["GPUAI_API_KEY"],  # never a literal key
)

stream = client.chat.completions.create(
    model="gpuai/qwen2.5-7b-instruct",
    messages=[{"role": "user", "content": "Explain WireGuard in one sentence"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

mcp

Hand your coding agent the keys

Drop this into .mcp.json and your agent can read the catalog, launch instances, and run inference — 35 tools in three tiers.

.MCP.JSON
{
  "mcpServers": {
    "gpuai": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@gpuai/mcp@latest"],
      "env": {
        "GPUAI_API_KEY": "${GPUAI_API_KEY}"
      }
    }
  }
}

An agent can't spend money behind your back

Reads are free and unconfirmed. Writes take a single confirmation. Anything that costs money quotes the price first and refuses to run until you confirm it. The server enforces that, not the agent's good manners — and it holds on every base URL, staging included.

webhooks

Find out the moment a job lands

Subscribe an HTTPS endpoint to the event types you care about. Every delivery is HMAC-signed and carries a stable event id you can dedupe on.

Subscribe

CURL
curl -X POST https://api.gpu.ai/v1/webhook-endpoints \
  -H "Authorization: Bearer $GPUAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/hooks/gpuai",
       "event_types":["video.completed","video.failed"]}'

What you receive

JSON
{
  "id": "dc062a1e…",
  "type": "video.completed",
  "created_at": "2026-08-07T02:39:11Z",
  "data": {
    "video": {
      "id": "41ca1150…",
      "object": "video",
      "model": "gpuai/wan-2.2-t2v",
      "status": "completed"
    }
  }
}

Instance lifecycle events (instance.*) are accepted and validated today, but instance event publishing isn't enabled end to end yet — an endpoint subscribed only to instance.* types won't receive deliveries yet.

From your first API key to production, in one page

$curl -fsSL https://gpu.ai/install | sh