跳到主要内容

API 概览

控制台做的每一件事,都是通过调用这套 API 完成的。你可以在脚本里浏览报价、部署实例、盯着日志、把它停止再销毁,背后是同一个组织、同一份余额。

基础 URL

所有端点都位于 Superheat API 主机的 /v1 前缀之下。请求和响应都是 JSON。设好两个变量,本节的示例就能照原样跑起来:

export SUPERHEAT_API="https://<your-superheat-api-host>"
export SUPERHEAT_KEY="shk_your_key_here"

下文每个路径都是相对该主机写的——/v1/offers 指的是 $SUPERHEAT_API/v1/offers

API 覆盖的范围

领域端点文档位置
健康检查GET /v1/health本页
目录GET /v1/offers, GET /v1/offers/{id}, GET /v1/catalog/status报价
模板GET /v1/templates, GET /v1/templates/{id}, GET /v1/templates/by-hash/{hash_id}, POST /v1/templates/{id}/duplicate模板
实例POST /v1/instances, GET /v1/instances, GET /v1/instances/{id}, POST /v1/instances/{id}/stop, POST /v1/instances/{id}/start, DELETE /v1/instances/{id}, GET /v1/instances/{id}/logs实例
密钥GET /v1/api-keys, POST /v1/api-keys, DELETE /v1/api-keys/{id}API 密钥

API 不做的事

不支持改用这种方式
用 API 密钥添加余额结账仅限管理员,会拒绝 API 密钥。请在控制台的计费页面充值。
用 API 密钥调用账户端点/v1/me/v1/ssh-keys 需要已登录的会话。在把部署自动化之前,先在控制台里添加 SSH 密钥。
流式日志轮询 GET /v1/instances/{id}/logs?tail=N。控制台每三秒轮询一次。
指定机器、主机或放置位置你租的是一份报价。在哪里运行由 Superheat 决定。
自行定价价格由 Superheat 设定,并在你租用时快照到实例上。

金额字段

名字以 _microusd 结尾的字段是整数,计的是百万分之一美元。除以 1,000,000 得到美元:2290000 就是每小时 $2.29,spend_microusd410000 就是迄今花掉了 $0.41。

你的第一个请求

GET /v1/health 不需要凭据,所以它是确认你能连上 API 的最快方式:

curl -s -i "$SUPERHEAT_API/v1/health"
{
"status": "ok",
"version": "0.1.0",
"commit": "9f2c1ab",
"app_env": "production",
"provisioner": "dispatch",
"inventory_sync_enabled": true,
"database": true
}
字段类型含义
status字符串ok,或者某项检查失败时是 degraded
version字符串API 版本
commit字符串或 null部署的这份 API 是从哪个 Git commit 构建出来的,非部署构建下是 null
app_env字符串是哪个环境回应的,例如 production
provisioner字符串真实硬件是 dispatch,假机群是 simulated
inventory_sync_enabled布尔目录是否正在从实时库存刷新
database布尔刚刚是否真的有一次查询往返到了数据库

这个处理函数会以 3 秒为上限对数据库执行一次 SELECT 1,而不是返回一个写死的字面量。如果那次查询失败,它返回 503,body 结构相同,statusdegradeddatabasefalse —— 所以要看 HTTP 状态码,而不只是看有没有 body。那三个环境字段的存在,是为了让"一个 API 悄悄在服务一个模拟机群"这件事从外面就能看出来;provisionersimulated 意味着你部署出来的实例不是真机器。

其他所有请求都需要 bearer 令牌。先创建一个 API 密钥(API 密钥),然后列出最便宜的三份报价:

curl -s "$SUPERHEAT_API/v1/offers?sort=price_asc" \
-H "Authorization: Bearer $SUPERHEAT_KEY"
{
"items": [
{
"id": "5d2f9c31-8b64-4c0e-9a77-2e0f1b6a4c11",
"gpu_model": "H100 SXM",
"num_gpus": 1,
"vram_gb": 80,
"tflops": 198.0,
"cuda_version": "12.8",
"vm_capable": false,
"disk_quota_capable": false,
"price_per_hour_microusd": 2290000,
"storage_price_per_gb_hour_microusd": 250,
"max_duration_hours": null,
"status": "available",
"available_units": 3,
"capacity_units": 8,
"machine": {
"hostname": "sh-us-tx-01",
"region": "US-TX",
"country_code": "US",
"cpu_model": "Intel Xeon Platinum 8480+",
"cpu_cores": 112,
"ram_gb": 2048,
"disk_type": "nvme",
"disk_gb": 15000,
"net_up_mbps": 8000,
"net_down_mbps": 8000,
"pcie_gen": 5,
"pcie_width": 16,
"reliability": 0.998,
"verified": true,
"next_maintenance": null
}
}
]
}

从这里开始,实例会完整走一遍从部署到连接的路径。

组织范围

每个对象都属于某个组织,绝不会直接属于某个用户。不带 X-Org-Id 头的请求作用于你的个人组织;API 密钥则始终作用于它被创建时所在的那个组织。见身份认证