#节点、服务与网关
读取节点、服务和网关运行信息,并维护允许编辑的服务元数据。 本页完整列出 7 个受支持操作的请求与响应契约。
路径均相对于
https://<nsd-host>。先设置NSD_BASE_URL=https://<nsd-host>/api/v1和NSD_TOKEN;示例 ID 与数据均为虚构值。
#列出节点
GET
/api/v1/nodesread-only / full#参数
| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
kind | query | string | null | 否 | Filter by machine kind (NSN, NSC, NSGW). |
cursor | query | string | null | 否 | Pagination cursor. Use next_cursor from the previous response unchanged. |
limit | query | integer | null | 否 | Cursor pagination: requested page size. |
#请求示例
curl --silent --show-error --fail-with-body -X GET \
"$NSD_BASE_URL/nodes?limit=100" \
-H "Authorization: Bearer $NSD_TOKEN" \
-H 'Accept: application/json'#响应状态
| 状态 | 含义 | 响应结构 |
|---|---|---|
200 | Paginated Node inventory | ListNodesResponse |
401 | 缺少或无效的 Bearer 令牌。 | ProblemDetails |
#200 响应
| 字段 | 类型 | 必有 | 说明 |
|---|---|---|---|
items | array<NodeInventoryView> | 是 | Nodes in this page. |
items[].arch | string | null | 否 | CPU architecture reported by the associated Device. |
items[].client_version | string | null | 否 | NS client version reported by the associated Device. |
items[].device_id | string | 是 | Stable Device identity associated with this Node. |
items[].device_name | string | 是 | Label of the associated Device. |
items[].hostname | string | null | 否 | Hostname reported by the associated Device. |
items[].id | string | 是 | NSD record id used by management actions. |
items[].last_seen | string | null | 否 | Latest observation time in RFC 3339 UTC, or null when never observed. |
items[].name | string | 是 | Operator-facing Node label, or Node identity when unnamed. |
items[].node_domain | string | 是 | Legacy Node DNS name in the configured node namespace. |
items[].node_id | string | 是 | Stable Node identity. |
items[].node_ip | string | null | 否 | Stable overlay address in this Network. |
items[].os | string | null | 否 | Runtime metadata useful for fleet diagnosis. |
items[].os_version | string | null | 否 | Operating-system version reported by the associated Device. |
items[].policy_version | integer | null | 否 | Last policy version acknowledged by the Node. |
items[].posture_available | boolean | 是 | Whether the posture authority was readable for this response. |
items[].principal_kind | string | 是 | user or organization. |
items[].principal_user_id | string | null | 否 | Human principal or null for an Organization-owned workload. |
items[].runtime_state | string | 是 | connected, offline, or waiting_first_connection. |
items[].short_dns_canonical_name | string | null | 否 | Short DNS v2 canonical Node FQDN, when compact authority is available. |
next_cursor | string | null | 否 | Cursor for the next page, or null when there is no next page. |
{
"items": [
{
"arch": "example",
"client_version": "v1",
"device_id": "dev_01K4DEVICE00000000000000",
"device_name": "example",
"hostname": "example",
"id": "01K4EXAMPLE0000000000000",
"last_seen": "example",
"name": "示例资源",
"node_domain": "web.example-network.svc.ns.io",
"node_id": "01K4EXAMPLE0000000000000",
"node_ip": "100.64.0.12",
"os": "example",
"os_version": "v1",
"policy_version": 1,
"posture_available": false,
"principal_kind": "example",
"principal_user_id": "01K4USER000000000000000000",
"runtime_state": "connected",
"short_dns_canonical_name": "example"
}
],
"next_cursor": "example"
}错误响应均使用 Problem Details;调用方应判断 HTTP 状态和稳定的 code,不要解析 detail 文案。
#列出服务
GET
/api/v1/servicesread-only / full#参数
| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
cursor | query | string | null | 否 | Opaque cursor — the last id of the previous page. Absent on page 1. |
limit | query | integer | null | 否 | Requested page size; clamped to 1..=MAX_LIMIT. |
#请求示例
curl --silent --show-error --fail-with-body -X GET \
"$NSD_BASE_URL/services?limit=100" \
-H "Authorization: Bearer $NSD_TOKEN" \
-H 'Accept: application/json'#响应状态
| 状态 | 含义 | 响应结构 |
|---|---|---|
200 | Paginated list of services in the caller's realm | ListServicesResponse |
401 | 缺少或无效的 Bearer 令牌。 | ProblemDetails |
#200 响应
| 字段 | 类型 | 必有 | 说明 |
|---|---|---|---|
items | array<ServiceView> | 是 | Services in this page. |
items[].backend_hint | string | 是 | Backend host:port hint. |
items[].backend_public_edge_ready | boolean | null | 否 | Whether the backend node can serve as a public-ingress backend. |
items[].custom_domain | string | null | 否 | Operator-declared custom domain (Service.domain in the node's services.toml), absent when the service declares none. For an HTTP/HTTPS service this is the only host the origin answers on: it selects its virtual host by Host/SNI and holds a certificate for this name alone, so the FQID lands on the default virtual host instead. Consumers presenting an access address must prefer this and fall back to the FQID; the FQID remains the service's identity. |
items[].domain | string | 是 | Service domain: the declared custom domain, or a generated fallback. Read custom_domain to distinguish a declared name. |
items[].gateway_binding | GatewayBindingView | 否 | — |
items[].gateway_binding.auto_bound | boolean | 是 | Whether this binding is derived from the site's default gateway. |
items[].gateway_binding.gateway_id | string | 是 | Gateway ULID. |
items[].gateway_binding.id | string | 是 | Binding identifier. |
items[].gateway_binding.mode | string | 是 | Transport mode. |
items[].gateway_binding.priority | integer | 是 | Binding priority. |
items[].gateway_binding.service_id | string | 是 | Service ULID. |
items[].id | string | 是 | Service ULID. |
items[].last_sync_at | string | 是 | Last sync time (RFC 3339 UTC). |
items[].listen_hint | string | null | 否 | Optional listen hint. |
items[].name | string | 是 | Service name. |
items[].protocol | string | 是 | Protocol (tcp, udp, or http). |
items[].public_edge | ServicePublicEdgeView | 是 | Public ingress overlay. |
items[].public_edge.exposed | boolean | 是 | Whether the service is exposed on the public edge. |
items[].public_edge.public_host | string | null | 否 | Public host, or null when not exposed. |
items[].public_edge.routing_gateway_id | string | null | 否 | Gateway used for public routing, when pinned. |
items[].public_edge.subject_policy | object | null | 否 | Subject policy selected for the exposure. |
items[].public_virtual_port | integer | null | 否 | Public-edge L4 listener port, when configured. |
items[].reported_by | string | 是 | Reporting machine id. |
items[].short_dns_canonical_name | string | null | 否 | Short DNS v2 canonical Service FQDN, when compact authority is available. |
items[].site_id | string | null | 否 | Site ULID, or null when the reporting machine has no site. |
items[].source_ip | SourceIpAdmissionView | 否 | — |
items[].source_ip.allow_cidrs | array<string> | 是 | Allowed CIDR ranges. |
items[].source_ip.deny_cidrs | array<string> | 是 | Denied CIDR ranges. |
items[].source_ip.fail_closed | boolean | 是 | Whether the route fails closed when the filter cannot be evaluated. |
items[].status | string | 是 | Service status (active or offline). |
items[].vip | string | 是 | Backend VIP/host. |
items[].virtual_port | integer | null | 否 | Overlay virtual port used for ACL authoring. |
next_cursor | string | null | 否 | Cursor for the next page, or null when there is no next page. |
{
"items": [
{
"backend_hint": "example",
"backend_public_edge_ready": false,
"custom_domain": "web.example-network.svc.ns.io",
"domain": "web.example-network.svc.ns.io",
"gateway_binding": {},
"id": "01K4EXAMPLE0000000000000",
"last_sync_at": "2026-09-09T10:00:00Z",
"listen_hint": "example",
"name": "示例资源",
"protocol": "tcp",
"public_edge": {},
"public_virtual_port": 1,
"reported_by": "n-01K4NODE000000000000000",
"short_dns_canonical_name": "example",
"site_id": "01K4EXAMPLE0000000000000",
"source_ip": {},
"status": "active",
"vip": "100.64.0.12",
"virtual_port": 1
}
],
"next_cursor": "example"
}错误响应均使用 Problem Details;调用方应判断 HTTP 状态和稳定的 code,不要解析 detail 文案。
#读取服务
GET
/api/v1/services/{id}read-only / full#参数
| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
id | path | string | 是 | Service ULID |
#请求示例
curl --silent --show-error --fail-with-body -X GET \
"$NSD_BASE_URL/services/${SERVICE_ID}" \
-H "Authorization: Bearer $NSD_TOKEN" \
-H 'Accept: application/json'#响应状态
| 状态 | 含义 | 响应结构 |
|---|---|---|
200 | The service with public-edge and source-IP overlays | ServiceView |
401 | 缺少或无效的 Bearer 令牌。 | ProblemDetails |
404 | 当前 Network 中不存在该服务。 | ProblemDetails |
#200 响应
| 字段 | 类型 | 必有 | 说明 |
|---|---|---|---|
backend_hint | string | 是 | Backend host:port hint. |
backend_public_edge_ready | boolean | null | 否 | Whether the backend node can serve as a public-ingress backend. |
custom_domain | string | null | 否 | Operator-declared custom domain (Service.domain in the node's services.toml), absent when the service declares none. For an HTTP/HTTPS service this is the only host the origin answers on: it selects its virtual host by Host/SNI and holds a certificate for this name alone, so the FQID lands on the default virtual host instead. Consumers presenting an access address must prefer this and fall back to the FQID; the FQID remains the service's identity. |
domain | string | 是 | Service domain: the declared custom domain, or a generated fallback. Read custom_domain to distinguish a declared name. |
gateway_binding | GatewayBindingView | 否 | — |
gateway_binding.auto_bound | boolean | 是 | Whether this binding is derived from the site's default gateway. |
gateway_binding.gateway_id | string | 是 | Gateway ULID. |
gateway_binding.id | string | 是 | Binding identifier. |
gateway_binding.mode | string | 是 | Transport mode. |
gateway_binding.priority | integer | 是 | Binding priority. |
gateway_binding.service_id | string | 是 | Service ULID. |
id | string | 是 | Service ULID. |
last_sync_at | string | 是 | Last sync time (RFC 3339 UTC). |
listen_hint | string | null | 否 | Optional listen hint. |
name | string | 是 | Service name. |
protocol | string | 是 | Protocol (tcp, udp, or http). |
public_edge | ServicePublicEdgeView | 是 | Public ingress overlay. |
public_edge.exposed | boolean | 是 | Whether the service is exposed on the public edge. |
public_edge.public_host | string | null | 否 | Public host, or null when not exposed. |
public_edge.routing_gateway_id | string | null | 否 | Gateway used for public routing, when pinned. |
public_edge.subject_policy | object | null | 否 | Subject policy selected for the exposure. |
public_virtual_port | integer | null | 否 | Public-edge L4 listener port, when configured. |
reported_by | string | 是 | Reporting machine id. |
short_dns_canonical_name | string | null | 否 | Short DNS v2 canonical Service FQDN, when compact authority is available. |
site_id | string | null | 否 | Site ULID, or null when the reporting machine has no site. |
source_ip | SourceIpAdmissionView | 否 | — |
source_ip.allow_cidrs | array<string> | 是 | Allowed CIDR ranges. |
source_ip.deny_cidrs | array<string> | 是 | Denied CIDR ranges. |
source_ip.fail_closed | boolean | 是 | Whether the route fails closed when the filter cannot be evaluated. |
status | string | 是 | Service status (active or offline). |
vip | string | 是 | Backend VIP/host. |
virtual_port | integer | null | 否 | Overlay virtual port used for ACL authoring. |
{
"backend_hint": "example",
"backend_public_edge_ready": false,
"custom_domain": "web.example-network.svc.ns.io",
"domain": "web.example-network.svc.ns.io",
"gateway_binding": {
"auto_bound": false,
"gateway_id": "01K4EXAMPLE0000000000000",
"id": "01K4EXAMPLE0000000000000",
"mode": "example",
"priority": 1,
"service_id": "01K4SERVICE00000000000000"
},
"id": "01K4EXAMPLE0000000000000",
"last_sync_at": "2026-09-09T10:00:00Z",
"listen_hint": "example",
"name": "示例资源",
"protocol": "tcp",
"public_edge": {
"exposed": false,
"public_host": "example",
"routing_gateway_id": "01K4EXAMPLE0000000000000",
"subject_policy": {}
},
"public_virtual_port": 1,
"reported_by": "n-01K4NODE000000000000000",
"short_dns_canonical_name": "example",
"site_id": "01K4EXAMPLE0000000000000",
"source_ip": {
"allow_cidrs": [
{}
],
"deny_cidrs": [
{}
],
"fail_closed": false
},
"status": "active",
"vip": "100.64.0.12",
"virtual_port": 1
}错误响应均使用 Problem Details;调用方应判断 HTTP 状态和稳定的 code,不要解析 detail 文案。
#修改服务元数据
PATCH
/api/v1/services/{id}full#参数
| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
id | path | string | 是 | Service ULID |
#请求体
request.json
{}#请求示例
curl --silent --show-error --fail-with-body -X PATCH \
"$NSD_BASE_URL/services/${SERVICE_ID}" \
-H "Authorization: Bearer $NSD_TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data @request.json#响应状态
| 状态 | 含义 | 响应结构 |
|---|---|---|
204 | Public-edge overlay updated | — |
400 | Invalid input (e.g. exposed without public_host) | ProblemDetails |
401 | 缺少或无效的 Bearer 令牌。 | ProblemDetails |
404 | 当前 Network 中不存在该服务。 | ProblemDetails |
409 | public_host already in use by another service | ProblemDetails |
#204 响应
成功,无响应体。
错误响应均使用 Problem Details;调用方应判断 HTTP 状态和稳定的 code,不要解析 detail 文案。
#删除服务
DELETE
/api/v1/services/{id}full#参数
| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
id | path | string | 是 | Service ULID |
#请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
confirmation | string | 是 | Must equal DELETE <service-name> from the latest impact preview. |
expected_updated_at | string | 是 | Exact service update timestamp returned by the latest impact preview. |
request.json
{
"confirmation": "example",
"expected_updated_at": "2026-09-09T10:00:00Z"
}#请求示例
curl --silent --show-error --fail-with-body -X DELETE \
"$NSD_BASE_URL/services/${SERVICE_ID}" \
-H "Authorization: Bearer $NSD_TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data @request.json#响应状态
| 状态 | 含义 | 响应结构 |
|---|---|---|
200 | Service retired and service-owned overlays removed | DeleteServiceResponse |
400 | Typed confirmation is invalid | ProblemDetails |
401 | 缺少或无效的 Bearer 令牌。 | ProblemDetails |
404 | 当前 Network 中不存在该服务。 | ProblemDetails |
409 | Service changed or is still referenced | ProblemDetails |
#200 响应
| 字段 | 类型 | 必有 | 说明 |
|---|---|---|---|
deleted | boolean | 是 | Always true on success. |
summary | ServiceRetirementSummaryView | 是 | Removed-row summary. |
summary.identity_import_rows | integer | 是 | Number of identity-import rows removed. |
summary.overlay_virtual_port | integer | null | 否 | Released overlay port, if any. |
summary.overlay_virtual_port_rows | integer | 是 | Number of overlay virtual-port rows removed. |
summary.public_edge_rows | integer | 是 | Number of inactive public-edge rows removed. |
summary.public_virtual_port | integer | null | 否 | Released public listener port, if any. |
summary.service_id | string | 是 | Retired service ULID. |
summary.service_name | string | 是 | Retired service name. |
summary.source_ip_rows | integer | 是 | Number of source-IP rows removed. |
{
"deleted": false,
"summary": {
"identity_import_rows": 1,
"overlay_virtual_port": 1,
"overlay_virtual_port_rows": 1,
"public_edge_rows": 1,
"public_virtual_port": 1,
"service_id": "01K4SERVICE00000000000000",
"service_name": "example",
"source_ip_rows": 1
}
}错误响应均使用 Problem Details;调用方应判断 HTTP 状态和稳定的 code,不要解析 detail 文案。
#列出网关
GET
/api/v1/gatewaysread-only / full#参数
| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
cursor | query | string | null | 否 | Opaque cursor — the last id of the previous page. Absent on page 1. |
limit | query | integer | null | 否 | Requested page size; clamped to 1..=MAX_LIMIT. |
#请求示例
curl --silent --show-error --fail-with-body -X GET \
"$NSD_BASE_URL/gateways?limit=100" \
-H "Authorization: Bearer $NSD_TOKEN" \
-H 'Accept: application/json'#响应状态
| 状态 | 含义 | 响应结构 |
|---|---|---|
200 | Paginated list of gateways visible to the caller's realm | ListGatewaysResponse |
401 | 缺少或无效的 Bearer 令牌。 | ProblemDetails |
#200 响应
| 字段 | 类型 | 必有 | 说明 |
|---|---|---|---|
items | array<GatewayView> | 是 | Gateways in this page. |
items[].addr | string | null | 否 | Tunnel address. |
items[].arch | string | null | 否 | CPU architecture. |
items[].connections | integer | 是 | Reported connections. |
items[].drained | boolean | 是 | Whether gateway is drained. |
items[].endpoint | string | 是 | Preferred endpoint. |
items[].envoy_http_public_port | integer | null | 否 | Public HTTP port. |
items[].health_check_path | string | 是 | Health-check path. |
items[].id | string | 是 | Gateway ULID. |
items[].kind | string | 是 | Kind, always NSGW. |
items[].last_seen | string | null | 否 | Last heartbeat timestamp. |
items[].latency_p99 | integer | 是 | Placeholder p99 latency. |
items[].max_connections | integer | 是 | Max configured connections. |
items[].name | string | 是 | Gateway name. |
items[].operator | string | 是 | Operator label. |
items[].os | string | null | 否 | Operating system. |
items[].owner_user_id | string | null | 否 | Owner user ULID. |
items[].peer_key_pub | string | 是 | Peer public key. |
items[].pubkey_ed25519 | string | 是 | Machine public key. |
items[].public_edge | boolean | null | 否 | Whether this gateway can serve public HTTP edge. |
items[].public_edge_l4 | boolean | null | 否 | Whether this gateway can serve public L4 edge. |
items[].realm_id | string | 是 | Realm ULID. |
items[].region | string | null | 否 | Region. |
items[].registered_at | string | 是 | Registration timestamp. |
items[].shared | boolean | null | 否 | Whether this gateway is shared into the viewer realm. |
items[].site_id | string | null | 否 | Site ULID. |
items[].tags | array<string> | 是 | Tags. |
items[].transport | string | null | 否 | Primary transport. |
items[].transports | array<string> | 是 | Available transports. |
items[].tunnel_ip | string | null | 否 | Tunnel IP. |
items[].version | string | null | 否 | Reported version. |
items[].wg_endpoint | string | null | 否 | WireGuard endpoint. |
items[].wss_endpoint | string | null | 否 | WSS endpoint. |
items[].wss_relay | string | null | 否 | WSS relay URL on detail responses. |
next_cursor | string | null | 否 | Cursor for the next page, or null. |
{
"items": [
{
"addr": "100.64.0.12",
"arch": "example",
"connections": 1,
"drained": false,
"endpoint": "gateway.example.com:51820",
"envoy_http_public_port": 1,
"health_check_path": "example",
"id": "01K4EXAMPLE0000000000000",
"kind": "static",
"last_seen": "example",
"latency_p99": 1,
"max_connections": 1,
"name": "示例资源",
"operator": "example",
"os": "example",
"owner_user_id": "01K4USER000000000000000000",
"peer_key_pub": "example",
"pubkey_ed25519": "example",
"public_edge": false,
"public_edge_l4": false,
"realm_id": "01K4EXAMPLE0000000000000",
"region": "example",
"registered_at": "2026-09-09T10:00:00Z",
"shared": false,
"site_id": "01K4EXAMPLE0000000000000",
"tags": [
{}
],
"transport": "example",
"transports": [
{}
],
"tunnel_ip": "100.64.0.12",
"version": "v1",
"wg_endpoint": "gateway.example.com:51820",
"wss_endpoint": "gateway.example.com:51820",
"wss_relay": "example"
}
],
"next_cursor": "example"
}错误响应均使用 Problem Details;调用方应判断 HTTP 状态和稳定的 code,不要解析 detail 文案。
#读取网关
GET
/api/v1/gateways/{id}read-only / full#参数
| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
id | path | string | 是 | Gateway machine ULID |
#请求示例
curl --silent --show-error --fail-with-body -X GET \
"$NSD_BASE_URL/gateways/${GATEWAY_ID}" \
-H "Authorization: Bearer $NSD_TOKEN" \
-H 'Accept: application/json'#响应状态
| 状态 | 含义 | 响应结构 |
|---|---|---|
200 | The gateway | GatewayView |
401 | 缺少或无效的 Bearer 令牌。 | ProblemDetails |
404 | 当前 Network 中不存在该网关。 | ProblemDetails |
#200 响应
| 字段 | 类型 | 必有 | 说明 |
|---|---|---|---|
addr | string | null | 否 | Tunnel address. |
arch | string | null | 否 | CPU architecture. |
connections | integer | 是 | Reported connections. |
drained | boolean | 是 | Whether gateway is drained. |
endpoint | string | 是 | Preferred endpoint. |
envoy_http_public_port | integer | null | 否 | Public HTTP port. |
health_check_path | string | 是 | Health-check path. |
id | string | 是 | Gateway ULID. |
kind | string | 是 | Kind, always NSGW. |
last_seen | string | null | 否 | Last heartbeat timestamp. |
latency_p99 | integer | 是 | Placeholder p99 latency. |
max_connections | integer | 是 | Max configured connections. |
name | string | 是 | Gateway name. |
operator | string | 是 | Operator label. |
os | string | null | 否 | Operating system. |
owner_user_id | string | null | 否 | Owner user ULID. |
peer_key_pub | string | 是 | Peer public key. |
pubkey_ed25519 | string | 是 | Machine public key. |
public_edge | boolean | null | 否 | Whether this gateway can serve public HTTP edge. |
public_edge_l4 | boolean | null | 否 | Whether this gateway can serve public L4 edge. |
realm_id | string | 是 | Realm ULID. |
region | string | null | 否 | Region. |
registered_at | string | 是 | Registration timestamp. |
shared | boolean | null | 否 | Whether this gateway is shared into the viewer realm. |
site_id | string | null | 否 | Site ULID. |
tags | array<string> | 是 | Tags. |
transport | string | null | 否 | Primary transport. |
transports | array<string> | 是 | Available transports. |
tunnel_ip | string | null | 否 | Tunnel IP. |
version | string | null | 否 | Reported version. |
wg_endpoint | string | null | 否 | WireGuard endpoint. |
wss_endpoint | string | null | 否 | WSS endpoint. |
wss_relay | string | null | 否 | WSS relay URL on detail responses. |
{
"addr": "100.64.0.12",
"arch": "example",
"connections": 1,
"drained": false,
"endpoint": "gateway.example.com:51820",
"envoy_http_public_port": 1,
"health_check_path": "example",
"id": "01K4EXAMPLE0000000000000",
"kind": "static",
"last_seen": "example",
"latency_p99": 1,
"max_connections": 1,
"name": "示例资源",
"operator": "example",
"os": "example",
"owner_user_id": "01K4USER000000000000000000",
"peer_key_pub": "example",
"pubkey_ed25519": "example",
"public_edge": false,
"public_edge_l4": false,
"realm_id": "01K4EXAMPLE0000000000000",
"region": "example",
"registered_at": "2026-09-09T10:00:00Z",
"shared": false,
"site_id": "01K4EXAMPLE0000000000000",
"tags": [
"example"
],
"transport": "example",
"transports": [
"example"
],
"tunnel_ip": "100.64.0.12",
"version": "v1",
"wg_endpoint": "gateway.example.com:51820",
"wss_endpoint": "gateway.example.com:51820",
"wss_relay": "example"
}错误响应均使用 Problem Details;调用方应判断 HTTP 状态和稳定的 code,不要解析 detail 文案。
返回 API 参考总览。