交易所对接 · API 迁移

Bitget UTA v3 API 迁移 —
你的 webhook 为什么会突然 401

2026-07-31·10 分钟阅读

alert 在 K 棒上准时触发,webhook 也发出去了。你去看交易所返回的 log,看到的是 HTTP 401 或一句「API-key format invalid」。你检查 key,还没到期;检查 IP 白名单,没动过。这件事最近在 Bitget 上特别容易发生——它把 API 换成了 UTA v3 这套新架构,你的 webhook 现在打在错的门上。

这篇文章不谈「UTA 有多好」或者「值不值得升级」,这种事你自己看官方文档比较准。这篇只回答一件事:**你的 webhook 为什么会安静地开始 401,以及在你被动迁移之前,你手上有哪些选项。**

先讲结论
账户切到 UTA 之后,还指向 Classic (v2) endpoint 的 webhook 会被拒。Bitget 官方 Broker UTA Upgrade Notice 明确写了「API Keys for UTA Unified Trading Accounts cannot access Classic Account API endpoints」(来源:bitget.com/support/articles/12560603886018,核实日期 2026 年 7 月)。所以账户模式一被切到 UTA,只要你的下单服务器还打在旧的 endpoint 上,就会开始集体断线。

这件事实际上发生了什么

Bitget 现在的 API 文档分成两套,网址前缀也不同:Classic 走 /api-doc/classic/*,UTA 走 /api-doc/uta/*。Classic 那页自己第一句就写「We recommend using the Unified Trading Account (UTA)——it consolidates spot, margin, and derivatives into a single account」,并注明 Classic 处于 maintenance mode、只收「essential updates」(核实日期 2026 年 7 月)。

换句话说,官方对这件事的说法不是「两套并存」,是「你该搬过去」。UTA 的 changelog 这几个月都在补功能——2026-06-16 补齐了 Trading Data APIs、2026-07-30 上线了 institutional rate limit——同一时间 Classic 的变动记录几乎停了。这是「新的主线」跟「旧的维持」该有的样子。

官方文档讲到哪里为止
上面那个「切账户 = 换 endpoint」的因果是官方文档里明确写的:Classic 与 UTA 是两套不同的 API,key 绑到哪一套是由账户模式决定的。至于「你自己什么时候会被强制切」,Bitget 目前没有公开一份对散户的统一时间表——现在的公告集中在 broker 与机构层级。这件事下面会单独拉出来讲。

为什么 webhook 会「安静地」坏掉

自动化交易架构最麻烦的错,是那种没有提示、只是不再成功的错。API 迁移是这一类的教科书案例。

平常你检查交易所的 API 健康度是看两个东西:连接通不通、成交回报正不正常。迁移那一刻,这两个检查都会过——你的 webhook 服务器连得上 Bitget,只是每次下单都被返回 401;TradingView 端显示 alert 发送成功,因为对 TradingView 来说「HTTP 200 才算成功」,401 也算「送到了」。真正没发生的事——订单根本没进交易所——在你自己的 log 之外看不到。

监控项目迁移前迁移当下
TradingView alert 触发正常正常
webhook HTTP 响应200401
交易所订单簿上有没有你的单没有
账户余额变动没有
交易所发不发 email/App 推送看设置看设置,通常不会

迁移当下你能看到的与看不到的信号对照。核实日期 2026 年 7 月。

换句话说,你会在下一次自己盯盘或看报表的时候才发现,这中间可能已经过了几个小时或几天。所以这篇不是要吓你,是要你今天就把「怎么知道自己被迁了」这件事的信号建起来。

你怎么知道自己现在是哪一边?

三个地方看,任何一个对得上就是那一边。

  • 用你手上的 ACCESS-KEY 打一次 UTA 的 /api/v3/account/assets(或任何 UTA endpoint)。返回 200 就代表你的账户已经是 UTA 模式;收到 401 或「API-key format invalid」就代表这把 key 还不能打 UTA endpoint。
  • 登录网页版,看账户页面上方是「统一交易账户/Unified Trading Account」还是「经典交易账户/Classic」。Bitget 现在会用醒目的 badge 标出来。
  • 去 API management 页面看你这把 key 当时勾的权限选项——UTA 的权限名称是 Unified account trade / Unified account management(各有 read-only 与 read and write 两档),Classic 账户模式下没有这两个选项。
顺便做一件小事
在你的下单服务器把 401 的错误消息**单独接一条告警**出来,不要跟其他 4xx 混在一起。这件事一次做完就永远受益:不只 Bitget 的迁移会喷 401,其他交易所改权限规则、你自己不小心撤掉 key、CDN 阻挡、时区偏移把 timestamp 过期——全都是 401,全都值得马上知道。

你可以自己决定什么时候换吗

到 2026 年 7 月为止,Bitget 对散户的说法是「推荐」升级,而不是「强制」——网页版的入口是自己按「升级」按钮。这是目前观察到的现状,不代表官方承诺永远都会这样。历史上大交易所改账户结构时,通常会先给人自愿期,之后才排强制批次,然后把 Classic 完全下线。Bitget 的 changelog 节奏跟这个剧本吻合。

Broker 与机构的时间表比较明确:Broker UTA Upgrade Notice 有写迁移排程与 UTA API key 不能打 Classic endpoint 的行为变更。散户如果挂在某个 broker 账户或机构账户下面,是有可能被上游决定的。

1
你的 Bitget 账户是散户自己开的,还是挂在 broker/机构底下?
散户自己开目前可以自己选时间点升级。建议先在测试 subaccount 上跑一轮 UTA,再切主账户。
挂在 broker/机构底下问你的 broker 排程是什么、他们会不会帮你保留 Classic key。这件事不是你单方面能决定的。
2
你现在有几条策略正在 live trading?
0—1 条直接切。断线影响小,UTA 端修好比较快。
3 条以上,或有高频策略先做并行测试:新开一把 UTA key、开一个 subaccount 用 UTA 模式跑影子单,跟 Classic 主账户跑一周对得起来再切。

换过去之前这些事要先做

顺序有意义,这是实际踩到的先后:

  1. 1
    在 subaccount 上先试一次
    Bitget 的主账户可以帮 subaccount 开 API Key Management 权限(默认是关的)。用一个小额 subaccount 切到 UTA、开一把 UTA key、把你其中一条 webhook 指过去跑一天,比在主账户上直接切安全得多。
  2. 2
    把 endpoint、签名逻辑、参数名称都对过一遍
    UTA 跟 Classic 的请求路径不同,query/body 的字段名也有一些不一样(例如下单 body 里 size 改名成 qty)。你的下单函数如果是「直接复制官方示例」写成的,换 endpoint 那一刻多半要改超过一行。
  3. 3
    先开 UTA key、确认能打通,再把 Classic key 从 webhook 拔掉
    不要反过来。拔掉 Classic 之前先让 UTA 走通一轮,最坏情况你手上还有 Classic 可以继续跑;反过来的话中间有一段是两边都不能下单。
  4. 4
    更新监控告警
    如果你的告警逻辑是 hardcode「401 = key 过期」,换成 UTA 之后那条消息就不再是 key 过期而是 endpoint 打错。把消息文字更新,未来自己 debug 才不会被误导。

官方没讲清楚、我这边也还没摸到的地方

不要把这篇当成永久不变
下面这几条到 2026-07-31 为止仍然没有官方统一版本,只有零散公告。实际动手前请自己再去 bitget.com/api-doc/uta/changelog 对一次日期。

Bitget 到目前没有公开一份「散户强制迁移的最终时间表」。所以「你有多久可以拖」这件事目前只能观察:看 changelog、看 Broker UTA Upgrade Notice 的更新、看官方 Telegram(t.me/bitgetOpenapi)有没有新的公告。我们也没有内部渠道,只能跟你一样读这几个来源。

另一件我们自己还没完全摸到的事:切换到 UTA 之后,Classic 的订单、成交、资金流水查询会不会保留一段时间、保留多久?官方文档没有写,Broker 那边的公告也没明确说对散户的处理。所以你切之前,如果需要抓历史数据做税务申报或绩效归因,先自己把数据拉下来备份——这件事不能等切完了再说。

常见问题

TVSBot 用户如果现在还在 Classic key,你们会自动帮我换吗?
不会。你的 key 是你自己在 Bitget 网页生成的、保存在你自己那边,我们只是拿它去打交易所。所以什么时候换、要不要换,主控权在你——但你可以在 dashboard 的 API keys 页面同时保留新旧两把 key、指定某条策略走哪一把,切换时不用停整个账户。
UTA 对我有什么实际差别?
撇开资金效率不谈,对 webhook 用户来说最直接的差别是「一把 key 打得到所有产品」——UTA 账户下 spot、USDT-M、USDC-M、Coin-M(进阶模式)都用同一个 endpoint、同一组签名。Classic 过去是每种产品各自的权限勾选,写代码的时候常常忘了勾某一个。UTA 这边少一个踩雷点。
万一我没察觉就被切走了,Classic 那边的 open orders 会被撤吗?
这件事官方没有给过明确答复。从技术架构推断(这是推论不是官方保证),既然是同一个底层账户换了账户模式,挂单应该会保留而不是被清掉;但这一点我们没有自己复现过。所以在你确定被切走的当下,第一件事是手动去 spot 与 futures 页面确认 open orders 还在,而不是相信任何一方——包括我们——的推论。

Get started

想把今天学到的东西自动化跑起来?

把你的 TradingView 策略接到 TVSBot——用你自己的 API key(Classic 或 UTA 都支持),dry-run 先跑,切换交易所时可以同时保留新旧两把 key、逐条策略指定。

免费开始使用