概述

TooServer 允许通过 API 集成到你程序中,进行查询产品、订单、服务器信息、余额与流水,产品下单与续费,以及服务器电源控制、重装系统、重置密码等运维操作。

基础地址: https://my.tooserver.net/v1

频率限流:查询类接口 60 次/分钟,下单/续费/重装/改密接口 10 次/分钟。

每日额度:默认每天 20 笔新购订单(续费不计入)。如需提升请联系客服。

创建条件:邮箱已激活 且 有过一次消费记录。 前往申请 API

下单与续费: 仅支持余额扣款 请提前在网站充值。

注意:令牌拥有查询、下单、续费的完整权限,凡涉及下单、续费的接口都会从账户余额扣款。

格式与代码说明

请求头(每个请求需携带令牌)
Header
AuthorizationBearer ts_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Typeapplication/json(POST 请求需要)
响应结构(所有接口返回均为 JSON,UTF-8)
{
  "code": 0,
  "message": "ok",
  "data": { ... }
}
字段类型说明
codeint0 表示成功,非 0 表示错误
messagestring结果描述
dataobject/null返回数据,错误时可能为 null
错误码(HTTP 状态码与 code 对应)
codeHTTP说明
0200成功
4000400参数错误
4001400金额/价格异常
4002400余额不足(订单已创建待付款)
4011–4015401令牌缺失/无效/已吊销/已过期/账户异常
4031403无操作权限
4033403该服务器不支持此 API 操作
4041404资源不存在
4090409该服务器有未完成的操作
4092409库存不足
4290429请求过于频繁
4291429已达每日下单上限
5001500服务器错误
限流 / 额度超限返回示例
{
  "code": 4291,
  "message": "已达到每日下单上限,如需提升请联系客服",
  "data": { "daily_limit": 20, "today_count": 20 }
}
订单状态(status)
说明
unpaid待支付
partial部分支付
paid已支付(已履约)
cancelled已取消
refunded已退款

接口

GET/v1/regions
说明获取地区列表
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "regions": [
      { "id": 19, "name": "香港", "sort": 1 },
      { "id": 20, "name": "美国", "sort": 2 }
    ]
  }
}
GET/v1/products
说明获取产品列表;代理账户返回中额外包含 agent_price
参数类型说明(均可选)
regionint地区 ID
catint线路/分类 ID
typestring产品类型
filterstring标签过滤
示例GET /v1/products?region=19&cat=61
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "products": [
      {
        "pricing_id": 2681,
        "name": "香港 CN2 独立服务器",
        "region_id": 19,
        "region_name": "香港",
        "sale_price": 320.00,
        "agent_price": 288.00,
        "stock": 5
      }
    ]
  }
}
POST/v1/orders 会扣余额
说明创建订单并用余额支付,价格由服务端计算。返回的 order_no 为账单号(P 开头)
参数类型说明
pricing_idint定价 ID(必填)
billing_cyclestring周期,必填:month / quarter / half_year / year / two_year
user_remarkstring备注(可选)
计价普通用户按 sale_price 打折;代理按 agent_price 不打折
返回示例
{
  "code": 0,
  "message": "下单成功",
  "data": {
    "order_no": "P20260705000123",
    "region_name": "香港",
    "billing_cycle": "month",
    "months": 1,
    "unit_price": 320.00,
    "final_amount": 320.00,
    "balance_after": 7880.00,
    "status": "paid"
  }
}
余额不足返回 4002,订单以待付款保留,可在网站充值后支付:
{
  "code": 4002,
  "message": "余额不足,订单已创建待付款,请充值后在网页完成支付",
  "data": {
    "order_no": "P20260705000123",
    "final_amount": 320.00,
    "balance": 100.00,
    "status": "unpaid"
  }
}
GET/v1/orders
说明获取订单列表
参数类型说明(均可选)
statusstringunpaid / partial / paid / cancelled / refunded
pageint页码,默认 1
limitint每页数量,默认 20,最大 100
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "orders": [
      {
        "order_no": "P20260705000123",
        "biz_type": "server_new",
        "biz_label": "新购服务器",
        "billing_cycle": "month",
        "cycle_label": "月付",
        "months": 1,
        "amount": 320.00,
        "paid": 320.00,
        "status": "paid",
        "status_label": "已支付",
        "created_at": "2026-07-05 09:30:12",
        "paid_at": "2026-07-05 09:30:15"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20,
    "total_page": 1
  }
}
GET/v1/orders/{order_no}
说明获取订单详情,仅可查询本人订单
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "order": {
      "order_no": "P20260705000123",
      "biz_type": "server_new",
      "biz_label": "新购服务器",
      "server_id": 156,
      "billing_cycle": "month",
      "cycle_label": "月付",
      "months": 1,
      "amount": 320.00,
      "paid": 320.00,
      "status": "paid",
      "status_label": "已支付",
      "payment_method": "balance",
      "user_remark": null,
      "items": [
        { "item_type": "base", "item_label": "基础费用", "description": "香港 · 月付", "amount": 320.00, "quantity": 1 }
      ],
      "created_at": "2026-07-05 09:30:12",
      "paid_at": "2026-07-05 09:30:15",
      "fulfilled_at": "2026-07-05 09:30:16"
    }
  }
}
返回不存在或非本人返回 4041
GET/v1/servers
说明获取服务器列表,按到期时间升序(临期靠前)
参数类型说明(均可选)
statusint1 正常 / 0 到期
pageint页码
limitint每页数量
GET/v1/servers/{id}
说明获取服务器详情
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "id": 156,
    "server_ip": "1.2.3.4",
    "cpu": "E5-2680v4 *2",
    "memory": "64G",
    "storage": "1TB SSD",
    "bandwidth": "100Mbps",
    "datacenter": "香港",
    "default_price": 320.00,
    "status": 1,
    "end_time": "2026-08-05 00:00:00",
    "days_left": 31
  }
}
安全不返回登录密码、IPMI 等任何登录凭证,凭证只能在网站内查看
POST/v1/servers/{id}/renew 会扣余额
说明服务器续费,续费周期与金额固定跟随该服务器的既有配置,成功后自动延长到期时间。无需也不接受传入周期参数
参数类型说明
user_remarkstring备注(可选)
返回示例
{
  "code": 0,
  "message": "续费成功",
  "data": {
    "order_no": "P20260705000456",
    "server_id": 156,
    "server_ip": "1.2.3.4",
    "billing_cycle": "year",
    "months": 12,
    "final_amount": 3456.00,
    "balance_after": 4424.00,
    "old_end_time": "2026-08-05",
    "new_end_time": "2027-08-05",
    "status": "paid"
  }
}
不支持若该服务器无有效周期/牌价,返回 4001,请联系客服
余额不足返回 4002,续费单以待付款保留
GET/v1/servers/{id}/status
说明查询服务器电源状态。无面板接口的服务器返回 supported: falsestate: unknown,此时无法通过 API 判断电源状态,需在网页端查看
返回字段类型说明
statestringrunning 运行中 / stopped 已关机 / installing 重装中 / unknown 未知(含不支持的情况)
supportedbool该服务器是否支持 API 状态查询
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "server_id": 156,
    "state": "running",
    "supported": true
  }
}
POST/v1/servers/{id}/power
说明电源操作:开机 / 关机 / 重启。无面板接口的服务器返回 4033,需在网页端处理。重启会自动生成一条工单便于跟踪
参数类型说明
actionstring必填:boot 开机 / shutdown 关机 / reboot 重启
返回示例
{
  "code": 0,
  "message": "重启指令已发送",
  "data": {
    "server_id": 156,
    "action": "reboot"
  }
}
不支持示例
{
  "code": 4033,
  "message": "该服务器不支持 API 电源操作,请在网页端提交工单处理",
  "data": { "server_id": 156, "supported": false }
}
操作冲突若该服务器有未完成的操作(如重装中),返回 4090
GET/v1/servers/{id}/templates
说明获取可用于重装的系统模板列表。重装前先调用此接口,从中取得 image_id(即模板的 id)。无面板接口的服务器返回 4033
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "server_id": 156,
    "groups": [
      {
        "name": "CentOS",
        "images": [
          { "id": "112", "name": "Centos-7" },
          { "id": "110", "name": "Centos-9-stream" }
        ]
      },
      {
        "name": "Ubuntu",
        "images": [
          { "id": "103", "name": "Ubuntu-22" },
          { "id": "102", "name": "Ubuntu-24" }
        ]
      }
    ]
  }
}
POST/v1/servers/{id}/reinstall 危险操作
说明重装系统会清空服务器全部数据,不可恢复,请谨慎调用。image_id/templates 接口获取
参数类型说明
image_idstring必填,系统模板 ID(来自 templates 接口的 images[].id
passwordstring必填,新 root 密码,8-16 位(规则见下方密码说明)
remote_portint可选,远程端口
返回示例
{
  "code": 0,
  "message": "重装已提交,正在安装中",
  "data": {
    "server_id": 156,
    "ticket_id": 8842
  }
}
说明重装会生成一条工单用于跟踪进度。返回 code: 0 表示已提交(可能同步完成,也可能异步安装中)。可稍后用 /status 确认电源状态,或直接 SSH 登录验证。若该服务器有未完成的操作返回 4090;不支持重装返回 4033
POST/v1/servers/{id}/reset_password
说明重置服务器 root 密码。不支持返回 4033,有未完成操作返回 4090
参数类型说明
passwordstring必填,新密码,8-16 位(规则见下方密码说明)
返回示例
{
  "code": 0,
  "message": "密码重置任务已提交,正在处理中",
  "data": {
    "server_id": 156,
    "ticket_id": 8843
  }
}
GET/v1/servers/{id}/task/{task_id}
说明查询异步任务(重装/改密)进度。无面板接口的服务器返回 4033
返回示例
{
  "code": 0,
  "message": "ok",
  "data": {
    "server_id": 156,
    "task_id": "abc123",
    "state": "working",
    "percent": 40
  }
}
密码规则(reinstall / reset_password 通用)
长度 8-16 位;不能以 / 开头;必须同时包含小写字母、大写字母、数字各至少一个,以及至少一个特殊字符
允许的特殊字符:~ ! @ # $ & * ( ) _ - + = | { } [ ] ; : < > ? , . /
部分服务商对特殊字符兼容性有限制,建议优先使用 ! @ # $ * - 等常见符号。
GET/v1/account/balance
说明查询当前余额
返回示例
{
  "code": 0,
  "message": "ok",
  "data": { "balance": 8200.00, "currency": "CNY" }
}
GET/v1/account/balance/logs
说明查询余额变动记录
参数类型说明(均可选)
typestringincome / expense
pageint页码
limitint每页数量
返回每条含金额、类型、来源、变动前后余额、备注、时间

使用流程

下单自动化流程:

1. 网站内充值 → 2. GET /v1/products 查产品 → 3. POST /v1/orders 下单扣款 → 4. GET /v1/orders 查订单状态 → 5. 开通后 GET /v1/servers 查服务器 → 6. 临期时 POST /v1/servers/{id}/renew 续费。

运维操作流程:

电源控制:直接 POST /v1/servers/{id}/poweractionboot/shutdown/reboot;可先用 GET /v1/servers/{id}/status 确认当前状态。

重装系统:先 GET /v1/servers/{id}/templates 拿到目标系统的 image_id → 再 POST /v1/servers/{id}/reinstall 提交 image_idpassword → 异步任务可用 GET /v1/servers/{id}/task/{task_id} 查进度,或稍后 SSH 登录验证。

重置密码:直接 POST /v1/servers/{id}/reset_password 提交新 password

无面板接口的服务器,电源/重装/改密会返回 4033,状态查询返回 supported: false,此类机器请在网页端提交工单处理。有未完成操作时返回 4090

调用示例(以下单为例)

curl -X POST "https://my.tooserver.net/v1/orders" \
  -H "Authorization: Bearer 你的令牌" \
  -H "Content-Type: application/json" \
  -d '{"pricing_id": 2681, "billing_cycle": "month"}'
<?php
$ch = curl_init("https://my.tooserver.net/v1/orders");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer 你的令牌",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "pricing_id"    => 2681,
        "billing_cycle" => "month",
    ]),
]);
$resp = curl_exec($ch);
curl_close($ch);

$data = json_decode($resp, true);
if ($data["code"] === 0) {
    echo "下单成功:" . $data["data"]["order_no"];
} else {
    echo "失败:" . $data["message"];
}
import requests

resp = requests.post(
    "https://my.tooserver.net/v1/orders",
    headers={
        "Authorization": "Bearer 你的令牌",
        "Content-Type": "application/json",
    },
    json={"pricing_id": 2681, "billing_cycle": "month"},
)

data = resp.json()
if data["code"] == 0:
    print("下单成功:", data["data"]["order_no"])
else:
    print("失败:", data["message"])
const res = await fetch("https://my.tooserver.net/v1/orders", {
  method: "POST",
  headers: {
    "Authorization": "Bearer 你的令牌",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ pricing_id: 2681, billing_cycle: "month" }),
});

const data = await res.json();
if (data.code === 0) {
  console.log("下单成功:", data.data.order_no);
} else {
  console.log("失败:", data.message);
}

续费只需把 URL 换成 /v1/servers/{id}/renew,请求体可留空或仅传 user_remark(续费周期跟随机器,不需指定)。运维接口(power / reinstall / reset_password)写法相同,只是 URL 和请求体不同。