<?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: FillBench</title>
    <description>The latest articles on DEV Community by FillBench (@fillbench).</description>
    <link>https://dev.to/fillbench</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%2F4020058%2Ff6b42646-aec7-40c2-9968-dc18ecf11739.png</url>
      <title>DEV Community: FillBench</title>
      <link>https://dev.to/fillbench</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fillbench"/>
    <language>en</language>
    <item>
      <title>Coinbase Advanced Trade API vs Kraken API for a Python Trading Bot</title>
      <dc:creator>FillBench</dc:creator>
      <pubDate>Tue, 07 Jul 2026 21:48:59 +0000</pubDate>
      <link>https://dev.to/fillbench/coinbase-advanced-trade-api-vs-kraken-api-for-a-python-trading-bot-eeb</link>
      <guid>https://dev.to/fillbench/coinbase-advanced-trade-api-vs-kraken-api-for-a-python-trading-bot-eeb</guid>
      <description>&lt;p&gt;If you're building a trading bot in Python, the exchange API you pick decides two things: how fast your orders land, and how much time you burn on plumbing instead of strategy. I compared the Coinbase Advanced Trade API and the Kraken API on both. Latency comes from my own benchmark (measured every 2 hours from a fixed US East box); the developer-experience facts come from each provider's official docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Start with &lt;strong&gt;Coinbase Advanced Trade&lt;/strong&gt; if you want to ship fast: it has an official Python SDK that signs your requests for you, modern JWT auth, and a tighter tail latency from US infrastructure. Reach for &lt;strong&gt;Kraken&lt;/strong&gt; if you want more API surface (REST, WebSocket, and a FIX gateway) and don't mind wiring up HMAC signing yourself against a deep, well-worn ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer experience
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Coinbase Advanced Trade&lt;/th&gt;
&lt;th&gt;Kraken&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Official Python SDK&lt;/td&gt;
&lt;td&gt;Yes (coinbase-advanced-py)&lt;/td&gt;
&lt;td&gt;No (community python-kraken-sdk)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;REST API&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket API&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FIX API&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SDK signs requests for you&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signing scheme&lt;/td&gt;
&lt;td&gt;JWT (Ed25519 or ECDSA)&lt;/td&gt;
&lt;td&gt;HMAC-SHA512&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private WS needs a fetched token&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (15-min token)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Authentication
&lt;/h2&gt;

&lt;p&gt;Coinbase uses CDP API keys with a per-request JWT. Ed25519 is the recommended key type, and the official SDK detects the key type and signs every REST call and WebSocket message for you, so in practice you paste a key and go.&lt;/p&gt;

&lt;p&gt;Kraken uses a classic API key plus secret with an HMAC-SHA512 signature you build per request, and its private WebSocket channels need a short-lived token you first fetch over REST (valid 15 minutes). More moving parts, but well documented and battle tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency
&lt;/h2&gt;

&lt;p&gt;This is where they genuinely differ. In my benchmark the two post similar median response times, but Coinbase holds a noticeably tighter tail: its p95 and p99 stay close to the median, while Kraken's tail runs several times wider. For a bot that fires during volatility, the tail is what costs you, not the median. Both sit near the front among US-legal venues.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Kraken gotcha to design around
&lt;/h2&gt;

&lt;p&gt;Kraken sits behind a Cloudflare connection limit of roughly 150 connect/reconnect attempts per rolling 10 minutes per IP, and blows past it and the IP gets banned for 10 minutes. If your bot reconnects aggressively, add backoff. Exact per-tier REST limits and fees change on both exchanges, so read them live from the docs before sizing your polling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;For a Python bot, Coinbase Advanced Trade gets you trading fastest and holds a steadier tail. Kraken rewards you with more surface and a deeper ecosystem if you'll wire up a bit more yourself. Either way, the exchange that responds fastest from where your bot runs matters more than the marketing, so measure it.&lt;/p&gt;

&lt;p&gt;Full method, the live latency table, and the raw JSON: &lt;a href="https://fillbench.com/coinbase-vs-kraken-api" rel="noopener noreferrer"&gt;https://fillbench.com/coinbase-vs-kraken-api&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>cryptocurrency</category>
      <category>kraken</category>
    </item>
    <item>
      <title>I Benchmarked 9 Crypto Exchange APIs From a US Datacenter (p50/p95/p99)</title>
      <dc:creator>FillBench</dc:creator>
      <pubDate>Tue, 07 Jul 2026 18:49:14 +0000</pubDate>
      <link>https://dev.to/fillbench/i-benchmarked-9-crypto-exchange-apis-from-a-us-datacenter-p50p95p99-45dm</link>
      <guid>https://dev.to/fillbench/i-benchmarked-9-crypto-exchange-apis-from-a-us-datacenter-p50p95p99-45dm</guid>
      <description>&lt;p&gt;I run automated trading strategies and kept choosing exchanges based on vague "low latency" marketing claims. So I built a benchmark to actually measure it. Here is REST API latency to 9 exchanges, measured from a US-east datacenter, with the method and raw data open so you can reproduce or challenge any number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;9 exchanges, measured from a US-east datacenter&lt;/li&gt;
&lt;li&gt;50 samples each, keep-alive HTTPS GET to each exchange's public ticker endpoint&lt;/li&gt;
&lt;li&gt;TLS handshake timed separately so it does not pollute request timing&lt;/li&gt;
&lt;li&gt;plain Python standard library, no dependencies&lt;/li&gt;
&lt;li&gt;ranked by p95, because tail latency is what costs you when markets move, not the median&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  First surprise: two big exchanges block US datacenters entirely
&lt;/h2&gt;

&lt;p&gt;Before latency even mattered, two of the largest exchanges refused to respond from US infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binance.com returns HTTP 451 (unavailable for legal reasons)&lt;/li&gt;
&lt;li&gt;Bybit returns HTTP 403&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are building on US-hosted infra, that constrains your options before you write a line of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;p&gt;Latency in milliseconds, ranked by p95. Snapshot as of 2026-07-07; the live version re-runs every 2 hours.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Exchange&lt;/th&gt;
&lt;th&gt;US-legal?&lt;/th&gt;
&lt;th&gt;p50&lt;/th&gt;
&lt;th&gt;p95&lt;/th&gt;
&lt;th&gt;p99&lt;/th&gt;
&lt;th&gt;mean&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binance.US&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;11.5&lt;/td&gt;
&lt;td&gt;12.3&lt;/td&gt;
&lt;td&gt;14.3&lt;/td&gt;
&lt;td&gt;11.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bitfinex&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;12.8&lt;/td&gt;
&lt;td&gt;15.0&lt;/td&gt;
&lt;td&gt;19.8&lt;/td&gt;
&lt;td&gt;13.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coinbase&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;13.6&lt;/td&gt;
&lt;td&gt;16.7&lt;/td&gt;
&lt;td&gt;19.1&lt;/td&gt;
&lt;td&gt;13.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kraken&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;15.0&lt;/td&gt;
&lt;td&gt;36.8&lt;/td&gt;
&lt;td&gt;61.1&lt;/td&gt;
&lt;td&gt;17.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;25.5&lt;/td&gt;
&lt;td&gt;118.1&lt;/td&gt;
&lt;td&gt;1056.4&lt;/td&gt;
&lt;td&gt;78.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bitstamp&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;24.3&lt;/td&gt;
&lt;td&gt;126.7&lt;/td&gt;
&lt;td&gt;163.4&lt;/td&gt;
&lt;td&gt;37.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KuCoin&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;174.9&lt;/td&gt;
&lt;td&gt;192.0&lt;/td&gt;
&lt;td&gt;208.6&lt;/td&gt;
&lt;td&gt;177.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crypto.com&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;185.6&lt;/td&gt;
&lt;td&gt;197.5&lt;/td&gt;
&lt;td&gt;203.6&lt;/td&gt;
&lt;td&gt;187.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OKX&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;239.6&lt;/td&gt;
&lt;td&gt;262.7&lt;/td&gt;
&lt;td&gt;264.8&lt;/td&gt;
&lt;td&gt;241.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Takeaway 1: the median lies
&lt;/h2&gt;

&lt;p&gt;Kraken's median is a healthy 15ms, but its p99 blows past 60ms. Gemini's median is 25ms, but its p99 crosses a full second. If you size your timeouts and retry logic off the median, you get burned in exactly the volatility you built the bot for. Rank on p95 and p99.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway 2: "serves US" and "fast from US" are different questions
&lt;/h2&gt;

&lt;p&gt;OKX (back in the US after its settlement) and Crypto.com both legally serve US customers, but they sit at 185 to 260ms from US-east. Their API endpoints are simply far away. Regulatory access and network proximity are two separate things, and only one of them shows up in a latency test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce it, and what it does not cover
&lt;/h2&gt;

&lt;p&gt;Known limitations, because they matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single datacenter (US-east). Latency is location-dependent, so your colo will differ. This is a relative comparison from one honest vantage point.&lt;/li&gt;
&lt;li&gt;This measures public-endpoint REST latency, not authenticated order-placement latency. That is the number that really matters for execution, and it is the next benchmark.&lt;/li&gt;
&lt;li&gt;Each run is n=50.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The numbers auto-refresh every 2 hours from the same box, and the raw JSON plus the script are published so you can re-run it yourself. Live table and method: &lt;a href="https://fillbench.com/exchange-api-latency" rel="noopener noreferrer"&gt;https://fillbench.com/exchange-api-latency&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would you want measured next: authenticated order round-trip, or websocket latency and stability?&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>api</category>
      <category>performance</category>
      <category>python</category>
    </item>
  </channel>
</rss>
