Security · API Keys

Bitget API Key Security: The Complete Guide
sub-account isolation, IP whitelist, Passphrase — the three that matter

2026-07-31·11 min read

The moment you wire up a TradingView signal or a trading bot to Bitget for auto-order execution, the very first thing you do is create an API key — and that’s where Bitget API key security is actually decided. 90% of people grant too many permissions at this step — they follow a Binance tutorial they found online, tick boxes on autopilot, and completely miss that Bitget adds a Passphrase, has no standalone “Read” checkbox, and — crucially — offers a whole mechanism where sub-accounts can manage their own API keys that almost nobody turns on. This guide takes Bitget’s official API docs plus the parts we already verified in our cross-exchange API key permissions checklist and distills them into a Bitget-specific playbook. Three things only, all chosen because they actually move the needle on how much risk your key carries: least-privilege permissions, IP whitelisting, and the sub-account isolation nobody enables.

This isn’t a comparison of whether Bitget is more secure than the other exchanges — that would need cross-exchange live testing and an audit of internal controls; we haven’t done that, and this article isn’t going to pretend to. It also isn’t about running trading strategies on Bitget; the scope is strictly the API key layer. That scope is deliberate: get this one layer right and even if some downstream tool gets breached later, your funds can’t be moved; get it wrong, and every other safeguard downstream is just decoration.

The bottom line
Three things, in order of priority: when you create the key, do not tick the Withdraw permission; put the key that runs your bot inside a sub-account rather than the main account (Bitget lets sub-accounts manage their own API keys — Binance doesn’t work that way, and turning it on gives you one extra layer of isolation); and while you’re there, drop the fixed IP your tool gives you into the IP whitelist — Bitget’s official position on IP whitelisting is “strongly recommended”, and only strictly required if Withdraw is enabled, but you should treat it as mandatory for yourself either way. On this last point, both Binance and BingX add automatic expiry rules for keys without an IP binding; Bitget’s docs don’t currently describe any such expiry mechanism — which cuts both ways: Bitget won’t prompt you to rotate the key on a cadence, so you have to schedule that yourself.

Bitget’s API Key Permission Model: Two APIs, Two Interfaces

Bitget currently runs two APIs side by side: the Classic API (the older interface with separate spot and futures endpoints) and UTA (Unified Trading Account) — the newer interface that Bitget’s own docs mark as “🔥 Recommended”. The permission model differs slightly between the two, and the actual checkboxes the UI shows you shift depending on which account mode you’re in. This is different from Binance and BingX, which each have a single fixed permission list, and it’s a piece of complexity that’s specific to Bitget.

Permission levelWhat it lets you doDoes an auto trading bot need it?
Read-OnlyQuery account balances, positions, order status, market dataAuto trading needs read access at minimum, but that is implied by the Trade permission — not a separate checkbox
Trade (place / cancel orders)Spot and/or futures order placement, cancellation, position adjustment, leverage changeThe core permission for auto trading — check Spot if your strategy runs spot, Futures / UTA trade if it runs futures
Transfer (between accounts)Move funds between wallet, spot, and futures accountsMost bots don’t need this — unless yours automatically rebalances margin
WithdrawMove funds from Bitget to an external wallet or addressAbsolutely never

Sources: Bitget official UTA API Quick Start (bitget.com/api-doc/uta/guide, verified July 2026); cross-exchange permissions checklist (tvsbot.com/blog/en/crypto-api-key-permissions-checklist, verified 2026-07-22). The actual UI checkbox labels shift with account mode (Classic vs Isolated / Basic / Advanced UTA) — treat what Bitget shows you on the key creation page at the moment you create the key as the source of truth.

UTA mode splits permissions more finely
Bitget’s UTA Quick Start describes UTA permissions along two axes — Trade (read/write) and Management (read/write) — each of which can independently be set to “Read-only” or “Read and write”. “Management, read and write” is what lets a key modify settings such as leverage or holding mode. For most bots you only need “Trade, read and write”; skip “Management, read and write” unless your strategy actively flips leverage or switches mode. This finer split is UTA-specific — the Classic API doesn’t break it out this way.

There’s another place Bitget diverges from Binance and BingX — Bitget’s API auth requires three keys, not two: ACCESS-KEY, Secret Key, plus a Passphrase. The Passphrase is a password you set yourself at the moment you create the key, and the docs are blunt about it: “if the Passphrase is forgotten, it cannot be retrieved and the APIKey needs to be re-created” — forget it and you rebuild the key. This design mirrors OKX and stands apart from Binance and BingX, which only issue API Key + Secret. The practical consequence: a leak of any one of your three keys can cause loss of funds — Bitget’s official risk notice puts it as “The leakage of any one of these three keys may cause the loss of your assets” — so the Passphrase deserves the same secret treatment as the API Key and Secret, and belongs in the same password manager alongside them.

Three Must-Do Settings: Disable Withdraw, Bind IPs, Use a Sub-Account

Setting 1: don’t tick the Withdraw permission

The reason this one matters is that it caps the size of the loss when a key leaks; the other two settings shrink the probability of a leak. However tight you make your IP whitelist and however carefully you hide the Passphrase, the day some key of yours leaks — a virus on your machine, a breached SaaS platform, an accidental push to a public repo — whether Withdraw was ticked is what decides whether an attacker can simply move the money out.

On Bitget you can cleanly separate trading from withdrawing at the key level — this was one of the things we went through exchange by exchange in our cross-exchange checklist; Bitget is one of the 9 exchanges in the “you can separate them” column (Gate.io is the sole exception). So the difficulty here isn’t a platform limitation; it’s just whether you remember not to tick the box. Bitget adds one extra requirement on Withdraw: the moment you tick Withdraw, you’re forced to bind an IP whitelist. That’s mandatory. Binance and BingX enforce the same rule — it’s a de facto consensus in this small circle of exchanges.

What actually happens if you leave Withdraw enabled
Say your key has both Trade and Withdraw and gets leaked: the attacker’s first move isn’t to lose your money on bad trades — the assumption that “the worst they can do is place stupid orders” isn’t the worst case. The pattern that has actually played out is: market-sell your entire portfolio into USDT, then use the withdraw API to send it to their address — and the whole sequence can be done in minutes, well before you notice. Whether IP whitelisting can block them depends on whether they can hit the API from an IP you allowed; in a lot of leak scenarios (a repo push, say) the IP info is exposed along with the key.

Setting 2: bind an IP whitelist

Bitget’s UTA Quick Start puts it as “For security reasons, it is strongly recommended that you bind an IP address when creating the API Key” — “strongly recommended”, not required (unless you ticked Withdraw). This is where Bitget differs from its peers: Binance and BingX both enforce automatic deletion rules for keys without an IP binding (30 days / 14 days), and Bitget’s docs don’t currently describe any such expiry mechanism. The practical implication for you: Bitget won’t clean up the “forgot to bind IP” keys on a schedule for you, so you have to bind them yourself; otherwise they just sit there indefinitely.

A VPS you set up yourself usually has one fixed IP; a SaaS platform will give you a fixed egress IP (TVSBot publishes one, other tools have varying counts — ask before you wire anything up). The IP whitelist field is clearly present in Bitget’s key-creation UI as a text input; once filled, only requests from those IPs will be accepted.

Setting 3: put the bot key inside a sub-account — this is Bitget’s differentiator

This is where this guide diverges most from the Binance version, and it’s the area where Bitget’s docs actually get into some detail — Bitget lets sub-accounts create and manage their own API keys, without needing the main account to do it for them. This deserves its own H2.

Sub-Account Isolation: Officially Supported on Bitget, but Off by Default

Bitget’s UTA docs spell it out clearly — “Sub-accounts (virtual sub-accounts and standard sub-accounts) can create and manage their own API Keys independently, without requiring the main account to operate on their behalf”. In plain English: you can create a sub-account under your main, transfer funds to it, and have that sub-account create its own API key to run the bot — the main account never has to hold a key. The benefit is isolation: if that sub-account’s key ever goes wrong (leak, runaway strategy, wild orders), the blast radius is capped to the funds in that sub-account, and the rest of the main account is untouched.

50
Maximum number of API keys a single Bitget UID can create (official UTA docs)
Off by default
The sub-account’s API Key Management permission — the main account has to enable it explicitly
3 keys
Number of credentials Bitget API auth requires (Key + Secret + Passphrase)
0 days
Auto-expiry that’s not documented — Bitget keys don’t expire on their own

But there’s a critical prerequisite that a lot of people miss — this feature is off by default. Bitget’s UTA docs devote a warning paragraph to it: “Prerequisite: The main account must enable the API Key Management permission for the sub-account. This setting is disabled by default. The main account can configure it under sub-account permission settings”. So it’s not that “creating a sub-account is enough” — you have to go into the main account’s sub-account permissions settings and explicitly flip API Key Management on, after which the sub-account can create its own keys. Once enabled, the docs list four things the sub-account can do:

  • Create API Key
  • View API Key (see the key details)
  • Edit API Key permissions
  • Delete API Key

The same section adds another sentence: “The main account retains full control and can view, edit, or delete any sub-account’s API Keys at any time” — the main account can look at, modify, or delete any sub-account’s keys whenever it wants. The practical implication: delegating bot-running to a sub-account does not mean you’ve given up control — the sub-account is an operating unit; the main account is always root.

When it’s worth spinning up a sub-account
A simple rule of thumb — if your bot is managing more capital than you’re willing to see go to zero in one incident, a sub-account is worth the setup. For example: your main account holds 100,000 USDT and the bot only runs a 5,000 USDT strategy — put those 5,000 into a dedicated sub-account and a catastrophe costs 5% instead of everything. This isn’t a Bitget-specific idea; it’s the standard practice across any multi-asset account. But Bitget’s decision to make “sub-account manages its own API” a formal feature is cleaner to manage than Binance’s model, which requires the main account to hold every sub-account’s keys.
Binance sub-accountBitget sub-account
Sub-account can create its own API keyMain account creates, sub-account usesSub-account creates and manages (main must enable the permission)
Default state of API Key ManagementAlways held by the main accountOff by default on the sub-account — has to be flipped on
Can the main account override sub-account keys?Yes — it created them in the first placeYes — docs explicitly say “retains full control”
Best-fit scenarioMain account wants to centrally manage many botsEach bot runs “autonomously”, less load on the main account

This table isn’t about calling Bitget’s approach better — the two exchanges have different mental models, and each fits different situations. Bitget’s “sub-account manages its own API” is friendlier for a team where different people run different bots (say, you and a collaborator each run one strategy); the main account doesn’t have to be the middleman. Binance’s model — main account holds everything — is actually simpler for a single-person, single-bot retail setup, because everything is in one place. Which one fits depends on your actual situation.

What It Means That Bitget Has No Documented Expiry Rule

Comparing across exchanges makes the weight of this difference clear — Binance deletes keys without an IP whitelist after 30 days of inactivity, BingX after 14 days, OKX after 14 days. In both Bitget’s UTA Quick Start and its Classic API docs, we couldn’t find any auto-expiry rule targeting “keys with no IP” or “keys idle for N days”. That’s the same conclusion we landed on in the cross-exchange checklist.

Where the official docs actually go on this
A precision note here — “we couldn’t find it” is not the same as “it absolutely doesn’t exist”. It could be that Bitget hasn’t published the rule as a public document, or that a rule exists but is buried in some account notice we didn’t manage to scrape. The verification date is July 2026, and if Bitget adds an expiry mechanism later this article will be out of date. The safer posture is to not depend on the current “no expiry” behaviour — put “rotate the key on a schedule” (say, every 6 months, manually) into your own routine, and do it regardless of whether the exchange nudges you.

This difference cuts two ways in practice: the upside is that your bot won’t silently disconnect one morning because the key expired — Bitget won’t do that to you. The downside is that dead keys (say, a key for a tool you stopped using long ago and forgot to delete) will just sit in your API management page forever, one more unattended attack surface. This one is on you: periodically go back to Bitget’s API management page and delete the keys you don’t use anymore — no exchange will do it for you.

The Actual Flow for Creating a Bitget API Key

Bitget’s UI does get redesigned every so often, so this article won’t nail down pixel-level button paths — just the skeleton of steps you can’t skip. Treat what Bitget shows you on the account page at the moment you configure the key as the source of truth. If you’re going the “run the bot from a sub-account” route, the flow adds a couple of steps over creating a single main-account key, but you only do the whole workflow once and it’s stable from there.

text
[First-time setup: open up the sub-account]
        1. Log into Bitget → avatar (top right) → Sub-Accounts
        2. Create Sub-Account → fill in the sub-account name, email, password
        3. In that sub-account's permission settings, tick API Key Management
           (The docs are explicit: this permission is off by default; you have to flip it on)
        4. From the main account, Transfer the funds you're giving the bot into the sub-account

        [Create the API key: as the sub-account]
        5. Log out of the main account → log in as the sub-account (or use the sub-account switcher)
        6. Top right → API Management → Create API Key
        7. Fill in the Label (e.g., tvsbot-prod, grid-bot-01)
        8. Set a Passphrase (pick an 8-32 character password of your own; forget it and you re-create the key)
        9. Complete 2FA
        10. You receive three credentials: API Key, Secret Key, Passphrase
            (Secret Key is shown once only — copy it immediately)

        [Set permissions: only what you need, never Withdraw]
        11. Click Edit on the key:
            - Tick the Trade categories you need (Spot or Futures, per your strategy)
            - Do NOT tick Withdraw
            - Do NOT tick Transfer (unless your bot needs to move margin automatically)
            - Fill in the IP whitelist (Bitget calls this "strongly recommended" — do it anyway)
        12. Save changes

Secret Key is displayed once and never again — that’s a rule shared across every exchange. Bitget adds a Passphrase on top, so keep that safe too — all three credentials, if leaked, can cause loss of funds according to the docs. Any password manager works (1Password, Bitwarden, macOS Keychain); pasting them into a plain text file, Slack, or email is a habit you only need to learn once to regret.

How to Pick an Automation Tool That Talks to Bitget

Bitget is on our list of exchanges that accept TradingView webhook signals as one of the exchanges with “a functioning official REST / WebSocket API you can wire to for auto-execution”. Which means plenty of tools out there will claim to integrate with it. When you’re picking one, three things are worth asking upfront:

  • Does it ask you for Withdraw permission on the key? If yes, walk away from that tool. Placing spot or futures orders technically never requires withdrawal permission — asking for it is an architectural red flag.
  • How many fixed IPs does it give you? Most SaaS platforms give 1-3, all of which fit inside Bitget’s IP whitelist field. Some tools use a dynamic egress IP (varies per call) — with those you can’t bind IPs at all, and you’ll have to weigh whether that’s acceptable.
  • How do they store your three keys (especially the Passphrase) on their side? Plaintext in a database is a red flag; encrypted storage where the encryption master key lives separately from the database itself is the basic bar worth asking about.

For our part: TVSBot encrypts your three keys with Fernet (AES-128-CBC + HMAC-SHA256), the encryption master key lives only in an environment variable — physically separated from the database itself — and every order is placed by calling Bitget’s API with your own key; we never hold your funds. Our setup docs recommend enabling only the Trade permission and publish a fixed egress IP for you to enter into Bitget’s whitelist, and strongly recommend creating the key in a sub-account rather than the main account. The same checklist applies to any non-custodial tool, not just TVSBot — so even if you end up picking someone else, this section is useful.

Being Honest: What This Article Doesn’t Solve

Even if you nail all three settings above, there are risks this guide cannot make go away, and it’s worth being upfront about them so you have accurate expectations:

First, a breach of the exchange itself is not something API-key-level defence can block — if your funds sit on Bitget, you carry Bitget’s platform risk. That layer is handled by things like the exchange’s Proof of Reserves, insurance fund, and your own choice to spread holdings across platforms and cold wallets — not by how you set up your key.

Second, your own strategy losing money has nothing to do with API key security — this article doesn’t discuss strategy-level risk. No automated trading setup guarantees profit — that’s always true; even the most conservative grid bot or funding-rate arbitrage takes losses in extreme conditions. For strategy-level risk assessment, see our Kelly criterion and position sizing and ATR volatility-based position sizing.

Third, we didn’t perform a full internal-controls audit of Bitget — everything in this article about Bitget’s official rules is drawn from publicly verifiable documentation and account-page content, verified in July 2026. Exchange policies do change without much notice; before you actually configure anything, we recommend visiting Bitget’s official API docs to confirm the current rules yourself.

FAQ

Why does Bitget's API need three keys? What is the Passphrase?
Bitget’s API auth uses three headers: ACCESS-KEY, ACCESS-SIGN (a signature computed with the Secret Key), and ACCESS-PASSPHRASE. The Passphrase is a password you set at the moment you create the key, and the docs are blunt: “if the Passphrase is forgotten, it cannot be retrieved and the APIKey needs to be re-created” — forget it and you rebuild the key. This three-credential design matches OKX; Binance and BingX only issue API Key + Secret. Practically: all three need to be treated as secrets and stored securely, and the docs explicitly say a leak of any one can cause loss of funds.
Do I have to use a sub-account? Can't I just create the key on the main account?
Technically yes; the docs don’t require it. But if your bot manages more capital than you can afford to lose in a single incident, sub-account isolation is worth doing — Bitget’s docs spell out that “sub-accounts can create and manage their own API keys”, and the feature exists exactly for this scenario. The catch is that the sub-account’s API Key Management permission is off by default; you have to enable it from the main account’s sub-account permission settings first. Once you do, the sub-account can independently manage its own keys, and the main account can still override at any time.
Do Bitget keys expire on their own? How often should I rotate them?
Neither Bitget’s UTA Quick Start nor its Classic API docs currently describe any auto-expiry rule (verified July 2026). This is unlike Binance (keys without an IP whitelist are deleted after 30 days of inactivity) or BingX (14 days). The upside is that your bot won’t silently disconnect because a key expired; the downside is that keys you stopped using long ago will sit in the API management page increasing your attack surface. The recommendation is to bake “rotate manually every 6 months” into your own schedule — regardless of whether the exchange does it for you.
Can one Bitget key be used for both UTA and Classic API at the same time?
Per Bitget’s UTA docs, the UTA API uses permissions defined under UTA account mode; the Classic API uses the older interface’s permission set (e.g., spot_trade, contract_trade, readonly). In practice we recommend one key per purpose: build a UTA-only key for a UTA bot and a Classic-only key for a Classic bot. That way, if something goes wrong, the blast radius is contained to one interface, and it’s much easier to see on Bitget’s API management page which key is doing what.
My Bitget key leaked — what do I do first?
Step one is to immediately go to Bitget’s API Management page and delete the key — this takes priority over anything else, because every minute the key lives is a minute of exposure. Bitget’s official risk notice puts it as “If you find that the APIKey is leaked, please delete the APIKey as soon as possible”. Once deleted, review recent order and withdrawal history (withdrawal history especially, if you had made the mistake of enabling Withdraw); if anything suspicious shows up in withdrawals, contact Bitget support at once. Finally: when you create the replacement key, figure out why the leak happened — was it a virus, a SaaS breach, an accidental repo push? — because if you don’t fix the root cause, you’re just delaying the next one.
How does this compare to a Binance API key security tutorial?
Four key differences — first, Bitget needs a Passphrase as a third credential; Binance doesn’t. Second, Bitget’s sub-accounts can create and manage their own API keys (main account has to enable the permission first), while on Binance the main account holds all sub-account keys. Third, Bitget’s docs currently describe no auto-expiry rule, while Binance auto-deletes keys without an IP whitelist after 30 days of inactivity. Fourth, Bitget runs both UTA and Classic APIs in parallel, so permission options shift with account mode. The core “don’t tick Withdraw, do bind IPs” logic is the same on both exchanges. For the full Binance-specific walkthrough see Binance API Key Security: Complete Guide.

Get started

Ready to ship what you just learned?

Wire TradingView signals to Bitget for auto-execution — TVSBot is non-custodial, uses your own API key, publishes a fixed IP you can enter into Bitget’s whitelist, dry-runs orders before firing, and lets you set account-level risk controls.

Start free