{"openapi":"3.1.0","info":{"title":"RoboHub 多端口总控台接口","description":"RoboHub 控制面接口，支持虚拟契约测试和真实 HTTP/SOCKS 转发数据面。真实出口由受控 egress profile 提供，普通项目不直接访问上游或 Mihomo。","version":"0.5.0-multi-egress"},"paths":{"/v1/openapi.json":{"get":{"summary":"读取接口定义","description":"返回供项目后端和接口工具使用的机器可读接口定义。","operationId":"versioned_openapi_v1_openapi_json_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Versioned Openapi V1 Openapi Json Get"}}}}},"tags":["公共接口"]}},"/v1/integration-guide.md":{"get":{"summary":"下载中文接入手册","description":"返回业务项目后端接入 RoboHub 的完整中文流程。","operationId":"integration_guide_v1_integration_guide_md_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{}}}}},"tags":["公共接口"]}},"/v1/clients/robohub-client-reference.mjs":{"get":{"summary":"下载 Node.js 参考客户端","description":"返回包含 HMAC、单出口和多出口流程的 Node.js 后端参考客户端。","operationId":"node_client_reference_v1_clients_robohub_client_reference_mjs_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{}}}}},"tags":["公共接口"]}},"/v1/clients/robohub_client_reference.py":{"get":{"summary":"下载 Python 参考客户端","description":"返回包含 HMAC、单出口和多出口流程的 Python 后端参考客户端。","operationId":"python_client_reference_v1_clients_robohub_client_reference_py_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{}}}}},"tags":["公共接口"]}},"/v1/health":{"get":{"summary":"健康检查","description":"返回控制面和数据面的当前健康状态。","operationId":"health_v1_health_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health V1 Health Get"}}}}},"tags":["公共接口"]}},"/v1/capacity":{"get":{"summary":"读取分片容量","description":"返回当前分片的租约容量和已占用端口数量。","operationId":"capacity_v1_capacity_get","parameters":[{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Capacity V1 Capacity Get"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/bindings/login":{"post":{"summary":"绑定项目用户","description":"首次绑定账户时，项目后端仅在内存中提交 write-only 账户字段并获得 account_ref；后续项目或工作区只提交同一 account_ref，不重复登录、配对或测速。空请求仅用于已由管理员预配置的默认账户引用。","operationId":"bind_login_v1_bindings_login_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BindingLoginRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/runtime/ensure":{"post":{"summary":"创建或复用端口租约","description":"为当前项目用户创建独立租约并分配未占用端口；重复请求会复用有效租约。","operationId":"ensure_runtime_v1_runtime_ensure_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeCommandResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["单出口运行时"]}},"/v1/runtime/pool/ensure":{"post":{"summary":"创建多出口代理池","description":"默认按线路可用性保留每条真实预检通过的监听器；仅 egress_policy=distinct_family 时按公网出口族去重。","operationId":"ensure_runtime_pool_v1_runtime_pool_ensure_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolEnsureRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolRuntimeResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/services/{service_id}/active-dynamic/rotate":{"post":{"summary":"轮转主动动态线路","description":"仅轮转明确选择且当前没有活动租约的主动动态线路。总控台等待上游完成并失效节点缓存；轮转后必须重新测速和建池，不能沿用旧出口证据。","operationId":"rotate_active_dynamic_lines_v1_services__service_id__active_dynamic_rotate_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DynamicRotationRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rotate Active Dynamic Lines V1 Services  Service Id  Active Dynamic Rotate Post"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/services/{service_id}/active-dynamic/lines":{"get":{"summary":"读取主动动态线路清单","description":"返回可安全用于线路选择的 line_id、显示名、状态和区域信息；不返回上游配置、账户、Session 或代理凭据。","operationId":"active_dynamic_lines_v1_services__service_id__active_dynamic_lines_get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Active Dynamic Lines V1 Services  Service Id  Active Dynamic Lines Get"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/runtime/pool/project-protocol/ensure":{"post":{"summary":"创建项目协议恢复验证代理池","description":"仅用于已到达 Cloudflare 挑战态的项目节点。返回的端口与短期凭据只能用于浏览器/Node Sentinel 恢复；项目回报固定 providers 地址 HTTP 200 前，不可签发注册任务凭据。","operationId":"ensure_project_protocol_pool_v1_runtime_pool_project_protocol_ensure_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectProtocolValidationPoolRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolRuntimeResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/pool/status":{"get":{"summary":"读取多出口代理池状态","description":"返回父租约和脱敏子出口状态，不返回 fencing token、代理密码或任何上游秘密。","operationId":"runtime_pool_status_v1_runtime_pool_status_get","parameters":[{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolRuntimeStatusResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/pool/identity/refresh":{"post":{"summary":"刷新多出口公网身份","description":"通过每个活动监听器自身的短期凭据观测公网 IP、地址族、网络前缀和可选 ASN；未知值保持为空，不使用总控服务器地址代替。","operationId":"refresh_runtime_pool_identity_v1_runtime_pool_identity_refresh_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeMutationRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolRuntimeResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/status":{"get":{"summary":"读取当前运行状态","description":"读取脱敏后的租约、端口和配置版本，不返回短期凭据。","operationId":"runtime_status_v1_runtime_status_get","parameters":[{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["单出口运行时"]}},"/v1/runtime/credentials/issue":{"post":{"summary":"签发任务级短期凭据","description":"为单个任务签发短时代理凭据；响应必须只在项目后端内存中使用。 同任务和出口的有效凭据可以原值续期；到期或撤销后不得复用。以响应到期时间为准，不可将凭据响应写入幂等记录、日志或浏览器。","operationId":"issue_runtime_credentials_v1_runtime_credentials_issue_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialIssueRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialIssueResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["单出口运行时"]}},"/v1/runtime/pool/credentials/issue":{"post":{"summary":"签发多出口短期凭据","description":"为父租约的每个出口签发独立短期凭据；响应只允许项目后端内存使用。 同任务和出口的有效凭据可以原值续期；到期或撤销后不得复用。以响应到期时间为准，不可将凭据响应写入幂等记录、日志或浏览器。","operationId":"issue_pool_credentials_v1_runtime_pool_credentials_issue_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolCredentialIssueRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolCredentialsIssueResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/pool/project-protocol/credentials/issue":{"post":{"summary":"签发项目协议恢复验证凭据","description":"仅对项目协议恢复验证代理池签发不超过三分钟的短期凭据。凭据只能由项目后端用于对应浏览器/Node Sentinel 恢复，不得写入日志或浏览器响应。 同任务和出口的有效凭据可以原值续期；到期或撤销后不得复用。以响应到期时间为准，不可将凭据响应写入幂等记录、日志或浏览器。","operationId":"issue_project_protocol_credentials_v1_runtime_pool_project_protocol_credentials_issue_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolCredentialIssueRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolCredentialsIssueResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/pool/project-protocol/attest":{"post":{"summary":"提交项目协议恢复结果","description":"项目后端完成浏览器/Node Sentinel 恢复后，仅提交固定 providers 请求的脱敏状态。只有 HTTP 200 会将验证池升级为可用于注册任务的代理池；403、超时、连接或 fetch 失败会立即回收验证池。","operationId":"attest_project_protocol_pool_v1_runtime_pool_project_protocol_attest_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectProtocolAttestationRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Attest Project Protocol Pool V1 Runtime Pool Project Protocol Attest Post"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/credentials/renew":{"post":{"summary":"续期任务级凭据","description":"签发一组新的短期凭据；旧凭据保留到自身到期，避免长任务中途断连。 同任务和出口的有效凭据可以原值续期；到期或撤销后不得复用。以响应到期时间为准，不可将凭据响应写入幂等记录、日志或浏览器。","operationId":"renew_runtime_credentials_v1_runtime_credentials_renew_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialRenewRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialIssueResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["单出口运行时"]}},"/v1/runtime/heartbeat":{"post":{"summary":"续期端口租约","description":"使用当前租约和 fencing token 延长租约有效期。","operationId":"runtime_heartbeat_v1_runtime_heartbeat_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeMutationRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeCommandResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["单出口运行时"]}},"/v1/runtime":{"delete":{"summary":"释放端口租约","description":"停止当前租户监听并进入端口隔离期，旧凭据立即失效。","operationId":"runtime_release_v1_runtime_delete","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeMutationRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/runtime/pool/heartbeat":{"post":{"summary":"续期多出口父租约","description":"使用父租约 fencing token 同时延长全部子出口有效期。","operationId":"runtime_pool_heartbeat_v1_runtime_pool_heartbeat_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeMutationRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolRuntimeResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/pool":{"delete":{"summary":"释放多出口父租约","description":"原子释放父租约、全部子出口端口与短期凭据；响应不返回 fencing token。","operationId":"runtime_pool_release_v1_runtime_pool_delete","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeMutationRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolRuntimeStatusResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["多出口代理池"]}},"/v1/runtime/probe":{"post":{"summary":"执行真实代理探测","description":"通过当前租约签发的代理凭据探测指定 HTTPS 目标；虚拟模式返回明确的虚拟结果。","operationId":"probe_runtime_v1_runtime_probe_post","parameters":[{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeProbeRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Probe Runtime V1 Runtime Probe Post"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["单出口运行时"]}},"/v1/bindings/logout":{"post":{"summary":"注销项目绑定","description":"释放当前租约并撤销项目用户绑定，所有关联短期凭据立即失效。","operationId":"binding_logout_v1_bindings_logout_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BindingLogoutRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/services":{"get":{"summary":"读取套餐列表","description":"返回当前项目用户可见的套餐摘要和节点数量。","operationId":"services_v1_services_get","parameters":[{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Services V1 Services Get","properties":{"catalog_stale":{"type":"boolean","description":"目录是否超过正常新鲜期；不代表出口已测通。"},"catalog_refreshing":{"type":"boolean","description":"目录已返回，后台正在合并刷新。"},"catalog_observed_at":{"type":"string","format":"date-time","description":"目录最近真实观测时间，缓存复用不更新此时间。"},"catalog_age_seconds":{"type":"integer","minimum":0},"catalog_error_code":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/account":{"get":{"summary":"读取账户余额","description":"读取当前项目用户的脱敏账户钱包；不返回上游账号、Session 或密钥。","operationId":"account_v1_account_get","parameters":[{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Account V1 Account Get"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/services/select":{"post":{"summary":"切换套餐和节点","description":"在当前租约内按配置版本切换套餐或节点，防止旧请求覆盖新配置。","operationId":"select_service_v1_services_select_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSelectRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeCommandResponse"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/services/{service_id}/nodes":{"get":{"summary":"读取套餐节点","description":"按游标分页返回节点摘要，不返回完整上游配置。","operationId":"nodes_v1_services__service_id__nodes_get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Nodes V1 Services  Service Id  Nodes Get","properties":{"catalog_stale":{"type":"boolean","description":"目录是否超过正常新鲜期；不代表出口已测通。"},"catalog_refreshing":{"type":"boolean","description":"目录已返回，后台正在合并刷新。"},"catalog_observed_at":{"type":"string","format":"date-time","description":"目录最近真实观测时间，缓存复用不更新此时间。"},"catalog_age_seconds":{"type":"integer","minimum":0},"catalog_error_code":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["项目接入"]}},"/v1/node-tests":{"post":{"summary":"提交节点测速","description":"异步提交节点测速任务，接口立即返回任务编号。","operationId":"create_node_test_v1_node_tests_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeTestRequest"}}}},"responses":{"202":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Node Test V1 Node Tests Post","properties":{"created_at":{"type":"integer","description":"任务创建时间，UTC Unix 秒。"},"updated_at":{"type":"integer","description":"任务更新时间，UTC Unix 秒。"},"results":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"observed_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"原始探测 UTC Unix 秒；缓存命中不会延长其有效期。"},"finished_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"本次结果写入 UTC Unix 秒。"}}}}}}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["节点测速"]}},"/v1/node-tests/{job_id}":{"get":{"summary":"读取测速进度","description":"读取异步测速任务的进度和逐节点结果。","operationId":"node_test_v1_node_tests__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Node Test V1 Node Tests  Job Id  Get","properties":{"created_at":{"type":"integer","description":"任务创建时间，UTC Unix 秒。"},"updated_at":{"type":"integer","description":"任务更新时间，UTC Unix 秒。"},"results":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"observed_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"原始探测 UTC Unix 秒；缓存命中不会延长其有效期。"},"finished_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"本次结果写入 UTC Unix 秒。"}}}}}}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["节点测速"]},"delete":{"summary":"取消测速任务","description":"取消尚未完成的测速任务；已完成节点结果保持不变。","operationId":"cancel_node_test_v1_node_tests__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"变更请求的唯一幂等键。凭据签发/续期每次请求使用新的键，其他写请求在传输重试时沿用原键。"},{"name":"X-RoboHub-Project","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$"},"description":"项目后端固定配置的 project_id。"},{"name":"X-RoboHub-User","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128},"description":"项目后端从已认证会话取得的稳定项目用户标识，不能由浏览器直接信任。"},{"name":"X-RoboHub-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]{10,}$"},"description":"当前 Unix 秒级时间戳；与服务端时间偏差不能超过 300 秒。"},{"name":"X-RoboHub-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"每次 HTTP 请求唯一的随机值；重试也必须重新生成。"},{"name":"X-RoboHub-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"HMAC-SHA256 十六进制签名，签名原文见接入手册和参考客户端。"},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"调用方请求标识；未提供时由 RoboHub 生成并在响应头返回。"}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Node Test V1 Node Tests  Job Id  Delete"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"请求头、幂等键或配置版本无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"项目签名、绑定或权限无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"幂等、租约或配置版本冲突","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"端口或 Runner 容量暂时不足","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"上游、Runner 或数据面暂不可用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"ProjectHmacSignature":[],"ProjectIdentity":[]}],"x-robohub-signature":"HMAC-SHA256(method + newline + path + newline + sha256(body) + newline + timestamp + newline + nonce + newline + project_id)","tags":["节点测速"]}},"/v1/admin/session":{"get":{"summary":"读取管理员登录状态","description":"仅返回当前浏览器是否已建立管理员登录态。","operationId":"admin_session_v1_admin_session_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Session V1 Admin Session Get"}}}}},"tags":["管理员接口"]},"delete":{"summary":"管理员退出登录","description":"撤销当前浏览器的管理员登录态。","operationId":"admin_session_logout_v1_admin_session_delete","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{}}}}},"tags":["管理员接口"]}},"/v1/admin/session/login":{"post":{"summary":"管理员登录","description":"校验受保护的管理员密码并建立短期 HttpOnly 登录态。","operationId":"admin_session_login_v1_admin_session_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginRequest"}}},"required":true},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]}},"/v1/admin/overview":{"get":{"summary":"读取总控台概览","description":"管理员读取租约、端口、数据面和失败统计；不返回任何秘密。","operationId":"admin_overview_v1_admin_overview_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Overview V1 Admin Overview Get"}}}}},"security":[{"AdminKey":[]}],"tags":["管理员接口"]}},"/v1/admin/leases":{"get":{"summary":"读取端口租约","description":"管理员读取脱敏租约状态、端口和租户摘要。","operationId":"admin_leases_v1_admin_leases_get","security":[{"AdminKey":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"project","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Project"}},{"name":"tenant_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Tenant Query"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Leases V1 Admin Leases Get"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]}},"/v1/admin/events":{"get":{"summary":"读取审计事件","description":"管理员按游标读取脱敏运行事件。","operationId":"admin_events_v1_admin_events_get","security":[{"AdminKey":[]}],"parameters":[{"name":"after_event_id","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"After Event Id"}},{"name":"project","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Project"}},{"name":"event_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Event Query"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Events V1 Admin Events Get"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]},"delete":{"summary":"删除审计日志","description":"管理员删除选中的审计日志；必须携带幂等键。","operationId":"delete_admin_events_v1_admin_events_delete","security":[{"AdminKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminEventDeleteRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Admin Events V1 Admin Events Delete"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]}},"/v1/admin/node-tests":{"get":{"summary":"读取测速任务","description":"管理员读取测速任务状态和汇总，不返回凭据。","operationId":"admin_node_test_jobs_v1_admin_node_tests_get","security":[{"AdminKey":[]}],"parameters":[{"name":"project","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Project"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"State"}},{"name":"tenant_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Tenant Query"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Node Test Jobs V1 Admin Node Tests Get"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]},"delete":{"summary":"删除测速历史","description":"管理员批量删除已完成或已取消的测速任务；运行中的任务不能删除。","operationId":"delete_admin_node_test_jobs_v1_admin_node_tests_delete","security":[{"AdminKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminNodeTestDeleteRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Admin Node Test Jobs V1 Admin Node Tests Delete"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]}},"/v1/admin/node-tests/{job_id}":{"get":{"summary":"读取测速明细","description":"管理员读取单个测速任务的逐节点、目标探测和错误码明细；不返回凭据或上游账户信息。","operationId":"admin_node_test_job_v1_admin_node_tests__job_id__get","security":[{"AdminKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Node Test Job V1 Admin Node Tests  Job Id  Get"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]}},"/v1/admin/runners":{"get":{"summary":"读取 Runner 池","description":"管理员读取官方 Runner v14 的脱敏在线、繁忙、PID 和错误状态。","operationId":"admin_runners_v1_admin_runners_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Runners V1 Admin Runners Get"}}}}},"security":[{"AdminKey":[]}],"tags":["管理员接口"]}},"/v1/admin/runner-queues":{"get":{"summary":"读取 Runner 队列","description":"管理员读取账户级 Runner 供给和排队状态。","operationId":"admin_runner_queues_v1_admin_runner_queues_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Runner Queues V1 Admin Runner Queues Get"}}}}},"security":[{"AdminKey":[]}],"tags":["管理员接口"]}},"/v1/admin/accounts":{"get":{"summary":"读取账户资源池","description":"管理员读取账户指纹、Session 状态、Runner 数量和队列摘要。","operationId":"admin_accounts_v1_admin_accounts_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Accounts V1 Admin Accounts Get"}}}}},"security":[{"AdminKey":[]}],"tags":["管理员接口"]}},"/v1/admin/projects":{"get":{"summary":"读取项目注册表","description":"管理员读取项目状态；普通项目接口不可访问。","operationId":"admin_projects_v1_admin_projects_get","security":[{"AdminKey":[]}],"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Projects V1 Admin Projects Get"}}}}},"tags":["管理员接口"]},"post":{"summary":"注册项目","description":"管理员注册新的业务项目标识；项目密钥通过受控密钥系统配置。","operationId":"register_project_v1_admin_projects_post","security":[{"AdminKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProjectRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Register Project V1 Admin Projects Post"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]}},"/v1/admin/projects/{project_id}":{"patch":{"summary":"启用或停用项目","description":"管理员改变项目接入状态；停用后现有任务只能按租约回收。","operationId":"set_project_status_v1_admin_projects__project_id__patch","security":[{"AdminKey":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProjectStatusRequest"}}}},"responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Project Status V1 Admin Projects  Project Id  Patch"}}}},"422":{"description":"请求字段无效","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["管理员接口"]}},"/v1/admin/profiles":{"get":{"summary":"读取出口 profile","description":"管理员读取脱敏出口信息，不返回上游凭据。","operationId":"admin_profiles_v1_admin_profiles_get","responses":{"200":{"description":"成功","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Profiles V1 Admin Profiles Get"}}}}},"security":[{"AdminKey":[]}],"tags":["管理员接口"]}}},"components":{"schemas":{"AdminEventDeleteRequest":{"properties":{"event_ids":{"items":{"type":"integer"},"type":"array","maxItems":100,"minItems":1,"title":"Event Ids","description":"要删除的审计日志编号。"}},"type":"object","required":["event_ids"],"title":"AdminEventDeleteRequest"},"AdminLoginRequest":{"properties":{"password":{"type":"string","maxLength":512,"minLength":1,"title":"Password","description":"管理员登录密码；仅用于建立短期 HttpOnly 登录态。"}},"type":"object","required":["password"],"title":"AdminLoginRequest"},"AdminNodeTestDeleteRequest":{"properties":{"job_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Job Ids","description":"要删除的已结束测速任务编号。"}},"type":"object","required":["job_ids"],"title":"AdminNodeTestDeleteRequest"},"AdminProjectRequest":{"properties":{"project_id":{"type":"string","maxLength":64,"minLength":2,"title":"Project Id"},"display_name":{"type":"string","maxLength":128,"minLength":1,"title":"Display Name"}},"type":"object","required":["project_id","display_name"],"title":"AdminProjectRequest"},"AdminProjectStatusRequest":{"properties":{"status":{"type":"string","enum":["active","disabled"],"title":"状态"}},"type":"object","required":["status"],"title":"AdminProjectStatusRequest"},"BindingLoginRequest":{"properties":{"mode":{"type":"string","enum":["account","api_key"],"title":"Mode","default":"account"},"credential_reference":{"type":"string","maxLength":256,"minLength":1,"title":"托管账户引用","description":"历史托管 profile 引用；带用户账号登录时由服务端替换为不可逆的用户 profile 引用。","default":"robohub-default"},"account_email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"账户标识","description":"账户模式 write-only 登录字段，不会写入项目数据或响应。","writeOnly":true},"account_password":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"账户密码","description":"账户模式 write-only 登录字段，不会写入项目数据或响应。","writeOnly":true},"account_ref":{"anyOf":[{"type":"string","maxLength":128,"minLength":8},{"type":"null"}],"title":"账户引用","description":"已绑定账户的不透明引用；不能填写邮箱、密码或上游 Session。"}},"type":"object","title":"绑定项目用户请求"},"BindingLogoutRequest":{"properties":{"lease_id":{"anyOf":[{"type":"string","maxLength":128,"minLength":8},{"type":"null"}],"title":"租约标识"},"fencing_token":{"anyOf":[{"type":"string","maxLength":256,"minLength":16},{"type":"null"}],"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本"}},"type":"object","title":"注销项目绑定请求"},"CredentialIssueRequest":{"properties":{"lease_id":{"type":"string","maxLength":128,"minLength":8,"title":"租约标识"},"fencing_token":{"type":"string","maxLength":256,"minLength":16,"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本","description":"当前租约配置版本；生产模式必填，用于拒绝旧任务写入。"},"task_ref":{"type":"string","maxLength":128,"minLength":1,"title":"项目任务标识","description":"项目内部任务编号；不能填写上游账号标识。"},"credential_ttl_seconds":{"type":"integer","maximum":300.0,"minimum":30.0,"title":"凭据有效秒数","default":120}},"type":"object","required":["lease_id","fencing_token","task_ref","expected_config_revision"],"title":"签发短期凭据请求"},"CredentialIssueResponse":{"properties":{"lease_id":{"type":"string","title":"租约标识"},"scheme":{"type":"string","title":"代理协议","default":"http"},"host":{"type":"string","title":"Host","description":"RoboHub 代理监听地址，不是公网出口 IP。"},"port":{"type":"integer","title":"端口"},"proxy_username":{"type":"string","title":"代理用户名"},"proxy_password":{"type":"string","title":"代理密码","description":"一次性短期代理密码；禁止写日志或返回浏览器。","writeOnly":true},"credential_expires_at":{"type":"string","format":"date-time","title":"凭据到期时间"},"task_ref":{"type":"string","title":"项目任务标识"},"egress_id":{"type":"string","title":"出口标识","default":"virtual"},"egress_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"出口 IP","description":"可选的上游报告值；业务结果中的真实出口 IP 必须由该代理访问 IP echo 后观测，不能用 host 代替。"},"data_plane_mode":{"type":"string","title":"数据面模式","default":"real","enum":["real"],"description":"云端 Test 与正式环境固定为 real，绝不将虚拟出口伪装为真实出口。"}},"type":"object","required":["lease_id","host","port","proxy_username","proxy_password","credential_expires_at","task_ref"],"title":"短期凭据响应"},"CredentialRenewRequest":{"properties":{"lease_id":{"type":"string","maxLength":128,"minLength":8,"title":"租约标识"},"fencing_token":{"type":"string","maxLength":256,"minLength":16,"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本","description":"当前租约配置版本；生产模式必填，用于拒绝旧任务写入。"},"task_ref":{"type":"string","maxLength":128,"minLength":1,"title":"项目任务标识","description":"项目内部任务编号；同任务和出口的有效凭据可原值续期，必须采用响应中的实际到期时间。"},"credential_ttl_seconds":{"type":"integer","maximum":3600.0,"minimum":30.0,"title":"凭据有效秒数","default":300}},"type":"object","required":["lease_id","fencing_token","task_ref","expected_config_revision"],"title":"续期短期凭据请求"},"DynamicRotationRequest":{"properties":{"line_ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"主动动态线路标识列表","description":"从主动动态线路清单读取的线路标识；轮转前不得存在活动租约。"}},"type":"object","required":["line_ids"],"title":"主动动态线路轮转请求"},"EnsureRequest":{"properties":{"service_id":{"type":"string","maxLength":128,"minLength":1,"title":"套餐标识","default":"virtual-standard"},"node_hashes":{"items":{"type":"string"},"type":"array","maxItems":64,"title":"节点标识列表"}},"type":"object","title":"单出口租约请求"},"ErrorResponse":{"properties":{"code":{"type":"string","title":"错误码"},"message":{"type":"string","title":"错误说明"},"request_id":{"type":"string","title":"请求标识"},"retryable":{"type":"boolean","title":"Retryable","default":false},"retry_after_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Retry After Ms"}},"type":"object","required":["code","message","request_id"],"title":"统一错误响应"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"请求字段错误"},"NodeTestRequest":{"properties":{"service_id":{"type":"string","maxLength":128,"minLength":1,"title":"套餐标识","default":"virtual-standard"},"node_hashes":{"items":{"type":"string"},"type":"array","maxItems":64,"title":"节点标识列表"},"probe_target_class":{"type":"string","enum":["all","gstatic","openai-auth","chatgpt"],"title":"测速目标类别","default":"all"}},"type":"object","title":"节点测速请求"},"PoolCredentialIssueRequest":{"properties":{"lease_id":{"type":"string","maxLength":128,"minLength":8,"title":"租约标识"},"fencing_token":{"type":"string","maxLength":256,"minLength":16,"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本","description":"当前租约配置版本；生产模式必填，用于拒绝旧任务写入。"},"task_ref":{"type":"string","maxLength":128,"minLength":1,"title":"项目任务标识","description":"项目内部任务编号；不能填写上游账号标识。"},"credential_ttl_seconds":{"type":"integer","maximum":3600.0,"minimum":30.0,"title":"凭据有效秒数","default":300}},"type":"object","required":["lease_id","fencing_token","task_ref","expected_config_revision"],"title":"签发多出口凭据请求"},"PoolCredentialResponse":{"properties":{"egress_id":{"type":"string","title":"出口标识"},"node_hash":{"type":"string","title":"节点标识"},"host":{"type":"string","title":"Host","description":"RoboHub 代理监听地址，不是公网出口 IP。"},"port":{"type":"integer","title":"端口"},"scheme":{"type":"string","title":"代理协议"},"public_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"当前公网出口 IP"},"network_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"出口网络前缀"},"asn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"出口 ASN"},"egress_family_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"出口族筛选键"},"identity_status":{"type":"string","title":"身份观测状态","default":"unknown"},"identity_error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"身份观测错误码"},"identity_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"身份观测时间"},"proxy_username":{"type":"string","title":"代理用户名","description":"仅项目后端任务内存使用，禁止写入日志或浏览器。"},"proxy_password":{"type":"string","title":"代理密码","description":"仅项目后端任务内存使用，禁止写入日志、数据库或浏览器。","writeOnly":true},"expires_at":{"type":"string","title":"到期时间"}},"type":"object","required":["egress_id","node_hash","host","port","scheme","proxy_username","proxy_password","expires_at"],"title":"单个出口短期凭据"},"PoolCredentialsIssueResponse":{"properties":{"lease_id":{"type":"string","title":"租约标识"},"credential_expires_at":{"type":"string","title":"凭据到期时间"},"data_plane_mode":{"type":"string","title":"数据面模式","default":"real","enum":["real"],"description":"云端 Test 与正式环境固定为 real，绝不将虚拟出口伪装为真实出口。"},"validation_only":{"type":"boolean","title":"仅协议恢复验证","default":false},"credentials":{"items":{"$ref":"#/components/schemas/PoolCredentialResponse"},"type":"array","title":"Credentials"}},"type":"object","required":["lease_id","credential_expires_at","data_plane_mode"],"title":"多出口凭据响应"},"PoolEgressResponse":{"properties":{"egress_id":{"type":"string","title":"出口标识"},"node_hash":{"type":"string","title":"节点标识"},"upstream_line_id":{"type":"string","title":"上游线路标识","description":"上游已选择线路标识；不代表公网 IP 唯一。"},"node_name":{"type":"string","title":"节点名称"},"scheme":{"type":"string","title":"代理协议"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"端口"},"status":{"type":"string","title":"状态"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"失败原因"},"public_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"当前公网出口 IP","description":"经当前代理监听器观测的公网出口 IP；未知时为空。"},"ip_family":{"anyOf":[{"type":"string","enum":["ipv4","ipv6"]},{"type":"null"}],"title":"出口地址族"},"network_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"出口网络前缀","description":"IPv4 /24 或 IPv6 /64 出口网络前缀；可用于项目端去重。"},"asn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"出口 ASN","description":"出口 ASN；外部 ASN 查询不可用时为空。"},"asn_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"ASN 名称"},"egress_family_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"出口族筛选键","description":"由地址族、网络前缀和 ASN 组成的出口族键；项目可据此排除同族出口。"},"identity_status":{"type":"string","title":"身份观测状态","default":"unknown"},"identity_error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"身份观测错误码"},"identity_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"身份观测来源"},"identity_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"身份观测时间"}},"type":"object","required":["egress_id","node_hash","upstream_line_id","node_name","scheme","host","port","status"],"title":"代理池出口摘要"},"PoolEnsureRequest":{"properties":{"service_id":{"type":"string","maxLength":128,"minLength":1,"title":"套餐标识","default":"virtual-standard"},"node_hashes":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"节点标识列表"},"max_egresses":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Egresses"},"egress_policy":{"type":"string","enum":["line_usable","distinct_family"],"title":"出口分配策略","description":"line_usable 保留每条真实预检通过的线路；distinct_family 仅保留不同公网出口族。","default":"line_usable"}},"type":"object","required":["node_hashes","max_egresses"],"title":"多出口代理池请求"},"PoolRuntimeResponse":{"properties":{"tenant_hash":{"type":"string","title":"脱敏租户标识"},"lease_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"租约标识"},"fencing_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"租约栅栏令牌"},"config_revision":{"type":"integer","title":"配置版本","default":0},"status":{"type":"string","title":"状态"},"data_plane_mode":{"type":"string","title":"数据面模式","default":"real","enum":["real"],"description":"云端 Test 与正式环境固定为 real，绝不将虚拟出口伪装为真实出口。"},"egress_count":{"type":"integer","title":"出口数量","default":0},"egress_policy":{"type":"string","enum":["line_usable","distinct_family"],"title":"出口分配策略","default":"line_usable"},"observed_family_count":{"type":"integer","title":"观测到的公网出口族数","default":0},"admission_state":{"type":"string","title":"项目协议准入状态","default":"passed"},"egresses":{"items":{"$ref":"#/components/schemas/PoolEgressResponse"},"type":"array","title":"出口列表"}},"type":"object","required":["tenant_hash","status","data_plane_mode"],"title":"多出口代理池响应"},"PoolRuntimeStatusResponse":{"properties":{"tenant_hash":{"type":"string","title":"脱敏租户标识"},"lease_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"租约标识"},"config_revision":{"type":"integer","title":"配置版本","default":0},"status":{"type":"string","title":"状态"},"data_plane_mode":{"type":"string","title":"数据面模式","default":"real","enum":["real"],"description":"云端 Test 与正式环境固定为 real，绝不将虚拟出口伪装为真实出口。"},"egress_count":{"type":"integer","title":"出口数量","default":0},"egress_policy":{"type":"string","enum":["line_usable","distinct_family"],"title":"出口分配策略","default":"line_usable"},"observed_family_count":{"type":"integer","title":"观测到的公网出口族数","default":0},"admission_state":{"type":"string","title":"项目协议准入状态","default":"passed"},"egresses":{"items":{"$ref":"#/components/schemas/PoolEgressResponse"},"type":"array","title":"出口列表"}},"type":"object","required":["tenant_hash","status","data_plane_mode"],"title":"多出口代理池状态响应"},"ProjectProtocolAttestationRequest":{"properties":{"lease_id":{"type":"string","maxLength":128,"minLength":8,"title":"租约标识"},"fencing_token":{"type":"string","maxLength":256,"minLength":16,"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本","description":"当前租约配置版本；生产模式必填，用于拒绝旧任务写入。"},"task_ref":{"type":"string","maxLength":128,"minLength":1,"title":"项目任务标识","description":"项目内部验证任务编号；不得填写 Cookie、Session 或账户标识。"},"results":{"items":{"$ref":"#/components/schemas/ProjectProtocolProbeResultInput"},"type":"array","maxItems":50,"minItems":1,"title":"节点验证结果"}},"type":"object","required":["lease_id","fencing_token","task_ref","results"],"title":"项目协议恢复结果请求"},"ProjectProtocolProbeResultInput":{"properties":{"node_hash":{"type":"string","maxLength":256,"minLength":1,"title":"节点标识"},"outcome":{"type":"string","enum":["passed","challenge_required","timeout","connection_failed","fetch_failed","http_rejected"],"title":"项目侧验证结果"},"http_status":{"anyOf":[{"type":"integer","maximum":599.0,"minimum":100.0},{"type":"null"}],"title":"Http Status"}},"type":"object","required":["node_hash","outcome"],"title":"项目协议单节点结果"},"ProjectProtocolValidationPoolRequest":{"properties":{"service_id":{"type":"string","maxLength":128,"minLength":1,"title":"套餐标识","default":"virtual-standard"},"node_hashes":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"节点标识列表"},"max_egresses":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Egresses"},"egress_policy":{"type":"string","enum":["line_usable","distinct_family"],"title":"出口分配策略","description":"line_usable 保留每条真实预检通过的线路；distinct_family 仅保留不同公网出口族。","default":"line_usable"}},"type":"object","required":["node_hashes","max_egresses"],"title":"项目协议恢复验证代理池请求","description":"Creates a pool usable only for a project browser recovery check."},"RuntimeCommandResponse":{"properties":{"tenant_hash":{"type":"string","title":"脱敏租户标识"},"upstream_verification":{"anyOf":[{"type":"string","enum":["verified","deferred_to_runtime"]},{"type":"null"}],"title":"Upstream Verification","description":"verified 表示已执行账户校验；deferred_to_runtime 仅表示恢复已知账户关联，实际出口仍须运行时校验。"},"account_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"账户引用","description":"已绑定 RoboCloud 账户的不透明引用；不含邮箱、密码或 Session。"},"lease_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"租约标识"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"端口"},"shard_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"分片标识"},"config_revision":{"type":"integer","title":"配置版本","default":0},"status":{"type":"string","title":"状态"},"data_plane_mode":{"type":"string","title":"数据面模式","default":"real","enum":["real"],"description":"云端 Test 与正式环境固定为 real，绝不将虚拟出口伪装为真实出口。"},"fencing_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"租约栅栏令牌","description":"仅供项目后端提交续租、切换和释放操作；状态查询及管理接口不会返回。"}},"type":"object","required":["tenant_hash","status"],"title":"运行命令响应"},"RuntimeMutationRequest":{"properties":{"lease_id":{"type":"string","maxLength":128,"minLength":8,"title":"租约标识"},"fencing_token":{"type":"string","maxLength":256,"minLength":16,"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本","description":"当前租约配置版本；生产模式必填，用于拒绝旧任务写入。"}},"type":"object","required":["lease_id","fencing_token","expected_config_revision"],"title":"租约变更请求"},"RuntimeProbeRequest":{"properties":{"lease_id":{"type":"string","maxLength":128,"minLength":8,"title":"租约标识"},"fencing_token":{"type":"string","maxLength":256,"minLength":16,"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本","description":"当前租约配置版本；生产模式必填，用于拒绝旧任务写入。"},"target_class":{"type":"string","enum":["gstatic","openai-auth","chatgpt"],"title":"探测目标类别","default":"gstatic"}},"type":"object","required":["lease_id","fencing_token","expected_config_revision"],"title":"真实代理探测请求"},"RuntimeResponse":{"properties":{"tenant_hash":{"type":"string","title":"脱敏租户标识"},"upstream_verification":{"anyOf":[{"type":"string","enum":["verified","deferred_to_runtime"]},{"type":"null"}],"title":"Upstream Verification","description":"verified 表示已执行账户校验；deferred_to_runtime 仅表示恢复已知账户关联，实际出口仍须运行时校验。"},"account_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"账户引用","description":"已绑定 RoboCloud 账户的不透明引用；不含邮箱、密码或 Session。"},"lease_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"租约标识"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"端口"},"shard_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"分片标识"},"config_revision":{"type":"integer","title":"配置版本","default":0},"status":{"type":"string","title":"状态"},"data_plane_mode":{"type":"string","title":"数据面模式","default":"real","enum":["real"],"description":"云端 Test 与正式环境固定为 real，绝不将虚拟出口伪装为真实出口。"}},"type":"object","required":["tenant_hash","status"],"title":"运行状态响应"},"ServiceSelectRequest":{"properties":{"service_id":{"type":"string","maxLength":128,"minLength":1,"title":"套餐标识","default":"virtual-standard"},"node_hashes":{"items":{"type":"string"},"type":"array","maxItems":64,"title":"节点标识列表"},"lease_id":{"anyOf":[{"type":"string","maxLength":128,"minLength":8},{"type":"null"}],"title":"租约标识"},"fencing_token":{"anyOf":[{"type":"string","maxLength":256,"minLength":16},{"type":"null"}],"title":"租约栅栏令牌"},"expected_config_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"预期配置版本"}},"type":"object","title":"切换套餐节点请求"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"字段错误详情"}},"securitySchemes":{"ProjectHmacSignature":{"type":"apiKey","in":"header","name":"X-RoboHub-Signature","description":"项目 HMAC 签名。每次请求按 UTF-8 计算 method、路径、请求体 SHA-256、秒级时间戳、nonce、project_id；不能复用静态值。"},"ProjectIdentity":{"type":"apiKey","in":"header","name":"X-RoboHub-Project","description":"由 RoboHub 管理员登记并在项目后端固定配置的项目标识。"},"AdminKey":{"type":"apiKey","in":"header","name":"X-RoboHub-Admin-Key","description":"仅管理员项目管理接口使用，不得交给普通项目。"}}},"x-robohub-hmac-canonical":"METHOD\\nPATH_ONLY\\nSHA256_HEX_OF_EXACT_UTF8_BODY\\nUNIX_TIMESTAMP_SECONDS\\nNONCE\\nPROJECT_ID","x-robohub-compatibility-contract":"robohub-v1","x-robohub-project-capability-contract":"robohub-project-capabilities-v1","x-robohub-runtime-dependency-contract":"robohub-python-runtime-v1","x-robohub-credential-policy":"代理用户名和密码只在项目后端任务内存中短暂使用，不得记录、持久化或返回浏览器。"}