Exchange Integration

Bitget Reality API Open 8/11: 1/sec/UID Webhook Cap

2026-09-07·8 min read

Bitget Reality API shifted quietly on August 11: the changelog moved the Reality Order place/cancel endpoints out of whitelist-only status and opened them to all users. Any UTA (Unified Trading Account) account can now programmatically send orders for rToken tokenized U.S. stocks — this part is genuinely easy now.

What nobody warned you about is buried one line below in the same changelog: "default rate limit: 1/sec/UID". Webhook — the pipe that forwards TradingView alerts to your server — takes exactly one concurrent signal before the second one hits 429, and the signal is quietly dropped.

This article does not comment on whether rTokens are worth buying (that is an investment decision, and we do not make those here), and it does not compare tokenized-stock offerings — right now Bitget is the only exchange that ships this API. We only cover two things: what that one line in the changelog actually changed, and what 1/sec/UID means in practice for webhook-driven automation.

The short version
Reality Order's default rate limit is 1/sec/UID — every UTA account (one UID) may send only 1 place-reality-order request per second to Bitget. Not 1 per API key. Not 1 per IP. Multiple strategies sharing the same UTA account firing at the same time will see the second request onwards rejected with 429 at Bitget's edge. Getting to 30/sec/UID means contacting your BD to apply.

What the Bitget Reality API Changelog Actually Says

The entry on the Bitget UTA API changelog page dated 2026-08-11 is titled "Place/Cancel Reality Order: Now open to all users". The two endpoints changed are /api/v3/trade/place-reality-order and /api/v3/trade/cancel-reality-order. The body has exactly two sentences that matter.

First: "These endpoints no longer require whitelist access." — the two endpoints no longer sit behind a whitelist. Second: "Default rate limit: 1/sec/UID; whitelisted users: 30/sec/UID (users can contact your BD/RM to apply)." — the default is 1/sec/UID, whitelisted users get 30/sec/UID, and to apply you contact your BD or relationship manager.

1/sec
Default rate limit (per UID)
30/sec
Whitelisted ceiling
2
Endpoints removed from whitelist
The endpoint spec pages have not caught up
The two Reality Order spec pages — /api-doc/uta/trade/Place-Reality-Order and its counterpart Cancel-Reality-Order — still read "Rate limit: 10/sec/UID" and "only available for whitelisted UIDs, please contact BD if needed" as of our verification, contradicting the changelog. The Reality Trading Guide itself is in sync with the changelog; only the two endpoint spec pages lag. Trust the changelog — it is the only dated document at the moment of the change. Inconsistencies within the same API doc are themselves a reminder: exchange documentation is maintained in pieces, and reading a single page is not enough.

What rToken Is and What You Can Trade

Reality is the RWA (real-world assets) issuance platform inside Bitget's ecosystem, and the first phase focuses on tokenized U.S. stocks and ETFs. Bitget Academy phrases it as "Each rToken is linked to a corresponding underlying asset, such as a publicly traded U.S. stock or ETF" — an rToken represents "economic exposure" to a U.S. stock or ETF, not shareholder rights.

The naming rule is a lowercase r prepended to the original ticker — for example rAAPLUSDT (Apple), rMUUSDT (Micron). Every instrument in the /api/v3/market/instruments response carries an isReality field (value is "yes" or "no") — it is a response field, not a query parameter, so pull the whole list and filter isReality === "yes" on the client. The list moves as Bitget adds and removes symbols, so we do not print a fixed roster here.

Only Place and Cancel Left the Whitelist — Everything Else Is Still Gated

EndpointWhitelist status from 8/11Notes
place-reality-order (REST)Open to all users1/sec/UID, whitelisted 30/sec
cancel-reality-order (REST)Open to all usersSame as above
Reality OrderBook (REST depth)Still whitelistedNo live depth without it
Reality Fills (platform trade reports)Still whitelistedYou have to log fills yourself
Reality Orderbook channel (WebSocket)Still whitelistedLive depth is whitelisted too
Place / cancel (WebSocket)Not supportedREST is the only path
Modify Order, batch place/cancelNot supportedTo modify: cancel then place
Order flow opened; depth did not
The market data layer is still whitelisted. Without the whitelist you cannot pull live order-book depth and you cannot get platform-level fill reports — you can only record fill prices and quantities from the order response yourself. This API today is closer to "your strategy has already decided the direction and just needs an execution pipe" than to anything ambitious. If you want to do market-making, latency arbitrage, or dynamic order placement that reads depth, this path is not enough yet.

What 1/sec/UID Actually Means

Rate limits are universal, but Bitget's counting unit here is UID. Not per API key, not per IP, not per symbol — every place-reality-order request coming out of the same UTA account shares one 1/sec budget.

In practice, for webhook automation: say you have 3 Pine strategies running on 1-minute bars, and on some bar close all three fire at once. Three place-reality-order requests arrive at Bitget's edge nearly simultaneously. The first succeeds; the second and third come back 429, and those signals are gone. This kind of failure does not shout — your log gets one line of 429, your strategy thinks the order went out, and in reality nothing happened.

How to Route Signals As They Come In

1
Do concurrent signals hit a local rate limiter first?
NoThey go straight to Bitget; the second onwards will get 429
Yes (token bucket refilling 1/sec)Signals go out in sequence, delayed 1~3 seconds but never lost
2
What do you do with a 429?
Treat it as a failed orderYour strategy thinks it entered; it did not — the worst outcome
Wait 1 second and retry, up to 3 timesMost are recoverable; log clearly if they still fail
3
Multiple strategies need more throughput — now what?
All share the same UID1/sec is the ceiling, or apply for whitelisted 30/sec
Split into multiple UTA sub-accountsEach sub-account has its own UID, each with its own 1/sec budget

What to Do on Your Own Webhook Endpoint

  • Route incoming signals through a local token bucket (capacity 1, refill 1/sec) before handing them to Bitget — take the 1-second delay in your strategy rather than let Bitget bounce your signal with a 429
  • When Bitget returns 429, wait 1 second and retry, up to 3 times; if it still fails, log it clearly — this is normal for a webhook system, not a bug to eliminate
  • When multiple strategies share the same UTA key, write the strategy ID into Bitget's clientOid field, so post-hoc reconciliation can tell which strategy placed which order
  • Do not let multiple bar timeframes fire the same strategy at once; if you cannot avoid it, consider splitting them across different UTA sub-accounts
A local rate limiter beats letting Bitget bounce you
Bitget bouncing you is a 429 error — your strategy sees "failed", not "delayed". Local queuing gives you "delayed 1~3 seconds" and the signal still executes. For bar-close-triggered strategies the difference is nearly zero, and it removes the "signal quietly disappears" failure mode. This is the same principle this site keeps coming back to: errors do not shout, they break quietly, and any race condition you can catch locally is one you should not leave to a remote system.

What a Reality Order Request Looks Like

json
{
          "category": "SPOT",
          "symbol": "rAAPLUSDT",
          "side": "buy",
          "orderType": "limit",
          "qty": "1",
          "price": "180.50",
          "clientOid": "strategy-42-signal-001"
        }
FieldRequiredNotes
categoryOptionalSPOT (default) or MARGIN
symbolRequiredReality-specific format: r + U.S. ticker + USDT
sideRequiredbuy / sell
orderTypeRequiredlimit / market
qtyRequiredmarket buy uses quote coin; limit and market sell use base coin
priceConditionalRequired when orderType=limit
clientOidOptionalCustom order ID; strongly recommended for reconciliation

Place Reality Order request fields (source: Bitget API doc /api-doc/uta/trade/Place-Reality-Order, verified August 2026)

Reality uses Reality-only endpoints, not the general UTA path
The general UTA place-order endpoint will not accept a Reality symbol. If you copy your existing UTA spot order flow and just swap the symbol for rAAPLUSDT, it gets rejected. Reality Order must go through /api/v3/trade/place-reality-order, and cancel through /api/v3/trade/cancel-reality-order — the routing is entirely separate.

Where TVSBot Sits Today

To be clear: TVSBot's current 7-exchange integration includes Bitget, but only for spot and perpetual futures — Reality Order is not wired up. Reality is an endpoint that lost its whitelist this month, and we have not scheduled it into an update yet. The point of this article is not to announce Reality as a TVSBot feature; it is to explain how this new API works, because some readers will wire it up themselves.

For readers already using TVSBot to connect Bitget spot/perp, we do handle rate limits on the webhook receiving side: after an alert arrives, we cap the same token at 60 requests per 60 seconds and the same IP at 30 per 30 seconds (backend/app/services/rate_limit.py). That is receive-side throttling; it is a separate layer from Bitget's 1/sec/UID. If you wire up Reality by hand, the Bitget-side rate limit is still yours to handle in your order module.

Honest Section: We Have Not Tested Reality Fill Behavior

This article describes what the API says in writing: the changelog text, the endpoint spec, the official rate limit number. But actual rToken fill depth, slippage, and behavior outside U.S. market hours — we have not tested that. Reality is a new product, tokenized U.S. stocks typically have thinner liquidity during Asian hours, and these details you can only learn by placing small orders yourself — documentation will not tell you what the order book looks like right now.

Frequently Asked Questions

How do I apply for Bitget's 30/sec/UID whitelist?
The changelog only says "users can contact your BD/RM to apply" — there is no form on the page. We do not have first-hand experience applying, so we can only quote the original text.
Is 1/sec/UID a hard cap? Can I accumulate credit over a short period?
The official doc only says "default rate limit: 1/sec/UID"; it does not specify token bucket or fixed window. The safe assumption is fixed window — one slot per second, unused slots do not roll over. A more precise answer needs testing that this article did not do.
If I have 2 UTA sub-accounts, do they each get their own 1/sec?
The counting unit for the rate limit is UID. Sub-accounts have different UIDs, so in theory they each get their own 1/sec — this is a conclusion inferred from the phrase "per UID", not something Bitget states in one sentence. Before you go live, we recommend placing one test order and inspecting the rate-limit information in the response headers.
When will TVSBot support Reality Order?
No timeline to commit to. Bitget's API only opened to all users on 8/11, and we are still watching demand. If you have a concrete use case, tell us via support or drop into Discord — concentrated demand moves things up the queue.

Get started

Ready to ship what you just learned?

Route your TradingView signals into Bitget spot/perp through TVSBot — with your own API key, dry-run first, account-level risk controls you set yourself. Reality Order is manual for now, and the mechanics in this article apply to your own order module too.

Get Started for Free