## 待接入节点 (`pending-nodes`)

已用令牌注册、等待管理员审核的节点;审核通过后成为正式节点。

鉴权: 仅管理员 · 文档: https://www-demo.kuxitong.com/zh/docs/api/pending-nodes

### GET `/api/v2/pending-nodes`

列出待接入节点 · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `sort` | string |  | 排序字段,逗号分隔,前缀 `-` 表示降序,如 `-created_at,id`。 |

```sh
curl "https://panel.example.com/api/v2/pending-nodes" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### DELETE `/api/v2/pending-nodes/{id}`

删除待接入节点 · 鉴权: 仅管理员

```sh
curl -X DELETE "https://panel.example.com/api/v2/pending-nodes/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/pending-nodes/{id}/approve`

审核通过待接入节点 · 鉴权: 仅管理员

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `des` | string |  | 备注说明 |
| `ip` | string |  | 注册连接的来源地址。 |
| `name` | string |  | 名称 |
| `region_id` | integer |  | 区域 ID |
| `replace_node_id` | integer |  | 替换已有主节点(新机顶替旧机):新节点继承旧节点的线路、IP 池里的 IP、区域(没给 region_id 时)、监控设置、服务期与地区/带宽,旧节点停用并从解析摘除,与审核同一事务。旧节点的子 IP 默认一并改挂新节点(线路、池内 IP、监控设置不变),地址与不迁见 replace_sub_ips。旧节点须是已审主节点、角色相同;池内 IP 被 IP 站点绑定且 IP 变了时 409 ip_in_use。 |
| `replace_sub_ips` | ReplaceSubIp[] |  | 替换时逐条指定旧节点子 IP 的去向(只在给了 replace_node_id 时有效);没列出的子 IP 沿用原地址改挂新节点。ip 给了就改用新地址(已被别的节点用 422 conflict),skip 为 true 的不迁:该子 IP 及其线路随旧节点停用。 |

```sh
curl -X POST "https://panel.example.com/api/v2/pending-nodes/{id}/approve" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

待接入节点对象:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `area` | string |  | 地区(只做展示,不下发节点);空 = 未填。子 IP 取主节点的。 |
| `bandwidth_mbps` | integer |  | 节点带宽 Mbps(只做展示,与 monitor.bw_limit_mbps 无关);0 = 未填。子 IP 取主节点的。 |
| `capacity` | NodeCapacity |  | 节点内存容量(只读,只在 GET /nodes/{id}?capacity=true 给出):单站常驻 = location 数 × 28.1KB + https 占比 × 25.5KB,预算 = 内存 MiB × 0.25 / 2 − 28MiB,上限 = 预算 / 单站。null = 没有该节点的系统信息或缺内存总量。 (只读) |
| `cert_expiry` | string |  | 最近一次签发证书的到期时刻;null = 还没领过证(或子 IP)。 |
| `created_at` | string |  | 创建时间 (只读) |
| `des` | string |  | 备注说明 |
| `disable_by` | string |  | 停用来源(manual = 管理员;monitor = 节点监控自动停用,探测恢复后自动启用;bandwidth = 出站带宽超过 monitor.bw_limit_mbps 自动停用,回落后自动启用);启用时为空。 |
| `enabled` | boolean |  | 是否启用 |
| `enrolled_at` | string |  | 节点注册时间。 |
| `hostname` | string |  | 节点上报的主机名。 |
| `id` | integer |  | 记录 ID (只读) |
| `ip` | string |  | 注册连接的来源地址。 |
| `monitor` | NodeMonitor |  | 节点监控探测设置(主控按 monitor.node 配置的间隔探这个 IP)。 |
| `name` | string |  | 名称 |
| `ops` | NodeOps |  | 节点运维状态(只读,来自心跳):在线、配置是否落后于最新已发布版本、时钟是否同步。子 IP 跟随主节点。 (只读) |
| `parent_id` | integer |  | 子 IP 所属主节点;null = 主节点。 |
| `region_id` | integer |  | 区域 ID |
| `replace_node_id` | integer |  | 替换已有主节点(新机顶替旧机):新节点继承旧节点的线路、IP 池里的 IP、区域(没给 region_id 时)、监控设置、服务期与地区/带宽,旧节点停用并从解析摘除,与审核同一事务。旧节点的子 IP 默认一并改挂新节点(线路、池内 IP、监控设置不变),地址与不迁见 replace_sub_ips。旧节点须是已审主节点、角色相同;池内 IP 被 IP 站点绑定且 IP 变了时 409 ip_in_use。 |
| `replace_sub_ips` | ReplaceSubIp[] |  | 替换时逐条指定旧节点子 IP 的去向(只在给了 replace_node_id 时有效);没列出的子 IP 沿用原地址改挂新节点。ip 给了就改用新地址(已被别的节点用 422 conflict),skip 为 true 的不迁:该子 IP 及其线路随旧节点停用。 |
| `role` | string |  | 节点角色:edge 边缘;l2 二级。 可选值: ["edge","l2"] |
| `service_expire` | string |  | 服务器到期日 YYYY-MM-DD(首页到期提醒用,不自动停用);null = 未填、不提醒。子 IP 取主节点的。 |
| `service_start` | string |  | 服务器开始日 YYYY-MM-DD(只做展示);null = 未填。子 IP 取主节点的。 |
| `updated_at` | string |  | 更新时间 (只读) |
