Crypto Trading API Limits and Execution Latency Explained
Jump to sectionsShort answer
For a crypto futures bot, reliable execution means knowing which orders exist and how much has filled. Track request weight separately from order limits, preserve capacity to cancel, and measure order acknowledgement separately from fill confirmation. If a submission times out, resolve its status before sending a replacement: a missing reply can conceal a successful trade.
Bybit V5 separates order acknowledgements from private execution updates. It is relevant for a futures bot that must recover after a timeout without creating a second unwanted order; this capability is more useful here than an unverified speed ranking.
What your futures bot must know before its next trade
Imagine a bot sending a 0.20 BTC buy order. Its screen stops responding. A second buy button appears, and the bot sends another 0.20 BTC. If the first order already filled, a connection problem has become a position twice the intended size. Improving the strategy’s entry signal would not fix that failure. The missing ingredient is a reliable record of the first instruction.
An API is the exchange’s connection for software to read markets and manage orders. For a futures trader, the important questions are practical: did the order reach the venue, did any quantity trade, is the remainder still live, and can an unwanted order be canceled? A fast price feed answers none of those account questions by itself.
Keep three records distinct. An intention is what the strategy wanted to do. An order is what the venue accepted or rejected. An execution is an actual fill, with a quantity and price. One intention can produce several orders, and one order can fill several times. Counting every message as another trade corrupts exposure even when every message is delivered correctly.
The rest of this guide follows those distinctions through rate limits, time measurements and recovery. It is written for someone selecting a bot or checking its behavior, as well as someone building one. You should be able to ask a provider how it handles these situations without having to read its entire codebase.
Binance futures API weight: why 60 requests can cost 600 units
A request limit can count calls, weighted work, order submissions or active connections. They are different units. Binance’s USDⓈ-M order-book endpoint, GET /fapi/v1/depth, weights a snapshot according to its depth parameter. A request for 50 levels costs 2 weight units; 100 costs 5; 500 costs 10; and 1,000 costs 20. Omitting the limit selects the documented default of 500.
For a constructed workload of one snapshot every second, there are 60 calls per minute. Asking for 500 levels therefore consumes 600 weight units per minute. Asking for 50 levels consumes 120. The request count is identical; the weighted load is five times larger. These are calculated workloads, not statements about the allowance available to a particular account.
Scaling the same polling loop to ten symbols produces 600 calls and 6,000 weight units per minute at 500 levels. That cost arrives before the bot queries positions, reads history or sends an order. A dashboard that unnecessarily refreshes deep snapshots can consume capacity that other software using the same constrained resource also needs.
| Workload | Calls/min | Weight/min |
|---|---|---|
| 1 symbol, 50 levels | 60 | 120 |
| 1 symbol, 500 levels | 60 | 600 |
| 10 symbols, 500 levels | 600 | 6,000 |
Budget a workflow rather than a single button. The opening request may be followed by status checks, stop placement, amendments and eventually cancellation. If the provider advertises a maximum request rate, ask which of those operations it includes. A limit with no unit, time window or account scope is not enough to plan around.
For continuous quotes, streaming updates can avoid repeatedly downloading the same snapshot. A snapshot remains useful for initialization or repair. The improvement is not “WebSocket means unlimited”: it is selecting a suitable delivery method for information that changes continuously, while reserving explicit queries for the situations that need them.
Order acknowledgement is not the time your futures trade filled
Bybit explicitly describes its order-placement response as asynchronous: acceptance is followed by order-status confirmation through the private stream. That distinction matters when evaluating a vendor’s “20 ms execution” claim. Twenty milliseconds to receive an order ID is not twenty milliseconds to obtain the requested quantity at a known price.
There are several useful clocks. Signal-to-send includes the bot’s own decision and queuing delay. Send-to-acknowledgement measures how long the submitting client waits for the acceptance response. Send-to-first-fill notification records when that client first learns that some quantity traded. Send-to-complete-fill notification ends only when the full requested quantity is reported as filled.
For a limit order, waiting for a matching counterparty can dominate the final interval. A long time to complete is not automatically a slow API. Conversely, a near-instant acknowledgement can be followed by a rejection, cancellation or an order that remains open. Compare like-for-like order instructions and quantities before attributing the difference to infrastructure.
The following invented timestamps are all readings from the same client clock. They illustrate interval accounting, not a measured result from Bybit or any other venue. The order is sent at 0 ms, acknowledged at 40 ms, first fill notification arrives at 95 ms, and the final fill notification arrives at 180 ms.
Constructed example. These are notification arrival times, not an exchange speed test.
- 0 msOrder sent
- 40 msAcceptance received
- 95 msFirst fill reported
- 180 msFull quantity reported
40 + 55 + 85 = 180 ms. Do not add 40 + 95 + 180: those measurements overlap.
The same accounting applies to a network round trip: it already contains an outward and return path. Adding response delivery to a measurement that already ends on receipt would count that delivery twice. Define the start and end of each interval before combining it with another.
Real events need not arrive in this example’s order. A fill notification may reach the client before the acknowledgement on another connection. Preserve the actual timestamps and event meanings rather than forcing them into an expected sequence. For before-and-after performance comparisons, choose one precisely defined interval and retain that definition across both samples.
A futures API timeout: investigate before replacing the order
Binance’s futures documentation identifies a particular 503 response whose execution outcome is unknown, rather than failed. It advises checking order updates or querying the order before duplicating the submission. Other 503 messages describe failure. The HTTP status alone therefore does not tell the bot whether it is safe to create another opening order.
Return to the proposed 0.20 BTC entry. If the reply disappears, reserve that pending intention locally while investigating. Do not let a second strategy cycle treat the account as empty and repeat the full request. Otherwise, even a correct retry policy inside one function can be undermined by another part of the bot starting the same trade again.
A usable recovery record includes the market, side, requested quantity, account, submission time and a persistent client reference. Bybit calls its user-defined reference orderLinkId and documents uniqueness rules. Keep that reference attached to the original intention. It helps locate the request; it should not be presented as a universal guarantee that every exchange treats a repeated submission as the same order.
Reconciliation means matching that local record with the venue’s order and fill records. If the order exists, follow its actual state. If there is a documented definitive rejection, the strategy can decide whether a fresh order is still wanted. If the evidence remains inconclusive, the unresolved quantity stays unresolved; an empty response from one lookup is not an instruction to assume zero exposure.

Suppose investigation finds 0.08 BTC filled and 0.12 BTC still resting. Sending another 0.20 BTC would not “finish” the first request. If both remaining orders subsequently filled, the total would be 0.40 BTC. The desired next action could be keeping the existing remainder, canceling it, or changing the intended exposure. That decision depends on the strategy’s current objective, not the timeout message.
A restart should preserve unresolved intentions too. If the bot forgets its pending requests when its process restarts, it can reproduce the same duplication problem after every crash. Durable order references and a reconciliation step before new entries are more valuable here than shaving a few milliseconds from normal submissions.
Why a canceled order can still leave you with a position
Cancellation targets the quantity that has not yet executed. It cannot reverse a completed fill. A bot must therefore distinguish “cancel request sent” from “remaining order canceled,” and both from “position closed.” These distinctions become especially important when a price moves through the order while the cancel request is in flight.
Bybit documents a concrete race: two messages with Filled status can arrive when execution and cancellation coincide. One reports the fill; the other reports that cancellation failed because execution already occurred. Treating those status messages as two separate trades would double-count exposure. Its execution stream supplies execution IDs, prices and quantities for tracking actual fills.
Consider an order for 1 ETH. It fills 0.4 ETH, then another 0.3 ETH before cancellation of the final 0.3 ETH is confirmed. The result is a 0.7 ETH position and no live remainder. A screen showing “canceled” can be accurate about the remainder while the account still holds that 0.7 ETH. Cancellation did not restore the account to its pre-order state.
Use both an order-level view and a fill-level view. The former answers whether something can still execute; the latter explains the position already created. Replayed events should not add the same execution twice. A cumulative filled-quantity field should replace the previous cumulative figure, not be added to it as though every update were a new fill.
Check the instructions that control an order’s remaining quantityAfter a WebSocket reconnect, rebuild the view before trading on it
After a reconnect, fetch the missed fills and rebuild the order book and current position before the strategy resumes. Incoming messages alone will not repair the gap left during the interruption.
Bybit’s public order-book feed begins with a snapshot and then sends changes. Its documentation says a new snapshot replaces the local book; a zero quantity in a change removes that price level. Applying those rules incorrectly can leave nonexistent liquidity on screen. The visible book may look deep precisely because deleted levels were never removed.
Public and private recovery solve different problems. Rebuilding bids and asks tells the bot what is currently quoted. Reviewing its own recent executions and open orders tells it what it owns and what might still trade. Neither reconstruction substitutes for the other. A healthy market feed cannot confirm that a canceled entry actually stopped.
Define a pause condition for information that the strategy requires. A strategy relying on depth should not open new exposure from a book it knows is incomplete. A strategy with uncertain account fills should not assume a clean starting position. Recovery should restore the missing evidence and reconcile it, rather than merely turn a connection indicator green.
Clock and event details for a bot developer
Measure client-to-client intervals with a monotonic clock so wall-clock corrections do not create negative durations. Comparing an exchange timestamp with a local timestamp also requires clock-offset and timestamp-meaning checks. A field describing message creation is not necessarily the matching-engine execution time.
Bybit exposes several event identifiers and timestamps with different purposes. Read the definition for the specific topic and product. The private event-contract topic is not the same contract family as the standard linear-perpetual order stream; matching page titles alone can lead to the wrong integration.
How to compare API latency without buying a misleading number
Start with the consequence the delay has for your strategy. A bot that adjusts one hedge after a signal has different needs from one that constantly replaces quotes. For the first, a missed or duplicated hedge may dominate. For the second, the age of resting quotes and the ability to cancel during bursts matter. A universal speed threshold would hide those differences.
Collect distributions rather than only the fastest sample. A median describes the middle observation; a high percentile describes slower observations near the tail. Report the sample count, period, location and measured interval. A sample taken while the account is idle does not describe a bot simultaneously tracking dozens of markets and issuing amendments.
For example, suppose 95 of 100 acknowledgements take 40 ms and five take 800 ms. The mean is 78 ms, while the slowest five orders each wait 800 ms. A single average obscures the very delays a trader might care about during a burst. Reporting that sample honestly requires both the normal behavior and the tail, without pretending that 100 observations establish a permanent service guarantee.
For a 0.5 BTC buy evaluated at $60,000 and filled at an average $60,030, adverse execution costs $15 before fees. Compare that result with the timing log: liquidity changes, spread and order instructions can also explain part of the difference.
A faster server is useful only when it improves the bottleneck that matters. It cannot make a passive price immediately match, remove an exchange throttle or repair a bot that double-counts fills. Test changes against the same workload and definition of success. Otherwise, an attractive speed chart can reward software that reports acceptance quickly but discovers its actual exposure late.
Test failure recovery before trusting a live futures bot
- Missing submission reply: look up the original order identifier before resending.
- Duplicate fill event: update executed quantity once.
- Partial fill followed by cancellation: preserve the filled position and cancel only the remainder.
- Reconnect: rebuild the account state before sending new exposure.
- Rate limit: pause optional requests while preserving capacity for essential order checks.
Exercise those paths with replayable events, then the venue’s test environment. Replay tests answer state-handling questions; a sandbox can check supported requests. Neither establishes live liquidity.
When choosing a bot, ask it to show one recovery trace from original intention to final quantity. Give it only the permissions the workflow needs and retain a manual account-access route. Revoking a key does not unwind positions already created.
API questions futures traders ask before automating
Does increasing my leverage consume more API requests?
Not by itself. Request accounting depends on the venue’s endpoint and action rules, rather than multiplying calls by your leverage setting. Higher exposure can make an execution mistake more costly, but it does not turn one documented request into 20 requests at 20x.
Can a trading bot keep running when I close its browser tab?
That depends on where it runs. A hosted bot can continue on its provider’s server; code running only in the tab may stop. Closing the screen also does not cancel orders already accepted by an exchange. Establish which component owns the running strategy and how it is stopped.
Is a ping test enough to choose the fastest futures exchange?
No. A network ping may reach different infrastructure from the authenticated order path. It does not measure request validation, order acceptance, matching or delivery of fills. Use it to diagnose connectivity, not to rank completed futures execution.
Will moving from REST to WebSocket remove order limits?
Do not assume so. Delivery method and allowance scope are separate rules, and a venue can share an account budget across methods. Streaming market updates may reduce unnecessary polling, but it does not create unrestricted trading capacity.
Can a timeout leave an attached stop missing?
It can leave the outcome uncertain. Whether an entry and protection are one request or separate actions depends on the product. Inspect the accepted position and actual protective orders. A bot’s intention to attach a stop is not evidence that the venue created it.
Does an API key make a restricted futures product available?
No. Software access does not override the account’s eligibility, regional restrictions or product permissions. Evaluate API support only after confirming that the account can use the relevant futures contract.
Sources and research 8 source references
Reviewed official API documentation on 8 October 2026. The timing, polling and position examples are constructed and independently recalculated, not results from live orders. No API key, authenticated account or financial operation was used. Endpoint weights and account limits can change. We compared competing explanatory coverage for topic gaps, not as evidence of venue performance.
Evidence by section
- Binance futures API weight: why 60 requests can cost 600 units
- Which API limit did you hit: IP, account or orders?
- Order acknowledgement is not the time your futures trade filled
- A futures API timeout: investigate before replacing the order
- Why a canceled order can still leave you with a position
- After a WebSocket reconnect, rebuild the view before trading on it
Source register and access
- Binance: USDⓈ-M order-book request weights and depth parametersLink checked · Reviewed 8 Oct 2026 · Product rule · next editorial check due 2027-01-06
- Bybit: V5 IP, endpoint and account rate-limit rulesLink checked · Reviewed 8 Oct 2026 · Variable parameter · next editorial check due 2026-10-22
- Hyperliquid: IP weights, address action limits and cancellation capacityLink checked · Reviewed 8 Oct 2026 · Variable parameter · next editorial check due 2026-10-22
- Bybit: Order placement: asynchronous acceptance and client order identifiersLink checked · Reviewed 8 Oct 2026 · Product rule · next editorial check due 2027-01-06
- Binance: Futures HTTP errors, unknown execution outcomes and rate limitsLink checked · Reviewed 8 Oct 2026 · Product rule · next editorial check due 2027-01-06
- Bybit: Private order stream and the cancellation-versus-fill raceLink checked · Reviewed 8 Oct 2026 · Product rule · next editorial check due 2027-01-06
- Bybit: Private executions: execution identifiers, quantities and pricesLink checked · Reviewed 8 Oct 2026 · Product rule · next editorial check due 2027-01-06
- Bybit: Public order-book snapshots and incremental updatesLink checked · Reviewed 8 Oct 2026 · Product rule · next editorial check due 2027-01-06