用户开放 API

API 文档

基础地址是 https://www.52frp.com/api/v1。机器可读规格是 GET https://www.52frp.com/api/v1/openapi.json,不需要令牌。下面先按插件会调用的顺序写,再按接口列字段。

服务地址

所有路径都在 https://www.52frp.com/api/v1 下面。示例里的主机名就是这个地址。机器可读规格是 GET /api/v1/openapi.json,不需要令牌。规格里的 servers 已经含 /api/v1,路径按规格里的写法拼接。

鉴权

登录后打开 https://www.52frp.com/user/#/user-center ,在「API 访问令牌」创建。创建时要填当前账号密码。请求头写 Authorization: Bearer,后面是 hz_ 开头的访问令牌,明文只显示一次。这是 API 访问令牌。frpc 的 user、auth.token、节点 X-API-Token 和网页登录令牌各有各的用途。Cookie 无效。查询参数里出现 token、access_token、apitoken、api_token 会返回 400。已登录改密不吊销;找回密码和管理员改密会吊销。

前置

前置说明
account:read查看账户、通知偏好、通知和活动,并把通知标为已读。默认有。
account:write修改通知开关。默认没有。
identity:read查看是否已实名。默认有。
tunnels:read查看隧道与客户端。默认有。
tunnels:write创建和修改隧道与客户端。默认有。
nodes:read查看节点、负载和测速。默认有。
packages:read查看套餐和流量统计。默认有。
packages:write自动续费、换绑和清理过期套餐。默认有。
shop:read查看可购方案。默认有。
billing:read查看订单。默认有。
rewards:read查看推荐信息。默认有。
billing:pay余额下单和取消。默认没有,创建令牌时另勾。
billing:gateway支付宝或微信购买套餐,不能给余额充值。默认没有。
billing:redeem查看并兑换自己的充值码。默认没有。
support:read查看平台工单和社区节点工单。默认没有。
support:write创建、回复和关闭工单。默认没有。

请求与成功

有 JSON 正文时带 Content-Type: application/json。不带时,创建和编辑返回 400,文案是参数错误。成功时 HTTP 200,正文 ok 为 true,业务数据在 data。检查名称、检查端口在名称非法或端口冲突时仍是 HTTP 200,要看 data.available 或 data.valid。

开放 API 不提供签到、组网、云服务器、成长等级、给余额充值、改资料、改密、客服、代理和入驻节点。充值码需要 billing:redeem。工单需要 support:read 或 support:write。不能用令牌再签发令牌,没有 WebSocket,也不能提交实名材料。

失败体

失败时 ok 为 false,并带 error.code 和 error.message。响应里没有 RequestId。要追查一次调用,用调用记录里的时间、方法、路径、状态码和 error_code。

{ "ok": false, "error": { "code": "validation_error", "message": "参数错误" } }

公共错误码

下面这些码每个接口都可能碰到。单接口页只列该接口特有的行,401、429、405 和 5xx 以这里为准。

HTTPerror.code典型文案何时出现怎么处理
401unauthenticatedAPI 访问令牌无效缺少 Authorization,或令牌不对、已吊销到个人中心重新创建令牌,放在请求头里
403scope_deniedAPI 访问令牌缺少权限令牌没有该接口要求的前置创建令牌时勾上对应权限
403account_disabled账号不可用校验令牌时账号已停用或封禁先恢复账号,再重试
403validation_error沿用业务原文,例如需要先完成实名认证未实名、无权使用该节点。HTTP 是 403,error.code 仍是 validation_error先看 GET /identity。开放 API 不能提交实名材料
400validation_error参数错误缺字段、类型不对或业务规则不通过。查询参数里出现 token、access_token、apitoken、api_token 也是这个码按该接口的请求参数修改
404not_found资源不存在编号不存在,或失败文案里带「不存在」。未注册路径的文案是接口不存在核对编号对照里的 id
405method_not_allowed方法不允许路径存在,但 HTTP 方法不对改成文档里写的方法
409conflict请求正在处理,请稍后用相同 Idempotency-Key 重试相同幂等键的上一笔还没结束稍后再用同一个键重试
409idempotency_conflict相同 Idempotency-Key 的请求体不一致键相同但正文不同换一个新键,或改回第一次的正文
429rate_limited请求过于频繁,请稍后再试超过该接口的每分钟次数。响应没有 Retry-After等满一分钟。窗口按令牌和接口分开计算
5xxinternal系统错误,请稍后重试服务端 5xx。HTTP 状态保持原样,error.code 改成 internal稍后重试。响应里没有 RequestId,排查时看调用记录

限流与幂等

每个令牌对同一接口每分钟最多 60 次。余额下单、网关下单和取消是 10 次,兑换充值码是 5 次。窗口按令牌和接口各自计算,满 1 分钟后重新计数。超过返回 429,error.code 是 rate_limited。响应没有 Retry-After。

余额下单和网关下单认 Idempotency-Key,长度 1 到 128。相同键且请求体相同会原样重放第一次的响应,包括当时的余额不足。上一笔还在处理时返回 409 conflict。键相同但请求体不同是 409 idempotency_conflict。创建隧道、导入、开关、清理过期套餐没有幂等键,重复调用会再次执行。

分页

用 page 和 page_size,也接受 pageSize。带 list 的成功响应含 page、page_size 和 total。节点、节点分组、可购方案和流量分布的 data 是数组,不分页。

建一条能运行的隧道

  1. GET确认实名GET /api/v1/identity。data.identity_verified 为 false 时,创建、导入、编辑、开关隧道和创建客户端都会 403,error.code 仍是 validation_error。开放 API 不能提交实名材料。
  2. GET选可用节点GET /api/v1/nodes。data 是数组。建隧道只用 available 为 true 的 id。一个都没有就先走下面的购买顺序,不要直接创建。
  3. GET检查名称和端口GET /api/v1/tunnels/check-name。tcp 或 udp 再调 check-port 或 occupied-ports。这两处不可用时仍是 HTTP 200,要看 data.available 或 data.valid。
  4. POST创建POST /api/v1/tunnels,带 Content-Type: application/json。tcp 要有 proxy_name、proxy_type、node_id、local_ip、local_port、remote_port。成功时 data 就是隧道对象,隧道 id 在 data.id,不在 data.proxy。没有幂等键,再 POST 一次会再建一条。
  5. GET下载能运行的配置GET /api/v1/nodes/{node_id}/config/file?proxy_ids={data.id}&format=toml。toml 含 user 和 auth.token,可以交给 frpc。download=1 时正文是 text/plain。不要用单条 YAML 去跑:那份文件没有 serverAddr、user、auth.token。不必先创建客户端。

没有可用节点时先购买

  1. GET确认能付令牌要有 billing:pay。创建令牌时默认没有。GET /api/v1/identity 未实名时,下单同样 403 validation_error。
  2. GET选方案GET /api/v1/shop/plans。owner_type 为 platform 或 user。user 是社区方案,不能余额购买,用 POST /api/v1/orders/gateway。单价字段只用于估算。
  3. GET选首购节点看 GET /api/v1/nodes 的 accepts_new_binding_by_type,不要看 available。available 只表示已经买过、可以建隧道。
  4. POST下单POST /api/v1/orders,请求头带 Idempotency-Key,payment_type 只能是 balance。成功时 data 只有 order_no、amount、status,没有数字订单 id,也没有套餐组编号。
  5. GET再确认节点GET /api/v1/packages 看到新套餐后,重新 GET /api/v1/nodes。目标节点 available 为 true,再回到创建隧道。

交给客户端托管

这一段不是建隧道的前置条件。节点 toml 已经可以运行 frpc。需要本机 webServer 时再走这里。

  1. POST创建POST /api/v1/frpc-clients。立刻保存 data.config。webServer 密码不传则随机生成,只出现在这份正文里。路径 id 用 data.client.id。
  2. PUT装入隧道PUT /api/v1/frpc-clients/{id}/tunnels。proxy_ids 用业务隧道的 id,必须和客户端同一个 node_id。不要填 client_proxy_id。键必须出现,空数组会从运行中的客户端卸掉隧道。
  3. POST重载客户端在线再 POST /api/v1/frpc-clients/{id}/reload。不在线会失败,已经写入的配置仍保留。

编号对照

要拿的值从哪读
隧道 id创建、编辑、开关的 data.id。列表的 data.list[].id。详情的 data.proxy.id。配置文件的 proxy_ids 用这个数。
节点 id节点列表的 data[].id。创建请求的 node_id。创建响应在 data.node_id,列表才同时有 node 和 node_name。
是否启用看 status。0 启用,1 停用,2 流量用完,3 已封禁。列表的 enabled 按 status 为 0 计算。创建响应里的 enabled 可能是 false,不能拿来判断没开。
远程端口请求可以是数字或字符串。响应里的 remote_port 是字符串。
订单下单成功的 data.order_no 不能填进路径。取消和查详情用订单列表的 data.list[].id。
套餐自动续费和换绑用 data.list[].id。续费、追加填的 custom_plan_group_order_id 是同一行的 order_id。
客户端路径用 data.client.id。client_proxy_id 是内部管理隧道,不能放进 proxy_ids。
连接凭证user 和 auth.token 只在节点配置 JSON、节点 toml、客户端配置正文里。账户、隧道详情、单条 YAML 都没有。

目录

  • 个人主页:账号资料、是否已实名、站内通知和账户活动
  • 节点统计:流量汇总、趋势、分布和小时流量
  • 我的套餐:套餐列表、自动续费、换绑和清理过期
  • 购买套餐:可购方案,以及余额下单和网关下单。选节点用隧道管理里的节点列表
  • 充值码兑换:查看并兑换自己的充值码
  • 我的订单:订单列表、详情和取消余额待支付订单
  • 隧道管理:节点、创建隧道、导入、编辑和开关
  • 配置文件:节点配置,以及按节点、单条隧道或客户端下载配置
  • frpc管理:创建客户端,读取和更新配置,调整隧道并重载
  • 推荐奖励:推荐码、统计、规则、记录和返利
  • 工单:平台工单和社区节点工单
  • 个人中心:通知开关和 API 调用记录

个人主页

账号资料、是否已实名、站内通知和账户活动

GET/api/v1/account

查看账户

account:read每分钟 60 次

接口说明

用途。查看当前令牌所属账号的资料、余额、流量和是否已实名。

不含。没有 frpc 的 user / auth.token,没有推荐码,没有成长字段,也没有整份网页偏好。连接凭证只在节点配置和客户端配置正文里。

实名。identity_verified 为 true 表示已实名,false 表示未实名。这里没有姓名、证件号和人脸材料。

结果。balance 是余额,单位元。traffic.total 是未过期且仍有剩余的套餐流量合计,不是累计用量。total_remaining 是套餐剩余加签到剩余,单位字节。status 为 0 正常、1 停用、3 封禁。regtime 是 Unix 秒字符串。group 是用户组标识。proxies.use 是已用隧道数,proxies.max 为 -1 表示不按账号设总上限。bandwidth 是峰值,单位 KB/s。

返回参数

名称类型说明示例
balancenumber余额,单位元12.5
statusstring0 正常,1 停用,3 封禁0
regtimestring注册时间,Unix 秒的字符串1710000000
groupstring用户组标识,不是显示名normal
phonestring手机号。没有则为空13800000000
emailstring邮箱。没有则为空demo@example.com
nicknamestring昵称。没有则为空示例
identity_verifiedbooleantrue 已实名,false 未实名。没有姓名和证件true
traffic.totalinteger未过期且仍有剩余的套餐流量合计,单位字节,不是累计用量1073741824
traffic.total_remaininginteger套餐剩余加签到剩余,单位字节1073741824
proxies.useinteger已用隧道数2
proxies.maxinteger-1 表示不按账号设总上限-1

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/identity

是否已实名

identity:read每分钟 60 次

接口说明

用途。只回答已实名或未实名。

结果。data 里只有 identity_verified。true 为已实名,false 为未实名。创建隧道或下单被拒绝时,先看这个字段。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 identity:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/notifications

通知列表

account:read每分钟 60 次

接口说明

用途。站内通知。默认每页 20 条,最多 100。

分页。用 page 和 page_size,也接受 pageSize。默认每页 20 条,最多 100。响应含 page、page_size、total 和 unread_count。category 只能是 all、system、business,其他值返回 400。这里不能把通知标成已读。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 20,最大 100。也接受 pageSize
category查询string否all、system 或 business,默认 all

返回参数

名称类型说明示例
list[].contentstring正文,列表里可能为空剩余不足 10%
list[].notify_typestring更细的业务类型,例如流量或订单traffic_warning
list[].sourcestring来源标记,没有则为空
list[].ref_keystring关联对象键,没有则为空
list[].is_readinteger0 未读,1 已读。没有 read 字段0

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/notifications/unread-count

未读通知数

account:read每分钟 60 次

接口说明

用途。未读通知数量。不会修改已读状态。

分类。category 与通知列表相同,只能是 all、system、business。不传按全部统计。其他值返回 400。

请求参数

名称位置类型必填说明示例
category查询string否all、system 或 business,默认 all

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PUT/api/v1/notifications/{id}/read

标为已读

account:read每分钟 60 次

接口说明

用途。把一条通知标为已读。路径 id 来自通知列表。没有请求体。成功时 data 为 null。

请求参数

名称位置类型必填说明示例
id路径integer是通知 id,来自通知列表 data.list[].id1

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PUT/api/v1/notifications/read-all

全部标为已读

account:read每分钟 60 次

接口说明

用途。把当前分类的通知全部标为已读。category 与列表相同,非法值返回 400。成功时 data 为 null。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/activities

账户活动

account:read每分钟 60 次

接口说明

用途。账号操作记录。默认第 1 页、每页 20 条,total 是总条数。响应含 page 和 page_size。

翻页。用 page 和 page_size,也接受 pageSize。每页最多 100。

结果。list 每项有 created_at(Unix 秒)、time(相对时间)、code(类型)、tag(中文名)和 content。关联了隧道时还有 proxy_name。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始。不传时按第 1 页、每页 20 条
page_size查询integer否每页条数,默认 20,最大 100。也接受 pageSize
limit查询integer否没带 page 和 page_size 时,把它当作 page_size,范围 1 到 100

返回参数

名称类型说明示例
list[].statusstringsuccess、warning 或 infosuccess
list[].contentstring给人看的说明创建了隧道 web01
list[].created_atinteger发生时间,Unix 秒1710000000

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/activities/tunnels

隧道活动

account:read每分钟 60 次

接口说明

用途。隧道相关动态。默认每页 20 条,最多 100。用 page 和 page_size,也接受 pageSize。响应含 page、page_size 和 total。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 20,最大 100。也接受 pageSize
limit查询integer否没带 page 和 page_size 时,把它当作 page_size,范围 1 到 100

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

节点统计

流量汇总、趋势、分布和小时流量

GET/api/v1/traffic/stats

流量统计

packages:read每分钟 60 次

接口说明

用途。当前账号的流量汇总,一次返回,不分页。

结果。数字都是字节。today_traffic、yesterday_traffic、month_traffic、last_month_traffic 是对应时段用量。同名的 inbound、outbound 是上行和下行。remaining_traffic 是剩余,used_traffic 是已用,total_traffic 是总量。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/traffic/trend

流量趋势

packages:read每分钟 60 次

接口说明

用途。按天看流量趋势。days 默认 7。传 1 时改为最近 24 小时、按小时返回。

结果。data.lastDays 是数组。每项有 date 或 dateLabel、inbound、outbound、total,单位字节。days 为 1 时 dateLabel 形如 15:00。

请求参数

名称位置类型必填说明示例
days查询integer否天数,默认 7。传 1 时是滚动最近 24 小时,不是自然日。大于等于 365 按月。传了但不是大于 0 的整数时返回 400

返回参数

名称类型说明示例
lastDays[].dateLabelstring按天是 MM-DD。days 为 1 时是 HH:00,表示滚动 24 小时10-04
lastDays[].totalinteger合计字节300

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/traffic/distribution

流量分布

packages:read每分钟 60 次

接口说明

用途。流量在各节点上的分布。data 是数组,不分页。

结果。每项有 node_id、node_name、bytes 和 percent。bytes 是字节,percent 是占比。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/traffic/hourly

节点小时流量

packages:read每分钟 60 次

接口说明

用途。按小时看流量。days 默认 1。node_id 不传时统计全部节点,不会因此失败。

结果。data.xAxisData 是时间标签。data.series 按节点给出用量,series 里的 data 是字节。days 为 1 时还有 inboundData 和 outboundData,这两项单位是 GB。days 达到 365 时按月返回,那时没有 inboundData。

请求参数

名称位置类型必填说明示例
node_id查询integer否不传则统计全部节点。传了但不是正整数时返回 400
days查询integer否天数,默认 1,表示滚动最近 24 小时。大于等于 365 按月。传了但不是大于 0 的整数时返回 400

返回参数

名称类型说明示例
xAxisDatastring[]时间标签。days 为 1 时是滚动 24 小时的 HH:00["00:00"]
series[].datainteger[]每个时间点的字节[1048576]
inboundDatanumber[]单位 GB,只在按小时时出现[0.01]
series[].node_namestring与 name 相同的节点名

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

我的套餐

套餐列表、自动续费、换绑和清理过期

GET/api/v1/packages

套餐列表

packages:read每分钟 60 次

接口说明

用途。这个账号自己的套餐,分页。默认第 1 页、每页 10 条,最多 100。看 data.total 决定要不要翻页。参数用 page 和 page_size,也接受 pageSize。响应里有 data.page 和 data.page_size。

两个编号。data.list[].id 是套餐行编号,自动续费和换绑的路径用它。data.list[].order_id 才是套餐组编号,续费和追加时填到 custom_plan_group_order_id。两者不是同一个数。order_id 为空不能续费。

和方案的关系。续费、追加、再买一档时,请求里的 custom_plan_id 必须等于该行的 custom_plan_id。

怎么判断套餐类型。一次购买会拆成多行,用 order_id 分组,速率、隧道和流量通常不在同一行。traffic 大于 0 是按量,-1 是不限流量。inbound 和 outbound 单位是 KB/s。scope 为 explicit 时节点在 node_ids;all_official 和 global 可选官方节点。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 10,最大 100。也接受 pageSize

返回参数

名称类型说明示例
list[].idinteger套餐行 id,自动续费和换绑用它8
list[].order_idinteger套餐组编号。一次购买的多行共用它,续费时填到 custom_plan_group_order_id1001
list[].scopestringexplicit、all_official、global 或 unboundexplicit
list[].inboundinteger上行,单位 KB/s。Mbps 约为这个数除以 125
list[].custom_plan_purchase_traffic_gbinteger首购快照流量,单位 GB
list[].sourcestringpackage、unlimited 或 sign。签到套餐不能换绑
list[].outboundinteger下行,单位 KB/s
list[].custom_plan_node_idsinteger[]方案允许换绑的节点
list[].rebind_count_limitinteger周期内最多换绑次数,0 表示不限制
list[].rebind_count_in_periodinteger当前周期已经换绑的次数
list[].last_rebind_atinteger上次换绑时间,Unix 秒。没换过则没有

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PUT/api/v1/packages/{id}/auto-renew

设置自动续费

packages:write每分钟 60 次

接口说明

用途。打开或关闭这一行套餐的自动续费。路径 id 是套餐行 id。

必填。请求体必须有 auto_renew。不写这个字段会被当成 false,从而把已经打开的自动续费关掉。社区方案传 true 会被拒绝。

请求参数

名称位置类型必填说明示例
id路径integer是套餐行 id,来自套餐列表 data.list[].id,不是 order_id8
auto_renew请求体boolean是true 打开,false 关闭。省略等于关掉。社区方案不能打开true

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/packages/{id}/rebind-node/check

检查换绑

packages:read每分钟 60 次

接口说明

用途。换绑前检查目标节点能不能接这行套餐。路径 id 是套餐行 id。

参数。target_node_id 必填。proxy_ids 可选,多个隧道 id 用逗号分隔,用来预览哪些隧道会一起迁。

请求参数

名称位置类型必填说明示例
id路径integer是套餐行 id,来自套餐列表 data.list[].id,不是 order_id8
target_node_id查询integer是目标节点 id。提交换绑时的字段名是 node_id,不是这个查询参数
proxy_ids查询string否可选。多个隧道 id 用逗号分隔,用来预览哪些会一起迁。提交时改用请求体里的 migrate_proxy_ids

返回参数

名称类型说明示例
all_okboolean选中的隧道是否都能迁true
tunnel_countinteger该套餐可迁隧道数1
selected_countinteger本次预览条数1
tunnel_limit_okboolean目标节点配额是否够true
tunnel_limit_messagestring配额不够时的说明
source_node_idinteger当前节点79
target_node_idinteger目标节点80
tunnels[].idinteger隧道 id12
tunnels[].proxy_namestring隧道名称web01
tunnels[].proxy_typestring隧道类型tcp
tunnels[].okboolean这条能否迁true
tunnels[].messagestring不能迁的原因

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PUT/api/v1/packages/{id}/rebind-node

换绑节点

packages:write每分钟 60 次

接口说明

用途。把这行套餐换到另一个节点。路径 id 是套餐行 id,不是 order_id。

必填。node_id 是目标节点。不传会失败,文案是请选择目标节点。社区方案,以及方案不允许换绑的套餐,按这个接口提交也会被拒绝。

迁移隧道。要一起迁时,migrate_proxies 设为 true,并且 migrate_proxy_ids 必须是数字数组,例如 [12,13]。写成单个数字会导致整次失败,文案仍是请选择目标节点。只传 migrate_proxies 而不给非空数组,换绑会成功,但隧道不迁。

请求参数

名称位置类型必填说明示例
id路径integer是套餐行 id,来自套餐列表 data.list[].id,不是 order_id8
node_id请求体integer是目标节点。社区方案和不允许换绑的套餐会被拒绝80
migrate_proxies请求体boolean否是否连同隧道迁移。为 true 时还要给非空的 migrate_proxy_idstrue
migrate_proxy_ids请求体integer[]否数字数组,例如 [12,13]。单个数字会使整次换绑失败[12,13]

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/packages/clean-expired

清理过期套餐

packages:write每分钟 60 次

接口说明

用途。删除已经过期或流量用尽、且不是充值码来源的套餐行,并停用因此失去覆盖的隧道。这是真实删除,调用前先用套餐列表确认。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 packages:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

购买套餐

可购方案,以及余额下单和网关下单。选节点用隧道管理里的节点列表

GET/api/v1/shop/plans

可购方案

shop:read每分钟 60 次

接口说明

用途。一次返回当前可购方案。data 是数组,没有 list,也不分页。下单时 custom_plan_id 用这里的 id。

能不能余额买。owner_type 为 user 是社区方案,余额下单会被拒绝。官方方案才可以用 balance。

节点怎么选。scope 为 explicit 时,节点必须在 node_ids 里。scope 为 all_official 时 node_ids 可能是空的,可选任意官方节点。owner_type 为 user 时节点固定为 node_id。

上下限。只传开关为 true 的维度:speed_enabled、proxy_enabled、metered_enabled、unlimited_enabled。开关关掉时,旁边的 min/max 仍可能有数字,不能当成可买。max_duration_days 为 0 表示方案不设上限,单次仍不能超过 36500 天。

返回参数

名称类型说明示例
[].idinteger方案 id1
[].owner_typestringplatform 或 user。不是 officialplatform
[].scopestringexplicit、all_official 或 unboundall_official
[].speed_tiersstringJSON 文本。元素含 min、max、unit_price、discount。max 为 0 表示无上限,discount 是 0 到 1

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 shop:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/orders

余额下单

billing:pay每分钟 10 次幂等

接口说明

用途。用余额完成首购、续费、追加流量、追加隧道或再买一档。需要支付权限。金额由服务端按方案重算,传入的金额会被忽略。

调用前。先看方案列表确认开关和上下限,再看节点列表确认节点在方案范围内。首购可以省略 custom_plan_action,省略或空字符串视为 purchase。续费、追加和再买一档必须写明动作,否则会被当成首购。首购的速率、隧道数、流量方式至少选一项,没选的传 0 或省略。纯按量首购也要填天数。纯按量组不能用 renew,改用 repurchase 或 topup。续费和追加先看套餐列表,取出同一行的 order_id 与 custom_plan_id。未实名时和网页一样拒绝,错误码仍是 validation_error。

成功后看什么。data 只有 order_no、amount、status。余额支付成功时 status 为 paid。这里没有数字订单 id,也没有套餐组编号。组编号要等套餐列表刷新后读 order_id。取消订单用订单列表里的数字 id,不能把 order_no 填进路径。付完后重新拉节点列表,目标节点 available 为 true 才能创建隧道。

幂等和余额。Idempotency-Key 长度 1–128。相同键且请求体相同,会原样重放第一次的响应,包括当时的余额不足。充值后必须换新键才会再扣。键相同但请求体不同是 409 idempotency_conflict。上一笔还在处理时是 409 conflict,文案是请求正在处理,请稍后用相同 Idempotency-Key 重试。余额不足时 data 为空,当前余额和应付金额写在 error.message。

请求参数

分组名称位置类型必填说明示例
—Idempotency-Key请求头string是长度 1 到 128。相同键且请求体相同会重放第一次的响应,包括当时的余额不足。键相同但请求体不同是 409 idempotency_conflict。上一笔还在处理时是 409 conflict
每次都要payment_type请求体string是只能是 balancebalance
每次都要custom_plan_id请求体integer是方案 id。续费和追加必须等于套餐行上的 custom_plan_id1
每次都要custom_plan_action请求体string否省略或空字符串视为 purchase。purchase 首购;renew 续费;topup 追加流量;proxy_topup 追加隧道;repurchase 再买一档,仅纯按量组purchase
每次都要amount请求体number否页面会传,服务端忽略。金额按方案重算,单位元
每次都要description请求体string否订单说明。省略或空字符串时由服务端按动作生成
首购selected_node_ids请求体string | integer[]是首购必填,恰好一个节点,且必须在方案范围内。可写 JSON 字符串 "[79]",或数组 [79]。续费、追加、再买一档应省略[79]
首购custom_plan_speed_mbps请求体integer否单位 Mbps。0 或省略表示不买速率,须落在 speed_min 到 speed_max。与隧道数、流量方式至少选一项10
首购custom_plan_proxies请求体integer否单位条。0 或省略表示不买隧道。须落在 proxy_min 到 proxy_max。与速率、流量方式至少选一项2
首购custom_plan_traffic_mode请求体string否空字符串或不传表示不买流量。unlimited 与 metered 要求方案对应开关打开metered
首购custom_plan_traffic_gb请求体integer否单位 GB,须落在 traffic_min 到 traffic_max。metered 首购时填写。不买流量时传 0 或省略100
首购custom_plan_duration_days请求体integer是单位天。首购即使纯按量也要填,只决定到期。须落在 min_duration_days 与 max_duration_days 之间。max 为 0 时方案不设上限,单次仍不能超过 36500 天30
续费、追加、再买一档custom_plan_group_order_id请求体integer是套餐行的 order_id,不是套餐行 id,也不是 order_no1001
续费、追加、再买一档custom_plan_duration_days请求体integer否续费必填。再买一档时服务端改用原购买天数30
续费、追加、再买一档custom_plan_traffic_gb请求体integer否topup 必填。组必须是未过期的按量套餐100
续费、追加、再买一档custom_plan_proxies请求体integer否proxy_topup 时是本次追加条数,至少 1,加上现有条数不能超过 proxy_max2

返回参数

名称类型说明示例
order_nostring订单号NO100
amountnumber服务端重算后的金额,单位元10
statusstring余额支付成功为 paidpaid

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 billing:pay
403validation_error购买套餐需要先完成实名认证及人脸核验账号未完成实名
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
409conflict请求正在处理,请稍后用相同 Idempotency-Key 重试相同幂等键的上一笔还在处理
409idempotency_conflict相同 Idempotency-Key 的请求体不一致键相同但请求体不同

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/orders/gateway

网关下单

billing:gateway每分钟 10 次幂等

接口说明

用途。用支付宝或微信购买套餐。支付通道参数本次不展开。

请求参数

名称位置类型必填说明示例
Idempotency-Key请求头string是同一笔网关下单保持不变

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 billing:gateway
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
409conflict请求正在处理,请稍后用相同 Idempotency-Key 重试相同幂等键的上一笔还在处理
409idempotency_conflict相同 Idempotency-Key 的请求体不一致键相同但请求体不同

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

充值码兑换

查看并兑换自己的充值码

GET/api/v1/recharge-codes

我的充值码

billing:redeem每分钟 60 次

接口说明

用途。当前账号的兑换历史,按使用时间倒序,不是未使用库存。需要 billing:redeem。

结果。code 已打码,不能拿去兑换。type 是 balance 或 custom_plan。amount 是面额,单位元。status 常见 used,循环码仍可能是 unused。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始。不传为 1
page_size查询integer否每页条数,默认 10,最大 100。转发前会收成 pageSize,响应里的 page_size 与实际条数一致

返回参数

名称类型说明示例
list[].codestring打码后的码,不能用来兑换ABCD****WXYZ
list[].typestringbalance 或 custom_planbalance
list[].amountnumber面额,单位元10
list[].statusstringunused、used 或 expired。历史行多为 usedused

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 billing:redeem

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/recharge-codes/redeem

兑换充值码

billing:redeem每分钟 5 次

接口说明

用途。兑换完整明文充值码。每分钟最多 5 次。需要 billing:redeem。

必填。code 必须是完整明文,网页会转成大写。非余额码必须带 node_id,且要落在该码允许的节点里。

结果。type 为 balance 时 amount 是到账余额,单位元。其它类型看 package_name。traffic 为 -1 表示不限。

请求参数

名称位置类型必填说明示例
code请求体string是完整明文。不能填列表里打码后的 code。网页会转成大写ABCD1234WXYZ
node_id请求体integer否非余额码必填,且必须落在该码允许的节点里。余额码省略79

返回参数

名称类型说明示例
typestringbalance 或 custom_planbalance
amountnumber仅 balance 是到账余额,单位元10
package_namestring非余额成功时的方案名
trafficinteger流量字节。-1 表示不限

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 billing:redeem
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

我的订单

订单列表、详情和取消余额待支付订单

GET/api/v1/orders

订单列表

billing:read每分钟 60 次

接口说明

用途。这个账号的订单,分页。默认每页 10 条,最多 100。用 page 和 page_size,也接受 pageSize。响应里有 data.page 和 data.page_size。

和取消的关系。data.list[].id 是数字订单 id,取消和查详情用它。data.list[].order_no 才是下单成功时返回的订单号。两者不要互换。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 10,最大 100。也接受 pageSize。超过 100 会截成 100
status查询string否可选。pending、paid、cancelled、failed、refunded、partial_refunded 或 completed

返回参数

名称类型说明示例
list[].idinteger数字 id。取消和查详情用它,不是 order_no100
list[].order_nostring订单号,只用于展示NO100
list[].amountnumber金额,单位元10
list[].statusstringpending、paid、cancelled、failed、refunded、partial_refunded 或 completedpaid
list[].payment_typestringbalance、alipay、wechat 或 recharge_codebalance
list[].group_order_idinteger从快照解析出的套餐组编号。解析不到则没有这个字段
list[].custom_plan_snapshotstringJSON 文本,含 kind、天数、流量 GB、条数、速率和 prices
list[].selected_node_idsstring节点 id 的 JSON 数组字符串,例如 "[79]"
list[].source_typestring来源。常见 reward_balance、admin_recharge、admin_deduct、package_refund、identity_face_fee
list[].trafficinteger订单上的流量,单位字节。没有则为空

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 billing:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/orders/{id}

订单详情

billing:read每分钟 60 次

接口说明

用途。按数字 id 读一笔订单,只读库,不会去支付宝或微信查单。

路径。id 来自订单列表。把下单响应里的 order_no 填在这里会失败。

请求参数

名称位置类型必填说明示例
id路径integer是订单数字 id,来自订单列表 data.list[].id,不是 order_no100

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 billing:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/orders/{id}/cancel

取消余额订单

billing:pay每分钟 10 次

接口说明

用途。取消自己的余额待支付订单。需要支付权限。已支付、支付宝或微信订单不能从这里取消。

路径。id 是订单数字 id,不是 order_no。

请求参数

名称位置类型必填说明示例
id路径integer是订单数字 id,来自订单列表 data.list[].id,不是 order_no100

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 billing:pay
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

隧道管理

节点、创建隧道、导入、编辑和开关

GET/api/v1/nodes

节点列表

nodes:read每分钟 60 次

接口说明

用途。一次返回这个账号能看到的节点,不分页,最多约 10000 条。

两个用途不要混。首购选节点看 id,并确认 accepts_new_binding_by_type 里要买的 traffic、proxy、speed 为 true。available 只表示现有套餐已经覆盖该节点,用来建隧道,不是首购条件。

建隧道。node_id 用 available 为 true 的 id。一个都没有时先余额购买,不要直接 POST /tunnels。max_proxies 为 -1 表示该节点不限额,否则和 proxy_count 比较是否还能新建。

常见拒绝。节点不可用时创建会 400 validation_error。社区节点没买套餐的文案是需要先购买该社区节点的套餐。套餐覆盖不上是当前套餐不适用于该节点。条数满了是已达到数量上限。

请求参数

名称位置类型必填说明示例
owner_type查询string否可选。official 只要官方节点,user 只要社区节点。其它值会被忽略

返回参数

名称类型说明示例
[].http_portintegerHTTP 入口。为 0 时不能建 http 隧道80
[].https_portintegerHTTPS 入口。为 0 时不能建 https 隧道443
[].tcpmux_httpconnect_portintegerTCPMux CONNECT 入口。小于等于 0 时不能建 tcpmux
[].filing_whitelist_linkstring备案白名单链接。没有则为空
[].proxies_allowedstring允许的远程端口范围
[].proxies_deniedstring禁止的远程端口范围

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 nodes:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/node-groups

节点分组

nodes:read每分钟 60 次

接口说明

用途。返回全部分组。节点上的 node_group_ids 对得上这里的 id。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 nodes:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/nodes/load

节点负载

nodes:read每分钟 60 次

接口说明

用途。近 3 天官方节点负载,不按账号过滤。选节点时作参考,不代表这个账号已经买到该节点。

结果。data 是对象。键是节点 id 的字符串,值是负载百分比,范围 0 到 100。例如 {"79": 12.5}。社区节点不在这里。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 nodes:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/nodes/tcp-delay

探测节点延迟

nodes:read每分钟 60 次

接口说明

用途。探测已登记节点的 TCP 延迟。

地址。host 或 address 必须是节点列表里的 ip 或 hostname。任意公网地址会失败。

结果。成功看 data.delay,单位毫秒。同时有 data.address 和 data.port。

请求参数

名称位置类型必填说明示例
host查询string是节点地址,也可用 address
port查询integer否端口,默认 80

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 nodes:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/nodes/{id}/speedtest-url

测速地址

nodes:read每分钟 60 次

接口说明

用途。取该节点的测速页地址。路径 id 来自节点列表。

结果。data.speedtest_url 是测速页。data.speedtest_token 是短期测速令牌,data.expires_in 是有效秒数,data.port 是测速端口。这不是 frpc 连接凭证。

请求参数

名称位置类型必填说明示例
id路径integer是节点 id,来自节点列表的 id79

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 nodes:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tunnels

隧道列表

tunnels:read每分钟 60 次

接口说明

用途。隧道列表。默认每页 100 条,最多 100,超过必须翻页。参数是 page 和 page_size,也接受 pageSize。可用 node 或 nodeId 按节点筛选。

结果。调客户端隧道时,proxy_ids 用 data.list[].id,和创建响应的 data.id 是同一个数。响应含 page、page_size 和 total。列表才同时有 node、node_id、node_name,enabled 按 status 为 0 计算。列表不返回 sk 和 HTTP 密码。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 100,最大 100。也接受 pageSize。超过 100 会截成 100,不返回 400
node查询integer否按节点筛选,也接受 nodeId

返回参数

名称类型说明示例
list[].idinteger隧道 id12
list[].statusstring0 启用,1 停用,2 流量用完,3 已封禁0
list[].remote_portstring字符串。只有 tcp 和 udp 有值18080
list[].traffic_ininteger累计入站字节,不是当日
list[].traffic_outinteger累计出站字节
list[].is_onlineboolean当前是否在线false
use_proxiesinteger隧道总数1
page_sizeinteger本页条数。请求超过 100 时这里是 100100

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tunnels/check-name

检查隧道名称

tunnels:read每分钟 60 次

接口说明

用途。创建前检查名称是否可用。名称需要 3–15 个字符。

结果。名称不合法或已被占用也是 HTTP 200。看 data.available,不要只看状态码。data.valid 表示格式是否合法,data.normalized_name 是规范化后的名称。不可用时 data.message 说明原因,data.suggestions 是建议名,data.random_suggestion 是第一条建议。

请求参数

名称位置类型必填说明示例
name查询string是隧道名称
limit查询integer否建议数量,默认 5

返回参数

名称类型说明示例
availableboolean能否使用。不合法也是 HTTP 200true
validboolean名称格式是否合法true
suggestionsstring[]建议名[]
random_suggestionstring第一条建议。没有则为空字符串

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tunnels/check-port

检查端口

tunnels:read每分钟 60 次

接口说明

用途。检查某个节点上的远程端口能否用于 tcp 或 udp。

结果。冲突也是 HTTP 200。看 data.valid,false 表示端口不可用或冲突。同时有 data.conflict、data.reason 和 data.message。

请求参数

名称位置类型必填说明示例
node_id查询integer是节点编号
port查询string是远程端口,数字或数字字符串。只用于 tcp 和 udp
proxy_type查询string是只能是 tcp 或 udp。其它类型不要调用
exclude_proxy_id查询integer否编辑时排除自己的隧道 id。创建时不传

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tunnels/occupied-ports

已占用端口

tunnels:read每分钟 60 次

接口说明

用途。列出该节点上已被占用的 tcp 或 udp 远程端口,给推荐端口用。proxy_type 必填,只能是 tcp 或 udp。

结果。data.ports 是字符串数组。exclude_proxy_id 可排除某条隧道已经占用的端口。

请求参数

名称位置类型必填说明示例
node_id查询integer是节点 id
proxy_type查询string是只能是 tcp 或 udp,用来列出这类远程端口
exclude_proxy_id查询integer否排除某条隧道已占用的端口,编辑时用

返回参数

名称类型说明示例
portsstring[]已被占用的远程端口,字符串数组["7000","18080"]

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/tunnels

创建隧道

tunnels:write每分钟 60 次

接口说明

用途。创建一条隧道。未完成实名时和网页一样拒绝,HTTP 403,error.code 仍是 validation_error。

成功后读什么。data 就是隧道对象。下一步用的隧道 id 是 data.id,节点是 data.node_id。没有 data.proxy,也没有 node_name。remote_port 是字符串。是否启用看 data.status 是否为 0。请求里的 enabled 会被忽略,响应里的 enabled 可能是 false。没有幂等键,同样的正文再提交一次会再建一条。

按类型必填。名称 3–15 个字符。tcp 和 udp 要 remote_port,缺了的文案是 TCP/UDP 类型必须指定远程端口。http、https、tcpmux 要 domain 或 subdomain。domain 必须是字符串,多个用逗号分隔,或写成 JSON 数组字符串;传 JSON 数组会被丢掉。缺域名的文案写 domain。subdomain 只填前缀,不能含点或星号;节点没有子域名后缀时文案是该节点未配置子域名后缀,请改用绑定域名。stcp、xtcp、sudp 要 sk,写成 secretKey 会失败,失败文案写 sk,也不要写 remote_port。

节点。node_id 用节点列表里 available 为 true 的 id。也接受字段名 node。社区节点没买套餐时文案是需要先购买该社区节点的套餐。套餐不覆盖时是当前套餐不适用于该节点。条数满了是已达到数量上限。

和网页相同的可选字段。use_encryption、use_compression 接受 true、false 或字符串。http、tcpmux 还可带 httpUser、httpPassword、routeByHTTPUser;http 还可带 locations、host_header_rewrite、header_X_From_Where。tcp、udp 可带 bandwidthLimit、bandwidthLimitMode。支持健康检查的类型可带 healthCheckType、healthCheckPath、healthCheckTimeout、healthCheckMaxFailed、healthCheckInterval。负载均衡用 loadBalancerGroup、loadBalancerGroupKey。访客用户用 allowUsers。xtcp、sudp 可带 natTraversalStunServer。tcpmux 可带 multiplexer,以及 proxyProtocolVersion。这些名字也接受下划线写法,例如 http_user。enabled 会被忽略,新建后 status 为 0,停用再调 toggle。

请求参数

分组名称位置类型必填说明示例
创建proxy_name请求体string是3–15 个字符,中英文、数字、下划线web01
创建proxy_type请求体string是tcp、udp、http、https、stcp、xtcp、sudp、tcpmuxtcp
创建node_id请求体integer是也接受 node。用 available 为 true 的节点79
创建local_ip请求体string是内网地址127.0.0.1
创建local_port请求体integer是内网端口8080
创建remote_port请求体integer | string否tcp 和 udp 必填18080
创建domain请求体string否http、https、tcpmux 与 subdomain 至少填一个。必须是字符串,多个用逗号分隔或写成 JSON 数组字符串。传 JSON 数组会被丢掉。不要写 customDomains,缺域名时的文案写 domainapp.example.com
创建subdomain请求体string否只填前缀,不能含点或星号。节点没有子域名后缀时不能用
创建sk请求体string否stcp、xtcp、sudp 必填。字段名是 sk,写成 secretKey 会失败,失败文案写 skchange-me
和网页相同的可选项use_encryption请求体string否是否加密传输。true、false 或字符串。所有类型都可带
和网页相同的可选项use_compression请求体string否是否压缩。取值与加密相同
和网页相同的可选项httpUser请求体string否http 的网站 Basic 用户名,或 tcpmux 的 CONNECT 认证用户名
和网页相同的可选项httpPassword请求体string否对应密码。创建时空字符串表示不设密码;编辑时空字符串会清空
和网页相同的可选项routeByHTTPUser请求体string否http 或 tcpmux 共用同一 Host 时按用户名分流
和网页相同的可选项locations请求体string否仅 http。URL 路径,多个用逗号分隔
和网页相同的可选项host_header_rewrite请求体string否仅 http。改写发给后端的 Host
和网页相同的可选项header_X_From_Where请求体string否仅 http。发给后端的来源请求头
和网页相同的可选项proxyProtocolVersion请求体string否v1 或 v2,空表示不用。所有隧道类型都可以带
和网页相同的可选项bandwidthLimit请求体string否仅 tcp、udp。例如 1MB
和网页相同的可选项bandwidthLimitMode请求体string否client 在访客侧限速,server 在节点侧限速。默认 client
和网页相同的可选项healthCheckType请求体string否tcp、udp、http、https、tcpmux 可带。取值 tcp 或 http。为 http 时路径必填
和网页相同的可选项healthCheckPath请求体string否HTTP 检查时必填的检查路径
和网页相同的可选项healthCheckTimeout请求体integer否检查超时秒数
和网页相同的可选项healthCheckMaxFailed请求体integer否连续失败多少次判故障
和网页相同的可选项healthCheckInterval请求体integer否两次检查的间隔秒数
和网页相同的可选项loadBalancerGroup请求体string否tcp、http、https、tcpmux 的负载均衡组名
和网页相同的可选项loadBalancerGroupKey请求体string否同一组内的密钥
和网页相同的可选项allowUsers请求体string否stcp、xtcp、sudp。星号表示不限制,或写成 user1,user2
和网页相同的可选项natTraversalStunServer请求体string否xtcp、sudp 的 STUN 地址,用于 NAT 打洞
和网页相同的可选项multiplexer请求体string否仅 tcpmux,只能是 httpconnect。不传时默认 httpconnect

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
403validation_error创建隧道需要先完成实名认证及人脸核验账号未完成实名
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/tunnels/import

导入隧道

tunnels:write每分钟 60 次

接口说明

用途。一次导入多条隧道,字段和创建相同,包括那些可选高级字段。单次 1–50 条,全部成功才写入。未完成实名时整批拒绝。

导入才有的字段。natTraversalEnable、metadatas、annotations 创建表单不提交,导入可以带,并会写入。enabled 仍然无效,导入后为启用。

请求参数

名称位置类型必填说明示例
proxies请求体object[]是隧道对象数组,1 到 50 条。全部成功才写入。下面每一行都写在 proxies[] 里面
proxies[].proxy_name请求体string是3 到 15 个字符,中英文、数字、下划线web01
proxies[].proxy_type请求体string是tcp、udp、http、https、stcp、xtcp、sudp、tcpmuxtcp
proxies[].node_id请求体integer是也接受 node。用 available 为 true 的节点79
proxies[].local_ip请求体string是要转发到的本机 IP127.0.0.1
proxies[].local_port请求体integer是本机服务端口8080
proxies[].remote_port请求体integer | string否tcp 和 udp 必填。其它类型不要写18080
proxies[].domain请求体string否http、https、tcpmux 与 subdomain 至少填一个。必须是字符串
proxies[].subdomain请求体string否只填前缀,不能含点或星号
proxies[].sk请求体string否stcp、xtcp、sudp 必填。不要写成 secretKey
proxies[].natTraversalEnable请求体boolean否只有导入可以带。创建单条时不要传
proxies[].metadatas请求体string否只有导入可以带的元数据字符串
proxies[].annotations请求体string否只有导入可以带的注释字符串。不能包含 hzfrp_frpc_client

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
403validation_error创建隧道需要先完成实名认证及人脸核验账号未完成实名
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tunnels/{id}

隧道详情

tunnels:read每分钟 60 次

接口说明

用途。单条隧道详情。路径 id 来自创建响应的 data.id 或隧道列表。

结果。和创建接口不一样:隧道对象在 data.proxy,id 是 data.proxy.id,不是 data.id。JSON 里的 sk、http_password 会去掉。配置正文里的 secretKey 和 httpPassword 也会去掉。连接用的 user 和 auth.token 不在这里。

请求参数

名称位置类型必填说明示例
id路径integer是隧道 id,来自隧道列表 data.list[].id12

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PATCH/api/v1/tunnels/{id}

编辑隧道

tunnels:write每分钟 60 次

接口说明

用途。只更新请求里出现的字段。可改 local_ip、local_port、remote_port、domain、subdomain、sk,以及创建时列出的那些可选字段。空的 httpPassword 会清空密码。

改不了的。proxy_name、proxy_type、status 会被丢掉,传了也不改名、不改类型、不改状态,并且不会因此返回 400。开关用 toggle。空的 sk 会保留原来的密钥。annotations 若包含 hzfrp_frpc_client 会直接拒绝。非法 JSON 会返回参数错误。

请求参数

名称位置类型必填说明示例
id路径integer是隧道 id,来自隧道列表 data.list[].id12
local_ip请求体string否只更新请求里出现的字段。这是要转发到的本机 IP127.0.0.1
local_port请求体integer否本机服务端口8081
remote_port请求体integer | string否tcp、udp 的远程端口。不出现则保持原值
domain请求体string否http、https、tcpmux。必须是字符串
subdomain请求体string否只填前缀,不能含点或星号
sk请求体string否空字符串会保留原密钥
use_encryption请求体string否是否加密。true、false 或字符串true
use_compression请求体string否是否压缩。取值与加密相同
httpUser请求体string否HTTP 或 CONNECT 用户名
httpPassword请求体string否对应密码。空字符串会清空已有密码
routeByHTTPUser请求体string否http 或 tcpmux 按用户名分流
locations请求体string否仅 http。多个路径用逗号分隔
host_header_rewrite请求体string否仅 http。改写发给后端的 Host
header_X_From_Where请求体string否仅 http。发给后端的来源请求头
proxyProtocolVersion请求体string否v1 或 v2,空表示不用
bandwidthLimit请求体string否仅 tcp、udp。例如 1MB1MB
bandwidthLimitMode请求体string否client 在访客侧限速,server 在节点侧限速client
healthCheckType请求体string否tcp 或 http。为 http 时 healthCheckPath 必填
healthCheckPath请求体string否HTTP 检查路径
healthCheckTimeout请求体integer否检查超时秒数
healthCheckMaxFailed请求体integer否连续失败多少次判故障
healthCheckInterval请求体integer否两次检查的间隔秒数
loadBalancerGroup请求体string否tcp、http、https、tcpmux 的组名
loadBalancerGroupKey请求体string否同一组内的密钥
allowUsers请求体string否stcp、xtcp、sudp。星号或 user1,user2
natTraversalStunServer请求体string否xtcp、sudp 的 STUN 地址
multiplexer请求体string否仅 tcpmux,只能是 httpconnect
proxy_name请求体string否会被忽略,不能改名
proxy_type请求体string否会被忽略,不能改类型
status请求体string否会被忽略。改启用状态用开关接口

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
403validation_error编辑隧道需要先完成实名认证及人脸核验账号未完成实名
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/tunnels/{id}/toggle

启用或停用隧道

tunnels:write每分钟 60 次

接口说明

用途。启用或停用这条隧道。未完成实名时和网页一样拒绝。

怎么调。请求体可以是空对象。每调用一次就在启用和停用之间翻转,不能在正文里指定目标状态。当前是流量用尽时,仍有剩余流量的话这一次会尝试重新启用。

请求参数

名称位置类型必填说明示例
id路径integer是隧道 id,来自隧道列表 data.list[].id12

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
403validation_error开启隧道需要先完成实名认证及人脸核验账号未完成实名
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

DELETE/api/v1/tunnels/{id}

删除隧道

tunnels:write每分钟 60 次

接口说明

用途。删除这条隧道。路径 id 来自隧道列表。

请求参数

名称位置类型必填说明示例
id路径integer是隧道 id,来自隧道列表 data.list[].id12

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tunnels/{id}/config

隧道配置

tunnels:read每分钟 60 次

接口说明

用途。和隧道详情同一份 JSON。密钥不会出现在这份正文里。

下载文件。只要这一条的完整 YAML,用「下载单条隧道配置」。要节点、多条隧道或 toml,用「下载隧道配置文件」。

请求参数

名称位置类型必填说明示例
id路径integer是隧道 id,来自隧道列表 data.list[].id12

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

配置文件

节点配置,以及按节点、单条隧道或客户端下载配置

GET/api/v1/nodes/{id}/config

节点配置

nodes:read每分钟 60 次

接口说明

用途。读取这个节点上全部已启用隧道的完整 frpc TOML。这是 JSON,不是文件下载。

连接凭证。user 和 auth.token 在 data.config 正文里。客户端管理隧道不会出现在这份正文里。账户接口和隧道详情都没有这两项。

下载文件。要按节点、可选隧道和 toml/yaml 下载,用「下载隧道配置文件」。只下一条 YAML 不能单独交给 frpc 运行。

结果。data.config 是完整 TOML。data.login_fail_exit_hint 来自配置里的 loginFailExit,没有则为空字符串。

请求参数

名称位置类型必填说明示例
id路径integer是节点 id,来自节点列表的 id79

返回参数

名称类型说明示例
configstring完整 frpc TOML,含 user 和 auth.token
login_fail_exit_hintstring来自 loginFailExit。没有则为空字符串

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 nodes:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/nodes/{id}/config/file

下载隧道配置文件

nodes:read每分钟 60 次

接口说明

用途。下载这个节点上可交给 frpc 运行的配置。由节点、可选隧道、配置文件格式三部分组成,对应请求参数里的路径 id、proxy_ids 和 format。

拼法。GET /api/v1/nodes/{节点}/config/file?proxy_ids={可选隧道}&format={toml 或 yaml}。节点用创建隧道时的 node_id。proxy_ids 用创建响应的 data.id。只有节点必填。不传隧道就是该节点全部已启用隧道,不传格式就是 toml。toml 含 user 和 auth.token。yaml 只含隧道段落。

不能指定的隧道。停用的、不属于该节点的、客户端管理隧道都不会出现。写进 proxy_ids 会 400,文案是这些隧道不在该节点或未启用。编辑或开关之后要重新下载,旧文件不会自动更新。

怎么取。默认 JSON:data.content、data.filename、data.format。download=1 时响应变成 text/plain,并带 Content-Disposition,不再是 JSON。

另外两个下载。只要一条 YAML,用下载单条隧道配置,那份不能单独运行。要某个客户端当前的 TOML,用下载客户端配置文件。

请求参数

名称位置类型必填说明示例
id路径integer是节点 id,来自节点列表的 id 节点列表里的 id。下载地址是 /nodes/79/config/file。79
proxy_ids查询string否可选隧道。隧道列表里的 id,多个用逗号分隔。不传则包含该节点全部已启用隧道12,13
format查询string否配置文件格式。toml 或 yaml,默认 toml。toml 是完整 frpc,yaml 只含隧道yaml
download查询string否传 1 时按 format 直接下载。不传 proxy_ids 时下载该节点全部已启用隧道 传 1 时正文是 text/plain,并带 Content-Disposition。不传则放在 data.content、data.filename、data.format。1

返回参数

名称类型说明示例
contentstring配置正文。toml 含 user 和 auth.token,yaml 只有隧道段
filenamestring建议文件名,例如 node-79.tomlnode-79.toml
formatstringtoml 或 yaml,回显查询参数 默认 toml。toml 是完整 frpc 配置,含 user 和 auth.token。yaml 只含隧道段落,没有这两项。toml

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 nodes:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tunnels/{id}/config/file

下载单条隧道配置

tunnels:read每分钟 60 次

接口说明

用途。只下载这一条隧道的 YAML,包含 sk 和 httpPassword。没有 serverAddr、user、auth.token,不能单独交给 frpc 运行。

要能运行的文件。用下载隧道配置文件:路径是节点,proxy_ids 填这条隧道的 id,format=toml。

怎么取。默认 JSON 里的 data.content。download=1 时响应是 text/plain,文件名 tunnel-{id}.yaml。路径 id 来自创建响应的 data.id 或隧道列表。同路径不带 /file 的详情仍会去掉密钥。

请求参数

名称位置类型必填说明示例
id路径integer是隧道 id,来自隧道列表 data.list[].id12
download查询string否传 1 时直接下载 yaml 文件,否则返回 JSON 里的 data.content

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/frpc-clients/{id}/config/file

下载客户端配置文件

tunnels:read每分钟 60 次

接口说明

用途。下载这个客户端当前的完整 TOML。在线时取客户端上的配置,否则用缓存或重新生成。

不做脱敏。正文包含 webServer 密码和隧道密钥。

怎么取。默认 JSON 里的 data.content。download=1 时响应是 text/plain,文件名 frpc-client-{id}.toml。按节点拼隧道文件不要用这个接口。

请求参数

名称位置类型必填说明示例
id路径integer是客户端 id,来自创建响应 data.client.id 或客户端列表3
download查询string否传 1 时直接下载 toml 文件,否则返回 JSON 里的 data.content

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

frpc管理

创建客户端,读取和更新配置,调整隧道并重载

GET/api/v1/frpc-clients

客户端列表

tunnels:read每分钟 60 次

接口说明

用途。这个账号的 frpc 客户端列表,一次返回全部。data.page 为 1,data.page_size 与 data.total 都是条数。之后路径里的 id 用列表中的 id。

请求参数

名称位置类型必填说明示例
include_status查询string否传 1 时当场探测在线和本机管理端口。不传则 is_online 只是库里的记录

返回参数

名称类型说明示例
list[].idinteger客户端 id3
list[].is_onlineboolean管理隧道是否在线。不带 include_status 时不是当场探测false
list[].selected_proxy_idsinteger[]已加载的业务隧道 id,不含 client_proxy_id[12]
list[].last_errorstring没有错误时是 null

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/frpc-clients

创建客户端

tunnels:write每分钟 60 次

接口说明

用途。在指定节点上创建一个带本机 webServer 的客户端。未完成实名时和网页一样拒绝。节点 toml 已经可以运行 frpc,这一步不是创建隧道的前置条件。

和网页相同的字段。空字符串与省略相同。remote_port 省略则自动分配。web_server_port 省略或 0 为 7400。web_server_user 省略为 admin。web_server_password 省略则随机生成,只能从返回的 data.config 里读取。

结果。data.client.id 是之后路径里的编号。连接用的 user、auth.token 和 webServer 密码都在 data.config 正文里。创建成功就要保存,之后的状态接口不再返回密码。接着用调整隧道写入业务隧道 id。

请求参数

名称位置类型必填说明示例
node_id请求体integer是节点编号79
name请求体string否省略、空白或空字符串会自动生成。填写了但不合法时返回 400,不会被改写。只能是中英文、数字和下划线,3 到 15 个字符office
remote_port请求体integer | string否远程管理端口。省略或空字符串则自动分配17500
web_server_port请求体integer否本机 webServer 端口。省略或 0 时为 74007400
web_server_user请求体string否省略或空字符串时为 adminadmin
web_server_password请求体string否省略或空字符串则随机生成,只能从返回的 data.config 读取change-me

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
403validation_error创建客户端需要先完成实名认证及人脸核验账号未完成实名
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/frpc-clients/{id}/status

客户端状态

tunnels:read每分钟 60 次

接口说明

用途。查看客户端是否在线、管理端口是否可达,以及最近一次错误。

结果。看 data.is_online 和 data.admin_reachable。还有 name、node_id、node_name、web_server_port、web_server_user、selected_proxy_ids、last_error、last_config_at。这里没有管理密码。

请求参数

名称位置类型必填说明示例
id路径integer是客户端 id,来自创建响应 data.client.id 或客户端列表3

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/frpc-clients/{id}/config

读取客户端配置

tunnels:read每分钟 60 次

接口说明

用途。读取该客户端当前的完整配置正文。更新配置前先调用这一次,改完再整份提交。

请求参数

名称位置类型必填说明示例
id路径integer是客户端 id,来自创建响应 data.client.id 或客户端列表3

返回参数

名称类型说明示例
configstring完整 TOML,含 webServer 密码和隧道密钥
sourcestringremote、cache 或 generatedgenerated
onlineboolean是否在线。列表里的对应字段叫 is_onlinefalse
login_fail_exit_hintstringloginFailExit 为 true 时的迁移提示

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PUT/api/v1/frpc-clients/{id}/config

更新客户端配置

tunnels:write每分钟 60 次

接口说明

用途。用一份完整配置覆盖该客户端。

不要交残缺正文。只提交 serverAddr 和 serverPort 会把正在运行的配置换成残缺文件。应先 GET 同一地址,在返回的 config 上修改后再提交。

请求参数

名称位置类型必填说明示例
id路径integer是客户端 id,来自创建响应 data.client.id 或客户端列表3
config请求体string是完整配置正文,从 GET 同地址取回再改先 GET 本接口,把返回的 config 改完后整份放在这里

返回参数

名称类型说明示例
appliedboolean客户端在线且已下发时为 true。离线时为 false,配置已写入缓存false
selected_proxy_idsinteger[]从配置正文解析出的业务隧道 id[12]
login_fail_exit_hintstringloginFailExit 为 true 时的迁移提示

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PUT/api/v1/frpc-clients/{id}/tunnels

调整客户端隧道

tunnels:write每分钟 60 次

接口说明

用途。指定这个客户端要加载哪些业务隧道。

编号。proxy_ids 这个键必须出现。值是同一 node_id 上的业务隧道 id,来自隧道列表。填客户端自己的管理隧道,或其他节点的隧道,会失败。空数组会从运行中的客户端去掉隧道,库里的业务隧道记录仍保留。

请求参数

名称位置类型必填说明示例
id路径integer是客户端 id,来自创建响应 data.client.id 或客户端列表3
proxy_ids请求体integer[]是同一节点的业务隧道 id。键必须出现[1,2]

返回参数

名称类型说明示例
appliedboolean在线且已热加载时为 truefalse
selected_proxy_idsinteger[]本次提交的隧道 id[12,13]
configstring更新后的配置正文

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/frpc-clients/{id}/reload

重载客户端

tunnels:write每分钟 60 次

接口说明

用途。让在线客户端重新加载当前配置。客户端不在线时会失败。

请求参数

名称位置类型必填说明示例
id路径integer是客户端 id,来自创建响应 data.client.id 或客户端列表3

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

DELETE/api/v1/frpc-clients/{id}

删除客户端

tunnels:write每分钟 60 次

接口说明

用途。删除这个客户端管理记录。已经创建的业务隧道不会跟着删除。

请求参数

名称位置类型必填说明示例
id路径integer是客户端 id,来自创建响应 data.client.id 或客户端列表3

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 tunnels:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

推荐奖励

推荐码、统计、规则、记录和返利

GET/api/v1/referral/code

推荐码

rewards:read每分钟 60 次

接口说明

用途。推荐码和注册链接。推荐码不能在开放 API 里重置。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 rewards:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/referral/stats

推荐统计

rewards:read每分钟 60 次

接口说明

用途。推荐人数和返利汇总,一次返回。

结果。total_referrals 和 referral_count 都是推荐人数。active_referrals 是活跃人数,this_month_referrals 是本月人数。total_rebate、pending_rebate、paid_rebate、total_rebate_amount 是返利金额,单位元。total_reward_balance 是累计余额奖励,单位元。

返回参数

名称类型说明示例
referrer_reward_countinteger已获得推荐奖励的次数1
rebate_countinteger返利次数0
total_reward_balancenumber注册和实名奖励加上已发放返利,单位元1
total_rebate_amountnumber累计返利,单位元0

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 rewards:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/referral/config

推荐规则

rewards:read每分钟 60 次

接口说明

用途。当前站点的推荐奖励规则,只读。

结果。四个 reward_value 单位是分,展示时除以 100。rebate_min_order 单位是元。rebate_rate 是 0 到 1 的小数,0.1 表示 10%。max_referrals 为 0 表示不限人数。

返回参数

名称类型说明示例
referrer_reward_valueinteger推荐人注册奖励,单位分100
rebate_ratenumber0 到 1 的小数0
rebate_min_ordernumber最低订单金额,单位元0

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 rewards:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/referral/records

推荐记录

rewards:read每分钟 60 次

接口说明

用途。推荐注册记录。默认每页 10 条,最多 100。用 page 和 page_size,也接受 pageSize。响应含 page 和 page_size。data.records 与 data.list 相同。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 10,最大 100。也接受 pageSize

返回参数

名称类型说明示例
list[].referrer_identity_reward_yuannumber推荐人实名奖励,单位元0
list[].referee_identity_verified_atinteger被推荐人实名时间,Unix 秒。未实名时没有1710000000
recordsobject[]与 list 相同

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 rewards:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/referral/rebates

推荐返利

rewards:read每分钟 60 次

接口说明

用途。推荐返利记录。分页规则与推荐记录相同。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 10,最大 100。也接受 pageSize

返回参数

名称类型说明示例
list[].referee_idinteger被推荐人用户 id2
list[].rebate_ratenumber0 到 1 的小数0.1
list[].rebate_amountnumber返利金额,单位元1

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 rewards:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

工单

平台工单和社区节点工单

GET/api/v1/tickets

平台工单列表

support:read每分钟 60 次

接口说明

用途。平台工单列表。需要 support:read。默认每页 10 条。

结果。status 是 pending_reply、replied、completed、closed。旧值 open 和 pending 等同待回复,processing 等同已回复。id 与社区工单不是同一套编号。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 10,最大 100。也接受 pageSize
status查询string否可选。pending_reply、replied、completed 或 closed

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/tickets

创建平台工单

support:write每分钟 60 次

接口说明

用途。创建平台工单。需要 support:write。

分类。category 用 technical、account、billing 或 other。priority 省略时为 normal。图片把已有地址写进 content,这里不提供上传。

请求参数

名称位置类型必填说明示例
title请求体string是标题,建议不超过 100 字无法连接
content请求体string是正文,建议不超过 2000 字。图片写已有地址,不提供上传隧道已启用但连不上
category请求体string否technical、account、billing 或 othertechnical
priority请求体string否省略时为 normal。还可写 low、high、urgent
contact_info请求体string否联系方式,建议不超过 500 字user@example.com

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/tickets/{id}

平台工单详情

support:read每分钟 60 次

接口说明

用途。平台工单详情。data.ticket 是工单,data.replies 是回复。路径 id 不要填社区工单的编号。

回复。replies[].user_type 是 user 或 admin。回复 id 不是工单 id。

请求参数

名称位置类型必填说明示例
id路径integer是平台工单 id,不要填社区节点工单的编号3

返回参数

名称类型说明示例
ticket.idinteger平台工单 id3
ticket.statusstringpending_reply、replied、completed 或 closedpending_reply
replies[].user_typestringuser 或 adminuser
replies[].contentstring回复正文已经重试过了

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/tickets/{id}/reply

回复平台工单

support:write每分钟 60 次

接口说明

用途。回复自己的平台工单。content 是正文。成功时 data 是这一条回复。

请求参数

名称位置类型必填说明示例
id路径integer是平台工单 id,不要填社区节点工单的编号3
content请求体string是回复正文,建议不超过 2000 字。图片写已有地址已经重试过了

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/tickets/{id}/close

关闭平台工单

support:write每分钟 60 次

接口说明

用途。关闭自己的平台工单。没有请求体。成功时 data 为 null。

请求参数

名称位置类型必填说明示例
id路径integer是平台工单 id,不要填社区节点工单的编号3

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/community-node-tickets

社区节点工单列表

support:read每分钟 60 次

接口说明

用途。自己发起的社区节点工单。默认每页 20 条。需要 support:read。

结果。id 属于社区工单表。node_name 是节点名。状态取值与平台工单相同。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 20,最大 100。也接受 pageSize
status查询string否可选。pending_reply、replied、completed 或 closed

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/community-node-tickets

创建社区节点工单

support:write每分钟 60 次

接口说明

用途。向社区节点主发工单。node_id 必须是已购买套餐的社区节点,不能填官方节点。需要 support:write。

请求参数

名称位置类型必填说明示例
node_id请求体integer是社区节点 id。必须已购买该节点套餐,不能填官方节点80
title请求体string是标题,建议不超过 100 字节点异常
content请求体string是正文。图片写法与平台工单相同晚上频繁掉线
category请求体string否technical、account、billing 或 othertechnical
contact_info请求体string否联系方式

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/community-node-tickets/{id}

社区节点工单详情

support:read每分钟 60 次

接口说明

用途。社区工单详情。字段和 replies 在同一层,没有 ticket 包装。不要把平台工单 id 填到这里。

回复。replies[].user_type 是 buyer、provider 或 admin。

请求参数

名称位置类型必填说明示例
id路径integer是社区节点工单 id,不要填平台工单的编号4

返回参数

名称类型说明示例
idinteger社区工单 id4
node_namestring节点名示例节点
replies[].user_typestringbuyer、provider 或 adminbuyer

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:read
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/community-node-tickets/{id}/reply

回复社区节点工单

support:write每分钟 60 次

接口说明

用途。回复自己的社区节点工单。成功时 data 是这一条回复。

请求参数

名称位置类型必填说明示例
id路径integer是社区节点工单 id,不要填平台工单的编号4
content请求体string是回复正文。社区工单里这条回复的 user_type 是 buyer

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

POST/api/v1/community-node-tickets/{id}/close

关闭社区节点工单

support:write每分钟 60 次

接口说明

用途。关闭自己的社区节点工单。成功时 data 为 null。

请求参数

名称位置类型必填说明示例
id路径integer是社区节点工单 id,不要填平台工单的编号4

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 support:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过
404not_found资源不存在路径中的编号不存在,或失败文案里带「不存在」

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

个人中心

通知开关和 API 调用记录

GET/api/v1/account/notification-preferences

查看通知偏好

account:read每分钟 60 次

接口说明

用途。返回全部用户通知开关,值是布尔。没保存过的开关为 true,表示允许接收。

不含。网页引导 shop_tour_done、公告状态和云服务器通知键都不会出现。

键名。pref_notify_traffic_warning_enabled 流量预警,pref_notify_traffic_exhausted_enabled 流量耗尽,pref_notify_payment_success_enabled 订单支付通知,pref_notify_recharge_success_enabled 充值码到账,pref_notify_package_expiring_enabled 套餐到期提醒,pref_notify_auto_renew_balance_insufficient_enabled 自动续费余额不足,pref_notify_account_status_change_enabled 账号状态变更,pref_notify_password_changed_enabled 密码修改提醒,pref_notify_register_success_enabled 注册成功通知。

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

PUT/api/v1/account/notification-preferences

修改通知开关

account:write每分钟 60 次

接口说明

用途。合并更新通知开关。未出现的键保持原值,不会被当成 false。

必填。9 个键里至少要出现一个。空对象返回 400,文案是无有效的偏好项。网页引导和云服务器键会被丢掉。

键名。流量预警、流量耗尽、订单支付通知、充值码到账、套餐到期提醒、自动续费余额不足、账号状态变更、密码修改提醒、注册成功通知。键名与查看接口相同。

请求参数

名称位置类型必填说明示例
pref_notify_traffic_warning_enabled请求体boolean否流量预警。省略则保持原值false
pref_notify_traffic_exhausted_enabled请求体boolean否流量耗尽。省略则保持原值
pref_notify_payment_success_enabled请求体boolean否订单支付通知。省略则保持原值
pref_notify_recharge_success_enabled请求体boolean否充值码到账。省略则保持原值
pref_notify_package_expiring_enabled请求体boolean否套餐到期提醒。省略则保持原值
pref_notify_auto_renew_balance_insufficient_enabled请求体boolean否自动续费余额不足。省略则保持原值
pref_notify_account_status_change_enabled请求体boolean否账号状态变更。省略则保持原值
pref_notify_password_changed_enabled请求体boolean否密码修改提醒。省略则保持原值
pref_notify_register_success_enabled请求体boolean否注册成功通知。省略则保持原值。九个键里至少要出现一个,否则 400,文案是无有效的偏好项

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:write
400validation_error参数错误参数缺失、类型不对,或业务规则不通过

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。

GET/api/v1/api-tokens/calls

调用记录

account:read每分钟 60 次

接口说明

用途。查看这个账号的开放 API 调用记录。沿用 account:read。不能在这里签发或轮换令牌。

不含。没有令牌明文,也没有令牌 id。

结果。data.list 每项有 created_at(Unix 秒)、method、route、status_code、error_code、latency_ms、ip、token_prefix。默认每页 20 条,最多 100。

请求参数

名称位置类型必填说明示例
page查询integer否页码,从 1 开始
page_size查询integer否每页条数,默认 20,最大 100。也接受 pageSize

返回参数

名称类型说明示例
list[].created_atinteger调用时间,Unix 秒1710000000
list[].methodstringHTTP 方法GET
list[].routestring路径,例如 /api/v1/account/api/v1/account
list[].status_codeintegerHTTP 状态码200
list[].error_codestring失败时的 error.code,成功为空
list[].latency_msinteger耗时,毫秒12
list[].ipstring来源 IP203.0.113.8
list[].token_prefixstring令牌前缀,不是完整令牌hz_exampl

错误码

HTTPerror.code错误信息说明
403scope_deniedAPI 访问令牌缺少权限令牌没有 account:read

401、429、405 和 5xx 见 公共错误码。失败文案里带「不存在」时,HTTP 会收成 404 not_found。