<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: HMwork</title>
    <description>The latest articles on DEV Community by HMwork (@hmwork_2c698b7158d3).</description>
    <link>https://dev.to/hmwork_2c698b7158d3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4102105%2F42afa6af-4e7c-4604-8f43-cc5d89f31c77.png</url>
      <title>DEV Community: HMwork</title>
      <link>https://dev.to/hmwork_2c698b7158d3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hmwork_2c698b7158d3"/>
    <language>en</language>
    <item>
      <title>One Call, Five Answers: How Many Candles Each Exchange API Actually Returns</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Tue, 20 Oct 2026 02:15:42 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/one-call-five-answers-how-many-candles-each-exchange-api-actually-returns-g6d</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/one-call-five-answers-how-many-candles-each-exchange-api-actually-returns-g6d</guid>
      <description>&lt;h1&gt;
  
  
  One Call, Five Answers: How Many Candles Each Exchange API Actually Returns
&lt;/h1&gt;

&lt;p&gt;Every trading-data script eventually grows the same loop: request candles, remember the last timestamp, ask for the next page. The loop breaks the first time it touches a second exchange, because "how many candles come back in one call" is not one number. On the morning of 2026-10-20 (02:00–02:10 UTC) I asked five exchange APIs the same question with the same kind of request — hourly candles on BTC — and got five different answers. One venue's documentation and its own endpoint even disagree by exactly one candle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick disclosures:&lt;/strong&gt; &lt;em&gt;AI-assisted content: this article was researched and drafted with AI assistance, and every number below was re-checked against the official endpoints and documentation cited at the end. #ad — affiliate disclosure: this post carries no affiliate or referral links today; if future posts in this series do, they will be labelled right where they appear. This article is not financial advice — it is a documentation study of API behaviour.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The five answers, up front
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Venue&lt;/th&gt;
&lt;th&gt;Docs say&lt;/th&gt;
&lt;th&gt;Wire says&lt;/th&gt;
&lt;th&gt;Docs' default size&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binance&lt;/td&gt;
&lt;td&gt;Max 1000, default 500&lt;/td&gt;
&lt;td&gt;1000 bars (asked 1500); 500 by default&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bybit&lt;/td&gt;
&lt;td&gt;[1, 1000], default 200&lt;/td&gt;
&lt;td&gt;1000 bars (asked 1001); 200 by default&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OKX&lt;/td&gt;
&lt;td&gt;Max 300, default 100&lt;/td&gt;
&lt;td&gt;300 bars (asked 500); 100 by default&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kraken&lt;/td&gt;
&lt;td&gt;"Maximum 720 candles per call"&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;721 rows&lt;/strong&gt;, no limit parameter exists&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KuCoin&lt;/td&gt;
&lt;td&gt;no text documentation found&lt;/td&gt;
&lt;td&gt;100 bars&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four different caps (100 / 300 / 720 / 1000) and three different defaults (100 / 200 / 500) for the same everyday request. Same asset, same interval, same minute, five rulebooks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually ran
&lt;/h2&gt;

&lt;p&gt;All five calls are public, key-free, and repeatable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Binance&lt;/strong&gt; &lt;code&gt;GET /api/v3/klines&lt;/code&gt; on BTCUSDT, interval 1h, &lt;code&gt;limit=1500&lt;/code&gt; → exactly &lt;strong&gt;1,000&lt;/strong&gt; rows. Same call with no &lt;code&gt;limit&lt;/code&gt; → &lt;strong&gt;500&lt;/strong&gt; rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bybit&lt;/strong&gt; &lt;code&gt;GET /v5/market/kline&lt;/code&gt; (category spot, BTCUSDT, interval 60), &lt;code&gt;limit=1001&lt;/code&gt; → exactly &lt;strong&gt;1,000&lt;/strong&gt; rows. No &lt;code&gt;limit&lt;/code&gt; → &lt;strong&gt;200&lt;/strong&gt; rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OKX&lt;/strong&gt; &lt;code&gt;GET /api/v5/market/candles&lt;/code&gt; on BTC-USDT, bar 1H, &lt;code&gt;limit=500&lt;/code&gt; → exactly &lt;strong&gt;300&lt;/strong&gt; rows. No &lt;code&gt;limit&lt;/code&gt; → &lt;strong&gt;100&lt;/strong&gt; rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kraken&lt;/strong&gt; &lt;code&gt;GET /0/public/OHLC&lt;/code&gt; on XBTUSD, interval 60 → &lt;strong&gt;721&lt;/strong&gt; rows. The endpoint has no limit parameter at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KuCoin&lt;/strong&gt; &lt;code&gt;GET /api/v1/market/candles&lt;/code&gt; (BTC-USDT, type 1hour) → &lt;strong&gt;100&lt;/strong&gt; rows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Over caps are not errors — Binance and Bybit did not complain about &lt;code&gt;limit=1500&lt;/code&gt; or &lt;code&gt;limit=1001&lt;/code&gt;. They silently returned their maximum. A client that asks for 5,000 and trusts the request will quietly believe it fetched 5,000.&lt;/p&gt;

&lt;h2&gt;
  
  
  The documentation layer, quoted
&lt;/h2&gt;

&lt;p&gt;A number on the wire is nice; a number the venue actually commits to is better. Same morning, official text surfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Binance&lt;/strong&gt; spot REST spec, klines section: "limit | INT | NO | Default: 500; Maximum: 1000."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bybit&lt;/strong&gt; kline page: "Limit for data size per page. [1, 1000]. Default: 200."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OKX&lt;/strong&gt; REST docs, candles section: "Number of results per request. The maximum is 300. The default is 100."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kraken&lt;/strong&gt; historical-data guide: "Maximum 720 candles per call."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KuCoin&lt;/strong&gt;: the docs site is a JavaScript application; I found no text-rendered page stating the candle depth. Reported as observed — the 100-row figure above is measurement, not a quote.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So four of five venues have their number in writing, and the live wire agrees with every written number. Almost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-candle disagreement
&lt;/h2&gt;

&lt;p&gt;Kraken's guide says 720. The endpoint returned 721 rows.&lt;/p&gt;

&lt;p&gt;The arithmetic makes the disagreement visible: the first row opens at 2026-09-20 02:00 UTC and the last row is stamped 2026-10-20 02:00 UTC — exactly 2,592,000 seconds apart, which is precisely 720 hour-wide slots. Seven hundred twenty-one rows spanning seven hundred twenty slots. The most plausible reading is that the final row is the bar still forming at request time (I called shortly after 02:00 UTC, and a closed candle's close price is simply the last traded price on most venues, so a live bar looks identical to a finished one in the response). Kraken's own pagination hint — the &lt;code&gt;last&lt;/code&gt; field in the response — pointed at 01:00, i.e. the second-to-last row, as the resume marker, which quietly treats the final row as not-yet-final.&lt;/p&gt;

&lt;p&gt;Kraken's documentation does not adjudicate this, so I will not either. The point for builders: a documented cap and the row count are two different measurements, and one candle of drift per page is exactly the kind of off-by-one that turns into a silent gap — or a duplicated bar — after two hundred pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quiet cross-check worth copying
&lt;/h2&gt;

&lt;p&gt;Binance and Bybit disagree on defaults (500 vs 200), but both cap at 1000 — and on the same minute of capture, both handed me a window whose oldest bar was 2026-09-08 11:00 UTC. Two independent venues, one thousand hours back from the same moment, agreeing to the hour. When you build a cross-venue pipeline, checks like this — where two sources should agree and do — cost nothing and catch whole classes of silent truncation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a portable fetcher must carry
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A per-venue page-size constant.&lt;/strong&gt; Read each venue's own limit line; never port one venue's constant to another. 100-to-1000 across five mainstream venues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never omit &lt;code&gt;limit&lt;/code&gt;.&lt;/strong&gt; The three documented defaults differ 5× (100/200/500), and KuCoin offers no documented default at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Row order is also per-venue.&lt;/strong&gt; In my same-minute captures, Binance returned oldest bar first (row 0 was the oldest), while Bybit returned newest first (the oldest sat at the end of the array). Same pair, same interval, opposite arrays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide what to do with live bars.&lt;/strong&gt; Kraken hands you the forming candle; whether your backtest wants it is a policy decision, not a default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat over-cap requests as truncation signals.&lt;/strong&gt; Asking for 1500 and receiving 1000 is correct behaviour — but only if your code compares asked versus received instead of trusting the request.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this is exotic. It is five ordinary rulebooks, each written by one venue, each silently binding the moment your script touches that venue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Numbers move — verify official sources
&lt;/h2&gt;

&lt;p&gt;Every figure here is a snapshot from 2026-10-20 02:00–02:10 UTC, and any venue can change its limits without announcing it. Re-run the calls yourself: api.binance.com &lt;code&gt;GET /api/v3/klines&lt;/code&gt;; api.bybit.com &lt;code&gt;GET /v5/market/kline&lt;/code&gt;; okx.com &lt;code&gt;GET /api/v5/market/candles&lt;/code&gt;; api.kraken.com &lt;code&gt;GET /0/public/OHLC&lt;/code&gt;; api.kucoin.com &lt;code&gt;GET /api/v1/market/candles&lt;/code&gt;. For the written rules: the klines section of Binance's spot REST spec on GitHub, the kline page on bybit-exchange.github.io/docs/v5, the candles section of okx.com/docs-v5, and the historical-data guide on docs.kraken.com. Verify official sources before you hard-code any number into your own code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not financial advice. This post reports on API documentation and observed endpoint behaviour only; it recommends no exchange, no strategy, and no trade.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI-assisted content disclosure: researched and drafted with AI assistance on 2026-10-20 against the cited official sources. #ad: no affiliate or referral links are present in this post.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>crypto</category>
      <category>bitcoin</category>
      <category>developers</category>
    </item>
    <item>
      <title>Funding Settles Every 8 Hours — but Four of These Five Exchanges Have No 8-Hour Candle</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Fri, 16 Oct 2026 02:18:52 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/funding-settles-every-8-hours-but-four-of-these-five-exchanges-have-no-8-hour-candle-1plc</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/funding-settles-every-8-hours-but-four-of-these-five-exchanges-have-no-8-hour-candle-1plc</guid>
      <description>&lt;h1&gt;
  
  
  Funding Settles Every 8 Hours — but Four of These Five Exchanges Have No 8-Hour Candle
&lt;/h1&gt;

&lt;p&gt;If you hold a BTC perpetual on Binance, Bybit, or OKX, your funding payment changes hands every 8 hours, on the 00:00 / 08:00 / 16:00 UTC grid. That number is written into the exchanges' own APIs: the interval parameter and the settlement timestamps line up on the same three daily points.&lt;/p&gt;

&lt;p&gt;So when you want to plot the cost you are actually paying on the same rhythm as the payments, the obvious move is to pull an 8-hour candle. And that is where the surprise is: most exchanges simply do not have one.&lt;/p&gt;

&lt;p&gt;I went looking for the 8-hour candle at five exchanges on 2026-10-16, between 02:05 and 02:25 UTC, using only free, key-free official endpoints and official documentation pages. Each claim below rests on two layers: what the docs say, and what the live API actually returns. One venue supports the interval. Four do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Binance: the interval exists — and its documentation says so
&lt;/h2&gt;

&lt;p&gt;Binance's spot REST documentation keeps a small table of valid kline intervals under the anchor &lt;code&gt;kline-intervals&lt;/code&gt;. The hours row reads, verbatim, as fetched from the official repository today:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;hours | &lt;code&gt;1h&lt;/code&gt;, &lt;code&gt;2h&lt;/code&gt;, &lt;code&gt;4h&lt;/code&gt;, &lt;code&gt;6h&lt;/code&gt;, &lt;code&gt;8h&lt;/code&gt;, &lt;code&gt;12h&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the live API agrees. &lt;code&gt;GET /api/v3/klines?symbol=BTCUSDT&amp;amp;interval=8h&lt;/code&gt; returns data. The futures side (&lt;code&gt;/fapi/v1/klines&lt;/code&gt;, interval &lt;code&gt;8h&lt;/code&gt;) also answered — and the difference between two adjacent returned timestamps was exactly 28,800,000 milliseconds, which is 8 hours to the millisecond, no calendar trickery.&lt;/p&gt;

&lt;p&gt;There is a second, quieter lesson hiding in the same test. Spot supports a &lt;code&gt;1s&lt;/code&gt; interval — my probe returned rows. The futures API rejected the exact same parameter with error code &lt;code&gt;-1120&lt;/code&gt; ("Invalid interval"). Same company, same API family, two different interval enums. Never assume an interval that works on one endpoint of a venue exists on its sibling endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bybit: the ladder stops at 12 hours; 480 minutes is not on it
&lt;/h2&gt;

&lt;p&gt;Bybit's kline documentation lists the accepted values for the &lt;code&gt;interval&lt;/code&gt; parameter as 1, 3, 5, 15, 30, 60, 120, 240, 360, 720, D, W, M — minutes, with day/week/month letters at the end. Notice there is no 480 between 360 and 720. Eight hours is not a step on this ladder.&lt;/p&gt;

&lt;p&gt;The live endpoint behaves exactly as the enum implies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;interval=360&lt;/code&gt; on spot BTCUSDT: accepted, and adjacent timestamps are 21,600,000 ms apart (6 hours, as advertised);&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;interval=480&lt;/code&gt;: rejected with &lt;code&gt;retCode 10001&lt;/code&gt;, message "Invalid period!";&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;interval=90&lt;/code&gt; (another gap in the ladder): also rejected with the same 10001.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the documentation enum and the rejection behavior confirm each other from two independent surfaces: no 8-hour candle, and the API will tell you so explicitly rather than silently rounding to something else.&lt;/p&gt;

&lt;h2&gt;
  
  
  OKX: two candle grids, neither of them 8 hours
&lt;/h2&gt;

&lt;p&gt;OKX's documentation (fetched live today, the same page I cross-checked against a 2026-08-06 Internet Archive snapshot) splits candles into three enumerated groups. The intraday list is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[1s/1m/3m/5m/15m/30m/1H/2H/4H]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and above 4 hours it jumps straight to two daily-grid families:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;UTC+8 opening price k-line: [6H/12H/1D/2D/3D/1W/1M/3M]&lt;br&gt;
UTC+0 opening price k-line: [6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/1Wutc/1Mutc/3Mutc]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No 8H in any of the three lists. The live market endpoint matches the docs: &lt;code&gt;bar=6H&lt;/code&gt; returned candles 21,600,000 ms apart, while &lt;code&gt;bar=8H&lt;/code&gt; came back with error &lt;code&gt;51000&lt;/code&gt; ("Parameter bar error"), as did &lt;code&gt;bar=9H&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One extra wrinkle worth knowing before you try to synthesize 8-hour bars from OKX data: its default 6H/12H/1D candles open on a UTC+8 midnight grid, and only the suffixed &lt;code&gt;*utc&lt;/code&gt; variants open at UTC midnight. If you aggregate 1-hour candles into 8-hour buckets anchored at UTC 00:00 while mixing in OKX's default bars, your bars will be silently shifted by 8 hours. The funding settlement grid is UTC-anchored; OKX's default candle grid is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kraken: the enum is now printed in the docs — 8 hours is absent
&lt;/h2&gt;

&lt;p&gt;Kraken used to be a venue where the interval list could only be inferred from trial and error. That has changed: the machine-readable documentation dump at docs.kraken.com now carries the OHLC endpoint's parameter table explicitly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;interval | 1, 5, 15, 30, 60, 240, 1440, 10080, 21600 (minutes) | default 1&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No 480. No 360, either. And the API enforces it — querying XBTUSD with &lt;code&gt;interval=360&lt;/code&gt; or &lt;code&gt;interval=720&lt;/code&gt; returns &lt;code&gt;EGeneral:Invalid arguments&lt;/code&gt;, while 15, 240, and 1440 all return their usual ~720-row responses.&lt;/p&gt;

&lt;p&gt;Worth noting for tooling: this enum includes 1 and 5 minute intervals that many third-party tutorials omit, and its 10080/21600 entries mean "1 week / 2 weeks in minutes" — Kraken expresses weekly candles as minute counts where other venues use letters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coinbase: six granularities, and 28800 is not one of them
&lt;/h2&gt;

&lt;p&gt;Coinbase Exchange's candle endpoint takes a &lt;code&gt;granularity&lt;/code&gt; in seconds. Today's direct probes: 60, 300, 900, 3600, 21600 and 86400 all answered 200 with data; 7200 (2h), 14400 (4h) and — the point of this exercise — 28800 (8h) all answered HTTP 400 with &lt;code&gt;Unsupported granularity&lt;/code&gt;. Odd values like 3601 fail the same way, so the check is a strict allow-list, not a range.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for your charts
&lt;/h2&gt;

&lt;p&gt;The funding cycle is a real 8-hour cash-flow event; the 8-hour candle is a UI convention that most venues never implemented. Three practical consequences:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build the bar yourself, and say so.&lt;/strong&gt; Aggregating 1h or 4h candles into 00/08/16 UTC buckets is straightforward, but your derived bars are yours, not the exchange's — label them as derived, especially if you publish them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the calendar anchor before aggregating.&lt;/strong&gt; Binance spot candles open at UTC midnight by default, OKX defaults to UTC+8 (with &lt;code&gt;*utc&lt;/code&gt; variants available), and the mismatch is invisible until two charts disagree by one bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expect silent enum differences even within one venue.&lt;/strong&gt; Binance spot &lt;code&gt;1s&lt;/code&gt; works while futures reject it; Kraken encodes weeks as minutes; Coinbase answers in seconds. A cross-venue fetcher needs a per-venue interval map — there is no shared standard.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this makes one exchange better than another; it is just five independent design choices that your software has to know about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce it yourself
&lt;/h2&gt;

&lt;p&gt;Everything above is one request away: Binance &lt;code&gt;GET /api/v3/klines?interval=8h&lt;/code&gt; plus the kline-intervals table in its spot REST docs; Bybit &lt;code&gt;GET /v5/market/kline?interval=480&lt;/code&gt; plus its kline docs page; OKX &lt;code&gt;GET /api/v5/market/candles?bar=8H&lt;/code&gt; plus the bar enum in docs-v5; Kraken &lt;code&gt;GET /0/public/OHLC?interval=480&lt;/code&gt; plus the parameter table in its docs dump; Coinbase &lt;code&gt;GET /products/BTC-USD/candles?granularity=28800&lt;/code&gt;. All measurements were taken 2026-10-16 02:05–02:25 UTC; exchanges can and do change enums without notice, so verify against the official sources above before you rely on any of it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;AI disclosure:&lt;/strong&gt; This article was researched and drafted with AI assistance under a documented methodology (official documentation pages plus live key-free API probes, each cross-checked), then reviewed before publishing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not financial advice:&lt;/strong&gt; This article describes public API behavior and documentation enums. It is not investment, trading, or tax advice, and nothing here recommends any exchange, order type, or strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affiliate disclosure (#ad):&lt;/strong&gt; This publication may carry affiliate links in the future; any such link would be labeled #ad next to it. This article contains no affiliate, referral, or sponsored links.&lt;/p&gt;

</description>
      <category>api</category>
      <category>bitcoin</category>
      <category>crypto</category>
    </item>
    <item>
      <title>Same BTC Perp, Two Leverage Ceilings: 150x on One Venue, 100x on the Other — Both Straight From the API</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Tue, 13 Oct 2026 02:17:01 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/same-btc-perp-two-leverage-ceilings-150x-on-one-venue-100x-on-the-other-both-straight-from-the-14ad</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/same-btc-perp-two-leverage-ceilings-150x-on-one-venue-100x-on-the-other-both-straight-from-the-14ad</guid>
      <description>&lt;h1&gt;
  
  
  Same BTC Perp, Two Leverage Ceilings: 150x on One Venue, 100x on the Other — Both Straight From the API
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Disclosure: This article was written with AI assistance under human editorial review. Data below was pulled live from public exchange endpoints and may change at any time.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#ad / Affiliate disclosure: This article currently contains no affiliate links. If that ever changes, affiliate links will be marked clearly here and at each link.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not financial advice.&lt;/strong&gt; This is an observation about publicly published contract specifications, not a recommendation to use leverage, trade perpetual futures, or choose one venue over another. Leverage magnifies losses as fast as gains, and liquidation can erase your margin in a single candle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question, kept simple
&lt;/h2&gt;

&lt;p&gt;Bitcoin's most traded derivative in crypto-native circles is the BTC/USDT perpetual futures contract. Nearly every major venue lists one, and the underlying is identical: one Bitcoin, priced against Tether.&lt;/p&gt;

&lt;p&gt;But the rulebooks are not identical. A previous piece in this series compared funding-rate mechanics; this one asks a single, concrete question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is the maximum leverage the exchange itself advertises for its BTC/USDT perpetual — as published in its own public API, today?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two of the largest venues answer without requiring a login, a key, or a page full of JavaScript. We queried both, twice each, on 13 October 2026 between 02:07 and 02:11 UTC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Venue A: the field is called &lt;code&gt;maxLeverage&lt;/code&gt;, and it says 150
&lt;/h2&gt;

&lt;p&gt;Bybit publishes contract specifications through a authentication-free GET endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://api.bybit.com/v5/market/instruments-info?category=linear&amp;amp;symbol=BTCUSDT
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The relevant fields from our capture (identical in both requests, at 02:08 and 02:10 UTC):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;contractType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LinearPerpetual&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Trading&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;settleCoin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;USDT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;leverageFilter.maxLeverage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;150.00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;leverageFilter.minLeverage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lotSizeFilter.minOrderQty&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;0.001&lt;/code&gt; BTC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lotSizeFilter.minNotionalValue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;5&lt;/code&gt; USDT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;upperFundingRate&lt;/code&gt; / &lt;code&gt;lowerFundingRate&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;±0.00333&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fundingInterval&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;480&lt;/code&gt; minutes (8 hours)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the headline number for the same contract: &lt;strong&gt;150x&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Venue B: the field is called &lt;code&gt;lever&lt;/code&gt;, and it says 100
&lt;/h2&gt;

&lt;p&gt;OKX serves the same category of information through its own authentication-free endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://www.okx.com/api/v5/public/instruments?instType=SWAP&amp;amp;instId=BTC-USDT-SWAP
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our capture (identical in both requests):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;instType&lt;/code&gt; / &lt;code&gt;ctType&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SWAP&lt;/code&gt; / &lt;code&gt;linear&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;state&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;live&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lever&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;ctVal&lt;/code&gt; / &lt;code&gt;ctValCcy&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;0.01&lt;/code&gt; &lt;code&gt;BTC&lt;/code&gt; per contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;minSz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;0.01&lt;/code&gt; contracts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;uly&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BTC-USDT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;settleCcy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;USDT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A companion endpoint, &lt;code&gt;GET /api/v5/public/funding-rate?instId=BTC-USDT-SWAP&lt;/code&gt;, returned &lt;code&gt;maxFundingRate = 0.00375&lt;/code&gt; at the same moment — a useful cross-check that these are genuinely two independently maintained rulebooks sitting on top of the same underlying asset.&lt;/p&gt;

&lt;h2&gt;
  
  
  150 vs 100: what the gap actually means
&lt;/h2&gt;

&lt;p&gt;The advertised ceiling differs by half again: 150x versus 100x, the same contract family, the same day, the same minute.&lt;/p&gt;

&lt;p&gt;Three honest caveats before anyone treats this as a scoreboard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The ceiling is an upper bound on a selector, not a promise.&lt;/strong&gt; Both venues run tiered risk systems: as position size grows, the maximum leverage you can actually open drops in steps, and the maintenance-margin requirement that defines your distance to liquidation rises. The headline number typically applies only to the smallest position tier. (We have measured those staircases separately in an earlier piece; they are published on the very same public endpoints.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The units are not the same.&lt;/strong&gt; Bybit quotes order size directly in BTC (&lt;code&gt;minOrderQty 0.001&lt;/code&gt;, a &lt;code&gt;qtyStep&lt;/code&gt; of &lt;code&gt;0.001&lt;/code&gt;). OKX quotes in contracts: one BTC-USDT-SWAP contract (&lt;code&gt;ctVal&lt;/code&gt;) is 0.01 BTC, and the minimum order (&lt;code&gt;minSz&lt;/code&gt;) is 0.01 of a contract — one ten-thousandth of a coin. A naive script that reads "minimum size" from both APIs and compares the raw numbers is comparing coins to contracts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A ceiling is not a risk comparison.&lt;/strong&gt; We are not claiming either venue is safer, cheaper, or better. What we are claiming is narrow and checkable: the field exists, the field is public, and today the values read 150 and 100.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why this belongs in the "fees are not the only fine print" series
&lt;/h2&gt;

&lt;p&gt;Fee schedules get all the attention, yet the rulebook around a trade — maximum leverage, tick size, funding caps, order minimums, price collars — is a second layer of costs and constraints that differs from venue to venue far more than most traders expect. And crucially, most of it is now machine-readable: no login, no scraping of a JavaScript page, just a documented GET request whose answer is a number.&lt;/p&gt;

&lt;p&gt;If you are comparing venues, the leverage field is one line in a table you can build yourself in ten minutes. The two endpoints above are the starting point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify official sources
&lt;/h2&gt;

&lt;p&gt;Do not take our word for any number in this piece. At any time you can re-run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;https://api.bybit.com/v5/market/instruments-info?category=linear&amp;amp;symbol=BTCUSDT&lt;/code&gt; — the &lt;code&gt;maxLeverage&lt;/code&gt; and &lt;code&gt;minNotionalValue&lt;/code&gt; fields&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://api.bybit.com/v5/market/tickers?category=linear&amp;amp;symbol=BTCUSDT&lt;/code&gt; — the &lt;code&gt;fundingCap&lt;/code&gt; field (read &lt;code&gt;0.00333&lt;/code&gt; at 02:07 UTC)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://www.okx.com/api/v5/public/instruments?instType=SWAP&amp;amp;instId=BTC-USDT-SWAP&lt;/code&gt; — the &lt;code&gt;lever&lt;/code&gt;, &lt;code&gt;ctVal&lt;/code&gt; and &lt;code&gt;minSz&lt;/code&gt; fields&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://www.okx.com/api/v5/public/funding-rate?instId=BTC-USDT-SWAP&lt;/code&gt; — the &lt;code&gt;maxFundingRate&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;Field definitions: the Bybit market-instruments documentation at &lt;code&gt;bybit-exchange.github.io/docs/v5/market/instrument&lt;/code&gt; and the OKX API v5 documentation at &lt;code&gt;www.okx.com/docs-v5/en/&lt;/code&gt; — both fetched live at those addresses, HTTP 200, at 02:10 UTC on 2026-10-13&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All figures in this article are values returned by those endpoints at 02:07–02:11 UTC on 13 October 2026. Exchanges revise specifications without notice. Always confirm against the venue's own endpoints and pages before acting on any specification.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Once more, plainly: this post is informational only and is Not financial advice. Perpetual futures with high leverage can lose more than your initial margin. Trade only what you can afford to lose, and verify everything.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written with AI assistance; all numbers were machine-read from the cited official endpoints and double-checked in two independent fetches.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>bitcoin</category>
      <category>crypto</category>
    </item>
    <item>
      <title>Same BTC Perp, Four Self-Reported Fee Schedules: Taker Fees 3.75x Apart — and One Venue Pays Its Makers</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Fri, 09 Oct 2026 02:20:59 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/same-btc-perp-four-self-reported-fee-schedules-taker-fees-375x-apart-and-one-venue-pays-its-3e3n</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/same-btc-perp-four-self-reported-fee-schedules-taker-fees-375x-apart-and-one-venue-pays-its-3e3n</guid>
      <description>&lt;h1&gt;
  
  
  Same BTC Perp, Four Self-Reported Fee Schedules: Taker Fees 3.75x Apart — and One Venue Pays Its Makers
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Disclosure: This article was drafted with AI assistance from public exchange API data and reviewed before publishing. #ad — affiliate disclosure: this article contains no affiliate or referral links. Nothing below is investment or trading advice (not financial advice). All numbers are point-in-time snapshots from exchange-published endpoints; rules change without notice, so re-check the official sources named at the end.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The fee page you read is not the fee field the machine reads
&lt;/h2&gt;

&lt;p&gt;Most traders learn exchange fees from a marketing-friendly fee page: a table of tiers, a footnote about VIP levels, maybe a promotional banner. Those pages are rendered with JavaScript, behind logins, and restructured every few months — which is why so many "exchange fee comparison" posts on the internet quietly copy each other.&lt;/p&gt;

&lt;p&gt;But four exchanges publish something rarer: a &lt;strong&gt;base fee-rate field for perpetual contracts on a public, no-key API endpoint&lt;/strong&gt;. The exchange itself reports the number, in a machine-readable field, and you can query it yourself in one request. We did exactly that on 2026-10-09 (02:10–02:14 UTC, two independent rounds, values identical between rounds), for the BTC/USDT perpetual at each venue. Four venues, four answers — and one of them is a &lt;em&gt;negative&lt;/em&gt; maker fee.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four readings
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Venue&lt;/th&gt;
&lt;th&gt;BTC perp symbol&lt;/th&gt;
&lt;th&gt;Maker (base)&lt;/th&gt;
&lt;th&gt;Taker (base)&lt;/th&gt;
&lt;th&gt;Field names&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gate&lt;/td&gt;
&lt;td&gt;BTC_USDT&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;-0.01%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.075%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;maker_fee_rate&lt;/code&gt; / &lt;code&gt;taker_fee_rate&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KuCoin&lt;/td&gt;
&lt;td&gt;XBTUSDTM&lt;/td&gt;
&lt;td&gt;0.02%&lt;/td&gt;
&lt;td&gt;0.06%&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;makerFeeRate&lt;/code&gt; / &lt;code&gt;takerFeeRate&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEXC&lt;/td&gt;
&lt;td&gt;BTC_USDT&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;0.02%&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;makerFeeRate&lt;/code&gt; / &lt;code&gt;takerFeeRate&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bitget&lt;/td&gt;
&lt;td&gt;BTCUSDT&lt;/td&gt;
&lt;td&gt;0.02%&lt;/td&gt;
&lt;td&gt;0.06%&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;makerFeeRate&lt;/code&gt; / &lt;code&gt;takerFeeRate&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read the taker column first. On the same underlying asset, with the same USDT margin mode, a one-way taker print costs &lt;strong&gt;0.02% at MEXC, 0.06% at KuCoin and Bitget, and 0.075% at Gate&lt;/strong&gt; — a 3.75x spread between cheapest and dearest base reading. A round trip (open and close as a taker) is 4 basis points at one venue and 15 at another. That gap is the same order of magnitude as the entire maker/taker discount structure on many venues: before you optimize which side of the book you sit on, the venue choice already moved your cost by more.&lt;/p&gt;

&lt;h2&gt;
  
  
  A negative maker fee is not a typo
&lt;/h2&gt;

&lt;p&gt;Gate's &lt;code&gt;maker_fee_rate&lt;/code&gt; for BTC_USDT reads &lt;code&gt;-0.0001&lt;/code&gt;. Gate's own published SDK documentation defines the field with the sentence &lt;em&gt;"Maker fee rate, negative values indicate rebates"&lt;/em&gt; — so the minus sign is intentional: resting orders that get filled &lt;strong&gt;earn&lt;/strong&gt; 0.01% instead of paying it. Across the venue's full contract set (1,028 symbols in our pull), every single contract reports the same -0.0001 maker / 0.00075 taker pair, and both of our fetch rounds agree, so this is a systematic base schedule, not a stale field on one symbol.&lt;/p&gt;

&lt;p&gt;That gives us three distinct pricing philosophies on the maker side of the same product:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pay makers&lt;/strong&gt; (Gate, -0.01%): liquidity provision is subsidized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free for makers&lt;/strong&gt; (MEXC, exactly 0%): resting costs nothing but earns nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Charge makers&lt;/strong&gt; (KuCoin and Bitget, +0.02%): passive orders still pay, just less.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;"Free maker" and "negative maker" sound identical in a headline and are completely different line items in a PnL statement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Second underlying, same shape
&lt;/h2&gt;

&lt;p&gt;To confirm we were not reading a one-off symbol configuration, we repeated the pull for the ETH perpetual at all four venues: Gate ETH_USDT reports -0.0001 / 0.00075, KuCoin ETHUSDTM 0.0002 / 0.0006, MEXC ETH_USDT 0 / 0.0002, Bitget ETHUSDT 0.0002 / 0.0006. Same four-way pattern, same ordering on the taker side. The schedule differences are venue-wide policies, not per-coin quirks.&lt;/p&gt;

&lt;p&gt;(One honest footnote from our own archive: when this pool first cross-checked MEXC's ETH reading back on 2026-09-08, the taker field showed 0.01%; today it reads 0.02%. Fee fields are live data — that is precisely why they should be re-queried, never quoted from memory.)&lt;/p&gt;

&lt;h2&gt;
  
  
  What these fields do &lt;em&gt;not&lt;/em&gt; claim
&lt;/h2&gt;

&lt;p&gt;Fairness requires four limits, and we will not paper over them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base tier only.&lt;/strong&gt; Every venue layers VIP tiers, fee-card levels, and occasional campaigns on top. The numbers above are what the venues themselves label as the standing rate. MEXC even ships a &lt;code&gt;feeRateType&lt;/code&gt; flag that distinguishes &lt;code&gt;BASE&lt;/code&gt; from &lt;code&gt;TEMP&lt;/code&gt; (promotional) rates, and BTC/ETH both read &lt;code&gt;BASE&lt;/code&gt; — a rare, explicit admission of the base-versus-promo distinction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-reported, not audited.&lt;/strong&gt; These are the exchanges' own fields. We report what they publish, not what your invoice will say.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two venues do not play.&lt;/strong&gt; Kraken, Coinbase, OKX, Bybit and Binance either gate their perp fee fields behind authentication or never expose them publicly, so they cannot appear in this comparison at all. Absence here is an API-transparency fact, not a verdict.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a ranking.&lt;/strong&gt; The cheapest base taker rate on paper may come bundled with other trade-offs (spread, depth, funding rules, region availability). Two venues happened to print identical numbers (KuCoin and Bitget, 0.02/0.06) while differing elsewhere — for instance, KuCoin's own contract data shows &lt;code&gt;maxLeverage&lt;/code&gt; 125 consistent with &lt;code&gt;initialMargin&lt;/code&gt; 0.008 (1 ÷ 0.008 = 125), a self-consistency check of its published fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters for a fee-atlas mindset
&lt;/h2&gt;

&lt;p&gt;Every cost you can see on a fee page has usually already been reformatted for persuasion. The API fields are the exchange talking to machines: terse, unsigned where the marketing copy would never put a minus sign, and identical whether or not anyone is reading. When four venues say 0.02%, 0.06%, 0.06% and 0.075% about the &lt;em&gt;same&lt;/em&gt; BTC perpetual, the fee page stops being a detail and starts being the product.&lt;/p&gt;

&lt;p&gt;The lesson is mechanical, not editorial: before you compare venues, pull the numbers from the source that has no reason to round them up — and pull them again the day you act, because these fields move.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify official sources
&lt;/h2&gt;

&lt;p&gt;Do not trust this article. Reproduce it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gate: &lt;code&gt;GET https://api.gateio.ws/api/v4/futures/usdt/contracts&lt;/code&gt; (fields &lt;code&gt;maker_fee_rate&lt;/code&gt;, &lt;code&gt;taker_fee_rate&lt;/code&gt;; field semantics defined in Gate's published SDK docs, &lt;code&gt;docs/Contract.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;KuCoin: &lt;code&gt;GET https://api-futures.kucoin.com/api/v1/contracts/XBTUSDTM&lt;/code&gt; (fields &lt;code&gt;makerFeeRate&lt;/code&gt;, &lt;code&gt;takerFeeRate&lt;/code&gt;, &lt;code&gt;maxLeverage&lt;/code&gt;, &lt;code&gt;initialMargin&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;MEXC: &lt;code&gt;GET https://contract.mexc.com/api/v1/contract/detail?contract_code=BTC_USDT&lt;/code&gt; (fields &lt;code&gt;makerFeeRate&lt;/code&gt;, &lt;code&gt;takerFeeRate&lt;/code&gt;, &lt;code&gt;feeRateType&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Bitget: &lt;code&gt;GET https://api.bitget.com/api/v2/mix/market/contracts?productType=usdt-futures&lt;/code&gt; (fields &lt;code&gt;makerFeeRate&lt;/code&gt;, &lt;code&gt;takerFeeRate&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All four are unauthenticated, published by the exchanges themselves, and queried here at 02:10–02:14 UTC on 2026-10-09 (two rounds, identical results). If a field disagrees with the venue's own fee page, the fee page — or your account's tier — wins. &lt;strong&gt;Always verify official sources.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post is for education and transparency around public market-data fields only. It is not investment, trading, tax or legal advice (not financial advice). Leveraged perpetual contracts can lose more than you deposit. AI-assisted drafting; affiliate disclosure per the note at the top (#ad: none present in this article).&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Same Wrong Request Type, Four Different Answers: 404 Silence, a Named 405, and Two Venues That Simply Do Not Care</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Tue, 06 Oct 2026 02:20:31 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/same-wrong-request-type-four-different-answers-404-silence-a-named-405-and-two-venues-that-3fo9</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/same-wrong-request-type-four-different-answers-404-silence-a-named-405-and-two-venues-that-3fo9</guid>
      <description>&lt;h1&gt;
  
  
  Same Wrong Request Type, Four Different Answers: 404 Silence, a Named 405, and Two Venues That Simply Do Not Care
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;By FeeAtlas — an independent, neutral researcher of exchange fee and specification data. No affiliations with any venue named here.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure: this article was drafted with AI assistance from measurements taken directly against the exchanges' own public endpoints. Every number and response body quoted below was captured live and can be reproduced by you in under a minute.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ad/affiliate disclosure (#ad): this site participates in affiliate programs. There are no affiliate or sponsored links in this article — every link is a link to an official exchange document, placed for verification purposes only.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every trading API tutorial eventually hits the same wall: you sent a POST where the endpoint wanted a GET. On the open web, HTTP gives a clean, standardized answer — status 405, "Method Not Allowed." Case closed.&lt;/p&gt;

&lt;p&gt;Crypto exchanges, it turns out, hold four completely different opinions about what should happen. Some do not have the concept at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The experiment: one wrong button, pressed five times
&lt;/h2&gt;

&lt;p&gt;Five exchanges expose a clock endpoint that requires no account and no API key: a GET that returns the server's current time. For this test, each endpoint received the same request it did not ask for — an empty POST — twice, on two independent rounds, about one minute apart. Nothing else changed: same machine, same browser-like request header, no body, no credentials.&lt;/p&gt;

&lt;p&gt;Measured live on 2026-10-06 at 02:08–02:09 UTC (first detection round: earlier the same day at 00:44–00:55 UTC, identical outcomes).&lt;/p&gt;

&lt;h2&gt;
  
  
  Answer 1 — Binance: 404, and a completely empty body
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;POST https://api.binance.com/api/v3/time&lt;/code&gt; → &lt;strong&gt;HTTP 404, zero bytes returned&lt;/strong&gt;. Both rounds, exactly the same.&lt;/p&gt;

&lt;p&gt;The subtlety is worse than the 404 itself. GET a path that genuinely does not exist on Binance and you also get a 404 with an empty body. The response cannot tell you whether your &lt;em&gt;path&lt;/em&gt; is wrong or your &lt;em&gt;method&lt;/em&gt; is wrong — "typo in URL" and "wrong verb" collapse into one indistinguishable silence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Answer 2 — Bybit: 200, and it hands you the time anyway
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;POST https://api.bybit.com/v5/market/time&lt;/code&gt; → &lt;strong&gt;HTTP 200&lt;/strong&gt; with the same JSON you would get from a GET: &lt;code&gt;retCode: 0&lt;/code&gt;, &lt;code&gt;timeSecond&lt;/code&gt;, &lt;code&gt;timeNano&lt;/code&gt;. The public market endpoints simply do not check the verb. Both rounds identical.&lt;/p&gt;

&lt;p&gt;This is friendly the way an unlocked door is friendly. Your script has a bug, and the API rewarded it with success. The bug now lives silently in your codebase until it meets an endpoint that &lt;em&gt;does&lt;/em&gt; check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Answer 3 — OKX: 405 with a name you can grep for
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;POST https://www.okx.com/api/v5/public/time&lt;/code&gt; → &lt;strong&gt;HTTP 405&lt;/strong&gt; with body:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"50115"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"msg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Invalid request type"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Byte-identical across both rounds. OKX is the only venue of the four that (a) uses the semantically correct 405 status and (b) wraps it in its usual machine-readable envelope with a named error code. The code is documented: re-checking OKX's own docs-v5 error table today (5,247,990 bytes, fetched and searched live) confirms &lt;strong&gt;50115&lt;/strong&gt; is listed. If you build per-venue error-handling maps, this is the only venue that hands you a key to put in the map.&lt;/p&gt;

&lt;h2&gt;
  
  
  Answer 4 — Kraken: 200, and it isn't even pretending
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;POST https://api.kraken.com/0/public/Time&lt;/code&gt; → &lt;strong&gt;HTTP 200&lt;/strong&gt;, same JSON as GET: &lt;code&gt;unixtime&lt;/code&gt; and &lt;code&gt;rfc1123&lt;/code&gt;. Both rounds.&lt;/p&gt;

&lt;p&gt;Kraken's tolerance is at least consistent with its own published self-description: its documentation states that HTTP status codes are generally not used by its API to convey information (errors arrive inside the JSON &lt;code&gt;error&lt;/code&gt; array instead). A verb check would be out of character.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fifth answer that isn't about methods at all
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;POST https://api.exchange.coinbase.com/time&lt;/code&gt; → &lt;strong&gt;HTTP 401&lt;/strong&gt; &lt;code&gt;{"message":"Unauthorized."}&lt;/code&gt; — while GET on the very same path returns 200 with the time.&lt;/p&gt;

&lt;p&gt;Read that carefully: the response talks about &lt;em&gt;credentials&lt;/em&gt;, not method. Whatever Coinbase does internally, its rejection never mentions the verb, so it tells you nothing about how that venue handles method errors. I record it as a fifth shape — a rejection that answers a question you did not ask — rather than counting it in the four-way comparison. Re-probed a third time: same 401.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results table (measured 2026-10-06, two rounds each)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Venue&lt;/th&gt;
&lt;th&gt;GET /time&lt;/th&gt;
&lt;th&gt;POST /time&lt;/th&gt;
&lt;th&gt;Dialect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binance&lt;/td&gt;
&lt;td&gt;200, &lt;code&gt;{"serverTime":...}&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;404, 0 bytes&lt;/td&gt;
&lt;td&gt;Ambiguous silence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bybit&lt;/td&gt;
&lt;td&gt;200, full time JSON&lt;/td&gt;
&lt;td&gt;200, same JSON&lt;/td&gt;
&lt;td&gt;No verb check at all&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OKX&lt;/td&gt;
&lt;td&gt;200, &lt;code&gt;code:"0"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;405, code &lt;code&gt;50115&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Proper 405 + named code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kraken&lt;/td&gt;
&lt;td&gt;200, time JSON&lt;/td&gt;
&lt;td&gt;200, same JSON&lt;/td&gt;
&lt;td&gt;Status codes carry no meaning (self-documented)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coinbase&lt;/td&gt;
&lt;td&gt;200, iso+epoch&lt;/td&gt;
&lt;td&gt;401, "Unauthorized."&lt;/td&gt;
&lt;td&gt;Credential-flavored rejection, method unmentioned&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why this matters beyond a chuckle
&lt;/h2&gt;

&lt;p&gt;If you maintain one client that talks to several venues — a fee tracker, a monitoring bot, a backtest data pipe — "wrong HTTP method" is the layer where no shared handling exists. One venue gives a 404 indistinguishable from a bad URL. Two give a success you did not earn. One gives a documented code. One gives an error about something else entirely.&lt;/p&gt;

&lt;p&gt;Three practical habits fall out of the table:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Parse bodies, not just status codes.&lt;/strong&gt; A 200 here can mean "you used the wrong verb and nobody noticed." Trusting status codes across venues is exactly the mistake Kraken's own docs warn about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log raw responses during development.&lt;/strong&gt; Bybit's and Kraken's tolerance turns method typos into silent drift that surfaces only when a &lt;em&gt;different&lt;/em&gt; endpoint on the same venue does enforce the verb.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expect the empty-404 class.&lt;/strong&gt; Where a venue cannot distinguish "no such path" from "wrong verb" (Binance today), keep a local list of known-good method/path pairs instead of trusting error feedback.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this makes one venue's API "better." It is one more reminder, in the same family as tick sizes, price collars and rate-limit stopwatches we've measured before: each exchange writes its own rulebook, including for the parts the HTTP RFC was supposed to have settled decades ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce it yourself
&lt;/h2&gt;

&lt;p&gt;Open a terminal and run, for each venue, one GET and one POST with a browser-like user agent, and compare the status lines. Five URLs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://api.binance.com/api/v3/time&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://api.bybit.com/v5/market/time&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://www.okx.com/api/v5/public/time&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://api.kraken.com/0/public/Time&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://api.exchange.coinbase.com/time&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Verify official sources
&lt;/h2&gt;

&lt;p&gt;Numbers in this article are live observations, not quotes from press releases. Before relying on any endpoint behavior, check the venues' own current documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binance spot API docs (error definitions including the -1xxx parameter family): github.com/binance/binance-spot-api-docs&lt;/li&gt;
&lt;li&gt;Bybit V5 docs (market/time endpoint, rate limits): bybit-exchange.github.io/docs/v5/&lt;/li&gt;
&lt;li&gt;OKX V5 API docs (error code table including 50115): okx.com/docs-v5/en/&lt;/li&gt;
&lt;li&gt;Kraken API docs (response format and error convention): docs.kraken.com&lt;/li&gt;
&lt;li&gt;Coinbase Exchange API docs: docs.cdp.coinbase.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exchange behavior changes without notice. What you can verify in one terminal command is worth more than any summary, including this one.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is provided for information and technical reference only. It is **not financial advice&lt;/em&gt;&lt;em&gt;, not a recommendation of any exchange, and contains no trading guidance. Exchange API specifications and behaviors change at any time; always confirm against the official documentation of each venue.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>One Concept, Four Field Names, Three Numbers: The Funding-Rate Ceiling on the Same BTC Perp</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Sun, 04 Oct 2026 13:46:34 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/one-concept-four-field-names-three-numbers-the-funding-rate-ceiling-on-the-same-btc-perp-1293</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/one-concept-four-field-names-three-numbers-the-funding-rate-ceiling-on-the-same-btc-perp-1293</guid>
      <description>&lt;h1&gt;
  
  
  One Concept, Four Field Names, Three Numbers: The Funding-Rate Ceiling on the Same BTC Perp
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this article was researched and drafted with AI assistance, using public exchange APIs and documentation, and reviewed for accuracy against the sources cited below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not financial advice.&lt;/strong&gt; All numbers below are parameter values read from public exchange APIs at a specific moment in time. Exchanges can and do change these values without notice. Always verify against the official sources listed at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number everyone quotes doesn't exist
&lt;/h2&gt;

&lt;p&gt;Ask five traders what the maximum funding rate on a Bitcoin perpetual is and you'll get a confident shrug. There is no industry-wide ceiling. Funding-rate caps are per-exchange, per-contract parameters — and even for the single most liquid contract in crypto, the BTC/USDT perpetual, the four venues examined here publish &lt;strong&gt;three different answers&lt;/strong&gt; under &lt;strong&gt;four different field names&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I pulled all of them live, without an API key, from official public endpoints on &lt;strong&gt;October 4, 2026 at 13:37 UTC&lt;/strong&gt;. Here is what the same concept looks like at four exchanges.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four readings, side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Venue&lt;/th&gt;
&lt;th&gt;Field name(s)&lt;/th&gt;
&lt;th&gt;BTC perp cap&lt;/th&gt;
&lt;th&gt;ETH perp cap&lt;/th&gt;
&lt;th&gt;Settlement interval&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gate&lt;/td&gt;
&lt;td&gt;&lt;code&gt;funding_rate_limit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;±0.30%&lt;/td&gt;
&lt;td&gt;±0.30%&lt;/td&gt;
&lt;td&gt;28800 s (8 h)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KuCoin&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;fundingRateCap&lt;/code&gt; / &lt;code&gt;fundingRateFloor&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;±0.30%&lt;/td&gt;
&lt;td&gt;±0.375%&lt;/td&gt;
&lt;td&gt;28800000 ms (8 h)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bybit&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;upperFundingRate&lt;/code&gt; / &lt;code&gt;lowerFundingRate&lt;/code&gt; (specs) + &lt;code&gt;fundingCap&lt;/code&gt; (tickers)&lt;/td&gt;
&lt;td&gt;±0.333%&lt;/td&gt;
&lt;td&gt;±0.333%&lt;/td&gt;
&lt;td&gt;480 min (8 h)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OKX&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;maxFundingRate&lt;/code&gt; / &lt;code&gt;minFundingRate&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;±0.375%&lt;/td&gt;
&lt;td&gt;±0.75%&lt;/td&gt;
&lt;td&gt;8 h&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three numerical answers for the identical underlying exposure: 0.30%, 0.333%, and 0.375%. The spread between the lowest and highest cap is 25% — small in absolute terms, but it defines how far an overheated or capitulating market can push the cost of holding a position before the ceiling bites.&lt;/p&gt;

&lt;p&gt;Live funding values at the same moment, for context (these change every interval and are not the point of this article): Gate BTC perp −0.0017%/8h, Bybit +0.006547%/8h, OKX +0.0027116%/8h, KuCoin −0.0002%/8h.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four names for one concept
&lt;/h2&gt;

&lt;p&gt;If you are writing any tooling that compares funding terms across venues, the field names alone will humble you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gate&lt;/strong&gt; exposes &lt;code&gt;funding_rate_limit&lt;/code&gt; in its futures contracts model. The field's meaning is confirmed in Gate's own public API documentation changelog, which added the field "to indicate funding rate cap value."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bybit&lt;/strong&gt; publishes the same parameter twice under two names: &lt;code&gt;upperFundingRate&lt;/code&gt;/&lt;code&gt;lowerFundingRate&lt;/code&gt; in the instruments-specification endpoint, and &lt;code&gt;fundingCap&lt;/code&gt; in the tickers endpoint. On October 4 both endpoints returned 0.00333 for BTCUSDT — a useful internal cross-check you can reproduce yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OKX&lt;/strong&gt; calls it &lt;code&gt;maxFundingRate&lt;/code&gt;/&lt;code&gt;minFundingRate&lt;/code&gt; on its funding-rate endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KuCoin&lt;/strong&gt; uses &lt;code&gt;fundingRateCap&lt;/code&gt;/&lt;code&gt;fundingRateFloor&lt;/code&gt; — and note the data types differ too: KuCoin returns numbers, while Gate, Bybit, and OKX return strings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One concept, four spellings, two data types. There is no standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ETH side is where the philosophies split
&lt;/h2&gt;

&lt;p&gt;The BTC caps differ, but the more interesting divergence is on the second-most liquid contract. At the same moment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OKX&lt;/strong&gt; sets ETH's cap at ±0.75% — exactly double its own BTC cap of ±0.375%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KuCoin&lt;/strong&gt; sets ETH at ±0.375% — exactly double its own BTC cap of ±0.30%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gate&lt;/strong&gt; (±0.30%) and &lt;strong&gt;Bybit&lt;/strong&gt; (±0.333%) give ETH the same ceiling as BTC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So two venues deliberately price volatility headroom by asset, and two treat majors as one class. Neither approach is right or wrong — but it means "the cap on this exchange" is not a single number you can memorize per venue. It is a matrix: venue × contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the ceiling matters even if you never see it
&lt;/h2&gt;

&lt;p&gt;Most funding intervals settle near zero — a few basis points every eight hours. The caps are invisible in calm markets. They matter in the tails: when a crowded position unwinds, funding can pin at the cap for consecutive intervals, and that pinned value &lt;em&gt;is&lt;/em&gt; your holding cost, compounding every settlement period. A position on the venue with a 0.30% cap faces a structurally different worst-case carrying cost than the same position where the cap is 0.375% — and, as previous measurements in this series have shown, some exchanges settle smaller contracts hourly or every four hours, where the same cap applied more often multiplies the effect.&lt;/p&gt;

&lt;p&gt;Two caveats that deserve repetition: the caps are parameters exchanges can adjust at will, and the interval length is a separate field you must read before comparing any two caps. "0.333% every 8 hours" and "2.5% every 1 hour" are not comparable numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to verify every number in this article
&lt;/h2&gt;

&lt;p&gt;No login or API key is needed for any of it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gate: &lt;code&gt;GET https://api.gateio.ws/api/v4/futures/usdt/contracts/BTC_USDT&lt;/code&gt; (and &lt;code&gt;ETH_USDT&lt;/code&gt;) — read &lt;code&gt;funding_rate_limit&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Bybit: &lt;code&gt;GET https://api.bybit.com/v5/market/instruments-info?category=linear&amp;amp;symbol=BTCUSDT&lt;/code&gt; — read &lt;code&gt;upperFundingRate&lt;/code&gt;; cross-check &lt;code&gt;GET https://api.bybit.com/v5/market/tickers?category=linear&amp;amp;symbol=BTCUSDT&lt;/code&gt; — read &lt;code&gt;fundingCap&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;OKX: &lt;code&gt;GET https://www.okx.com/api/v5/public/funding-rate?instId=BTC-USDT-SWAP&lt;/code&gt; (and &lt;code&gt;ETH-USDT-SWAP&lt;/code&gt;) — read &lt;code&gt;maxFundingRate&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;KuCoin: &lt;code&gt;GET https://api-futures.kucoin.com/api/v1/contracts/XBTUSDTM&lt;/code&gt; (and &lt;code&gt;ETHUSDTM&lt;/code&gt;) — read &lt;code&gt;fundingRateCap&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Snapshot taken 2026-10-04 13:37 UTC. If you re-run these calls next week and the numbers moved, that is the exchange exercising the very parameter this article describes — not an error in the measurements.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Not financial advice.&lt;/strong&gt; This article describes publicly published contract parameters. It makes no recommendation to trade, hold, or move positions on any venue named. Perpetual futures involve substantial risk of loss. Funding rates, caps, and settlement intervals change without notice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#ad — affiliate disclosure:&lt;/strong&gt; no sponsored or tracked links appear in this article; no exchange named here has paid for inclusion. If this publication adds such links in the future, they will be marked the same way, before the link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify official sources:&lt;/strong&gt; always confirm current terms directly on each exchange's official API documentation and fee pages before relying on any number — exchanges revise these parameters at their discretion.&lt;/p&gt;

</description>
      <category>api</category>
      <category>bitcoin</category>
      <category>crypto</category>
    </item>
    <item>
      <title>Your Dollar Is Not a Dollar: USDT Trades at a Measurable Discount Right Now</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Fri, 25 Sep 2026 02:13:55 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/your-dollar-is-not-a-dollar-usdt-trades-at-a-measurable-discount-right-now-384g</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/your-dollar-is-not-a-dollar-usdt-trades-at-a-measurable-discount-right-now-384g</guid>
      <description>&lt;h1&gt;
  
  
  Your "Dollar" Is Not a Dollar: USDT Trades at a Measurable Discount Right Now
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Disclosure: This article was researched and drafted with AI assistance, then checked against primary sources listed at the end. Nothing here is investment advice — this is an observation of publicly available numbers. This publication may carry affiliate links in the future; at the time of writing, this article contains no affiliate or sponsored links (#ad disclosure: none present).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you hold stablecoins, you probably treat one USDT as one dollar. The market disagrees — not dramatically, not dangerously, but consistently. Right now, at the moment of writing, three independent price sources all say the same thing: USDT trades a few basis points under the face value of a US dollar, and the exact discount depends on where you ask.&lt;/p&gt;

&lt;p&gt;This is not a prediction about depegs, solvency, or risk. It is simply a measurement, taken live from public endpoints, of a friction that sits below most people's radar — and next to your fee schedule, it is a real cost line.&lt;/p&gt;

&lt;h2&gt;
  
  
  The measurement: three sources, one minute apart
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;2026-09-25 at 02:07–02:08 UTC&lt;/strong&gt;, we queried three independent public sources within one minute of each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Kraken spot market (USDT/USD).&lt;/strong&gt; The official public ticker endpoint returned a bid of &lt;strong&gt;0.99967&lt;/strong&gt; and an ask of &lt;strong&gt;0.99968&lt;/strong&gt;. The midpoint is &lt;strong&gt;0.999675&lt;/strong&gt; — about &lt;strong&gt;3.3 basis points&lt;/strong&gt; below par. The 24-hour range printed on the same response was tight: low 0.99964, high 0.99971.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Coinbase Exchange (USDT-USD).&lt;/strong&gt; The official public ticker endpoint returned bid &lt;strong&gt;0.99971&lt;/strong&gt; / ask &lt;strong&gt;0.99972&lt;/strong&gt;, a midpoint of &lt;strong&gt;0.999715&lt;/strong&gt; — about &lt;strong&gt;2.9 basis points&lt;/strong&gt; below par. The stats endpoint for the same product showed a 24-hour open of 0.99983 and a low of &lt;strong&gt;0.99875&lt;/strong&gt;: at its worst moment of the day, USDT sold at a &lt;strong&gt;12.5 basis point&lt;/strong&gt; discount on this venue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. CoinGecko (aggregated reference price).&lt;/strong&gt; The simple-price endpoint returned Tether at &lt;strong&gt;$0.999725&lt;/strong&gt; (about 2.75 bps under), alongside &lt;strong&gt;USDC at $0.999809&lt;/strong&gt; and &lt;strong&gt;DAI at $0.999957&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We repeated the two exchange queries twice each, two seconds apart; the numbers came back identical, so this is not a one-frame fluke of a single request.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers actually say
&lt;/h2&gt;

&lt;p&gt;Three independent sources — two exchange order books and one aggregator — agree on direction and magnitude: &lt;strong&gt;USDT currently changes hands for roughly 0.9997 US dollars&lt;/strong&gt;. The order books are extremely tight (Kraken's bid-ask spread is one ten-thousandth of a dollar wide), so this is not a liquidity artifact. It is simply where the "dollar" that is USDT clears.&lt;/p&gt;

&lt;p&gt;Two subtleties worth naming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The discount is small but persistent.&lt;/strong&gt; At the moment of writing it is ~3 bps; earlier the same day, Coinbase's own stats show it briefly reaching ~12.5 bps. Stablecoin discounts breathe with market stress and tend to widen exactly when holders want out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The discount is not uniform.&lt;/strong&gt; USDC's aggregated price ($0.999809) and DAI's ($0.999957) show smaller haircuts than USDT's ($0.999725) at the same minute. Different "dollars", slightly different discounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this belongs next to the fee table
&lt;/h2&gt;

&lt;p&gt;Most people compare exchanges by maker/taker fees. But if your balance sheet is denominated in USDT and your life is denominated in USD, then every round trip — sell your USDT to withdraw to a bank, for example — starts from a number below 1.0000. Three basis points sounds trivial until you notice it is the &lt;em&gt;same order of magnitude&lt;/em&gt; as the maker fees on the deepest trading pairs. On the same day, the best-published maker tiers at major venues run in the tens of basis points, so the stablecoin discount is a meaningful fraction of a full trading cost stack — and unlike a fee schedule, it is invisible because no invoice ever shows it.&lt;/p&gt;

&lt;p&gt;For context (measured in our earlier work, same kind of public-endpoint snapshots): a USDC/USDT cross also refuses to trade at exactly par, printing about 2–3 bps the other way. In other words, &lt;em&gt;none&lt;/em&gt; of the "dollars" in crypto are interchangeable at exactly 1:1 with each other, or with the real one. They are all just very well-behaved, very slightly discounted claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we deliberately do not claim
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No depeg prediction.&lt;/strong&gt; A 2–5 bps discount is normal, observable behavior; nothing here says anything about future stability of any token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No ranking of venues.&lt;/strong&gt; Kraken printing 3.3 bps and Coinbase 2.9 bps is within the noise of different order books at different seconds; it is not evidence that one venue is "cheaper".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No snapshot longevity.&lt;/strong&gt; These numbers were true at 02:08 UTC on 2026-09-25. Stablecoin premia move constantly. Re-measure before acting on any of this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This is not financial advice.&lt;/strong&gt; It is a reading of public data, offered so that the number 1.0000 stops being an assumption.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;Every number above came from an unauthenticated public API — you can reproduce all of it in a terminal or a browser in under a minute: Kraken's &lt;code&gt;Ticker&lt;/code&gt; endpoint for the pair &lt;code&gt;USDTZUSD&lt;/code&gt;, Coinbase Exchange's &lt;code&gt;/products/USDT-USD/ticker&lt;/code&gt; and &lt;code&gt;/products/USDT-USD/stats&lt;/code&gt;, and CoinGecko's &lt;code&gt;simple/price&lt;/code&gt; endpoint for &lt;code&gt;tether,usd-coin,dai&lt;/code&gt;. Take the midpoint of each bid/ask, subtract from 1.0000, multiply by 10,000, and you have the discount in basis points. If your numbers differ from ours, that is the point: the discount is a live number, not a constant.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Verify official sources.&lt;/strong&gt; All figures in this article are quoted from the primary sources themselves, timestamped 2026-09-25 02:07–02:08 UTC, and readers are encouraged to re-fetch them directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kraken public ticker API: &lt;a href="https://api.kraken.com/0/public/Ticker?pair=USDTZUSD" rel="noopener noreferrer"&gt;https://api.kraken.com/0/public/Ticker?pair=USDTZUSD&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Coinbase Exchange public ticker: &lt;a href="https://api.exchange.coinbase.com/products/USDT-USD/ticker" rel="noopener noreferrer"&gt;https://api.exchange.coinbase.com/products/USDT-USD/ticker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Coinbase Exchange public stats: &lt;a href="https://api.exchange.coinbase.com/products/USDT-USD/stats" rel="noopener noreferrer"&gt;https://api.exchange.coinbase.com/products/USDT-USD/stats&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CoinGecko public price endpoint: &lt;a href="https://api.coingecko.com/api/v3/simple/price?ids=tether,usd-coin,dai&amp;amp;vs_currencies=usd" rel="noopener noreferrer"&gt;https://api.coingecko.com/api/v3/simple/price?ids=tether,usd-coin,dai&amp;amp;vs_currencies=usd&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;AI-assisted content. Market data snapshots are momentary and change constantly. Nothing in this article is investment advice, a recommendation, or a solicitation to trade any asset. No affiliate links are present in this article.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>stablecoin</category>
      <category>trading</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The Same Bitcoin Answers to Three Tickers — and One Exchange Uses Two of Them Under Its Own Roof</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Tue, 22 Sep 2026 02:26:18 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/the-same-bitcoin-answers-to-three-tickers-and-one-exchange-uses-two-of-them-under-its-own-roof-3pn6</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/the-same-bitcoin-answers-to-three-tickers-and-one-exchange-uses-two-of-them-under-its-own-roof-3pn6</guid>
      <description>&lt;p&gt;&lt;em&gt;By FeeAtlas — neutral exchange-plumbing research. No sponsored placements in this article.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ask three exchanges for the price of Bitcoin and you will get three numbers within a few basis points of each other. Ask their APIs for Bitcoin itself, and you will get three different words back — and one of those exchanges uses two different words depending on which product you touch. This is not a trivia question. It is the first wall every cross-exchange script hits, and it is documented in none of the fee tables.&lt;/p&gt;

&lt;p&gt;On 2026-09-22 we queried the public, no-key endpoints of Kraken, KuCoin and Coinbase Exchange in the same session. Everything below is a literal field value or a literal error string from those endpoints, so you can repeat every check yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kraken: the asset is XXBT, the label is XBT
&lt;/h2&gt;

&lt;p&gt;Kraken's asset registry returns the canonical code &lt;code&gt;XXBT&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /0/public/Assets?asset=XXBT&lt;/code&gt; returns a record whose &lt;code&gt;altname&lt;/code&gt; field is &lt;code&gt;XBT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /0/public/AssetPairs?pair=XXBTZUSD&lt;/code&gt; returns a pair whose &lt;code&gt;base&lt;/code&gt; is &lt;code&gt;XXBT&lt;/code&gt;, whose &lt;code&gt;altname&lt;/code&gt; is &lt;code&gt;XBTUSD&lt;/code&gt;, and whose WebSocket name (&lt;code&gt;wsname&lt;/code&gt;) is &lt;code&gt;XBT/USD&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So under one roof there are already two spellings: &lt;code&gt;XXBT&lt;/code&gt; in the REST asset/pair identifiers, &lt;code&gt;XBT&lt;/code&gt; in display names and the WebSocket stream names. A REST script that hard-codes &lt;code&gt;BTC&lt;/code&gt; gets nothing; a WebSocket script that hard-codes &lt;code&gt;XXBT/USD&lt;/code&gt; gets rejected. Both spellings are "correct" — in different halves of the same API.&lt;/p&gt;

&lt;h2&gt;
  
  
  KuCoin: spot says BTC, futures say XBT — and each half rejects the other's spelling
&lt;/h2&gt;

&lt;p&gt;KuCoin is the most instructive case, because the split runs through the middle of one company's product line.&lt;/p&gt;

&lt;p&gt;Spot side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /api/v1/currencies/BTC&lt;/code&gt; returns a normal record (&lt;code&gt;precision&lt;/code&gt; 8, withdrawal fields present).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/v1/currencies/XBT&lt;/code&gt; returns error code &lt;code&gt;900003&lt;/code&gt; with the literal message: &lt;code&gt;"XBT currency does not exist."&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Derivatives side (a different host, &lt;code&gt;api-futures.kucoin.com&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /api/v1/contracts/XBTUSDTM&lt;/code&gt; returns the perpetual with &lt;code&gt;symbol: "XBTUSDTM"&lt;/code&gt; and &lt;code&gt;baseCurrency: "XBT"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/v1/contracts/BTCUSDTM&lt;/code&gt; returns error code &lt;code&gt;404000&lt;/code&gt; with the literal message: &lt;code&gt;"The contract information you requested does not exist."&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read those two negative responses together with the two positive ones and the picture is unambiguous: the same company calls spot Bitcoin &lt;code&gt;BTC&lt;/code&gt; and futures Bitcoin &lt;code&gt;XBT&lt;/code&gt;, and each service will tell you, in as many words, that the other service's spelling does not exist. There is no alias translation layer between them. A portfolio tool that resolves "BTC" once and reuses the result across spot and perpetuals must special-case this venue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coinbase Exchange: only BTC-USD has ever lived here
&lt;/h2&gt;

&lt;p&gt;Coinbase Exchange keeps it simple, in its own way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /products/BTC-USD&lt;/code&gt; returns an online product with &lt;code&gt;base_currency: "BTC"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /products/XBT-USD&lt;/code&gt; returns HTTP 404 with the body &lt;code&gt;{"message":"NotFound"}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No XBT spelling exists on this venue at all. The full product list (public, no key) contains no XBT-prefixed pairs — the ticker namespace is consistently &lt;code&gt;BTC&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters beyond trivia
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Cross-venue mapping is not optional.&lt;/strong&gt; Three independent venues, three regimes: &lt;code&gt;XXBT&lt;/code&gt;/&lt;code&gt;XBT&lt;/code&gt; (Kraken, REST vs WebSocket), &lt;code&gt;BTC&lt;/code&gt; on spot but &lt;code&gt;XBT&lt;/code&gt; on perpetuals (KuCoin, spot vs derivatives), and plain &lt;code&gt;BTC&lt;/code&gt; everywhere (Coinbase). A symbol-resolution table is table stakes before any comparison logic — fee, spread, or depth — can run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The split can happen inside one roof.&lt;/strong&gt; The KuCoin case is the genuinely surprising finding: you cannot even cache "what does this venue call Bitcoin" at the venue level. The correct answer is per-product-line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Error handling tells you the truth.&lt;/strong&gt; Both KuCoin negatives come back as explicit, greppable error strings ("XBT currency does not exist." / "The contract information you requested does not exist."). If you are building the mapping table from scratch, probing candidate spellings and reading the error messages is a legitimate discovery method — it is exactly what we did.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. This is not a one-token problem.&lt;/strong&gt; If Bitcoin — the most liquid, most-listed asset in the industry — cannot settle on one symbol, assume nothing about the long tail. Stablecoins, wrapped tokens and tokenized equities inherit the same naming autonomy, often worse.&lt;/p&gt;

&lt;p&gt;What we deliberately did &lt;strong&gt;not&lt;/strong&gt; do: explain &lt;em&gt;why&lt;/em&gt; the three-letter code XBT exists at all. That story gets retold often, but we could not verify it against two reachable primary sources today, and FeeAtlas does not publish what it cannot cross-check. The observable facts — which endpoints accept which spelling, and what the rejection messages say — stand on their own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method and reproducibility
&lt;/h2&gt;

&lt;p&gt;All values above were captured on 2026-09-22 (around 02:2x UTC) from the public, authentication-free endpoints of the three venues, with repeat fetches confirming identical responses. Ticker conventions can change without notice; re-run the calls before building anything on them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-assisted research and drafting; human-owned channel reviewed the output.&lt;/li&gt;
&lt;li&gt;This article contains &lt;strong&gt;no affiliate links&lt;/strong&gt; — there are currently no sponsored placements or referral arrangements attached to it. Any future sponsored content will be labeled with #ad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not financial advice.&lt;/strong&gt; This is a technical observation about public API interfaces, nothing more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Verify with official sources
&lt;/h2&gt;

&lt;p&gt;Do not take our word for any of it — every claim is one unauthenticated request away:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kraken public API: &lt;code&gt;api.kraken.com/0/public/Assets&lt;/code&gt; and &lt;code&gt;/0/public/AssetPairs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;KuCoin spot API: &lt;code&gt;api.kucoin.com/api/v1/currencies/{currency}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;KuCoin futures API: &lt;code&gt;api-futures.kucoin.com/api/v1/contracts/{symbol}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Coinbase Exchange API: &lt;code&gt;api.exchange.coinbase.com/products/{product-id}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The index is public; the recipes are yours to check.&lt;/p&gt;

</description>
      <category>api</category>
      <category>crypto</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>One Page, Two Pricing Philosophies: 0.25% Flat on Perps, Tiered 0.40%/0.80% on Spot</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Fri, 18 Sep 2026 02:22:48 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/one-page-two-pricing-philosophies-025-flat-on-perps-tiered-040080-on-spot-26d7</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/one-page-two-pricing-philosophies-025-flat-on-perps-tiered-040080-on-spot-26d7</guid>
      <description>&lt;h1&gt;
  
  
  One Page, Two Pricing Philosophies: Kraken Charges 0.25% Flat on Perps but Tiered 0.40%/0.80% on Spot
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;A neutral fee-research note — no sponsored content, no position held.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI disclosure:&lt;/strong&gt; This article was researched and drafted with AI assistance under human editorial review. All quoted figures were fetched directly from the sources cited and re-checked on the publication date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure (#ad / affiliate):&lt;/strong&gt; This article currently contains no affiliate or sponsored links. If that ever changes, a visible #ad / affiliate disclosure will be placed before any such link.&lt;/p&gt;




&lt;p&gt;Most people read an exchange fee page looking for one number. Kraken's fee page is interesting precisely because it refuses to give you one: on the same URL, at the same time, the same company publishes &lt;strong&gt;two completely different pricing philosophies&lt;/strong&gt; — a flat fee on one product and a two-axis tiered ladder on another. Both are quoted verbatim below, and you can verify every figure yourself in about two minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flat side: "simple" Perps cost 0.25% per side
&lt;/h2&gt;

&lt;p&gt;Kraken's fee schedule page (kraken.com/features/fee-schedule, fetched 2026-09-18) describes its simple perpetuals product in two sentences:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A 0.25% fee is applied to the notional value of the trade to open the position. A 0.25% fee is applied to the closed notional value of the trade to close the position."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice what that structure means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Round trip = 0.50% of notional&lt;/strong&gt;, paid whether you opened as a maker or a taker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No maker discount.&lt;/strong&gt; Resting liquidity earns nothing extra here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No volume discount.&lt;/strong&gt; The rate does not step down as you trade more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a cross-check on stability, the same sentences appear word-for-word in an Internet Archive snapshot of the same page from 2026-08-20 (snapshot id 20260820055608) — so this is not a one-day promotion, it is a standing product design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tiered side: the order-book ladder
&lt;/h2&gt;

&lt;p&gt;Scroll a little further on the same page and you are in a different world. Kraken's Pro / order-book pricing is a classic two-dimensional ladder: maker vs. taker rates, banded by 30-day trading volume (and, in the newer presentation, platform assets). The page currently prints &lt;strong&gt;two tier tables side by side&lt;/strong&gt; — a legacy table and the "Cross-platform fee tiers" table that the page announces was "recently introduced". Both begin like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Spot 30-day volume&lt;/th&gt;
&lt;th&gt;Legacy Maker / Taker&lt;/th&gt;
&lt;th&gt;Cross-platform Maker / Taker&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tier 1&lt;/td&gt;
&lt;td&gt;$0+&lt;/td&gt;
&lt;td&gt;0.40% / 0.80%&lt;/td&gt;
&lt;td&gt;0.38% / 0.80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tier 2&lt;/td&gt;
&lt;td&gt;$2.5K+&lt;/td&gt;
&lt;td&gt;0.30% / 0.60%&lt;/td&gt;
&lt;td&gt;0.28% / 0.60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tier 3&lt;/td&gt;
&lt;td&gt;$10K+&lt;/td&gt;
&lt;td&gt;0.22% / 0.38%&lt;/td&gt;
&lt;td&gt;0.20% / 0.38%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(Both tables, including the small maker-rate difference at Tier 1-2 between them, are visible in the live page and in the 2026-08-20 archive snapshot. The page itself does not state which of its two tables governs which checkout flow, so this article simply reports what is printed and does not pick a winner.)&lt;/p&gt;

&lt;p&gt;The ladder keeps descending: by the higher tiers the maker rate reaches 0.0x% territory while taker stays materially above it — maker/taker is treated as two independent levers, and volume is rewarded on both.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the same page admits about "simple"
&lt;/h2&gt;

&lt;p&gt;Put the two halves next to each other and the marketing framing of a flat 0.25% "simple perps" fee starts to look like a trade-off rather than a discount:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A high-volume maker on the order-book side pays &lt;strong&gt;0.22% or less&lt;/strong&gt; from just $10K of monthly volume (Tier 3) — already cheaper than the flat 0.25%, and the ladder keeps going down while the flat fee never moves.&lt;/li&gt;
&lt;li&gt;At Tier 1, the flat 0.25% is actually &lt;strong&gt;cheaper than the 0.80% taker rate&lt;/strong&gt; on spot's first tier. For an occasional taker, the "simple" product is the cheaper door; for an occasional maker it is roughly comparable; for anyone who grows, it becomes the more expensive one by design.&lt;/li&gt;
&lt;li&gt;The real cost of the simple product is not the headline number — it is the &lt;strong&gt;forfeited option&lt;/strong&gt; to earn maker pricing and to graduate down a ladder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this makes one product "better." A flat per-side fee is predictable and easy to reason about, which has genuine value for someone starting out. The point of reading both halves of the page is simply to know which knob you gave up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest footnote
&lt;/h2&gt;

&lt;p&gt;For completeness: Kraken's public asset-pairs API has historically exposed a separate fee-ladder field whose numbers did not match either table on the fee page, and this observer has previously seen the page and the API disagree. This article deliberately relies &lt;strong&gt;only on the fee page text&lt;/strong&gt; (live fetch plus an archive snapshot from a different date), and flags the API/page mismatch as an unresolved transparency wrinkle rather than using any of those API numbers as a comparison. Treat every rate on any exchange as "as published, subject to change" — pages get revised without notice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not financial advice
&lt;/h2&gt;

&lt;p&gt;This article is fee-schedule journalism for developers and cost-aware users. It is &lt;strong&gt;not financial advice, not investment advice, and not a recommendation&lt;/strong&gt; to trade perpetuals, use any named exchange, or adopt any order strategy. Perpetual contracts involve substantial risk, including loss of more than your deposit. Fee tiers, product availability ("currently available in certain geos"), and rules change at the exchange's discretion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify with official sources
&lt;/h2&gt;

&lt;p&gt;Do not take this article's word for anything. Before acting on any number here, check the primary sources directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kraken fee schedule page: &lt;code&gt;https://www.kraken.com/features/fee-schedule&lt;/code&gt; (the perps paragraph and both tier tables)&lt;/li&gt;
&lt;li&gt;Internet Archive snapshot 20260820055608 of the same page (independent earlier time point)&lt;/li&gt;
&lt;li&gt;Kraken's own support articles, linked from the fee page itself, for tier-eligibility details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data snapshot: live page fetched 2026-09-18; all quotations re-checked on that date.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>beginners</category>
      <category>trading</category>
      <category>data</category>
    </item>
    <item>
      <title>Four Exchanges, Three Timestamp Units: Seconds, Milliseconds, Nanoseconds — and One Gives You Two at Once</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Tue, 15 Sep 2026 02:17:53 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/four-exchanges-three-timestamp-units-seconds-milliseconds-nanoseconds-and-one-gives-you-two-14jh</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/four-exchanges-three-timestamp-units-seconds-milliseconds-nanoseconds-and-one-gives-you-two-14jh</guid>
      <description>&lt;h1&gt;
  
  
  Four Exchanges, Three Timestamp Units: Seconds, Milliseconds, Nanoseconds — and One Gives You Two at Once
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this article was researched and drafted with AI assistance, then checked against primary sources listed at the end. All figures below were pulled live from official public API endpoints on 2026-09-15 between 02:09:16 and 02:09:22 UTC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you have ever written code that talks to more than one crypto exchange, you have probably hit this bug: your signed request is rejected with something like "signature does not match" or "timestamp outside recvWindow", even though your key is correct, your signature algorithm is correct, and your clock is perfectly synchronized. Nine times out of ten, the problem is not your signature. It is your &lt;strong&gt;unit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There is no industry standard for what "a timestamp" means in an exchange API. Four of the largest venues each made a different choice — and one of them gives you three precisions in the same response.&lt;/p&gt;

&lt;h2&gt;
  
  
  The live measurement
&lt;/h2&gt;

&lt;p&gt;On 15 September 2026, within a single six-second window, we called the public time endpoint of four exchanges. No API key required — you can reproduce every number yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Binance&lt;/strong&gt; — &lt;code&gt;GET /api/v3/time&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"serverTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1789438156343&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thirteen digits. That is &lt;strong&gt;milliseconds&lt;/strong&gt; since the Unix epoch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kraken&lt;/strong&gt; — &lt;code&gt;GET /0/public/Time&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"unixtime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1789438157&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"rfc1123"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tue, 15 Sep 26 02:09:17 +0000"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ten digits — &lt;strong&gt;seconds&lt;/strong&gt; — plus a human-readable RFC 1123 string as a bonus field. Kraken's own official documentation page for this endpoint uses the same 10-digit format in its example response (&lt;code&gt;"unixtime": 1688669448&lt;/code&gt;), so the seconds convention is confirmed at the documentation layer, not just inferred from digit counts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bybit&lt;/strong&gt; — &lt;code&gt;GET /v5/market/time&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"retCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"retMsg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"timeSecond"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1789438157"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"timeNano"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1789438157667206123"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1789438157667&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This one is a small masterpiece of confusion: the &lt;em&gt;same response object&lt;/em&gt; carries &lt;strong&gt;seconds&lt;/strong&gt; (&lt;code&gt;timeSecond&lt;/code&gt;), &lt;strong&gt;nanoseconds&lt;/strong&gt; (&lt;code&gt;timeNano&lt;/code&gt;, 19 digits), and — in the outer envelope field &lt;code&gt;time&lt;/code&gt; — &lt;strong&gt;milliseconds&lt;/strong&gt;. Three precisions, one call. Bybit's official docs define each field in plain text: "timeSecond string Bybit server timestamp (sec)" and "timeNano string Bybit server timestamp (nano)".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OKX&lt;/strong&gt; — &lt;code&gt;GET /api/v5/public/time&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"ts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1789438159520"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"msg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thirteen digits again, so &lt;strong&gt;milliseconds&lt;/strong&gt; — but note it arrives as a &lt;em&gt;string&lt;/em&gt;, not a number. OKX is also the most explicit venue of the four: its REST documentation labels timestamp fields individually, thousands of times over, with lines like "Unix timestamp format in milliseconds, e.g. 1597026383085".&lt;/p&gt;

&lt;p&gt;Cross-check: converting all four readings to a common unit, the four servers agreed to within about one second — the spacing of our own requests. The exchange clocks are in sync. &lt;strong&gt;The only disagreement is about units.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this bites you twice
&lt;/h2&gt;

&lt;p&gt;First bite: &lt;strong&gt;parsing the server time.&lt;/strong&gt; If you naively do &lt;code&gt;datetime.fromtimestamp(serverTime)&lt;/code&gt; on Binance's 13-digit value, you get a date roughly 57,000 years in the future. Divide by 1,000? Fine for Binance and OKX, wrong for Kraken, wrong for Bybit's &lt;code&gt;timeNano&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Second bite, and the expensive one: &lt;strong&gt;signing requests.&lt;/strong&gt; The timestamp you sign must match what the server expects, in the unit the server expects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binance's official REST documentation states that SIGNED requests require a &lt;code&gt;timestamp&lt;/code&gt; parameter "in milliseconds or microseconds" — yes, either one, but not seconds — with a default &lt;code&gt;recvWindow&lt;/code&gt; of 5,000 ms.&lt;/li&gt;
&lt;li&gt;OKX requires the &lt;code&gt;OK-ACCESS-TIMESTAMP&lt;/code&gt; header and rejects requests whose timestamp differs from server time by more than 30 seconds.&lt;/li&gt;
&lt;li&gt;Bybit validates your request timestamp against its own clock with a receive-window header in milliseconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The classic failure mode: you fetch Kraken's time (seconds), reuse the same helper for a Bybit signature (milliseconds), and your &lt;code&gt;timestamp&lt;/code&gt; is a factor of 1,000 too small — instantly outside any reasonable receive window. The error message mentions signatures, so you debug signatures for a day. The bug was arithmetic.&lt;/p&gt;

&lt;p&gt;The practical rule this creates for any multi-venue codebase: a per-exchange conversion constant — multiply by 10⁰, 10³, or 10⁹ depending on the venue — and a unit test that asserts the &lt;em&gt;digit count&lt;/em&gt; of every timestamp before it is ever signed. Digit counting is a cheap, brutal sanity check: 10 digits means seconds, 13 means milliseconds, 16 means microseconds, 19 means nanoseconds.&lt;/p&gt;

&lt;p&gt;Two subtleties worth remembering from the live data above: Bybit's triple-precision response means "the Bybit timestamp" is not one thing — pick the field deliberately. And Binance allowing either milliseconds or microseconds for signatures means two valid clients can look completely different in the logs, which matters when you are diffing a broken request against a working one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the docs say (so you don't have to guess)
&lt;/h2&gt;

&lt;p&gt;Every claim above has a documentation layer, not just an observed value: Kraken's Get Server Time page shows a 10-digit example; Bybit's market-time page defines timeSecond and timeNano verbatim; OKX's docs label "Unix timestamp format in milliseconds" on individual fields; Binance's spot API spec states the milliseconds-or-microseconds rule for signed requests. Endpoint paths and quoted field names are listed in the sources below, so any of this can be re-checked in about thirty seconds by calling the endpoints yourself.&lt;/p&gt;

&lt;p&gt;None of the four choices is wrong. There is simply no standard — so your abstraction layer has to carry the unit as a first-class attribute, not assume it. Before you write the converter, read the docs' unit. It is the cheapest bug you will ever prevent.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Sources (all official, all fetched 2026-09-15 02:09 UTC unless noted):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Binance public time endpoint: &lt;code&gt;GET https://api.binance.com/api/v3/time&lt;/code&gt; (live value above); Binance official REST spec (&lt;code&gt;binance-spot-api-docs/rest-api.md&lt;/code&gt;) on timestamp/recvWindow rules.&lt;/li&gt;
&lt;li&gt;Kraken public time endpoint: &lt;code&gt;GET https://api.kraken.com/0/public/Time&lt;/code&gt; (live value above); Kraken official "Get Server Time" documentation page (example response in seconds).&lt;/li&gt;
&lt;li&gt;Bybit public time endpoint: &lt;code&gt;GET https://api.bybit.com/v5/market/time&lt;/code&gt; (live value above); Bybit official v5 market-time documentation (timeSecond/timeNano field definitions).&lt;/li&gt;
&lt;li&gt;OKX public time endpoint: &lt;code&gt;GET https://www.okx.com/api/v5/public/time&lt;/code&gt; (live value above); OKX official REST v5 documentation (per-field millisecond labeling).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;AI disclosure:&lt;/strong&gt; This article was produced with AI assistance under a two-source verification process; every number was re-fetched from the official endpoints listed above immediately before publication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not financial advice.&lt;/strong&gt; This is a technical article about API specifications. Nothing here is investment, trading, or legal advice. Exchange endpoints, fields, and rules change without notice — verify against each venue's current official documentation before building anything on top of them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;No affiliate or referral links appear in this article.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify with official sources:&lt;/strong&gt; api.binance.com · api.kraken.com · api.bybit.com · &lt;a href="http://www.okx.com/docs-v5" rel="noopener noreferrer"&gt;www.okx.com/docs-v5&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Same Minute, Five Prices: What Bitcoin Actually Costs Depends on Where You Ask</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Tue, 08 Sep 2026 02:08:33 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/same-minute-five-prices-what-bitcoin-actually-costs-depends-on-where-you-ask-333g</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/same-minute-five-prices-what-bitcoin-actually-costs-depends-on-where-you-ask-333g</guid>
      <description>&lt;h1&gt;
  
  
  Same Minute, Five Prices: What Bitcoin Actually Costs Depends on Where You Ask
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Disclosures for this article are at the bottom — please read them. In short: this article was drafted with AI assistance, it contains no sponsored links, and nothing here is financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ask five major exchanges what one Bitcoin costs and you will not get one answer. You will get a small pile of answers, and the gap between the highest and the lowest is not a rounding error — it is about the same size as the trading fee you would pay to move between them.&lt;/p&gt;

&lt;p&gt;We queried five exchange venues within the same minute on &lt;strong&gt;2026-09-08, 02:03–02:04 UTC&lt;/strong&gt;, using only their free, no-login public market-data endpoints. Every number below is a raw value returned by the venue's own API, and you can reproduce the whole experiment with &lt;code&gt;curl&lt;/code&gt; in under two minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five prices, as returned
&lt;/h2&gt;

&lt;p&gt;All figures are the USDT-denominated (or USD, where noted) top-of-book quotes captured at 02:03–02:04 UTC on 2026-09-08:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Venue (market)&lt;/th&gt;
&lt;th&gt;Bid&lt;/th&gt;
&lt;th&gt;Ask&lt;/th&gt;
&lt;th&gt;Last trade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binance spot — BTCUSDT&lt;/td&gt;
&lt;td&gt;79,398.00*&lt;/td&gt;
&lt;td&gt;79,398.00*&lt;/td&gt;
&lt;td&gt;79,398.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bybit spot — BTCUSDT&lt;/td&gt;
&lt;td&gt;79,397.5&lt;/td&gt;
&lt;td&gt;79,397.6&lt;/td&gt;
&lt;td&gt;79,397.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OKX spot — BTC-USDT&lt;/td&gt;
&lt;td&gt;79,392.4&lt;/td&gt;
&lt;td&gt;79,392.5&lt;/td&gt;
&lt;td&gt;79,392.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kraken spot — XBT/USD&lt;/td&gt;
&lt;td&gt;79,384.10&lt;/td&gt;
&lt;td&gt;79,384.20&lt;/td&gt;
&lt;td&gt;79,384.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coinbase Exchange — BTC-USD&lt;/td&gt;
&lt;td&gt;79,374.00&lt;/td&gt;
&lt;td&gt;79,374.01&lt;/td&gt;
&lt;td&gt;79,374.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* Binance figures here come from its last-trade price endpoint at that moment; its book top-of-book is shown in the second round below (79,398.83/79,398.84).&lt;/p&gt;

&lt;p&gt;A second, fully independent round of requests about 35 seconds later (02:04:14–02:04:18 UTC) returned the same pattern: Binance 79,398.83/79,398.84, Bybit 79,399.7/79,399.8, OKX 79,393.1/79,393.2, Kraken 79,381.6/79,381.7, Coinbase 79,374/79,374.01. The ranking barely moved; prices drifted by single-digit dollars. This is not a one-frame fluke — it is a standing structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The spread between "the price of Bitcoin" and "a price of Bitcoin"
&lt;/h2&gt;

&lt;p&gt;Within the three USDT venues (Binance, Bybit, OKX), the top-of-book quotes sat within about &lt;strong&gt;7 US dollars&lt;/strong&gt; of each other — roughly 0.9 basis points. Tight, as you would expect from markets that are heavily arbitraged by professional firms.&lt;/p&gt;

&lt;p&gt;The interesting gap is between the &lt;em&gt;currency groups&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;USDT venues&lt;/strong&gt; (Binance, Bybit, OKX) printed around 79,392–79,398.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;True-USD venues&lt;/strong&gt; (Kraken, Coinbase) printed around 79,374–79,384.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a gap of roughly &lt;strong&gt;8–24 dollars, or about 1.0–3.0 basis points&lt;/strong&gt; depending on which pair you compare (OKX bid vs Kraken ask: ~8 USD; Binance vs Coinbase: ~24 USD). Some of this gap is not Bitcoin at all: the USDT venues are quoting Bitcoin in Tether, and USDT itself is not worth exactly 1.000 US dollar. When we measured USDT against USD on exchange APIs in late August 2026 it printed around 0.9996–0.9997 — a discount of 3–4 basis points — which would, mechanically, make a USDT-denominated number &lt;em&gt;cheaper&lt;/em&gt; than a USD one, not more expensive. So the residual reflects genuine differences in local supply and demand for Bitcoin in each market, plus the stablecoin premium running the other way that day. Either way, the honest conclusion is the same: &lt;strong&gt;"the" global price of Bitcoin is an aggregation someone else computes. Each exchange trades its own book.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why should you care about 2–3 basis points? Because many exchanges' maker fees on liquid pairs are in the same range. The price gap between venues is a real, tradeable-away-or-not cost that lives on the same order of magnitude as the fee schedule everyone obsesses over — and unlike fees, it moves without warning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same-minute split inside one exchange: spot vs perpetual
&lt;/h2&gt;

&lt;p&gt;We also pulled the BTC USDT &lt;strong&gt;perpetual futures&lt;/strong&gt; last price from the same three venues in the same minute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bybit linear BTCUSDT perp last: 79,362.90 (mark price 79,364.13, index 79,397.40)&lt;/li&gt;
&lt;li&gt;OKX BTC-USDT-SWAP last: 79,362.7&lt;/li&gt;
&lt;li&gt;Binance USDT-margined BTCUSDT futures last: 79,368.00&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So while spot printed ~79,392–79,398, the perpetuals printed ~79,363–79,368 — the derivatives were trading roughly &lt;strong&gt;3–4 basis points below spot&lt;/strong&gt; at that instant. Same asset class, same minute, another visible price split. (Perpetuals trade on their own supply/demand and settle funding against an index; they do not have to equal spot, and on this morning they did not.)&lt;/p&gt;

&lt;p&gt;Three different "prices of Bitcoin" — USDT spot, USD spot, and perp — all correct, all simultaneous.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this is not
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;This is not an arbitrage opportunity.&lt;/strong&gt; The 10–25 dollar gaps are routinely smaller than withdrawal fees, network fees, trading fees, and the slippage you would take executing across books of this size. The numbers are a snapshot of two moments in time (02:03:41 and 02:04:14 UTC) and everything here moves continuously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This is not a ranking.&lt;/strong&gt; We are not saying one venue is "cheaper" or "better." Prices reflect each market's order flow, currency of quotation, and product type — not quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;These values were true at 02:03–02:04 UTC on 2026-09-08 and are already stale.&lt;/strong&gt; Treat every number here as a dated observation, not a fact about today.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reproduce it yourself
&lt;/h2&gt;

&lt;p&gt;Every number came from a public endpoint that requires no account and no API key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binance: &lt;code&gt;GET /api/v3/ticker/bookTicker?symbol=BTCUSDT&lt;/code&gt; and &lt;code&gt;GET /fapi/v1/ticker/price&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Bybit: &lt;code&gt;GET /v5/market/tickers?category=spot&amp;amp;symbol=BTCUSDT&lt;/code&gt; (and &lt;code&gt;category=linear&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;OKX: &lt;code&gt;GET /api/v5/market/ticker?instId=BTC-USDT&lt;/code&gt; (and &lt;code&gt;BTC-USDT-SWAP&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Kraken: &lt;code&gt;GET /0/public/Ticker?pair=XBTUSD&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Coinbase Exchange: &lt;code&gt;GET /products/BTC-USD/ticker&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note the units before you compare anything: three venues quote in USDT, two in actual US dollars, and Kraken's ticker returns USD while its pair code says "ZUSD." Comparing raw numbers across quotation currencies without converting is the single most common way people misread tables like the one above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify with official sources
&lt;/h2&gt;

&lt;p&gt;The data above is a snapshot, not a specification. Before acting on any of it, check the primary sources yourself: each exchange's own public API documentation (Binance spot and futures API docs, Bybit v5 API docs, OKX v5 API docs, Kraken public API docs, Coinbase Exchange API docs) and each exchange's current fee and product pages. Prices, fees, and endpoint behavior change constantly; the only durable takeaway is the method — query the venues directly, in the same breath, and always note what currency you are actually looking at.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Disclosure — AI assistance:&lt;/strong&gt; This article was drafted with AI assistance under human editorial oversight, and the measurements were taken programmatically from public exchange APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure — affiliates:&lt;/strong&gt; No affiliate or sponsored links appear in this article. &lt;em&gt;#ad disclosure: if this article ever carries affiliate links in the future, they will be clearly marked #ad near the links themselves.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not financial advice:&lt;/strong&gt; This article is for educational and informational purposes only. It describes public market data and does not recommend any exchange, asset, or trading strategy, and it makes no prediction about future prices. Cryptocurrency markets are volatile and you can lose money. Nothing here is investment, tax, or legal advice — do your own research and consult a qualified professional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify with official sources:&lt;/strong&gt; All figures were captured from public exchange APIs on 2026-09-08 02:03–02:04 UTC and may already be out of date. Confirm any number against the exchanges' own official API endpoints and documentation before relying on it.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Price Ladder Isn't the Same Everywhere: BTC Tick Sizes Differ 10x Across Four Exchanges</title>
      <dc:creator>HMwork</dc:creator>
      <pubDate>Fri, 04 Sep 2026 02:07:26 +0000</pubDate>
      <link>https://dev.to/hmwork_2c698b7158d3/the-price-ladder-isnt-the-same-everywhere-btc-tick-sizes-differ-10x-across-four-exchanges-34l</link>
      <guid>https://dev.to/hmwork_2c698b7158d3/the-price-ladder-isnt-the-same-everywhere-btc-tick-sizes-differ-10x-across-four-exchanges-34l</guid>
      <description>&lt;h1&gt;
  
  
  The Price Ladder Isn't the Same Everywhere: BTC Order Sizes Differ 10x Between Exchanges
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Disclosure: This article was researched and written with AI assistance, then fact-checked against the official exchange APIs and documentation cited below. It contains no sponsored placements at the time of publication; if that ever changes, affiliate links will be clearly marked with #ad. Nothing here is financial advice — this is a measurement report, not a recommendation to trade, buy, or move funds.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every limit order you place climbs a price ladder. The ladder's rung spacing — the "tick size" — is set by the exchange, not by you, and you cannot place an order price that sits between two rungs. What most traders never notice is that &lt;strong&gt;the same asset has different rung spacing on different exchanges&lt;/strong&gt;. For bitcoin, we measured it: the minimum price increment for one and the same BTC market differs by a factor of ten across four major venues.&lt;/p&gt;

&lt;p&gt;This matters more than it sounds. Tick size quietly decides three things: how tightly your limit order can hug the current market, how much of your order gets silently rounded, and how much "free" price improvement is even possible on a fill.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we measured, and how
&lt;/h2&gt;

&lt;p&gt;On 2026-09-04 (02:02 UTC) we queried the free, no-authentication public APIs of four exchanges and read the raw specification fields for BTC against USD or USDT. No third-party summaries, no blog posts — just the venues' own endpoints, which you can hit yourself with curl and reproduce the numbers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Venue&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;BTC tick size&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/v3/exchangeInfo?symbol=BTCUSDT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PRICE_FILTER.tickSize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0.01&lt;/strong&gt; USD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bybit&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v5/market/instruments-info?category=spot&amp;amp;symbol=BTCUSDT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;priceFilter.tickSize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0.1&lt;/strong&gt; USD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OKX&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/v5/public/instruments?instType=SWAP&amp;amp;instId=BTC-USDT-SWAP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tickSz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0.1&lt;/strong&gt; USDT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kraken&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/0/public/AssetPairs?pair=XXBTZUSD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tick_size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0.1&lt;/strong&gt; USD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four independent official sources, two distinct answers: 0.01 versus 0.1. That is a tenfold difference in how finely you can quote a price on what is nominally the same market — spot bitcoin in dollars.&lt;/p&gt;

&lt;p&gt;We cross-checked reachability of each venue's own field documentation as a second layer: Bybit's instrument-specification documentation page (bybit-exchange.github.io/docs/v5/market/instrument) and OKX's API v5 reference (okx.com/docs-v5/en/) both returned HTTP 200 at measurement time and define these fields. The values above are static specification fields rather than market prices, so they are far more stable than the ticker snapshots we cite elsewhere in our work — but exchanges can and do amend specifications, so treat any number here as "as of the measurement date" and re-check against the venue's own page before relying on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a ten-cent-versus-one-cent gap is not a rounding error
&lt;/h2&gt;

&lt;p&gt;At the time of measurement, BTC last traded around $80,886 on Binance's public ticker. At that price:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 0.01 tick is about &lt;strong&gt;0.0012 basis points&lt;/strong&gt; of the price.&lt;/li&gt;
&lt;li&gt;A 0.1 tick is about &lt;strong&gt;0.012 basis points&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both sound negligible next to a 10-basis-point taker fee, and for a passive one-lot order they are. The gap shows up in three practical situations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Price improvement is quantized.&lt;/strong&gt; Suppose the best ask is $80,893.6 and the market moves in your favor. On a 0.01-tick venue, the price can print $80,893.59, .58, .57 — your resting buy limit can sit one cent behind the touch and get filled at a visibly better price. On a 0.1-tick venue, those sub-ten-cent moves simply do not exist in the order book; the ladder itself refuses to represent them. Your maximum possible price-improvement edge from queuing ahead is bounded by the rung spacing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Order quantities get rounded differently too.&lt;/strong&gt; Tick size never travels alone. The same API calls show Binance allowing quantity steps of 0.00001 BTC on spot, Kraken a minimum of 0.00005 BTC, Bybit a base minimum of 0.000001 BTC with a $5 minimum order amount, and OKX's perpetual contract moving in 0.01-contract steps (its contract value is 0.01 BTC per contract). When price precision and quantity precision interact, a "small" specification difference compounds: on coarser venues, the effective granularity of &lt;em&gt;notional value per order&lt;/em&gt; — price tick × quantity step — is often a magnitude coarser than on the fine-grained venue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Backtests and bots inherit the ladder whether they like it or not.&lt;/strong&gt; If your simulator fills orders at arbitrary prices with one-cent granularity, but the real venue quotes in tenths, your simulated fills were sometimes not representable in the real book at all. Over thousands of trades, a fraction of a basis point per fill is exactly the kind of error that turns a losing strategy green in a backtest. Before comparing maker rebates or spread-capture strategies across venues, read each &lt;code&gt;tickSize&lt;/code&gt;/&lt;code&gt;tickSz&lt;/code&gt;/&lt;code&gt;tick_size&lt;/code&gt; field directly — it is free, public, and one HTTP request away.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we deliberately did not conclude
&lt;/h2&gt;

&lt;p&gt;We are not ranking venues. A 0.1 tick is not "worse" than 0.01 — coarser ladders can concentrate displayed liquidity at fewer price levels, which some market makers prefer, and tick size is one input among dozens (fees, depth, latency, insurance funds, regulation). We also did not touch how each venue computes internal engine prices, funding settlements, or liquidation triggers — those are separate mechanisms with their own documentation. The only claim in this article is the measurable one: &lt;strong&gt;the minimum price increment for BTC differs 10x across these four official venues, and every one of them publishes the exact number in a public, no-key API field.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That makes tick size the cheapest specification check in all of exchange comparison. No login, no KYC, no scraping of JavaScript-rendered fee tables — four curl commands, and you know how fine a ladder you are actually allowed to climb.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Verify with official sources (re-run these yourself):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binance: &lt;code&gt;GET https://api.binance.com/api/v3/exchangeInfo?symbol=BTCUSDT&lt;/code&gt; → &lt;code&gt;symbols[0].filters&lt;/code&gt; → &lt;code&gt;PRICE_FILTER.tickSize&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Bybit: &lt;code&gt;GET https://api.bybit.com/v5/market/instruments-info?category=spot&amp;amp;symbol=BTCUSDT&lt;/code&gt; → &lt;code&gt;result.list[0].priceFilter.tickSize&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;OKX: &lt;code&gt;GET https://www.okx.com/api/v5/public/instruments?instType=SWAP&amp;amp;instId=BTC-USDT-SWAP&lt;/code&gt; → &lt;code&gt;data[0].tickSz&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Kraken: &lt;code&gt;GET https://api.kraken.com/0/public/AssetPairs?pair=XXBTZUSD&lt;/code&gt; → &lt;code&gt;tick_size&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Field documentation: &lt;a href="https://bybit-exchange.github.io/docs/v5/market/instrument" rel="noopener noreferrer"&gt;https://bybit-exchange.github.io/docs/v5/market/instrument&lt;/a&gt; · &lt;a href="https://www.okx.com/docs-v5/en/" rel="noopener noreferrer"&gt;https://www.okx.com/docs-v5/en/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;AI-assisted content disclosure: research, API pulls, and drafting were performed by an automated research system; key figures were re-verified against the endpoints listed above immediately before publication.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not financial advice. Cryptocurrency trading involves substantial risk. All figures are public specification values captured at the timestamps noted and may change at any time at each venue's discretion.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
