<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:www.coingecko.com,2005:/learn</id>
  <link rel="alternate" type="text/html" href="https://www.coingecko.com"/>
  <link rel="self" type="application/atom+xml" href="https://www.coingecko.com/learn.atom"/>
  <title>CoinGecko Buzz</title>
  <updated>2026-09-04T00:30:59Z</updated>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/1420</id>
    <published>2026-09-04T00:30:59Z</published>
    <updated>2026-09-04T02:38:07Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/top-crypto-cards?locale=en"/>
    <title>Top 10 Crypto Cards for 2026 (Updated)</title>
    <content type="html">&lt;div aria-label="Definition" role="region" style="background-color: #F1F5F9; border-radius: 12px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 4px solid #4BCC00;"&gt;
&lt;h2 style="margin: 0px 0px 1rem; font-size: 1.25rem; color: #0F172A; font-weight: 700;"&gt;What Are Crypto Cards?&lt;/h2&gt;

&lt;p style="font-size: 1rem; line-height: 1.6; color: #64748B; margin-bottom: 1.5rem;"&gt;&lt;strong style="color: #334155;"&gt;Crypto cards include credit, debit, and prepaid cards, which allow holders to spend their digital assets in their everyday life. These cards are typically issued by &lt;a href="https://www.coingecko.com/learn/what-are-centralized-crypto-exchanges-cex?locale=en"&gt;cryptocurrency exchanges&lt;/a&gt; and financial institutions, enabling users to make purchases and even withdraw fiat currency using their digital assets.&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #64748B; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;What they are:&lt;/strong&gt; Crypto cards are a type of payment card that allows holders to spend their digital assets — just like fiat money — in their everyday life.&lt;/span&gt;&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Three main types:&lt;/strong&gt; There are three main types of crypto cards, and they include debit, credit, and prepaid cards.&lt;/span&gt;&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Ease of use:&lt;/strong&gt; These cards make it easy to spend cryptocurrency like traditional money, whether online or in physical stores, without needing to manually convert to fiat first.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;In this article:&lt;/strong&gt; In this article, we've curated a list of the top crypto cards in the market, highlighting features, costs, and fee structure.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Top Crypto Cards" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/34531/content_Top_crypto_cards.webp" style="width: 1200px; height: 628px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;While cryptocurrency has a growing presence in the global finance industry over the past decade, these digital assets are yet to be widely adopted and accepted by governments and businesses worldwide.&lt;/p&gt;

&lt;p dir="ltr"&gt;As a result, it's not that easy for people to use cryptocurrencies in the real world, which potentially discourages widespread adoption of digital assets. To tackle these challenges, we are seeing the introduction of different solutions to enable users to spend their cryptocurrencies in the real world, including crypto cards. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;Types of Crypto Cards&lt;/h2&gt;

&lt;p dir="ltr"&gt;Crypto cards basically eliminate the need to convert cryptocurrency into fiat currency before spending, bridging the gap between digital assets and traditional finance. Now, these cards come in different types; credit, debit, and prepaid. Each type offers unique characteristics, catering to different needs and preferences.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Crypto debit cards&lt;/strong&gt;, for instance, work by linking directly to a digital asset wallet. When you make a purchase, the card automatically &lt;a href="https://www.coingecko.com/research/publications/bitcoin-vs-fiat-currencies" target="_blank"&gt;converts the required amount of crypto into fiat currency&lt;/a&gt; at the point of sale. This type of card is convenient for everyday spending and can be used both online and in physical stores. Additionally, users can withdraw cash from ATMs that support the card.&lt;/p&gt;

&lt;p dir="ltr"&gt;Meanwhile, &lt;strong&gt;crypto credit cards&lt;/strong&gt; operate similarly to traditional credit cards except that they offer rewards in cryptocurrency. Users can make purchases and pay off the balance later, earning crypto rewards in the process. These cards often come with benefits, such as cashback, making them an attractive option for those looking to maximize their crypto holdings.&lt;/p&gt;

&lt;p dir="ltr"&gt;Finally, &lt;strong&gt;crypto prepaid cards&lt;/strong&gt; are another type of crypto cards. It allows users to load specific amounts of cryptocurrency, which are then converted to fiat currency for various purposes. These cards are particularly useful for budgeting, as users can only spend the preloaded amount, thereby helping them manage their finances more efficiently. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;How Do Crypto Cards Work?&lt;/h2&gt;

&lt;p dir="ltr"&gt;Crypto cards operate similarly to traditional debit or credit cards. To begin using a crypto card, one must first choose a card service provider and sign up for an account on their platform. This process may involve verifying their identity by providing personal information and necessary documents. This step is especially crucial for complying with &lt;a href="https://www.coingecko.com/en/glossary/kyc-know-your-customer" target="_blank"&gt;Know-Your-Customer (KYC)&lt;/a&gt; regulations.&lt;/p&gt;

&lt;p dir="ltr"&gt;Once the account is created and verified, users can then link their cryptocurrency wallet to the crypto card account. Although some cards come with built-in wallets, users can transfer cryptocurrency from their external wallet to the card's wallet. &lt;/p&gt;

&lt;p dir="ltr"&gt;When making purchases physically, users can swipe, insert, or tap their card at the payment terminal. Then, the required amount of cryptocurrency is converted to fiat currency in real-time, ensuring the latest exchange rate. For online shopping, you enter your card details at checkout, and the conversion happens. If you need to withdraw cash, you can use the crypto card at compatible ATMs, with the cryptocurrency converted at the time of withdrawal.&lt;/p&gt;

&lt;p dir="ltr"&gt;Most notably, crypto cards often come with standard security features such as a PIN, chip, and two-factor authentication (2FA) to ensure the safety of transactions. Additionally, providers monitor transactions for suspicious activity and allow users to freeze their cards immediately, if they are lost or compromised.&lt;/p&gt;

&lt;p&gt;Below is a comprehensive list of the top crypto cards, covering both custodial and non-custodial options. Here, we'll highlight their various features, offerings, and benefits to users.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Nexo Card: Dual-Functionality Crypto Card&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This section is brought to you by &lt;a href="https://nexo.sjv.io/7akeNy" target="_blank"&gt;Nexo&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;A top crypto card to make the cut is from &lt;a href="https://nexo.sjv.io/7akeNy" target="_blank"&gt;Nexo&lt;/a&gt;, a cryptocurrency lending platform. The Nexo custodial card is especially popular amongst cryptocurrency users for its dual-mode functionality, offering both credit and debit options.&lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Nexo Card" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/34073/content_Nexo_Card.webp" style="width: 1200px; height: 698px;"&gt;&lt;/div&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;p dir="ltr"&gt;The Nexo card connects to users’ available balance on the platform. It operates in two modes; credit and debit, which users can switch between at any time.&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Credit mode&lt;/strong&gt;: Allows users to put up their crypto as&lt;a href="https://www.coingecko.com/learn/crypto-collateral-defi?locale=en" target="_blank"&gt; collateral&lt;/a&gt;, allowing them to make purchases without selling their assets. This mode helps users retain the upside potential of their assets while accessing funds at borrowing rates starting from 2.9%. Users will also enjoy up to 2% crypto cashback on purchases (up to $200), while earning interest on assets not used as collateral.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Debit mode&lt;/strong&gt;: Enables users to spend cryptocurrencies and stablecoins (EUR, GBP, and USD) directly. Card holders can earn daily compound interest of up to 14% on their balance. Users can also prioritize which assets to spend first, ensuring maximum efficiency.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;The Nexo card supports various cryptocurrencies, including BTC, ETH, and&lt;a href="https://www.coingecko.com/learn/what-is-tether-usdt-crypto?locale=en" target="_blank"&gt; stablecoins like USDT&lt;/a&gt;. It is currently available to residents of the European Economic Area (EEA) and the UK.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;p dir="ltr"&gt;Activation of the virtual Nexo card is free upon deposit of at least $50 to the Nexo account. Meanwhile, the physical cards are shipped at no cost with a portfolio balance of at least $500 and a Gold Loyalty tier. Users are tiered based on the ratio of NEXO tokens against the rest of their portfolio, where tiers only apply if the user's account balance is above $5,000 in digital assets.&lt;/p&gt;

&lt;p dir="ltr"&gt;In credit mode, borrowing rates start at 2.9% and can go up to 18.9% per annum, allowing users to access funds without selling their crypto. The debit mode does not charge any monthly, annual, or inactivity fees.&lt;/p&gt;

&lt;p dir="ltr"&gt;When using the Nexo card, users can earn up to 2% cashback in &lt;a href="https://www.coingecko.com/en/coins/nexo" target="_blank"&gt;NEXO&lt;/a&gt; tokens or 0.5% in BTC for purchases made in credit mode (based on their loyalty tier). In the debit mode, users earn daily compound interest based on their loyalty tier, reaching up to 14% in NEXO tokens or 12% in-kind. The Nexo card also provides up to €2,000 / £1,800 free AIM withdrawals per month, after which a 2% fee (minimum of 1.99 EUR/GBP) applies. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;Coca: Non-Custodial VISA Card With Real-World Rewards&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This section is brought to you by &lt;a href="https://wwallet.app.link/e/oOZaJ5YhG2b" target="_blank"&gt;Coca&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;COCA is a stablecoin-native challenger bank with a Visa card built for real-world spending — with rewards paid in stablecoins.&lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;img alt="" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/34449/content_Coca.webp" style="width: 1053px; height: 672px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;The card works with Google Pay and Apple Pay and connects to a non-custodial wallet secured by MPC and biometric recovery, so users always maintain control of their assets.&lt;/p&gt;

&lt;p dir="ltr"&gt;COCA offers cashback, yield on balances, cashback on subscriptions, and hotel discounts, all while allowing users to spend crypto anywhere Visa is accepted — over 80 million merchants.&lt;/p&gt;

&lt;p dir="ltr"&gt;Users from &lt;a href="https://docs.coca.xyz/coca/product/debit-cards-and-fiat-management" target="_blank"&gt;54 supported countries&lt;/a&gt; — including the EEA, UK, Switzerland, Monaco, Australia, Hong Kong, Singapore, Brazil, Mexico, and Argentina — can order a COCA card with KYC. The COCA app itself is available globally and can be used without KYC by anyone in the world.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;COCA is backed by Stellar, Funfair and Wirex and it was named #1 Product of the Day on Product Hunt and won the "Next Financial Revolution" award at CONF3RENCE 2024.&lt;/em&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Buy, sell, send, and receive supported cryptocurrencies directly in-app.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Spend stablecoins anywhere Visa is accepted — online or in-store.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Earn 1%–8% cashback in USDC or EURC through the COCA Loyalty Program.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Get 50% cashback on subscriptions like Netflix, Spotify, Amazon Prime, and ChatGPT.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Enjoy up to 50% off hotels via COCA Travel, plus cashback on bookings.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Earn 6% APY on your stablecoin card balance — no lockups, funds stay liquid.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Full self-custody setup: COCA doesn't hold your keys.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Supports USDC, USDT, EURC, and EURS across major EVM and Layer 2 networks.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Costs and Fees&lt;/h3&gt;

&lt;p dir="ltr"&gt;COCA offers users:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;0% FX fees&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;No annual or monthly fees&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Free virtual card issuance&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;No ATM withdrawal fees up to $200 monthly&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Zero-fee swaps across 15+ blockchains with smart routing.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;Bitget Wallet Card: Spend Crypto Like Cash With 0-Fee Allowance&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This section is brought to you by &lt;a href="https://web3.bitget.com/en/card" target="_blank"&gt;Bitget Wallet&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://www.coingecko.com/learn/bitget-wallet-guide" target="_blank"&gt;Bitget Wallet&lt;/a&gt; is one of the world’s largest self-custodial Web3 wallets with over 100 million users globally. Built to make crypto simple, secure, and practical for everyday finance, Bitget Wallet lets users trade, earn, and pay using crypto, offering a full payment stack, including a crypto debit card, QR payments, bank transfers, and an integrated in-app shop.&lt;/p&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://web3.bitget.com/en/card" target="_blank"&gt;Bitget Wallet Card&lt;/a&gt;  is a virtual and physical crypto debit card issued via regional partners on the Mastercard and Visa networks, letting users top up with USDT, USDC, and other major cryptocurrencies, and spend at millions of merchants worldwide.&lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Bitget Card" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136213/content_image1.webp" style="width: 1200px; height: 572px;"&gt;&lt;/div&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Global Spending&lt;/strong&gt;: Pay with USDT or USDC at millions of merchants that support Mastercard or Visa, both online and in-store.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Wide Availability&lt;/strong&gt;: The card is issued across over 50 markets, including Europe, Latin America, Asia Pacific and Africa.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fast Activation&lt;/strong&gt;: Applications are completed directly in the Bitget Wallet app, including KYC, with a virtual card issued immediately upon activation and funding.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Wallet Integration&lt;/strong&gt;: Seamlessly connect the card to major payment platforms like Apple Pay, Google Pay, Alipay, WeChat Pay, Line Pay, and use it on platforms like Amazon and TikTok.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Asset Cashback&lt;/strong&gt;: Through the Assetback program, cardholders earn up to 3% asset cashback on eligible purchases within a $200 to $600 monthly spending limit. &lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Multi-chain Top-up&lt;/strong&gt;: Fund the card with USDT, USDC, ETH, BGB, SOL and more from the Bitget Wallet across supported networks, including Ethereum, Tron, Solana, Base, and Arbitrum.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;High Limits&lt;/strong&gt;: Daily spending limits are typically up to $12,000, with an annual cap around $150,000, suitable for regular spending and travel (exact limits vary by issuing bank).&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Customization&lt;/strong&gt;: Users can personalize their virtual card with multiple exclusive Bitget Wallet card designs.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;No Recurring Fees&lt;/strong&gt;: Bitget Wallet Card charges zero annual, monthly, or Bitget-Wallet-imposed top-up/conversion fees.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Cashback Assets&lt;/strong&gt;: Within the monthly spending cap, cardholders choose one asset to receive as cashback up to 3% — Bitcoin, gold (XAUT), tokenized US stocks and ETFs including NVIDIA, Tesla, Google, and the S&amp;amp;P 500, or stablecoins. No staking or token-locking is required to participate.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fees&lt;/strong&gt;: Standard card fees set by the issuing partner apply, generally around 1%-2.2% per transaction.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Network/ATM Fees&lt;/strong&gt;: Funding the card incurs only normal blockchain network (gas) fees. ATM withdrawal fees are set by the regional issuing partner and local banks.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;Brighty: EU-Regulated Crypto &amp;amp; Fiat Banking With FX Fees as Low as 0.3%&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This section is brought to you by &lt;a href="https://brighty.app/" target="_blank"&gt;Brighty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Brighty is a Lithuanian-based neodigital banking app that seamlessly integrates traditional fiat currencies with cryptocurrency management in a single platform. Founded in 2021 and headquartered in Vilnius, Lithuania, Brighty is fully regulated and licensed within the EU, and is available to residents of all EU and EEA countries.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img alt="Brighty" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/34429/content_Brighty.webp" style="width: 1200px; height: 555px;"&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;The platform offers both virtual and physical VISA debit cards, as well as a virtual Mastercard, that allow users to spend either crypto or fiat currencies. Users can open multiple account types including IBAN accounts (EUR, USD, GBP), stablecoin wallets (USDC, EURT), and cryptocurrency wallets (BTC, ETH, ADA, and more). Brighty automatically converts crypto to fiat in the background when making purchases, eliminating the need for manual conversions. Brighty charges FX (foreign exchange) fees starting from, with competitive crypto-to-fiat conversion rates starting from 0.3%.&lt;/p&gt;

&lt;p dir="ltr"&gt;Brighty automatically converts crypto to fiat during purchases. With the Pro plan, you can exchange up to 5,000 EUR for free, and anything above that is charged at 0.4%. With the Plus plan, 2,000 EUR is free, and the remaining amount is charged at 0.5%. On the free plan, the fee is 0.6%. For business clients, a flat 0.3% rate applies.&lt;/p&gt;

&lt;p dir="ltr"&gt;Brighty stores client assets securely with $250M insurance coverage, featuring bank-grade crypto vaults with Fireblocks custody.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Multi-currency IBAN accounts (EUR, USD, GBP, AED) and support for 14+ cryptocurrencies including BTC, ETH, ADA, XTZ&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Stablecoin accounts (USDC, EURT, EURA)&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;SEPA, SWIFT, and Faster Payments support for transfers&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Free instant transfers between Brighty users and no blockchain fees for swaps within Brighty&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Virtual and physical VISA cards with Apple Pay and Google Pay integration&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Earn 5% on your crypto card balance and up to 20% from vaults and AI investments (based on historical data)&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;p dir="ltr"&gt;Brighty offers four subscription tiers:&lt;/p&gt;

&lt;table border="1" cellpadding="5" cellspacing="5" style="width:100%;"&gt;
	&lt;colgroup&gt;
		&lt;col width="193"&gt;
		&lt;col width="134"&gt;
		&lt;col width="134"&gt;
		&lt;col width="162"&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;One (Free)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;Plus&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Monthly Cost&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;€0&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;~€6-8&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;~€18&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Annual Cost&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;€0&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;~€72-96&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;~€216&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Virtual Card&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;✓&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;✓&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;✓&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Physical Card&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;✗&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;✓&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;✓&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Earning Vault APY&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Lower tier*&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Mid tier*&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Up to 10.41%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Card Earning APY (on USDC balance)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Lower tier*&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Mid tier*&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Up to 5%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;IBAN&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Transfers to self&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Transfers to third parties&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Transfers to third parties&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;ATM Withdrawal (only for physical card)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;N/A&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EEA (€3.50)&lt;/p&gt;

			&lt;p dir="ltr"&gt;Non EEA ( €3.50 + 3.5%)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EEA (€3.00)&lt;/p&gt;

			&lt;p dir="ltr"&gt;Non EEA ( €3.00 + 3%)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p dir="ltr"&gt;*Exact APY percentages for One and Plus tiers are not publicly disclosed. Rates are tiered with Pro receiving maximum advertised rates.&lt;/p&gt;

&lt;p dir="ltr"&gt;Transfer Fees:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Receiving money (crypto or fiat)&lt;/strong&gt;: Free and unlimited&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Sending fiat&lt;/strong&gt;: Low fees (lowest on Plus and Pro plans)&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Crypto transfers&lt;/strong&gt;: Standard blockchain network fees apply&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;In-app transfers between Brighty users&lt;/strong&gt;: Free&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;For more information around fees, please see: &lt;a href="https://help.brighty.app/en/articles/8263403-fees-and-limits" target="_blank"&gt;https://help.brighty.app/en/articles/8263403-fees-and-limit&lt;/a&gt;&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Rizon: Non-Custodial Visa Card for Everyday Stablecoin Spending&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This section is brought to you by &lt;a href="https://www.getrizon.com/card" target="_blank"&gt;Rizon&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Rizon is a stablecoin-first financial platform built for people who hold and spend USD and stablecoins across borders.&lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Rizon" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136363/content_Rizon_Cover_pic.webp" style="width: 1200px; height: 628px;" loading="lazy"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;Rizon’s Visa Platinum Card lets users spend stablecoins directly, without needing to offramp through an exchange first, while the broader app bundles global receiving accounts, international transfers, and rewards into one place.&lt;/p&gt;

&lt;p dir="ltr"&gt;The card is non-custodial, where private keys stay with the user rather than Rizon, and comes in virtual and physical tiers. &lt;/p&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Virtual and physical Visa cards&lt;/strong&gt;: Get a virtual card instantly for online spend and mobile wallets (Apple Pay, Google Pay), or a physical Visa Platinum card for in-store and ATM use - accepted anywhere Visa is, across 100M+ merchants and 122+ countries.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Cashback that scales with your plan&lt;/strong&gt;: Cardholders earn cashback on everyday spend, up to 2.5% on the Emerald plan.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;RizPoints on every purchase&lt;/strong&gt;: Every dollar spent earns points redeemable for gift cards and other rewards, with better earn rates on higher tiers.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Global receiving accounts&lt;/strong&gt;: Virtual USD and EUR accounts (plus BRL, MXN, and other currencies) on Rizon let users receive salaries, freelance payments, or business income from platforms like Airbnb, YouTube, Fiverr, and others, the same way a local bank account would.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Send money to 40+ currencies&lt;/strong&gt;: Transfer directly to local bank accounts internationally.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Wide local funding options&lt;/strong&gt;: Local on-ramps, P2P options, and mobile wallet deposits, depending on region.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Built-in wealth tools&lt;/strong&gt;: Beyond spending, Rizon lets users buy US stocks with 24/7 market access or trade crypto, commodities, and major stocks with leverage — all from the same app. Earning and asset-backed borrowing are coming soon to round out the experience.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;App languages&lt;/strong&gt;: English, Spanish, Portuguese (Brazil), Bengali, and Indonesian.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;p dir="ltr"&gt;Opening a Rizon account is free, and pricing is shown upfront before every transaction. Card and transaction costs depend on which of three plans a user picks:&lt;/p&gt;

&lt;table border="1" cellpadding="5" cellspacing="5" style="width:100%;"&gt;
	&lt;colgroup&gt;
		&lt;col width="159"&gt;
		&lt;col width="124"&gt;
		&lt;col width="125"&gt;
		&lt;col width="151"&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;Standard (Free)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;Gold ($3.99/mo)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr" style="text-align: center;"&gt;&lt;strong&gt;Emerald ($6.99/mo)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Cashback&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;0%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2.5%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;RizPoints&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1 per $10 spent&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1 per $5 spent&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1 per $1 spent&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;FX fee&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1.70% + $0.10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1.275%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1.02%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Trading fee&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1.7%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1.275%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;0.85%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Virtual card&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Free&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Free&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Physical card&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$49.99&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$24.99&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Free&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;ATM withdrawal fee&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1 + 0.65%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1 + 0.65%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$0.10&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;ATM withdrawal limit&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$250/transaction&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$250/transaction&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$250/transaction&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p dir="ltr"&gt;Deposits and Rizon-to-Rizon transfers are free on every plan.&lt;/p&gt;

&lt;h2 dir="ltr" role="presentation"&gt;Coinbase Card: Debit Card With Crypto Rewards&lt;/h2&gt;

&lt;p dir="ltr"&gt;The Coinbase Card is a debit card designed by one of the world’s largest crypto exchanges, allowing users to draw on their Coinbase account crypto balances to make payments in crypto. The crypto card stands out for its ability to turn everyday purchases into crypto rewards.&lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;span style="font-size:11px;"&gt;&lt;img alt="Coinbase Card" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/11070/content_Screen_Shot_2024-08-05_at_02.40.37.webp" style="width: 1200px; height: 645px;"&gt;&lt;/span&gt;&lt;/div&gt;

&lt;div dir="ltr"&gt;&lt;span style="font-size:11px;"&gt;Source: Coinbase&lt;/span&gt;&lt;/div&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;p dir="ltr"&gt;The Coinbase Card is a Visa debit card that offers several features, including; &lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Support for cryptocurrencies including &lt;a href="https://www.coingecko.com/en/coins/bitcoin" target="_blank"&gt;Bitcoin (BTC)&lt;/a&gt;, &lt;a href="https://www.coingecko.com/en/coins/ethereum" target="_blank"&gt;Ether (ETH)&lt;/a&gt;, and &lt;a href="https://www.coingecko.com/en/coins/usdc" target="_blank"&gt;USDC&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Earn cashback rewards in the form of cryptocurrencies.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Card is valid anywhere Visa debit cards are accepted.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Zero spending and annual fees.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Robust security features, like two-factor authentication, card freezing, and PIN change.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Available in Europe, the UK, and the US (excluding Hawaii). The rewards program and some features are US-only.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://www.coinbase.com/card" rel="nofollow noopener" target="_blank"&gt;Coinbase Card&lt;/a&gt; does not charge annual fees or spending fees, making it a cost-effective option for users. However, network transaction fees (e.g. gas fees) still apply for transferring cryptocurrency off the platform and are always disclosed at the time of the transaction. &lt;/p&gt;

&lt;p dir="ltr"&gt;Also, fees for buying, selling, or converting cryptocurrencies on Coinbase depend on factors like payment method and order size. While spending with the Coinbase card has no transaction fees, ATM operators may charge fees for withdrawals.&lt;/p&gt;

&lt;p dir="ltr"&gt;Now, this card offers flexible funding options, allowing users to link their bank accounts or deposit part of their paycheck into Coinbase with zero fees. The setup process is straightforward, with no credit check or requirement to stake assets to become eligible. &lt;/p&gt;

&lt;h3&gt;Coinbase One Card: Upcoming&lt;/h3&gt;

&lt;p&gt;The Coinbase One Card is coming in Fall 2025, and is currently in a waitlist phase. This will be a credit card (unlike the above Coinbase Card which is a debit card), issued by First Electronic Bank. The Coinbase One Card will be only available for Coinbase One members, which has a membership cost of $4.99/month or $49.99/year. There is no annual fee, nor foreign transaction fees.&lt;/p&gt;

&lt;p&gt;Coinbase One Card users will enjoy the following rewards:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
&lt;strong&gt;Base rewards:&lt;/strong&gt; 2% back in Bitcoin on every purchase&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Tiered rewards:&lt;/strong&gt; Up to 4% back in Bitcoin based on assets held with Coinbase&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Reward tiers:&lt;/strong&gt; 2%, 2.5%, 3%, or 4% depending on your Coinbase asset holdings&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Reward currency:&lt;/strong&gt; All rewards paid in Bitcoin (BTC)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are additional cardholder benefits as well , including travel insurance and AMEX experiences.&lt;/p&gt;

&lt;h3&gt;Coinbase One Card vs. Coinbase Card&lt;/h3&gt;

&lt;table border="1" cellpadding="5" cellspacing="5" style="width:100%;"&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th&gt;Feature&lt;/th&gt;
			&lt;th&gt;Coinbase Card (Current)&lt;/th&gt;
			&lt;th&gt;Coinbase One Card (New)&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Card Type&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Debit Card&lt;/td&gt;
			&lt;td&gt;Credit Card&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Funding Source&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Your Coinbase wallet&lt;/td&gt;
			&lt;td&gt;Credit line&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Rewards&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Up to 4% in various cryptos&lt;/td&gt;
			&lt;td&gt;Up to 4% in Bitcoin only&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Membership Required&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;No&lt;/td&gt;
			&lt;td&gt;Yes (Coinbase One)&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Annual Fee&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;None&lt;/td&gt;
			&lt;td&gt;None&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Availability&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Currently available in supported regions&lt;/td&gt;
			&lt;td&gt;Fall 2025 launch for supported regions&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 dir="ltr"&gt;&lt;strong&gt;Bybit Card: Earn Interest on Idle Assets&lt;/strong&gt;&lt;/h2&gt;

&lt;p dir="ltr"&gt;The Bybit card is a crypto debit card offered by Bybit, a prominent centralized cryptocurrency derivatives trading platform. This custodial crypto card stands out for its plethora of benefits, which comes with zero staking requirements.&lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;span style="font-size:12px;"&gt;&lt;img alt="Bybit" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/11071/content_Screen_Shot_2024-08-05_at_02.40.05.webp" style="width: 1200px; height: 645px;"&gt;&lt;/span&gt;&lt;/div&gt;

&lt;div dir="ltr"&gt;&lt;span style="font-size:12px;"&gt;Source: Bybit &lt;/span&gt;&lt;/div&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;p dir="ltr"&gt;The Bybit card is a Mastercard debit card that offers convenient transaction and card management for users through a dashboard on &lt;a href="https://www.coingecko.com/en/exchanges/bybit_spot" rel="nofollow noopener" target="_blank"&gt;Bybit web&lt;/a&gt; and app. This card features;  &lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Support for multiple cryptocurrencies, including BTC, ETH, &lt;a href="https://www.coingecko.com/en/coins/xrp" target="_blank"&gt;XRP&lt;/a&gt;, &lt;a href="https://www.coingecko.com/en/coins/tether" target="_blank"&gt;USDT&lt;/a&gt;, and USDC.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Loyalty rewards with points redeemable for vouchers and cryptocurrencies, and up to 10% cashback.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Auto-Savings function that allows Bybit Card users to earn interest on assets in Flexible Savings, which can be unstaked and spent at any time. &lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Integration with Google and Apple Pay.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Only available for users in Australia and European Economic Area (EEA) countries. &lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;div dir="ltr"&gt;
&lt;a href="https://www.bybit.com/fiat/cards" rel="nofollow noopener" target="_blank"&gt;Bybit’s crypto card&lt;/a&gt; has no annual or hidden fees. However, the foreign exchange fee is 0.5% on top of Mastercard's rate. Meanwhile, the crypto conversion fee is 0.9% in addition to &lt;a href="https://www.coingecko.com/learn/what-is-spot-trading?locale=en" target="_blank"&gt;spot&lt;/a&gt; fees. It is worth noting that while users can get the virtual Bybit card for free, the physical card costs 5 EUR/GBP/USDT. &lt;/div&gt;

&lt;p dir="ltr"&gt;ATM withdrawals are free for the first 100 EUR/GBP each month, with a 2% fee thereafter. Spending limits are set at 5,000 EUR/GBP daily, 50,000 EUR/GBP monthly, and 250,000 EUR/GBP annually.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;ether.fi Cash: Non-Custodial Cashback Credit Card&lt;/h2&gt;

&lt;p dir="ltr"&gt;A new card to watch in the non-custodial card is ether.fi’s credit card – &lt;a href="https://app.ether.fi/cash" rel="nofollow noopener" target="_blank"&gt;Cash&lt;/a&gt;. Users can load their account with fiat money from their traditional bank account, or any non-custodial wallet. At time of writing, users can enjoy 3% cashback on all purchases across all card levels. &lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;img alt="ether.fi Cash credit card" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/22912/content_etherfi_card.webp" style="width: 1200px; height: 717px;"&gt;&lt;/div&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;p dir="ltr"&gt;ether.fi’s Cash acts as a spending account that lets users borrow against and spend their ether.fi balance in the physical world. Unlike other decentralized cards, ether.fi's Cash is a credit card.&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Crypto as collateral&lt;/strong&gt;: Users can borrow against your crypto for credit card purchases, and can soon pay for their card balance with native yields.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Spend crypto in the physical world&lt;/strong&gt;: Accepted anywhere VISA is accepted, with no need to off-ramp or incur transfer fees to use crypto in the real world.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Non-custodial&lt;/strong&gt;: Your crypto assets belong to you, and neither ether.fi nor any third-party can access your keys.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Gasless transactions&lt;/strong&gt;: You don’t have to pay for &lt;a href="https://www.coingecko.com/learn/gas-fees?locale=en" target="_blank"&gt;gas&lt;/a&gt; on any transactions using your Cash account.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;There are different tiers for card holders based on their loyalty tier:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Core: Ideal for users who want to use the card for everyday transactions. Users get 1 free physical card and 3 virtual cards. It has no annual fees, and a spending limit of $30K a day.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Luxe&lt;/strong&gt;: Users who need more cards and require a higher spending limit might find Luxe a better fit for them, as users get 2 free physical cards and 10 virtual cards. It has no annual fees, and a spending limit of $50K a day.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Pinnacle&lt;/strong&gt;: Ideal for users in the crypto space, as it comes with 1 free conference per year. It also comes with 5 free physical cards, and 50 virtual cards. It has no annual fees, and a spending limit of $100K a day.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;VIP&lt;/strong&gt;: This is by invitation only, and offers unlimited virtual cards.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;p dir="ltr"&gt;Regardless of your tier, however, there is a fixed 2% fee and a limit of 3 withdrawals a day for ATM withdrawals.&lt;/p&gt;

&lt;p dir="ltr"&gt;There is also a FX rate of 1% across all tiers, which applies if you are using the card for non-US dollar transactions. There are plans to include native EURO support soon. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;MetaMask: Bringing Worldwide Accessibility to the MetaMask Wallet With Mastercard&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="MetaMask card" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/33772/content_MetaMask_card.webp" style="width: 1200px; height: 606px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;The MetaMask Card will let users spend their crypto in everyday transactions wherever Mastercard is accepted. Users can designate tokens for their MetaMask wallets and set spending limits, while maintaining complete access to their funds until they complete a transaction. When a transaction takes place, the MetaMask Card will convert available tokens into fiat currency.&lt;/p&gt;

&lt;p dir="ltr"&gt;The MetaMask Card runs on Linea, a zkEVM Layer 2 that offers lower gas fees and faster transaction processing, enabling instant payments.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Features&lt;/h3&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Supported tokens&lt;/strong&gt;: Six tokens worldwide – USDC, USDT, &lt;a href="https://www.coingecko.com/en/coins/weth" target="_blank"&gt;wETH&lt;/a&gt;, &lt;a href="https://www.coingecko.com/en/coins/monerium-eur-money" target="_blank"&gt;EURe&lt;/a&gt;, &lt;a href="https://www.coingecko.com/en/coins/monerium-gbp-emoney" target="_blank"&gt;GBPe&lt;/a&gt;, and aUSDC. For US users, USDC and aUSDC are the only supported tokens. &lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Mobile payment integration&lt;/strong&gt; with Apple Pay or Google Pay.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Available in Argentina, Brazil, Colombia, Mexico, Europe (excluding Czechia, Estonia, Latvia and Lithuania), and the UK. On the US side, the early access has ended at time of writing, although there is a waitlist for an upcoming launch.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;There are two options for card holders to choose from:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Virtual card&lt;/strong&gt;: This is only a virtual card and is free to use, with users earning 1% crypto cashback in USDC for all eligible transactions. It has a limit of $10,000 per transaction, and $15,000 per day.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Metal card&lt;/strong&gt;: A premium physical metal card that offers exclusive benefits like 3% back on the first $10,000 spent yearly (1% thereafter), higher spending and ATM withdrawal limits, and exclusive access and perks. It has a limit of $20,000 per transaction, and $30,000 per day.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees&lt;/h3&gt;

&lt;p dir="ltr"&gt;For the virtual card, there are no annual or maintenance fees. For the premium Metal card, there is a $199 annual subscription fee. &lt;/p&gt;

&lt;p dir="ltr"&gt;There are no fees for stablecoins in the cardholder’s local currency, although foreign currency stablecoins incur a 0.5% fee for transactions. DeFi tokens incur no fees up to $1,200 per month, then 0.5%, while other cryptocurrencies like wETH incur a 0.875% fee.&lt;/p&gt;

&lt;p dir="ltr"&gt;There are also network gas fees, ATM withdrawal fees (2%), and cross-border fees of 1% for Virtual cards (free for Metal).&lt;/p&gt;

&lt;h2 dir="ltr"&gt;KAST: Multi-Chain Cards with Enhanced SOL Staking Rewards&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="KAST cards" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/33773/content_KAST_cards.webp" style="width: 1080px; height: 337px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;The KAST Card enables users to spend stablecoins and crypto at over 100 million merchants and ATMs globally without requiring a traditional bank account. Users can create their card in minutes through a 2-3 minute KYC process and start spending instantly. The card automatically converts crypto to fiat at the point of purchase, eliminating the need for pre-conversion or preloading funds.&lt;/p&gt;

&lt;p dir="ltr"&gt;The KAST Card runs on multiple blockchain networks and offers multi-chain support for flexibility, while providing virtual USD bank accounts that function like traditional banking.&lt;/p&gt;

&lt;p dir="ltr"&gt;Features&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Supported tokens&lt;/strong&gt;: USDC, USDT, and USDe with multi-chain compatibility across various blockchain networks.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Mobile payment integration&lt;/strong&gt; with Apple Pay and Google Pay.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Global availability&lt;/strong&gt; in over 150 countries (excluding India and China due to regulatory restrictions).&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Unlimited spending limits&lt;/strong&gt;: No daily transaction limits, with ATM withdrawal allowance up to $20,000 per day.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;SOL staking integration&lt;/strong&gt;: Earn up to 21% APY through KAST validator with 0% commission + 100% MEV kickback.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;KAST Points Program&lt;/strong&gt;: Earn points on every transaction for potential future airdrops and rewards.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;KAST offers two distinct card categories:&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Regular KAST Cards&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Standard (K Card)&lt;/strong&gt;: Free option with 4% rewards on all spending in 2025 and earn KAST points on staked SOL.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Premium (X Card)&lt;/strong&gt;: $1,000/year with 8% rewards, 2x KAST points on staked SOL, and premium metal card.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Limited (Founders Edition)&lt;/strong&gt;: $5,000 one-time payment with 8% rewards, VIP concierge access, 2x KAST points on staked SOL, and no recurring fees.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Solana Cards (with enhanced SOL staking benefits)&lt;/strong&gt;:&lt;/p&gt;

&lt;p dir="ltr"&gt;You must stake SOL with the KAST validator in your Solana wallet and connect your Solana wallet to the Solana Card.&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Solana Card (Standard)&lt;/strong&gt;: Free with 4% rewards on all card spend, earn KAST points on staked SOL, and receive 3.5-7% APY.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Solana Illuma (Premium)&lt;/strong&gt;: $1,000/year with 8% rewards on all card spend, 2x KAST points on staked SOL, and receive 7-14% APY.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Solana Gold&lt;/strong&gt;: $10,000/year with 12% on all card spend, VIP concierge access, earn 3x KAST points on staked SOL, and receive 14-21% APY. There is also Solana Solid Gold, which is by invite only. Most of the benefits are the same as Solana Gold. &lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Bitcoin Cards&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Bitcoin Silver Card&lt;/strong&gt;: Free with 4% rewards on card spend and earn KAST points on staked SOL.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Bitcoin Black Card&lt;/strong&gt;: $1,000/year with 8% rewards on all card spend and 2x KAST points on staked SOL.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;Cost and Fees &lt;/h3&gt;

&lt;p dir="ltr"&gt;Annual fees range from free for regular Standard cards ($2 in certain countries) to $10,000 for Solana Gold. &lt;/p&gt;

&lt;p dir="ltr"&gt;Transaction fees include ~0% crypto-to-fiat conversion costs (among the lowest in the industry) and a 2% foreign transaction fee for international purchases.&lt;/p&gt;

&lt;p dir="ltr"&gt;ATM fees are notably higher: 5% for local withdrawals and 10% for international ATM usage, with no free withdrawal allowances offered. Network gas fees are minimal and variable depending on the blockchain used.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Comparing The Top Crypto Cards &lt;/h2&gt;

&lt;table border="1" cellpadding="5" cellspacing="5" style="width:100%;"&gt;
	&lt;colgroup&gt;
		&lt;col width="111"&gt;
		&lt;col width="69"&gt;
		&lt;col width="223"&gt;
		&lt;col width="223"&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;Crypto Card&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;Type&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;Annual Fees&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;ATM Withdrawal Fees&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Nexo&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Credit and Debit&lt;/td&gt;
			&lt;td&gt;None&lt;/td&gt;
			&lt;td&gt;Limited free withdrawals based on loyalty tier. Subsequent withdrawals are subject to 2% fees&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Coca&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Debit&lt;/td&gt;
			&lt;td&gt;None&lt;/td&gt;
			&lt;td&gt;None globally up to $200 monthly&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Bitget Wallet Card&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Debit&lt;/td&gt;
			&lt;td&gt;None&lt;/td&gt;
			&lt;td&gt;ATM withdrawal fees are set by the regional issuing partner and local banks.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Brighty&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Debit&lt;/td&gt;
			&lt;td&gt;€0 - €216&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;EEA (€3.00 - €3.50, dependent on plan)&lt;br&gt;
			Non EEA (€3.00 - €3.50 + 3 - 3.5%, dependent on plan)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Rizon&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;Debit&lt;/td&gt;
			&lt;td&gt;$0 for Standard, $3.99/mo for Gold, $6.99/mo for Emerald)&lt;/td&gt;
			&lt;td&gt;$1 + 0.65% for Standard and Gold, $0.10 for Emerald. All plans have a $250/transaction withdrawal limit.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;Coinbase&lt;/b&gt;&lt;/td&gt;
			&lt;td&gt;Debit&lt;/td&gt;
			&lt;td&gt;None&lt;/td&gt;
			&lt;td&gt;None. ATM operator fees may apply&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;Bybit&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Debit&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;None&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Free for first 100 EUR/GBP each month, 2% fee thereafter&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;ether.fi Cash&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Credit&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;0.01 - 1 ETH&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Fixed 2% fee, $10K limit, and 3 withdrawals a day&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;MetaMask&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Debit&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;None (Virtual), $199 (Metal)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2% ATM withdrawal fees&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-b80add92-7fff-81bc-33cc-49048270f191"&gt;KAST Regular Cards&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Debit&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Free - $10,000 (depending on tier)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$3 + 2% local, $3 + 2% (+2% FX) international&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 dir="ltr"&gt;More Crypto Cards to Check Out&lt;/h2&gt;

&lt;h3 dir="ltr"&gt;Oobit&lt;/h3&gt;

&lt;p&gt;Most crypto cards require a deposit before spending. Oobit eliminates that. Backed by Tether,it's a crypto card that lets you spend directly from your self-custody wallet; MetaMask, Trust Wallet, Phantom, and more with no top-ups or intermediate accounts.&lt;/p&gt;

&lt;p&gt;Oobit's DePay protocol executes a just-in-time token transfer the moment you tap to pay. Funds stay in your wallet until purchase, then settle in local currency via Visa rails. KYC takes minutes. Virtual card ready the same day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
&lt;strong&gt;Supported tokens:&lt;/strong&gt; BTC, ETH, USDT, USDC, SOL, OOB, and more&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;True self-custody:&lt;/strong&gt; Funds leave your wallet only at payment&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Global coverage:&lt;/strong&gt; 150M+ Visa merchants across 100+ countries&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Cashback:&lt;/strong&gt; Up to 10% in OOB on eligible transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost and Fees&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Free to activate card. No monthly fees. Payment costs up to 1% (minimum $0.25). A small international transaction fee may apply. External wallet withdrawals carry no Oobit fee, only the blockchain network fee.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Final Thoughts&lt;/h2&gt;

&lt;p dir="ltr"&gt;Crypto cards offer an easy and seamless way to manage and spend digital assets, similarly with regular payment cards in traditional finance. These cards provide users with convenience, enhanced security, and unique benefits, including cashback rewards, staking options, and subscription packages. That said, choosing a suitable crypto card can be a complex decision-making process involving a few relevant considerations, such as taxes, custody, flexibility, regulations, and more.&lt;/p&gt;

&lt;p dir="ltr"&gt;Always do your own research before choosing any crypto cards or staking any digital assets. This article is only meant for informational purposes and should not be taken as financial advice. &lt;/p&gt;
</content>
    <author>
      <name>CoinGecko</name>
    </author>
    <url>https://www.coingecko.com/learn/top-crypto-cards?locale=en</url>
    <summary>
What Are Crypto Cards?

Crypto cards include credit, debit, and prepaid cards, which allow holders to spend their digital assets in their everyday life. These cards are typically issued by cryptoc...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135764</id>
    <published>2026-09-02T10:44:51Z</published>
    <updated>2026-09-02T09:14:35Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/proof-of-reserves-how-to-check-an-exchange-reserves-health?locale=en"/>
    <title>Proof of Reserves: How to Check an Exchange’s Reserves Health</title>
    <content type="html">&lt;p dir="ltr"&gt;Proof of Reserves (PoR) gives crypto exchange users evidence of the assets an exchange holds and the customer liabilities those assets are intended to cover.&lt;/p&gt;

&lt;p dir="ltr"&gt;On CoinGecko, just 79 of 166 exchanges have verified reserves. This means that users of more than half of these exchanges do not have evidence that the exchange has sufficient reserves to cover its liabilities in the event of mass withdrawals.&lt;/p&gt;

&lt;p dir="ltr"&gt;In this article, we explain what PoR verification is, why exchanges use it, and how to verify whether an exchange has sufficient reserves to cover customer liabilities, including how to check your personal balance using a Merkle tree.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What Is Proof of Reserves?&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://www.coingecko.com/learn/what-is-proof-of-reserves-por" target="_blank"&gt;Proof of Reserves&lt;/a&gt; (PoR) is a method of verifying an exchange's assets and comparing them with its customer liabilities. An independent assessor checks the assets reported by the exchange, verifies control of the relevant wallets, and reviews the liabilities included in the assessment.&lt;/p&gt;

&lt;p dir="ltr"&gt;The purpose is to provide evidence that the exchange holds enough assets to cover the customer liabilities included in the scope of the assessment.&lt;/p&gt;

&lt;p dir="ltr"&gt;Since 2019, CoinGecko has developed and introduced &lt;a href="https://support.coingecko.com/hc/en-us/articles/36442561461657-Trust-Score-Methodology" target="_blank"&gt;Trust Score&lt;/a&gt; to users as a more reliable and multi-dimensional measure of an exchange's quality. The Trust Score methodology goes beyond reported volume to consider a comprehensive set of components, including liquidity, cybersecurity, and more, to arrive at an overall score for an exchange.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;How Proof of Reserves Works&lt;/h2&gt;

&lt;p dir="ltr"&gt;PoR combines two types of evidence: proof of assets and proof of liabilities.&lt;/p&gt;

&lt;p dir="ltr"&gt;For liabilities, an exchange can use a Merkle tree. Customer balances are converted into cryptographic hashes and combined into a tree. The final hash, called the Merkle root, acts as a fingerprint of the reported balances at the time of the assessment.&lt;/p&gt;

&lt;p dir="ltr"&gt;A customer can receive a Merkle proof containing the hashes needed to verify that their balance is included in that tree. This allows the customer to verify inclusion without exposing every customer's balance.&lt;/p&gt;

&lt;p dir="ltr"&gt;For assets, the assessor verifies that the exchange controls the reported blockchain addresses. This can involve cryptographic signatures or transactions requested by the assessor. The assessor then compares the verified assets with the customer liabilities included in the assessment.&lt;/p&gt;

&lt;p dir="ltr"&gt;The result is a point-in-time comparison between assets and liabilities. It does not establish the exchange's financial position in every respect.&lt;/p&gt;

&lt;p dir="ltr"&gt;A useful PoR should let you answer two questions:&lt;/p&gt;

&lt;ul dir="ltr"&gt;
	&lt;li role="presentation"&gt;What assets does the exchange control?&lt;/li&gt;
	&lt;li role="presentation"&gt;Do those assets cover its customer liabilities?&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;For example:&lt;/p&gt;

&lt;ul dir="ltr"&gt;
	&lt;li&gt;Reserves: $500 million&lt;/li&gt;
	&lt;li&gt;Customer liabilities: $450 million&lt;/li&gt;
	&lt;li&gt;Reserve coverage: 111%&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;This means an exchange has enough assets to cover all existing customer liabilities.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;How to Verify CEX Reserves&lt;/h2&gt;

&lt;p dir="ltr"&gt;We demonstrate the process using the &lt;a href="https://www.kucoin.com/proof-of-reserves"&gt;KuCoin Proof of Reserves verification report&lt;/a&gt;, published on August 10, 2026.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;1. What Assets Are Included in PoR?&lt;/h3&gt;

&lt;p dir="ltr"&gt;Every PoR has a defined scope, so you should check which assets and networks were included.&lt;/p&gt;

&lt;p dir="ltr"&gt;The KuCoin assessment covered BTC, ETH, USDT, and USDC across 38 networks, including Bitcoin, Ethereum, Tron, Solana, BSC, Arbitrum, Base, and TON.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img alt="Proof of Reserve Scope &amp;amp; Findings" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136348/content_image_%2810%29.webp" style="width: 990px; height: 872px;"&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Why are only four assets reviewed? A PoR assessment is performed against a defined scope. The exchange and assessor determine which assets and networks are included in the verification. The four assets covered by the KuCoin assessment represent only part of the assets traded on the exchange. The result therefore does not verify every asset or the exchange's complete financial position.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;2. Does the Exchange Control the Wallets?&lt;/h3&gt;

&lt;p dir="ltr"&gt;Another important part of reserve verification is ensuring that the wallets in scope are controlled by the exchange.&lt;/p&gt;

&lt;p dir="ltr"&gt;Look for evidence of control - this can include cryptographic signatures, on-chain transactions requested by the assessor, or another method that demonstrates the exchange can access the reported funds.&lt;/p&gt;

&lt;p dir="ltr"&gt;For the KuCoin assessment, the exchange provided public keys and wallet addresses for the assets in scope. KuCoin then initiated small outgoing transactions from the reported addresses using amounts specified by Hacken. Hacken then monitored the relevant blockchains and confirmed that the transactions originated from the expected addresses.&lt;/p&gt;

&lt;p dir="ltr"&gt;You may also encounter other ownership verification methodologies. One common method is signature verification, where the exchange signs a predefined message using the private key associated with the reported wallet address. The assessor then verifies the signature against the corresponding public key, providing evidence that the exchange controls the private key without requiring it to transfer any funds or reveal private key.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img alt="Verified Wallets" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136349/content_image_%2811%29.webp" style="width: 1200px; height: 709px;"&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;3. What Customer Liabilities Are Included?&lt;/h3&gt;

&lt;p dir="ltr"&gt;A PoR should state which customer liabilities it measures. Some assessments cover spot balances only. Others may include margin positions, lending balances, or staked assets. The liability scope directly affects the coverage calculation:&lt;/p&gt;

&lt;p dir="ltr"&gt;Reserve coverage = verified reserves ÷ verified customer liabilities&lt;/p&gt;

&lt;p dir="ltr"&gt;An exchange that publishes wallet balances without corresponding customer liabilities is not giving users enough information to calculate coverage and determine whether it can cover those liabilities.&lt;/p&gt;

&lt;p dir="ltr"&gt;For the KuCoin assessment, Hacken received a liabilities report covering client balances greater than 0.00000000 for the four in-scope assets. For the reserves report, KuCoin provided aggregated liability data rather than individual account details.&lt;/p&gt;

&lt;p dir="ltr"&gt;This protects customer privacy while limiting the assessor's ability to connect an individual balance to a specific account.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;4. What Is the Reserve Coverage?&lt;/h3&gt;

&lt;p dir="ltr"&gt;There are two main approaches to Proof of Reserves: 1:1 reserve backing and overall customer-liability coverage.&lt;/p&gt;

&lt;p dir="ltr"&gt;With 1:1 reserve backing, each asset held by customers is matched by an equal or greater amount of the same asset in the exchange's reserves. For example, if customers collectively hold 1,000 BTC, the exchange should hold at least 1,000 BTC in verified reserves. This approach provides direct coverage for each asset and is generally considered the stronger model from a risk-management perspective. Some regulatory frameworks also emphasize or require asset-level backing.&lt;/p&gt;

&lt;p dir="ltr"&gt;The more common approach is to assess whether the exchange's total reserves cover its total customer liabilities. Under this model, the exchange can use a smaller set of liquid reserve assets to cover liabilities across the platform. This can be more practical and can reduce reliance on less liquid assets or volatile altcoins.&lt;/p&gt;

&lt;p dir="ltr"&gt;However, the composition of those reserves matters. If an exchange uses its own native token as a significant reserve asset, the apparent coverage can deteriorate rapidly if the token loses value. The collapse of FTX illustrated this risk: FTX's balance sheet relied heavily on FTT, its native token, creating a feedback loop between the exchange's solvency and the value of its own asset.&lt;/p&gt;

&lt;p dir="ltr"&gt;Reserve coverage therefore needs to be assessed not only by its percentage, but also by the method used and the assets providing the coverage.&lt;/p&gt;

&lt;p dir="ltr"&gt;For an asset-level PoR, an exchange could be fully backed in BTC but undercollateralized in USDT. For an overall-liability PoR, the exchange may instead use BTC, ETH, USDT, and USDC to cover customer liabilities across the platform.&lt;/p&gt;

&lt;p dir="ltr"&gt;The quality and liquidity of the reserve assets also influence the strength of the coverage. BTC, ETH, USDT, and USDC have deep markets and can generally be transferred or sold more easily than an exchange's own token or an asset with limited liquidity.&lt;/p&gt;

&lt;p dir="ltr"&gt;In our example, KuCoin's report shows collateral above 100% for each asset:&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img loading="lazy" src="data:image/png;base64,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LbQHN1dwI/XjH/84vfWt/y9dffXVQbX2rrtm5zFvf/sW6dZb+1dV26I5cHRVd6ut3pl06/Vwueb92Mc+ln7wgx8MpyaNv99cRdxmm/eNuTqrgXrI1f/939vT7343+mq2NPjnP8c+CEv7qc+9ao5h6OFfWk9Xhodz8yO+pblyffTRR7VTPfvZz0ozZ87M8YLSME8+YqN/ly222CKdeOKJSefBcInOF503p59+epvSlV39wUTat+TA0cO9dLVcD08bUDZWYHFQwMdgBayAFbACVsAKLAIFomHT0jC2oRM/DCA3kzUP1GHrA7l2vHWClwXacYojqH0gzwelMY0aILuqheKLAHK9eMWyUDhAVEbwsiJkocuLE4A8n/waQA41bkpf4c17OdjMmFEapEHYmuWWWy7fOqsrwI95zGMyr8btPe/ZOv33v//N8Zprrtlcxds3HXHE4emtb31L02yVwz7jjDPSUUd1jVgunovNIYcc2lY/97nPbZrok9Ipp3w7bbjhhi3/ta99LfubbLJx+sxnPpOhW34z2Wy23XbbzCmn/dct3Ntss03TjN3VZFNzBXGD5mriJ9LHPrZPevKT18ucvjJou+22y/7wRv+o97vf/Zort69L22///rT66qunX//61+1VS33m+ROf+Hg666wz0wEHHJCWWWaZPMVvfvObVF9hzuQ8br75zRPSm9+8ecab3vSmtP76T0l6WJWm0/685z3vkZuxIDTME4+z+cIXjkk/+clPc3bGjBnNPr45nxf77bdfWmuttTKvfwNdBdeVYBG6on7xxX+Wm1ZZZZVm/I/Teef9MunYMtlsfvKTHzdbv6yAFVg8FfBRWQErYAWsgBVYOApAadQmW03v+YXJ6pRXXUCxAN06yokToOMVB6DjoTS39TjVQVcTOehqg6trocsHH3WyUOaEUhc1ssoHFEOplV+jdH41sxj45fOw5XO6av7UgG266aZJTeluu+3WNILd50nPOefn83zEhx12aNL3z77uda9Le+21V9N4Py7pwVpqNGPSaJTWWWed9PKXvyxjxRVXjHTT0D4jc8otv/xySbfOquFSga5qq0l/5StfmV772temQw89NC2/fPk8qubV06lVV2PWrFnpzDPPSHvvvXd617veldRcP/GJT0xnnPHT9KEPfTB94AM7ple96lVptdVWS7od/IUvfEE7/M9/Lk1dS8yjc8UVVzYN9VkZZ599TtIVXk2lfT/44IPSIx7xCIUZC0LDPPE4m5///Jw2s91226bdd/9IPi823fTVTVP+jdzQqkD7/Jvf/FZu0jmUnWajr8P61a9+ldQs77TTh/L4H//4R+noo49usn5ZAStgBZYABXyIVsAKWAErsEgUUHMXCwMjr2zWNcO1QFA9C10zqYTmgLG14pUXgN76kQsL3ZxQagENzYg6BVD4ibg6Jx/ora95xAvyaywWDe+1116bH4IUDWDdxKqRrD8vqoN/05veKJOhJz7HlbxMzMVGV0vvvnt2czX2zvSOd7wjPfOZz8rYbLPN2ll0C20bzIGj77ONMn1l0dprP7ZpEB+Z8ZSnrN80j6WRV42u3MrW2HjjV7RXbWv+Pve5T7rxxv80zfBZ6TnPeW7eT+3vd7/7vbZMTV4bLADnlltuaZr7VyQ1wTH9gtAw5h62uvL/i190n39+U3P1ua6RRi9/+ctb6txzyx9D9KC0hz+8fAZZdw1su+126UlPWi9tsskm6dJLL00333xzO8aOFbACVsAKLFkK+GitgBWwAgtLAWDSpWDimrvvvrs3R8TQjYPOr4thND9eDfTrtZageiA3rIoFKHHkZGsAddg+BAv6vC5K9QqbYEo3vPWVUH22stnfMa8zzjgj/c//PCVjo402yvkrr7wiW21WWeWBMj3c+973TroVWuQtt9w68nO+yk0GPbhIn6fVE34vvPDCpAZVGPUZ2snmivxf/3pluNnqA9c1MjnYXHbZ5QOvM7qi20XFu+KKK/LDr/Rk4Z/85CdJsfZTmNdmv8w8equG/7vf/U4KfOlLx7a3C6vpPPXUU9qBC0LDdvIh55prrmn/YKBbuYf/EKLyBzzgATIZl1/enUfHHvvF9PSnPz3zsdFVdt0i/YpXbJzqW7Mjb2sFrIAVsAJWYAlTwIdrBazAPVRAzd+cTDFRXZ2TL2hOWSgNonxxUGL5gnhB/kSImrDQXdENTuPlBxRDWU9cxNAfq5xQ5+UHoMwB3TgonMYJUSt/Sje8a61Vrqpph/W04VuaK4Tya+grgCJeY401s6vbirPTbC677LJm23/985//bB9WtfLKK6cHPnBsU9wfMTbSbce6nTkyz3zmM9MOO2yfdJvr//3f/wU911af441Ba621Vv6crT5rG9BnfcN/znOeHaUT2pNO+lZuxlV0//vfP/2///fWvJ/a10c96lGi5yt0C7DmDahR1NOhY5Hrrrs+uwtKwzz5iM0qq6zS3p6stf/xj3+Mqbrssr+03GMfu3brr7rqqukzn/l0+va3T04777xT0q3gugVdBWriP/OZzzTN9Lw/AE3zGFbAClgBK2AFrMDipICPxQrMvQJQGrfhkWrcag5G16kGuhyQr6QO84oD9dzQ1SsfubDiBEAmzx056LicbDZAroFiG6r30lhBpCwgN4+RI6624UNpdqHURx3QjlUtMLWf0qyGKQ1+9CTkj3zkI72vErryyivT977X3ZL7yEc+Ilc/7WlPy1abk046KdWfTZUYuqqonLD++uv3RBE3J9BnbeN2ZV0pPOqoI9M73/nO9Pa3vz1FI6R5dAVVa8ofBT3lt+af/OQnt6Gar8c//vH5s7b6vO2GG74oHXHEEekHPzgtPf7xj0sPe9jD2tqJnHPO6T63utVWW6Vdd90176c+e/zXv/61HXrHHbe3/vx27nWvpcdMuaA0HLNQRTz1qU9to09+8pP5dogg/vznS9KJJ54UYYraY489Nj+IbP31n5r0RGv9QeOQQw5Jv/jFL/JnoTVAtzrrQVbyDStgBayAFbACVsAKWIEhBRzeIwWA3viJ+ote4VAQ46CbDzp/qLztk6BfE/OoHvo5ccNQfaDOQRkL5LVUA7QlUBrblmgcGMs1dH5pfHYGG2BqN7x6ou+rX/2qFD+6dfiFL3xh2m679+fmcqONXppuuOGGnNZnQd/85jdnX1dG9VAmBbqSt/HGmzRN3m5Jje5rXvOadPzxxyuVoa/Iyc5cbtZcc838j6Jh2odPfOITzdW/U9KHPrRTbkrFC/p8sZrM888/X2FG3RCr+dxrr73Tfvt9POf0edEHPnCV7OtrczbaaKP0vve9L+27775N4/uy/FCrb33r5LTppq9J+rqcXDjJ5uEP7xrjr3/9683xfyMdeeRR+SnD9VXzAw74bHMV84BJZpt/6QWl4UR7+KxnPbNNf+MbJzQ6bprPi912+3DSk7TVuKpg1VUfmOIPLvrF0e3L4vXv8IUvfCHps9Z68rRukxYv6AqyrGEFrIAVsAJWwApYAStgBSZSYLKc3n9GTe0HB11TGFzYur72lYfxxykvaIwgX6h9xQJ089R5+YJqhPCh1EOxygnKQ2lgR/mqEaAbpzpxNaCfhxLro6FT+pZmHcTOO++cHvrQh8rNuOKKK5urcCc2V3a/33tY0NZbb902KEDSZy6j6dWV2C996UtJn2H91a+6xvMd79givf71r8/zzu1Gn/Vcb73yNUEae/DBhyR9lc1Xv/rVfGurviZJvHDaaT9IF130B7kZL37xi7PVRo2UrtqqiVKsD1p/8YtfbG+91b6rwdVnRFWrGjX3eir0ve51L4WTYsMNN2yb8z/+8Y9pxx13THvuuWe68MLfZc00nyZRc37cccfJXShYUBpOtPN62vVWW23ZluiKrc4LXcW95ZZyS7JuX9a/AZRfFD2cKprfm266Ke2++0eT/nCiP1bEHx0U648V7cR2rIAVsAJWwApYAStgBazAXChQN3JQ3odqOHS+4hr1mOChq4fOj/x4NuYC2t5BtUDvrsiokxUAlWUAY8bmRLOB/jwNFa92TMwHpTbisDEAyK4aWjnKywLtXBFP+YZXX7Ojhx/pduH6yqgOQNBVwiOPPDJtvfV7FLbQ7b5f//rX8lfO1A+/AtIjH/nItMsuO6cPfvCDbb2cpZaaKZMxc+ZS2WozHn/kkUek5z//+T1R1bC+r7kie9BBByXdnjxzZpF46aW7+TbddNP0lrdsnnRsmn8Y+tqe4477Utpggw2Svson8kBSU/W1r301vehFLww6LTXOfkeB5vn85w9MuvU6OFldCdfXBOnrefTZXnHR/M6cOVoL1UyGen8mq11QGtb7UP9ban/U8KtZ1XkAiMrQefKc5zwn6byRNplsNnp685e+dGxzNfjVaeml+7dmz2z+fTfeeOP8meim1C8rYAWsgBWwAlbAClgBKzBPCkD3vjQauFET1TnoxoyqnRsOurnqNTQHlAZUfgDo9UHByw6PH44BlbXjlQdyLF8Aco18OWHlC0Culx+ImrDiSzcmbwpDT1TWA6H0/bpnnPHTdMwxX0i6LVlfKXT66T9M4z28SU8sPuKIw9P55/8qff/730tf/vJx2f/e976b3va2t4054t122y1deuklGW972/9r8+PxaoQOO+zQ9Jvf/Do3SV//+tez/973bp0e/OAHZ+7iiy/O8+kKYEyoRvfDH/5w0v7Her/73YWRzlbNmI5Tc5900onNXGXu73zn1PTEJz4x18RmvP2LvKyu8mq9H/7wB+mLXzwm/ehHP8qarLnmmkm3XOsreLQvZ511pspzc6xY0D5kcoLNgQd+Lh+n6t/97nePqdxmm23a/Oc+99kUPwtKw8k00YO7dB78+tfn5/NCvs4TNeD6t4v9C6sHce23335Jn9M9+eRvJdV985sn5M/x7r//p7JeUWtrBayAFbACVsAKWAErYAXmRYG6URtvPIxtPuvaeo7aV83cxhoTALILY9ev55UPpVa+ACXOE1Qb5YSg5JQRszUAABAASURBVMPoWiA3uFDWV22Mq23wUOqmRcMbBwDkRlJXLNdb70njXiGN+rBA0lVTPYRIV/GCn19WX3Okq7lPfvJ6aYUVVphf0+Z5ZjZXWh//+Mc3V4vXS1onk9VmblwgP+jqGc94RlpjjdXzCTM34xdkrY7tyU9+cj7O+a3hRPuthlvnhf7AAExUmnPaz3XWWSc9p7kSvO66687xOZgHe2MFrIAVsAJWwApYAStgBcZRQI0alPejUOxwqWrEwej8cA76dTB+rLmhn9d8NVSjGMavgy4H5J5D4wQoTajmEKDkofCA6BZAHi9C4wOKA0C4uRb68bRqeNsjsWMFRitg1gpYAStgBayAFbACVsAKTEsFoGvU4gDU4IUvC2NrxAfq+tqP/EQWurmh+MNzQOFjnshD4SNWvvah5MUPQ3VC8OHLBpSDbg7ofNUoL8RnemvfDa/UMKzAYqmAD8oKWAErYAWsgBWwAlZgOisA5crnqGOoG73IQ9cIBjee1XhhOF9z0F+/zsmH/nrQj+u5oeSgzKnxgmqg5CIWJ0DhoYwJLuqg5MUL0I/FueGVCoYVsAKLvwI+QitgBayAFbACVsAKTEMFYGwTp8OAPh9NoHICdPk6Fz6QbwFWbUA5IMJsYc6aTY3NAwYb6MbVOflAXhuKDU5DoXCAwlynfA6aTe03YX5Bt1Ymmg2U8W54GzH8sgJWwAosaQr4eK2AFbACVsAKWIGpp8BwMzccT7THUBq8UTVQcpoPxjaHw2NUJy6s/ACUuSKOGih8xMpDWQu6HBROedUK8gOKawQP5OY34mELo/NueIeVcmwFrIAVsAJLmgI+XitgBayAFbACi1wBNXlAbz+gH9dJ1SsOK1+IOKy4AJT5oNjgZVUPhYexVnnVBYbj4MNGHspciqH4UQMlhtIEA+M2tRovADE8KVYwbGvODa/UMKyAFbACVsAKWIGBAjZWwApYASuwKBSArpGr149mTlztQ6mHYiMHJYZih8dFnXghYihNp7ga4+WhzA/F1nUaDx2vHHQxlLXEq7a28oHc+EKpA1SWEXkFMD4/Y0ZpdctW1YYVsAJWwApYAStgBaxAXwFHVsAKWIGFrIAaunpJ6Jo66HzV1LUwZzkoTaTGC9CNg35uVF5crBtWHHRjxQeA3LyqRhx0dVBy0FnVCaoV5AuATJ4reFno81Dmjyc2u+HNsnljBayAFbACVsAKWAErMJkCzlsBK7DgFYDSwA2vpOZumIOxtVEHc5ZTvRBzQzcueFlhuAZKc1nzqoMyB/TzUScLpUb1griw8qHkocxR55QXoOTkB1QH5MZYnBteqWBYAStgBayAFbACVsAKWIG5U8DVVmChKgDk9dTQZWecDZS6UWkouXoOoG0O6zHj1QQfVmNqX7EAyOS5Iw+Fy4lqA6VxBdr6GBNl0OWCG89qLJDTbnizDN5YAStgBayAFbACVsAKWAErMO8KeOTCUgBKIzfeemr2JstBN0ddX/tAbj6H5wIyBZ2F4ufEYBNzhRUdPpQGV1wN5QVg5NrKqR6QaR9apQDIY6ImrBteqWNYAStgBayAFbACVsAKWAErYAXmlwILYJ5o4CabGkY3kxoHyIxpFDPZbKDkG3fMa6L1h3OKoZsLOl85IRaALgfFV16IGtmIoTs+KPWRVw0UDop1wyt1DCtgBayAFbACVsAKWAErYAWswBRSQM1bvTtQGriaq/2ol4WxteKjHrq8eCFyYYc56I9RXdRA14SKh1KrPJBkBfkB1QniBfGKhfBllRMXqOPwVad8WPmRc8MrNQwrYAWsgBWwAlbAClgBK2AFrMAiViCaNO1G3bwpngxRH3a4vuaH14ncMF/Hmi/iqBcXCC6sePkaI6tYfiA4WSHysoI41YavWH6gjqNONviwU7DhjUOwtQJWwApYAStgBayAFbACVsAKLDkKRJN2T49Yjd9Ec4y3zjA/XhzzD+djzcgrVo1i2RrKia+t8qPi4JQXIpYdhuYMKOeGVypMZXjfrIAVsAJWwApYAStgBayAFViiFVADJwHCyp8I0RROVFPPVfujxkQ+bMwfcT1GnPKywSuWH5ysELxywjCnOPiwwSkWhucY5tzwShFj2ijgHbUCVsAKWAErYAWsgBWwAourAsPNXBxnNHVhg5eNMWHFjYLyQuTqucKv81EnG/mw4gTFMSasuMjJCsoJ8gXVCPLFh684ID585YU6li9uojrVuOGVCoYVmJ4KeK+tgBWwAlbAClgBK2AFFiMF1MDN6eFEoxdjwo43XnlhvLz4yfKxpmrD1xj5suJHQbmA8qoPiA8u/LDi5atWvlDHNa+cYkF+wA1vKGFrBazANFfAu28FrIAVsAJWwApYgemvwHDDplgYPjI1fsOc6oTgaz842WG+juULqhPkC/LrNUf5qhNUKyvIrxGcxgvKBRd+xMqHX1vxqhVqX3ENjXHDWyti3wpYASuwuCjg47ACVsAKWAErYAWmpQLDDZxiIQ5GTVz4w1Z1QvDhD48JfrhOsXKCfEG+IF8YnktcQHWC4rDyNUaQL16IeCJONaqNGllxsoE6Hq5V7IY3lLK1AlbACliBxVYBH5gVsAJWwApYgemmQN3I1fuuJq6OVScMc3UcY1Qn1LnhOHLj8TGX6lQTUBwQJ1+18mUF+YJyAcUBcaoTxA3byEdOcQ3ximfPni2TNN4Nb5bCGytgBayAFbACS4wCPlArYAWsgBWYogpEw6bdU7MmOxlUJ9R1w3HkxAvjrRO8rOpinOJRvmoCdY041YsLX7F8QbxiWcUBcULwsnUsv8bwuMiJl6/xbnilhGEFrIAVsAJWwAosoQr4sK2AFbACU0eBaNQm2yM1csJkdcqrLqBYqNdRTpxQ84oDNS9fY4TIy4qXFSInTn5AOUF82DonXrFysorlyyoOX1ZxQLFqZIcxZRve//znP+mLX/yiYQ2m3Tlw1NHHpIMOPzodefQXpt2++3fO/83xOeBzwOfAEn4O+H2H/9/tc2BanAPHHntsEob/m33MMceM2X/VBYbrFSs3PE6ccjXqGuWFOi8/apSr/fPOOy/fXhzNqBrV8KNRnYirc/I1Rog5ZMUL8mtM2Yb31ltvTWeeeaZhDabdOXDO2WelX//i7PTzs3827fbdv3P+b47PAZ8DPgd8Dvgc6M4Ba2Etpts5cNZZZ83T+885GTe3NXX9pZdemtSMCmpG1awKigX5QuRka0QuOI0RhvkZM8a2t2OZmGUR25VmzUqvfMt7DGswbc+B1/y/907bfffvnv/b43PA54DPAZ8DPgd8DgydA35fsxDel79q8zk77161+bvH/ffYpMppPkH/lvWYuka5gGqiPrhRNsarPvLhR078G9/+3rTDDjuk5z73ubm7jAZVzaoIxULEsoE6Lz+gevmyqg1fVrEgX5A/ZRvepZdeOq320IcZ1mD6ngOr+/z177DPAZ8DPgd8Dvgc8Dngc2DxPAcWzL/rqsPvHx8yWOcha/beE6+6+sO7OGoGfcODqpzmE/Rv0BszqF2tGbtqNbdqVq1yqw1ybU1Tv1qDWCPXq6bhVn1o2acHDazqHrrGw9MjHvGI9IAHPKB3S7OaUUENqRC+mlj5YeuceEGc8mGDkxUvyBfkT9mGVztoWAErYAWsgBWwAlbAClgBK2AFllgFGBw54ZRYzV7xmm0/1RDjv2IciVLUGMIvTOqFg3WB1P40bp7n7sKgATS+IE62CeuX6gM1D6UYSEC+7RloS6BwLdE4MJZr6PzSGtkZbIDkhjf5xwpYAStgBayAFbACVsAKWAErMEUUUNN4tzZlf4abOLHQNYWKa9T1ta8aGDEuqFiyWTuPG/DZ12BhwEHjNC9RKcVARXfnplVeavIxFpqgIaHYxs0v5aE0sKP8XNRsoBunuobqvaCfhxLr+3gXRcPb2zkHVsAKWAErYAWsgBWwAlbACliBJV6BptHMGqhXGzRsiqEh6p5S5ACTNX/QjB3U9swIumlVS0kzBroCaPzYN1WE39i8fs43Ce1j40NT34Tqg1HXK78BlMa2cce8gMxpPiBBqY04bC5qNkCzTUkNrRzlZYE8Vr4A+ApvWuQ/3gErYAWsgBWwAlbAClgBK2AFlngFmuYsNIgGLuJE46mhlGkazcbkFyiR3f5mUNuSw3Gb6Bzo5hq7fpMbrNtO1dRDw2uKgVGTqzCPD64hctzYeEFJQrHKAwn6ja7qlautfAFKvfzAqFpf4Q11bKeGAt4LK2AFrIAVsAJWwApYASuwpCowaCoZdfwDEhpnUNeWtV1oKrcUNyXKRQOYhmMlG7T5xtdrOBbXQus2AZSmNJrbhurWbNbRHNA4TUJXjeu4oXov5YQg5UMZG1xYIEGB6oTI1TZ4KPvphrdWx74VmGIKeHesgBWwAlbAClgBK2AFlhAF1MQ2TVo5WooZ3qpGXFunoA/oxsLAHzTEMIgHQ6CL1ShCict2UFQZ1ajRJZH0SiN+oMkNeCBBaTw1Foo/SOccdDVApLIFco0CjQ8oDgDh5lrox254W3nsWAErMMUV8O5ZAStgBayAFbACVmDxVaBq1FL0bNHgxlHXNeIGjWzUqyEULdR+5MWPB4hFm4qB35sj001N84r5Ig8iB1eXmzq9IicfSl7+MFQnBB++bEA56OaAzleN8kJ8prf23fBKDcMKWAErMO0U8A5bAStgBayAFbACi6UC0cTq4NTYDTe94hvkRq/r+xomJeiIzkujfzSvMJTN84pr9gP6V2RTVa86aFZp6nTVV0OgieWMAJQclDk1XlAplFzE4gQoPJQxwUUdlLx4AfqxODe8UsGwAlbACliB6a2A994KWAErYAWswOKggJrH4Z5NTZz4OL6BD/3CaAKjrOl+W7duVFtf44WuSpdom2GDecOoJhrdyodBgcY37vD6kEllmyUHO91EqgPyOlBscE26x0esvHyh9hUL0DXEigVAxk9pzip4YwWsgBWwAlZgMVLAh2IFrIAVsALTVYFBYximbTSr4yl9XEcMamGQGMRdQeO1uSYpP+ZtwibbvtpwkB/VXKY0WCeVHz2YSh4Uvjem4RRDl4OuOVVO0PiA4hrBAwmIcIwFRuZ9hXeMVCasgBWwAlbACliBxUgBH4oVsAJWYHoooCazadryzpK3/Qau7UZLrrlsmp1oOHOQN4NCzZfjatPOHwt0OTWZMOBTsVBsko35BpTqu9FjvZxvdgXKAMVQ/KiGEkNpgoFmKSLdsxovQJdXrKJhW3NueKWGYQWsgBWwAlbACliBJUIBH6QVsAJTVgE1ck2DOLx/0cwl9XnRdKpI9Y0FJXQ38mDwIE5hm5pojos7qFMgDOaEZp6BnxpXKaFbvzSlw5/XhVIcdVBiKFa8AF0MZS7x9RqKBSBBQcSqE+oYEJUxzM+YUVrdss0l3lgBK2AFrIAVsAJWwApYgSVIAR+qFZhqCjT9mxq3eregIYOofXHRoDY+NHVVL9ubR7mmRs0qqK4qVKwbOK46AAAQAElEQVSc0Pi9cQ0HTX1j9YLGb165gW6mqGuhNLGqU77k7m4bV/HioKsD2jwUX3WCagX5AiCT64OXhT4PZf54YrMb3iybN1bAClgBK2AFrIAVsAJWYMlWwEc/NRSA0sDlvbk7b5vLt42tmtsmKq+6VoyGDupAQUPGHNmNYJAT19SrcWzc/IIup8Y1k0M1KTU1eqm2yaXBD5RmMzW2UIO4BL0tNBM0jNYWGrdZLvYvNVOUPJQ5oiZVP1ByFZXnANrxbnhrdexbgSmkwKhf6im0e96VKaKAz5Mp8g/h3bACVsAKWIHFTYFFfzxd75cSKaWmiUvNT/v//siHbXL5NajLvjYaO6gBBeqfB0STB5qpabzq1aTbdURXNZlvyrNtck1pM2HeNjalJpX0A42nV2OjFhpCySFAaVyBBMWPMVEKXS648azGAjm92DW83/7qF9Lh+3+0h1O+dkw+WG+swFRX4C9//F36wuf2S/vtsnX6wDtek3Z595vSAXvumE467oh0803/mS+7/99bb2l/P47+3L7tnOPxbcFi6MztMf/ke99qtRv+78wXD/pEOv2UE9Kff//bhabU+ef8NO35/renfT70rvSn3/9moa3rhayAFbACVsAKWIEFpMCgb8yzq18TctBtYEAOTAo7KFGzN3DHmsHVWGgGxVoDLhfLF9+kIW8ynVJnoOGbEBrb1EJjhYbTvjSUvKb5LV69P+FDaWpLYbdVXgAS0CUGnnJyoeQiDg66eSO3WDW8d955Rzrr9FPTRb/9VQ9n/vCUdNedd0qHKY+/XnFp+vpRn884+0ffm/L76x2cPwroF/KrR3w2fe5jO6ffnvez9M+rrszn7K233Jwuv+RP6aennZz2/dC70x8uPP8eL3hn87sQvyN/vPBX7Xzj8W3BXDrfP+mr+TzW+Xzj9dfN5eiFUz63x3zZn//Q+29L6Cj763PPTKccf0w66OO7pS8f9pn873dPj2IyDb/9tS+k66+7Jl39j7+lH377+Hu6nMdbAStgBayAFbACi1qB0seN3Au9XxyZGCKhmUSNa/DqOxsqhzmnXrQha07Jhmq6zJSCT9VPk+ut38Q5G7XVeqJy7WAt1YFYeWXtnC9hgi4HxVdeGJRkEzF0TS2UehUoL0DhoNgF0vBqwUWByy/+Q7r99tvy0vdZcVYSFIj7S/NGVf5Ux3X//lc656ffz7jgV2dP9d31/s0nBX783ZPSuWf+sDfb8ivcOy19r3u13M033Zi+evhnkprglpzCzgW//Fk+j3U+X3v1v6bwns7/Xfvlz36Uvj0f7iyZTMOV7nu/dueXX+E+rW/HClgBK2AFrIAVmP4KqHmrjwJKA5e5aDjDNmRbr+YzapUfDGvzTQzNphmTX019zgWlMU0ic43NryYHzSYHTdOqp1/Jb8bKNF1r/uysfA2HprZx7m7qoDSomg9oSgtUK4gXAIUZUHwoYzM52Kh24LZrQlc/nFusGt4/XXRBHF965GOfkB6x9uPb+JKFeJthu2hxvLUCEypwy803pe9+80ttzYMfumba/qOfTnt87ti0z8FfTW/c4n1p5syZOX/jDdcnNcc58GaRKrD+M1+Qtv3wJzO22fXj6aWv2TytfL8HtPv0+9/8ovUXlPPqN2+V/ud/n5ue9qwX5fUX1Dqe1wpYAStgBayAFVg4CtTNHDRNXNM09laOuEn1+CaAARm24dKAKm4VRKOaEyRAXmkgi1u4uk4Vipt9gFLUuGIzoHBQbGoMlIYVmqCp0vEFoHBAApps00hr/uylzKk2NT9Ajhu3fQGtH3WyUHgodrFqeC+uPsP28Eevk9Z69ONaEf500fifq/vH365IP//paUm3D55x2inp4qZxlljt4MrRbdMXnvfzpuk4Mf3g5K+n8876cVITUpWMcdXQ/O78c5v649NFvzkv3Xbbf3s1WuvKv/w5CX+/6oo2p88XihP+/fe/tfz0drz3wwr89fJL0p133JHpmUstlTZ/zwfTak3TKwJIT/7f56RHrbOuwoyrLv9ztsMbnVf6/OgPT/lG+sUZpyedMzq3huvmNf7vrbemS5rfjTNO+3bSGrqF98amAa/nu+k/N+bzWOfsLbfc3Kb+9fe/tvztt5W7MNpk40z2O9KUpNmz72rnuOrKv4hK/7nx+vTnP1yYrrr80hzHZk72NWrn1c667/3TQ9ZcK2P1hz8yPW+jV6WXbvrmdrqr//X3JD1aonHmZL80RvoJk2m4/L1XTBu84KXpac95UVpm2WWbFca+FvR5MXZFM1bAClgBK2AFrMC8KgClSWvHD4VpsngwcMx7QHWm9djhdQbjoC5qyFGxSgaNKSho6vTSGrIN2vUbDrqmF0hQ0JSVBrtxoh5ooq7xhRKLVA2Qx0csOwzVBZRbbBpevZHUG0QdlPCIRz8+rbX2OnIzrrj04nTbf2/Nfr356pGfS5/YZZv0taMOTN878cvpxOMOSwfvt2v6+K7vzQ1DXas59tr+Hemoz+2TTv7q0ek7J3wpHXf4p9Oe2789fe+E4+rS7OuN5iGf+HDabes3pyMP2LupPzYd/uk90i7velP60iH7N2/gZ+e625sG+NMf3T4J3/tmN48+uylO+OaXDsu13ixmCjSH8/crLmu25fWQNR6e7r/KqiWotk9c/5lt9K+/X9X6cu6666503KGfbs6rN+bPj556/BfTV448IH1sp3el3d/3/3JDqLp7ggvOOyfttcMW6fPN78aJxx2etIYe0rTPjlumH536zXZqNcI6X4Xrr7265b965Gfz+S3+b4NmVck5/R1R7S0339zOcegnPtL8Ph2XPrLNW9NB++6STvryESrJmNN9zcXzefOAVR/czrj8CvdOQhBzul9zo+GPTv1Gq8kvmz++xVqyC+O80DqGFbACVsAKWAErsBAUGDSYauR6q93di9oAaP3sDIXi6rlqX7kemjUiHzalMmEXp5SpprbpYhu3yQ/2OTU/0MSNjXpZAQrfpPJrmFOsRG3DFy9Af45hbrFpeC9trvLoCpAOcMWVVk4PWO1BaZVVH5JWXGmWqKa5vCtd0tTkYLA572c/Tuee8YPm30T/MgNyYPTQoIP226X9TLCu7H71iAOaq7nXDSo6owdiff/kr6Wffv/kltTnhg//1EfTn373mzHzaz9/dc5P0teaZnv4H6ydwM4So8BN1dOXV77fKiOP+wlP+d9866xuoX3re3Zqa3SeHfmZPdN5Z/+4OcfLH1DaZOPoCuhhn9o9/f7Xv2iieXvpqu7Rn/tYuuXmm8ZMoPW//fUvpN+df+6Y3GSExg7/jsSYyX5HbrrxhvSD5ncu6sMuqH2N+SeytzdXrnX1O2oe/bj10owZM3K4sPdL2i7o8yIfmDdWwApYAStgBazAfFVg3N5g0NQB/fUURmMZtl/RRppbCAI0uERQ/DpfMs22SUGzyW6xTUfbRClBuXqbmp88VumGS7LaZFuu2OZ8U6cXkAC5uVeC4mdisBmvXmko9dCtHzyUnGKhvBuTN81xcXXL8lqPeXx7NLV/8e+7z/iq4Owff08m40Ubvz5/XnLrnfdNyy2/Qub+e+stSQ/CUnDpn36f/vG3K+U2TfTKaaePH5o++tlj0v8+9yWZ0+YPF5wnk6GrXhqjQFd5nv+yTdP/bbNzes6Gm6R73WsZ0ekXZ52efvuLn+UHE2225fuT8KwNN845bR70kDUyJ37DV75elLGYKxAN0vBh6pyJ22cftPoabfrM005Jf7igPLkZSM943kbp7e/bJb3+be9ND1ztwblOt0t/8eBPJF3xy8Rcbk7/zontiLWf8D/pfbt9Im330f3T45/89Jb/+U9/kP0n/++z23N25fvdP3PabPjKN7b8gx76MFH5yvCc/o7kAUMbID3skWsn/e4+9VkvzNm52dc84B5szvvZj9LBH98tQ1eZP7zN5kkPq9KUukr/gldsKjdjbvar0jBNpmGefMRmYZwXI5Y1ZQWsgBWwAlbACtxDBaDfrE04XTS4MSbsOIOAtslMcb0v7GAMMPAaM5RrmObVkdGQQjOm2RdobFPRzj0IRQF5bUBhbnI1XoCOg+JDsSqGsU2txikXVr6gWJAfWHwa3urzu2s9Zp04vqHP8f6m5eXce8Vy9Vf+3668LP3rn1elNdZ6VHrzVtunLbbdNX30c19Mjxx8dvI+91lJZRm33npz0whflGiu3rz89W9Nr9rsHWmn/Q5J73j/R3Jem0v/9DuZjI1e/ea00as3S4994lOS6jd44cszr43e8M+YMTM96WnPzHh48wZevHCfWStnTrk11nq0KMMK9BS45I/dH3Fe/Mo3pVe9+R1p7XX/Jz3lmc9L79314/mPMxqgq49XXPonuXONt22zU/59UFP5mre+Kz30YY9ID26a1o1etVk71z8Hfwx6yOoPb8/Z5ZYrfzhS0aMeu27L32uZ8gefufkd0RzDeOmmm6f37LRP2nCT1+fPOSs/N/uq+nuCa/79z3Tx73+boc8RS2PNt8wyy6a3vPtDadUHra4wY272a240zJOP2CyM82LEsguY8vRWwApYAStgBZYQBZrmsW0adchNPNzEiW46yGx6m6a26SZbauS43LPmTUqDvrKuy77mqXKZS80PAzK7nZ/EN1Oq7u7Y+WYOxU1p7xUc0Awj54JTIF+QD12zG5wslHFRIzsKql0sGl7dtlk/7Em3O55/zk+TcOMN17XH/s+rrkjKBbHu/3RXqC781Tlp/w9vl3Z+1xvTmT88NV3z7381/wCdPHqI0CqDz+fdcfvt6UuH7p92ffdm6TO7b5/0mcr//veWmDbfWnrlpRe38fHHHJS2f9srW5x+Svd9mZdd8se2zo4VmEgBPcxIuHlwC7Ru+/3Lny5qh/zv81/c+nKWXW759MSnPUtuxqV/7P4Ik4k53MycObP57+bdzXl9VzrygL3SnttvkXHwx3dtZ7j9tv6D2NrEOM7s2bPTPfkdmdH8sekpz3z+mNkXxL6OWWQSQp9L3n/37dLFF3V/jFiY+7WwzotJZHB6QSvg+a2AFbACVmDxVUDNHNXhNTF0hJq4Ktt3VScMWCjj8pimIc20KPERNySIbJzmBY0vNL56V6Dpi1CUkefKXrOp5khNCdAYmkTzyn5jm5fGCI2bgIyIJ+JUA6gkj5EjTjZQx9CvBVLX0aXp+3Px737b2/nvfvO4dOwhn8r4/klfaXMSo36S85OaZuA1b3lXiitOKtSDrfR1Iicce0j69Ee2S9de82/RGVvu+NHeVx2J1G3OZ/7wlKZ2+3T6qSeIyk213vTmYLDR2oEBlc01//p7tt4suQost/zy7cH/54YbWr92/nDh+enD790845O7bpNTN914Y4rzbKmll07LL3/vNPyzYnUXwzX/+udweo7iU7/xpXT4p/dMvzjz9PTXyy5J1zW/E8IN1187R+NHFekPT7HvkY/fD9ngZEf9juh4732fFZXuYUHsa2+BKnjG816Stt/zxvdwFQAAEABJREFUMy3eucNH29vI1XT+9tyz2uqFuV8L67xoD86OFZgCCngXrIAVsAKLpQLNFdJRxwWlqYtcfu80VJu5tiCVZrEZlvmobeLU/BSucfSqGtjMD2qUCkBN3p0vjOTa4bEa0NQqB+R9kC8oFVAcEAddLZQrvFBs5FUPKOxBvAhdXJEFFpOGt/r8bprk5+Khz/Gu/6znp+0+vH9623t3Shs8/6XpgQ9+aDvD3/56eTp38NlEkbNWvl/abKv3p+0+8qn0itf9v/S4Jz21bZZnz74rqbm+/bbb0oqzVk71m/EXvuJ1+TZp3Sod0Ody5b/u/71HUxtLsAIPXO0h7dFfdcUlbRPbko3z23N/1mzL636Dpzjn82zFcqu9Pqd7/XXXlIJqe/U/uz+oPGj1NavMnLma94zvf6stfvQ6T8q357/8dW9N9efN24I5dPK+Vw3r/PgdWVD7Ot4hrXCfldJqD16jxSMe+4S0znrdXSM33/yfPHRh71fWdgGfF/nAvLECVmCqKuD9sgJWYDorEM2omsemWWsPRXEEtd9w0DR+QuPHCxquDcJJuelsNik3hoN5oKltXqn5adrXZtu8mv2AAZnDQfGQr7mAxqBM0hXh1LjQbBqmWSjBwG9iIMd5/SaWhcIBDVNewcuKkYUuL04A8nzyawA51LjF4wpv9fldfV/p05+9YaohLh9xs7n4ot8025RuvP66dPj+e6Zd3r1ZOujju6S1131yeuVmW6Qd9/xseuWbtsg12vzpd7+WSWf98Dvp4ztvnT6yzVvT5Zf+KT37xRun//feD6XdDzgm6fs4VaRbnS+9+Pdy05qPfGy22lx/7b/TE5+6QYsZM2emU47/Qrr9tv82b5CfqpKR0NOfRyZMLlYKrPqQNdrjueXmm9I3jz001f/211z9r3TBr85ua+rPhq716Me1/HebK7H6pQ7in3+/Mp13zo8jTGs9ep3Wn1PnyuZcv/328r25evjaFu/fLekBbM958SZp2cHD1zSX/uBTry2uxl133VmH2Z8fvyN5osFmfu3rYLp5MksttdSYcfNrv0ZpOGaxAbGgz4vBMjZWwApYgWmggHfRCkwzBQaNWir9WrfzdSy/aUgneu/VDWy8qG1sE+UXNJM0LwX1PDAgc0KbBk2vCx0P5WprHtfkmoryavjiNNt2ra421zcpvaDMB10++KiThX5d1MgqH1AMpVZ+jWnf8F79r3/kWyzjoF69+TvTpm/t41Vv2jLS6dqmedDDZu7dXAG56vI/J93CfMN116YjPr1n+tOFv05/+O156aLf/qqtX2nW/Qb+3e1Tmk/5+hfSGaedkv5y8UXpl2f9KN/CPChKK620cnYf87gnZauNbgXdb5et8/eGfuHA/dJxh+3f7PPV6atHfS6d+YNvq6TF0oMH+ojQg3C+euTn0klfOSrpa03EGYufAvd7wAPTU57xvPbAdL7su9O7k75b9+jPfizpFmY1wirQZ0H/9wUvkZvx6Mc9MVtt9NTvz+71gaTbZ0/44iHp07tvn+64/Xal0kor3zfVjXUm52Bzv1UfnKD8x0P7cMrxX0y//vmZ6WtHHZh+/P2T2hn02WLt62V//mPLLb3Msq1/wjEH5/P41K9/seXm9XeknWDIuSf7OjTVfA3vyX5NpuF4O7qgz4vx1jVvBayAFbACU1wB7970VqBtIpvDaN6fQXmP1kQpX1ltHDWAjSmvaEabOmhqhZJp6xVCaTrlZ2idhkvNkBzLNnO1czc+kICUmldeW2Mavr1C3ORyfZMHEhSkwU/ODXwgexNxdU4+kOfMAwcb8cIgbM20b3gv/t1v2oNZadZ9k74OpCUGzgNWe1D7tFpRumqrh968+FVvUpihr3Y55JMfSYftv0eKrxfS5wQ3es2bc/7J//uctNqDV8/+f2+9NZ143GHpc3t/KH2jeSN/5513ZH79Z74g6eFWCp7+3A3zLdLyhX9edWX+3tDf/vJnbROy5iMek79GRvnAIx/z+KQraRGfe8YP0k+/d1K64i9/Dsp2MVTgFW94W7rf/R/YHtk1//5nOu/sHzdXds/Jf5SJxAte8brmPOyuCOvJyc/d6FWRTpdf8qf0w29/PZ11+nfS7beVK7O6FX+r7fcY8x+FdtAEzoorzUprPOLRbcWPTj0h6SuOfv7T0/L8D17j4W3uwvN/nv5+5WVt/ITqoXD6rLvO4zOqP/DM6+9Iu8CQc0/2dWiq+Rrek/2aTMPxdnRBnxfjrWveClgBK2AFrMB0UmDa7WvT5I27z5QMDByFlaswQ42pnEEuGkQYEDlX+YqFhoJmM/BLk6ugwYBOjYVmc3fDNS9o/MbGS2sJioEEpdEWByWOnGwNoA6TxgjQ59Xj9QqbYNo3vPpan+Y48uvh1e2dmag2az3mcW0UT7bVm0J9lvaBqz24zYWj5uNNW2ybHvDA1TK17HLLp6123CM9ZYPnpZlDty1K2PWe9uz8lUO5eLDRLdIv2vj16f6rPmjAFKOvLXnWC1+R3vWBPcfMpblf97at08Oqrycqo7xdnBXQHzm23+uA9LyXbtp+Lrw+Xp2H+qqsF73itTWd/Ze9ZvO08Rv+L3/+HLpf+uWWXyGt/YT10rt3/lha5UHdOT5jZvdrP2PGzDyHNuPxW2y7W3rsE/8n/0dJdQKQNtzkDemtW38orfnIx6QZM8qcM2d28+kPQPpcvI5NY0Zhbn5HZswsa2ieGTO6dRQH5nZf52TOmHvYzpw5eh+G6xTP7X5pjDCZhrUOM2d2+mjs3J4XGmNYAStgBayAFbACi1gBNaSDhnGiPVGzl/N17cBvcyrI85VE5pv3cIUuHLTvHUXnRrLZZD83tcUbs81XcpuheU5lm3nCzzlxDcQFmrB9PykuYiiNr2LxAcVAO0axAMhkXrUKoHCKBXGC/P47JLHTDG/actv0yaNOzNhsq+3G3fvNtnp/rlHtG9/xvrbuSU97Ztphr8+lnfY7JL2raWi3fP9H0gf3/nz64L4HpSc85X/bOjm6Dfr1//fe9NEDvpi23f1T6e3v2zW9b5f98ud4tR/Lj3hK7oabvD59aJ/Pp4985ui05Q6757n3OujLaeM3vi2pudW8w3jcek9N79lpn3Z/tc/P3eiVw2WOFzMF7nWvZdJLN90s7X3QV9LOnzgs6VzcumlW9/jcsemDHzsoPeYJTx73iJ/1opfnz5/veeCX0jubP6TssMdnk8a9vWlW73u/B/TG6TzVOSXs9fnj2tx4vP7Y83/b7JL2PPC4tPWH9snnpsa9aOPXJc299U4fSx8/4oR8vq7/rBd0861w7/y5eO2H1hL2OeSrbT6cOf0dGW//Yh7Zud3XOZlT8wbe8u4d83HqWF7w8tcE3Vodi3LC5u/aoeXndr9ioP5YoD8KjKfhJm96e7s/z3rRK2JYa+fmvGgH2bECVsAKWAErYAUWnQJq3KiWL31papvQQQoGRTJRI7/Jw8Bp/KYrTBkpNabi0+CnGaumcBANaqo6NcxNsq1p6tUIQ6mBQbPa8CSaytRsi406IEFBGvrRvIJoWUBurpcjrrbhQ1kXSn3UAe1Y1QLz+JTmtHj9AEmfo1xr7cenRz3uiUm3QM8YXLEadaTLLrdcesjqD0960NVD13pU7xbkUfXi7rPirPSox66b5wZEGVZgpAJAbiR1Luq2dzU9IwtHkGqsHvGYx6VVH/LQ3i/7iNK5pnTer/motfPdB8ssu9xcj59swPz8HVnQ+zrZsYyXX1T7tSDPi/GO1bwVsAJWwApYASswHxSItqF5f1jPFg1e5qImBxNvYhyJUtgYwi9M6oWDdYHU/jRunqdpcsWhATSeIE62CeuX6gM1D6UYSNBvYlUHhZMfgLFc5LRG+LKAG940H348hRWwAlbAClgBK2AFrIAVsAJWYL4ooKZxcGVV8w03ceIAmZGo62tfxTBiXFBaV0XN2nncgM++eGHAQeM0L1HN5edi8vbu5mL0YKImH2OhCZo8FNu4+aU8lAZ2lJ+Lmg1041TXUL0X9PNQ4tmzZ7vh7SnlYH4o4DmsgBWwAlbAClgBK2AFrIAVmFsFmkYzD1GvNmjYFEND3C1vLCZr/qAZO3ZYSiPoplVN+acZA10BNH7smwrCb2xeP+ebhPax8aGpb8J8S3O1EJTGVqlhQBmj+YAEpTbisDEOyK4aWjnKywJ5rHwBcMOb/GMFFqgCntwKWAErYAWsgBWwAlbACsyBAk1zFlXRwEWcaDw1lDJNo9mY/AIlstvfDGpbcjhuE50D3Vxj129yg3XbqZp6aHhNMTBqchXm8cE1RI4bGy8oSShWeSBBv9FVvXK1lS9AqZcfGFU77R9aFQdnawWswDRQwLtoBayAFbACVsAKWAErML4Cg6aSURUDEhpnUNeWtV1oKrcUNyXKRQOYhmMlG7T5xtdrOBbXQus2AZSmNJrbhurWbNbRHNA4TUJXjeu4oXov5YQg5UMZG1xYIEGB6oTI1TZ4KPvphrdWx74VsAJWYCEq4KWsgBWwAlbAClgBK9AqoCa2adJKTDHDW9WIa+sU9AHdWBj4g4YYBvFgCHSxGkUocdkOiiqjGjW6JJJeacQPNLkBDyQojafGQvEH6ZyDrgaIVLZArlGg8QHFASDcXAv92A1vK48dK2AFrIAVWIQKeGkrYAWsgBWwAku2AlWjlqJniwY3lKlrxA0a2ahXQyhaqP3Iix8PEIs2FQO/N0emm5rmFfNFHkQOri43dXpFTj6UvPxhqE4IPnzZgHLQzQGdrxrlhfhMb+274ZUahhWwAlbACliBKaWAd8YKWAErYAWWWAWiiZUAauyGm17xDXKj1/V9DZMSdETnpdE/mlcYyuZ5xTX7Af0rsqmqVx00qzR1uuqrIdDEckYASg7KnBovqBRKLmJxAhQeypjgog5KXrwA/VicG16pYFgBK2AFrIAVsAJTVwHvmRWwAlZgSVFAzeNwz6YmTnxoMPChXxhNYJQ13W/r1o1q62u80FXpEm0zbDBvGNVEo1v5MCjQ+MYdXh8yqWyz5GCnm0h1QF4Hig2uSff4iJWXL9S+YgG6hlixAMj4Kc1ZBW+sgBWwAlbAClgBKzBNFPBuWgErsDgrMGgMw7SNZnXMpY/riEEtDBKDuCtovDbXJOXHvE3YZNtXGw7yo5rLlAbrpPKjB1PJg8L3xjScYuhy0DWnygkaH1BcI3ggARGOscDIvK/wjpHKhBWwAlbAClgBK2AFrMA0UcC7aQUWHwXUZDZNWz4g8rbfwLXdaMk1l02zEw1nDvJmUKj5clxt2vljgS6nJhMGfCoWik2yMd+AUn03eqyX882uQBmgGIof1VBiKE0w0CxFpHtW4wXo8opVNGxrzg2v1DCsgBWwAlbAClgBK2AFrMC0V8AHMK0VUCPXNIjDxxDNXFKfF02nilTfWFBCdyMPBg/iFLapiea4uIM6BcJgTmjmGfipcZUSuvVLUzr8eV0oxVEHJYZixQvQxVDmErM082YAABAASURBVF+voVgAEhRErDqhjgFRGcP8jBml1S3bXOKNFbACVsAKWAErYAWsgBWwAlZgMVFgOh5G07+pcat3HRoyiNoXFw1q40NTV/WyvXmUa2rUrILqqkLFygmN3xvXcNDUN1YvaPzmlRvoZoq6FkoTqzrlS+7utnEVLw66OqDNQ/FVJ6hWkC8AMrk+eFno81Dmjyc2T9mGl0RaefmlDGsw7c6B5e9Vfq3uNTNNu33375z/m+NzwOeAzwGfAz4HfA74HFi058B9V1i6fQ85a7myL7KzlpvZ8u2/UVWbuRWWSlEX82iscsKs5cscs5av15jZjlFNjJMfc8kK4oQ8vllLtTXfxoP9WmG5pZve9+7cqA5vgEypaRUUhJUPJQ+lga1zygtQcvIDqgMSkKnyzjy7U2tzzTVXp0/t8UHDGky7c+DAfXZKR31ylyTrc9i/wz4HfA74HPA54HPA54DPAZ8D83oO7L9n0U52/z0/NEfvi4fr9h/MoX3YfzDH/kPc/gNeNTWClxUit//Q+OBl9x/MJbvPbjukbbfdNp1wwgm52YTShOag2kBpXIHcqKppFaqSzEOpq/lRvsYCOTVOw5tzi3QDpGWWWcawBj4HfA74HPA54HPA54DPAZ8DPgd8DvgcmMbnwFJLLZV7SzWicmB046q8AOQGV7U1lFMMyPSuHgN5TNSEnZErp+Dmfve7X9p3332nBrwf/nfwOeBzwOeAzwGfAz4HfA74HPA54HNgEZ4DH/vYx+ZY/8lqJ8uP6sMmGlPn5Asxh/xXvOIVbcepRlQIAgg3N6wKlBfkByKGrlmGbqzyAhQOip2yDW8cmO3UU8B7ZAWsgBWwAlbAClgBK2AFrMCCVUDNW70ClAau5mo/6mVhbK34qIcuL16IXNhhDvpjVBc10DWh4qHUKg8lFz7QNraqFS8ACjOg+FDGZnKwUe3Aba/wQlc/nHPDG4rYWoF5U8CjrIAVsAJWwApYAStgBazAfFGgbuagNHFzOjGUeih2eBx0/PA6UHLDfB1rvoih1IsLQOGgWPFQGlYonMYHoHBA2wArp3EClLHhA3JbQBfHOFkoPBTrhreVzI4VsAL3XAHPYAWsgBWwAlbAClgBKzCvCkBp0uZ1fIxT4xf+KAuj14E+D6PjmB/6+Vgr8oqhNK5AbmyhWOWiLiwgesyVW5GqAfIcEcsOQ3UB5dzwSgXDClgBK7AgFPCcVsAKWAErYAWsgBWYDwqogdM0YeVPBGCidM7Vc9V+Tg5tIh8WyvwR1+XioDS5wUO/XjUCFD7qhjnFytU2fPEC9OcY5tzwShHDClgBK2AFFrgCXsAKWAErYAWsgBWYWIHhZi6qoTR1UGzwsjEmrLhRUF6IHHRzQfHrfNTJQslDseIE6BrbGAulBopVnXKCfAHoXakFRPcwXr2KoNRDt37wUHKKBTe8UsGwAlbAClgBK7BwFfBqVsAKWAErYAXGKAD9Zm1MQUVEQwhlDBRblfRcoG0ye4kqAKporBtrKhM+lKYTxh8L5LUBDc23LGu8AB0HxYdiVQxlfvkCdLHGiwsoFiKWdcMrFQwrYAWsgBWwAlZgESrgpa2AFbACViAUGG7YFAuRDwtdUxic6oQ6Dr+2dY34OpYviBfkC/KhWxPG+qoTVCsryK8RHJCbYOWCCz9iGNvcKgeoNAM6PxPVRrVueCtB7FoBK2AFrIAVsAJWYJEr4B2wAlZgiVYA+g0c0DaGEkZNnOwoQL8WyGXDY6DwOdlsoIuB3nrQj4fnaoa3L+hqgZbXGEEEkOePeCJONYBK8hg54mQDdQz9WiC54U3+sQJWwApYAStgBayAFZiqCni/rMCSqkDdyNUaQGnqglOdELHscAxljHhBNYHheDIeylyq09iA4oA4+VCu0AK5YRUvKBdQHBAHXS1041UTefmAwh7Ei5g9e7ZMXtMNb5bCGytgBayAFbACVsAKWAErMOUV8A4u5gpEw6bDhLENnfhhALmxq3mgDlsfyLXjrRO8LNCOUxxB7QN5PiiNadQA2VUtFF8EkOvFK5aFwgGiMoKXFSELXV6cAOT55NcAcqhxbnizFN5YAStgBayAFbACVsAKWAErML0UWPz2FkqjNtmRqZETJqtTXnUBxQJ06ygnToCOVxyAjofS3NbjVAddTeSgqw2uroUuH3zUyUKZE0pd1MgqH1AMpVZ+DTe8tRr2rYAVsAJWwApYAStgBayAFbACU1ABNXexW8DYK5tNsq5pwvyCUgvkeHgDXTOpnOaAsbXilReA3vqRCwvdnFBqAQ3NiDoFUPiJuDonH+itr3nEC/JruOGt1bBvBayAFbACVsAKWAErYAWsgBWYggoAk+4VTFwz3BBGDN046Px6QRjNj1cD/XqtJageyA2rYgFKHDnZGkAdtl9rBH1+xoyuvY0BY5nI2M6xAvpHmuNiF1qBKaDAvJ6z8zpuskNeUPNOtq7zVsAKWAErYAWsgBWYSgrM6XuiierqnHxBxygLpUGULw5KLF8QL8ifCFETFrorusFpvPyAYijriYsY+mOVE+q8/ACUOaAbB4XTOCFq5U/7hvemm25KO++884T4zGc+k77zne+kq6++Oo496cldH/7whwfjJh4f80uwmOCyyy5Le++9d9piiy3SRhttlDbZZJO09dZbp8MPPzzdeuutUWZrBRaKAkcccUTvXNbvxfDC559/ftp1113T5ptvnjbccMP0hje8IX3wgx9Mp59++nBpL57bcTfeeGP65Cc/mefX78aWW26ZfvSjH/XmrIOvfOUradttt03XX399Tdu3AlbAClgBK2AFrMASpwCUxm34wOs+RDkYXTecA/KV1GFecaCeG7p65SMXVpwAyOS5Iwcdl5PNBsg1UGxD9V4aK4iUBeTmMXLE1TZ8KM0ulPqoA9qxqgWm/9cS3XnnnennP//5hDj55JPzG3A1p7/5zW+SfjTurLPOmnDc8Lwh5Je//OW01VZb5UbhL3/5i6ZLN998c7rooouS3ry/7W1vS8Hn5HTbeH+nlQI673ROnnfeeencc8/N5/Qdd9zRO4bPfe5zaYcddkhnn312+tvf/pbuc5/75D8A/fKXv8x/uNlll12Sfid6g5pgbsfpd0R/SNIfmJrhad11102XX3552muvvdKZZ54pqgf9jqlZv+SSS5Ia5V7SgRWwAlbAClgBK2AFrEBWAMg2NnrPFf7c2BgH3XzQ+cNzQclBsZGPeRRDPyduGKoP1DkoY4HcqKoGaEugNLYt0Tgwlmvo/NL47Aw2wPRveGfNmpUOOeSQ9PnPfz4ttdRSST8f+MAH0gEHHJDx8Y9/PL32ta9Nq666avrPf/6TlNPVr6WXXjrno05Wb8o1XtA4cTV0T7gaZr1BV3Pw9Kc/PR155JHp1FNPTaecckrad9998zr//ve/06c+9ak0LLjmNaafAlN9jw899NC8ixtvvHFaZpllsg/dfyjUaJ544olJ56+u7p500knpG9/4Rvr2t7+dr6wuu+yy6ZxzzknHH398HhubeRmnxvWCCy5Ij3rUo9Jxxx2X9tlnn/x7oTlPOOEEmRZXXnllbrZF6Pdy9dVXl2tYAStgBayAFbACVmCJV6DuI2o/hIHuvV5wYev62lcexh+nvKAxgnyh9hUL0M1T5+ULqhHCh1IPxSonKA+lgR3lq0aAbpzqxNWAfh5KrLt6Z9SF09Vfa6218hvs5ZZbLh+C4sc+9rFJeNKTnpTe8Y535AZUb/jVqOpKGJDzqgmss846ebw2a6+99pi8+AMPPFAmbbDBBmmPPfZIepMOpHvd617pyU9+cvrEJz6R1EzrqpuutuVib6zAJArobgNdTb3ssssmqeynNU4N5r3vfe+02Wab9ZOD6LDDDsue8mp4V1hhhRyrOX7pS1+atttuuxwfe+yx6ZZbbsm+NuOMy031eOOuuuoqDc2/H1D+Q/OEJzwhrbzyyumvf/1rzmmjOyJ22223fGeE9ku/T+INK2AFrIAVsAJWwAosqQrUjRyU91HSAjpfcY16TPDQ1UPnR348G3MB+Wpr1EFpSCOOOlkBiFQeB/04ktCfJ3hZKGNiPii1EYdVrQClXg2tYuVlgbwP8gVg+l/hTXP4s8oqq6T/+Z//ydVz21TkQc3mv//9b3ur8tvf/vaGGfvSleR4837ppZeOLTBjBUYooM+X6yqszqv3ve996bTTTku33377iMqOuuuuu/JnxsXo87i6TVl+DTWWakJ198Omm25ap1r/uc99btJ5q/NbV12VmNdxuuNC43WlV1bQsenzuZHTf5D0+Xet9YxnPCN/plh10xPeaytgBayAFbACVsAKzB8FgHYivV9qgyGnzkE3ZqhsrkPo5qrX0ERQGlD5AaDXXAYvOzx+OAZU1o5XHsixfAHINfLlhJUvALlefiBqwoqfoc2SgNtuuy398Y9/zIeqK8DZmcvNFVdckW9TXn755dNDHvKQcUevscYaOVdf0cqEN1ZgHAX0xxg9SGrZZZdNF154Yb4N+HWve1066KCDks67UcN0G72axgc84AHpla985aiSpGZXiQc+8IFJ5638YQApztmoDzu34x75yEemlVZaKf3sZz/LzfgPfvCDfNuy/qPzlKc8JS+tjwTos7trrrlm/ogBkHlvFgMFfAhWwApYAStgBazAPVJA75kmmwDGNp/1mHqO2lfN3MYaE4Dyng3Grl/PKx9KrXwBShxzhVVOqGMYXQvkBhfK+vW4GC8bPJS6JaLh/dOf/pQ/r3vDDTckNQdPfOITpcVc45prrslj1ARkZ5yNrrbp85G6UjdOiWkr0FPgwQ9+cH6o1Ne+9rX0/ve/P+n2en3mXJ+11UPQdNuxnqYct23o1uNjjjkmz6G8bqnPwdDm2muvzcz973//bMfbRD7O8Xkdp6b6Qx/6UG6u9QC3j33sY0m3XK+//vr5Sq6e1ixeV6M/+tGP5rrx9sm8FZjuCnj/rYAVsAJWwArMjQJq1IA8BIrNQbVRjUIYnR/OQb8Oxo81N/Tzmq+GahTD+HXQ5YDcpGqcAKUJ1RwClDwUHhDdAsjjRWh8QHEACDfXQj9eLBve7bffPn8lihrPV73qVeld73pX+t73vpc/k6sHS+nzjq0q8+DMnDlzwlHK60qdPss7YaGTVmBIATWML3nJS5K+Suuoo45Kusp73/veN/32t7/NV0qjEVWD+5GPfCR9+tOfTi94wQuGZulC/UdBkT6/LjseIh/1YYOf03Gq09VqNeN68Jv2UQ/V0i3MulKtz7hrTj0V+kEPepDKDStgBZYMBXyUVsAKWAErMIkCwJiKeE8WCRhbEznZur72lZsM0M0NxR+eAwofc0UeCh+x8rUPJS9+GKoTgg9fNqAcdHNA56tGeSEuDtX+Ytnw6utN9KRkQb4OWNCDc9QoyDeswFRXQLfNP/WpT0168NrwvuozuY973OOSAN0v/HDdoor1YCzttz7P/vCHPzx/x66+rkgfLdBD5PSKTxURAAAQAElEQVSAN+2bPjdc/4dJnGEFrIAVWPwV8BFaAStgBeZMAShXPkdV141e5GHO3xdqvBBjw9Yc9Nevc/Khvx7045hTFkoOypwaL9S5iMUJ0B8TXNRByYsXoB+LWywbXl0d0y3Fgm4R3XHHHXPToCfa6rtI9bVEOvh5RQg8r+M9zgpMpIAe8qSv9HnrW9+an6D8wx/+MD/5+/nPf366p3cnTLTugsrpyei77757+te//pVe+MIXJj08S1/l9cY3vjG97GUvy9h5553TP/7xjwW1C57XClgBK2AFprIC3jcrYAUmVADGNnEaAH1+uEeBLl/nwgfyLcCaK6AcEGG2UBpUBdD3xQU0NnxZ6GrrnHwgrw3FBhfjoPARKy9fqH3FAnRrKRYAmcXzKc36eiLdUizodtAXvehFSbdWKv773/+ezj///Hzwc7vR5w415rrrrpMZF9/85jfzQ4R0u+m4RU5YgUoBNYU/+clP0k477ZRvxz/yyCPzA6d0lXerrbZKX/3qV5M+G6tzuBo2qasrrSrS59dlx0PcCREN9byOGzW/vm5Jn+N99KMfnb/3V8f5qU99Kmmfnve856U111wz6SFWOvY77rhj1BTmrIAVsAJWwAosMQr4QJdsBYabueF4InWgNHijaqDkNB+MbQ6Hx6hOXFj5AShzRRw1UPiIlYeyFnQ5KJzyqhXkBxTXCB7ITXLEwxZG5xfLK7zDB69Yb+DjKbF6iJW4uYWaD43R5yj1tS3yR+Hyyy9PeuCQnlY7Km/OCgwroCcu77HHHuncc89N+gy4virok5/8ZDr66KPzFdEVV1xxeMgcxXHO6uqp/sMx3qC//e1vOaWHZ8mZ13EaW+Pkk09OutNCf3javbnKq48U6Oquavbcc8/c4H/+85/PXxmmz/iqMVbOsAJWwApYAStgBaxASmmJEkHv1YDeMUM/rpOqVxxWvhBxWHEBKPNBscHLqh4KD2Ot8qoLDMfBh408lLkUQ/GjBkoMpQkGxm1qNV4AYnj+Bh0F4mtb+0tMw6vPDv7617/WsadVV10127ndzJo1K3/lisbpVmnZYegziWeffXamH/rQh2brjRWYEwXUbOrzrXqKsW7xXXfddedk2IQ1ajT1ICw91fmnP/3pyNqLL744/fnPf865aHTndVyeZLDRg7YOPPDApM8b6/O78SRoNdfLLLNMqp+W/rSnPS2PUi473lgBK2AFrIAVsAJWYAlTALpGrj70aOZSSm2DpzyUeig26qDEUKxqIzfs1zGUplNcjRgL/TyU+aHYuk7joeOVgy6GMpd41dZWPpAbXyh1gMoyIq8Axuf1oFTVLPYN71133ZVvYdbVMl111UHHlV75c4s3v/nNeYgaXl25ysFgo6ZCT6bVV7voAVlPf/rTBxkbKzCxArrtXldzX/va16ZZzR9WJq6eu6w+M6sRBx98cPrjH/8ot8VVV12VdM7qPxy6vfh+97tfm5vXcZpAn9fVFV3dqr3NNtvkr1kSL2gN/QHq0ksvVZjx+9//Pls12tnxxgpYAStgBayAFbACS6gCel9WHzp0TR10vmrqWpizHJQmUuMF6MZBPzcqLy7WDSsOurHiA0BuXlUjDro6KDnorOoE1QryBUAmz5X5JpKFPg9l/ngw6rRveK+//vp8y6fenMfDqN73vvelTTbZJOMVr3hF0oOqTj/99EaSlDbffPO0yiqrZH9eNhtvvHHSlTd91lCf0d1ss83Srrvumj7wgQ8k+fp8IpC/Ckm3Uc/LGh6z5Cmgz51D+WWd30f/+te/Pq2++upJTy1/73vfm/T7sc8+++TfC11RVuOp2++33HLL3tLzOk7N7G677ZY/o7tJ83uor1mqJ/7f//3fHO61115JfzjSQ+Z09VmfkX/84x+fc95YAStgBayAFbACVmBJVQBGvydUczesCYytjTqYs5zqhZgbunHBywrDNVCay5pXHZQ5oJ+POlkoNaoXxIWVDyUPZY46p7wAJSc/oDogN8bipn3Dq0vVanoFHZwOSlda1fwKevO9yiqrJH09ih5cpYZXNaOguaCIA4wqycLpitg73/nOpDfo+mykbmE+77zzkh78owfw7L///kmfwRw5gUkrsJAV0OdmDzrooPyHISBdeOGFSU9+1sPb9IcbPf35iCOOSLryWu/avI7T74Saa/1hSL8n9ZzyX/3qV6eNNtooXXnllenQQw9N+pyvGm794Ui/U6oxrIAVsAJWwApYAStgBfoKQOlPoufpZ7sISl3HdB6UXD0HkHucrqp449UEH1bVta9YAGTy3JGHwuVEtYHSuAJtfYyJMuhywY1nNRbI6Wnf8OphPj/4wQ/SRNBXvKjZVdObj3qcjT7reNpppyVBnzEcpyypMdabdj2N+ctf/nLS7dK6SnXiiSemww8/PH836nhjpwbvvVhcFdBt9vpdGL4tWueznvash2MdddRRae+9906HHXZYUqynPw/Xhz7zMm6NNdZIhxxySH4yuh7AFXOFFbfddtvlJ09/9rOfzbXHHntsWm+99aLE1gpYAStgBayAFbACVmAcBaA0cuOke5/zHa5RIygOujmCE1/7QG4+xdcAcgidheLnxGATc4UVHT6UBldcDeUFYOTayqkekOkdK5DHRE3Yad/w5iNdhJsHPOAB+RbnddZZZ1p+R+oilG7qLL0E7YmaTT1Mbf31108Pe9jD0tJLLz1HRz+34/SAqsmu1urzumuvvXZaa6215ng/5mhnXWQFrIAVsAJWwApYgcVQgWjgJjs0GN1MahwgM6ZRzGSzgZJv3DGvidYfzimGbi7ofOWEWAC6HBRfeSFqZCOG7vig1EdeNVA4KHaGkoYVsAJWIBSwtQJWwApYAStgBayAFVj0Cqh5q/cCSgNXc7Uf9bIwtlZ81EOXFy9ELuwwB/0xqosa6JpQ8VBqlYeSCx/IV2JVJ4gXAIUZUHwoYzM52Kh24LaNO3T1wzk3vKGIrRWwAlZgrAJmrIAVsAJWwApYASuw0BSomzkoTdycLg6lHoodHgcdP7wOlNwwX8eaL2Io9eICUDgoVjyUhhUKp/EBKBzQNsDKaZwAZWz4gNwW0MUxThYKD8W64W0ls2MFrIAVsAITK+CsFbACVsAKWAErsCAVgNKk3dM11PhNNAeMXgf6PIyOY37o52PNyCuG0rgCubGFYpWLurCA6DFXbkWqBshzRCw7DNUFlHPDKxUMK2AFrIAVsAJzq4DrrYAVsAJWwAosJAXUwGmpsPInAjBROufquWo/J4c2kQ8LZf6I63JxUJrc4KFfrxoBCh91w5xi5WobvngB+nMMc254pYhhBayAFbACVsAK3CMFPNgKWAErYAXuuQLDzVzMCKWpg2KDl40xYcWNgvJC5KCbC4pf56NOFkoeihUnQNfYxlgoNVCs6pQT5AtA70otILqH8epVBKUeuvWDh5JTLLjhlQqGFbACVsAKWAErYAXmnwKeyQpYASswTwpAv1mbaJJoCKGMgWLHGwO0TeZENePlxMeatQ+l6QREjwSQ1wZyXvMEoOOg+FCsiqHML1+ALtYc4gKKhYhl3fBKBcMKWAErYAWsgBWwAlZgASngaa2AFZgbBYYbNsXC8BzQNYWRU51Qx+HXtq4RX8fyBfGCfEE+dGvCWF91gmplBfk1ggNyE6xccOFHDGObW+UAlWZA52ei2qjWDW8liF0rYAWsgBWwAlbAClgBK7BAFfDkVmASBaDfwAFtY6ihauJkRwH6tUAuGx4Dhc/JZgNdDPTWg348PFczvH1BVwu0vMYIIoA8f8QTcaoBVJLHyBEnG6hj6NcCyQ1v8o8VsAJWwApYAStgBayAFbACi0IBrzm+AnUjV1dBaeqCU50QsexwDGWMeEE1geF4Mh7KXKrT2IDigDj5UK7QArlhFS8oF1AcEAddLXTjVRN5+YDCHsSLmD17tkxe0w1vlsIbK2AFrIAVsAJWwApYAStgBazAIlWg/Toe7QWMbejEDwPIjV3NA3XY+kCujcZQCUAmI3hZGMurSDlZAcjzQWlMxQmATD4eKL4IINfHHLJQOEAlGcHLipCFLi9OAPJ88msAOdQ4N7xZCm+sgBWwAlbAClgBK2AFrIAVsAKLVgEojdpke6FGTpisTnnVBRQL0K2jnDgBOl5xADoeSnNbj1MddDWRg642uLoWunzwUXf33Xe3zSyUuqiRVV1AMXTrKw644Q0lbK2AFbACVsAKWAErYAWsgBWwAlNUATV3sWtA2wwGJ1vXKBag1AIKxwC6ZlJJzQFja8UrLwC99SMXFro5odQCGpoRdQqg8BNxdU4+0Ftf84gX5NeYsg2vdvbOO+9McwrXWaupcg7ccccd6fbbb0+yU2WfvB/+/fA54HPA54DPAZ8DPgd8Dkzvc+Cuu+6atDearGb4/WnE9bjar8+Z8fjxaup6faZW/Z2gZhRKw6pYgBJHTrYGUIf5VukYVydmzBjb3o5l6hGL0Jdwl156aTLmSQPrtgjPnb/85S/psssuS7I+f33++hzwOeBzwOeAzwGfAz4HfA7M73PgkksuGff9/ng58fH+VL72KWL5QvDyJ0LUhdU84YfVePnC1VdfnTtLKI2rmlURQL5SG7FsoM7LDwDZhf5VZJH12IinbMMLpGWWWcawBvPhHFj459G97nWvabnf/p1b+OeKNbfmPgd8Dvgc8Dngc8DnwHjnQLynDBt1yy67bPtec6Jc1MvWYxQLGivIF1QTsawgvrbyVSdeVrGguIa45ZZbLq2wwgpJPpRGVY1ooG5Q5UOpgWLFqTZs+FCaXejXAbmBVp0ATN2vJZo5c2ZaaaWVDGswLc+BWbNmpZVXXnlq7rvPKf+7+BzwOeBzwOeAzwGfAz4HpsU5MKt5T6meKKx8YcUVV2z3fzin/Hiox6lm1NiaCz9sjNE8gmJBeUGcrDjhvve9b3rIQx6S91VNq5CqHyBHQG5UlQcypw2UxlZ+AMZykdP48GWBqdvwJv9YAStgBRaCAl7CClgBK2AFrIAVsAJTSQE1bULsU+0HB11TGFzYur72lYex46BwUSsrQJ+vxwO5QRU3DI0VB11jCogaM0a1UOpG+XlQs4EyvnHz53dla0A/DyXWZ4dn1IX2rYAVsAJWYIlWwAdvBayAFbACVsAKLCIF1PBpaaDXGEJpCJUbRoypeaANofNbsnFgNN+k8trQ5aG/fqwpK0DJhw9lbMSaU4BSJ38Y0B8DpTbmCBvjoNSroRWnvCyQ91++APgKb/KPFbACVsAKWIGRCpi0AlbAClgBK7DwFADaxaKBCwJKA6i4zkE3RrlAXSNuOBY3DOjmGq6Hbv0YB7TNJZDpGCcLhVNCsWwASg6KVR7I88kXgFwuX05Y+QKQ6+UHoiaseF/hlQqGFbACVsAKWAErMLECzloBK2AFrMACV6Bu1IYXAzIFY5vPepx8KLXyNQj6sTgh8vKF4VhcAMocUNava+UDuQENX+PkC4DCMVBOiIR8GF0LnUCXFgAAEABJREFU5Plh7PoxXlZzyEKpc8MrNQwrYAWsgBWwAlbACsyFAi61AlbACsxvBdSoARNOqxoVwPh10OWg+OONg5LXnKqBLhY3DNUI4mF0LXQ8kJtUjRGgNKEaL0DJQ+EB0S2APF6ExgcUB4Bwcy30Yze8rTx2rIAVsAJWwApYAStgBeZBAQ+xAlZgPigA/UZNU6rBkw1AVyMu8lD4iOucfCh5+eMBuhoofj2fxgG9pjLygNK9B0pFTgkoefnDUJ0QfPiyAeWgmwM6XzXKC/GZ3tp3wys1DCtgBayAFbACVsAKWAErMF8U8CRW4J4pUDdwUK58jppRddA1fqqBfixuPGi8MJwPThb664uLevlQ8vLFw/jrQ8lBN2Z4XMSaS4D+mOCiDkpevAD9WJwbXqlgWAErYAWsgBWwAlbAClgBKzD/FfCMc6WAGjnoN21QGsSYSDXyoV8XvHICdPk6Fz6Qr9aqNqAckEPorHiR0O0LlPwwr1iArjbGi5cP5LWh2OCUh8IBCnOd8jloNrXfhPkF3VqZaDZQxrvhbcTwywpYAStgBayAFbACVsAKWAErsKAVmNP5o6kLC6V503jofMXDNRErF4AyRjnomkPFUVPb4MPWufF86NaIGihrQZeDwqlG8wvyA4prBA/k5jfiYQuj8254h5VybAWsgBWwAlbAClgBK2AFrIAVWMgKqMkD8qrQtyKVlw0Mx8GHHZWH/rxQYo1RPXSxOCgxdE0qFE71qhkPkYeuHoo/GNM2sFDmB1ouasJqPgEIqv3MsHiRYWvfDa/UMKyAFbACVsAKWAErYAWsgBWwAotQAShN3/AuRBMH/TyUxg+Kres0BxRefuSG/TqGbn4YOxZKPuaCUgPFTsQrB10d9OdSPvZFPpAbXyh1gNIZkVcA4/MzZpRWt2xVPdXh/bMCVsAKWAErYAWsgBWwAlbACizGCkBp8OpDhK6pg85XjZo/WQH6Y4dzqhEH/Tro5oR+TmOgn4dSo7kE1QhQePniA0BuXoOHrg5KDjqrOiHGyxcAmTyXcgpkoc9DmT+e2OyGV0pNQ3iXrYAVsAJWwApYAStgBayAFVj8FIDSwOnI1NCFDV9xALpacVCavfBlR40TH1BeiBi6OYOXFaJGFug1n8GpDlA4Jp/JwQZKjeoF0WHlQ8lDOaY6p7wAJSc/oDogry3ODa9UMKa7At5/K2AFrIAVsAJWwApYASuwWCmgxi0OCLoGLvhhW9eGLwtdUwiI6gFom8NIaG4hYuhqxEM3p2rE1VY+IJPnjjwULieqDZT5gLY+xkQZdLngxrMaC+S0G94sgzdWYHFSYPJj0X8EJq8aWzGv48bO1GcW1Lz9VRxZAStgBayAFbACVmBqK1C/JwJy8ze8x0CmoG8z2WzqOZqw94oclAZTyeDCVwzktQHRPUDhoMwB5FoVATIZmkdO2NqHMlZcDdUKQDvncF4xINM+tEoBkMdovOKwi0XD+8c//jHtvffek+JXv/pV0r3c++2336S19Xwh1kEHHZTHXXHFFdJwJL7yla/kmt///vcj8yatwIJQ4LjjjsvnXZy3N99885hlLrjggrTvvvum97znPel1r3td2mqrrdKee+6ZzjzzzDG1NTG34/7zn/8k/a5sueWW6Q1veEPafvvt01lnnVVP2fNPPPHEtOuuu6Ybb7yxx8+3wBNZAStgBayAFbACVmCaKACMu6fRk4xbMEhAv5nUOCjzQskNcxoaHJRacQHlhDqWD6W2zolXDCWnGDpfOUG8AF0Oiq+8oHwgYijHIB5KvXzlBSgcFLtYNLz//Oc/k5rZyXD11Venu+66K5177rlzVB/zSTiJ+Lvf/S6P0xt6xaNw4YUX5prrrrtuVNqcFZjvClx88cXphBNOSL/97W/T+eefn8+/O+64o7fOEUcckXbffff0i1/8Iv3jH/9IK6ywQrrmmmvSr3/96/TpT3867bPPPvl3ozeoCeZ2nH5X9AelH/7wh83olNZZZ5105ZVXpv333z/9/Oc/z1y90e/Yl770pXTZZZe54a2FWYC+p7YCVsAKWAErYAWmhwJ6X1XvKZQGTlzkwg5zUGqVh85XHZCvhMoXVCMACturpuIy0WyA3piGyq+oga4JVQJKrDz0fejPpRoB0NAMKD6UsZkcbFQ7cNt9ha5+OLdYNLxxUA972MPSXnvtNS7WX3/9tNRSS43J77TTTjFF+vCHPzwmH4+0bovsWIEppMAxxxyT9+bFL35xute97pV9KL/0CtRofuc730k6j1/72tcm1R911FHp2GOPTboKu8wyy6TzzjsvnXzyySpvMS/j1LhedNFFaa211koHH3xw2mWXXdJuu+2W5zzllFOyjc3f/va33Gwr3nrrrdNDHvIQuYYVWJgKeC0rYAWsgBWwAlNKgbqZA1Ida0cjhu69nngBCgfF1pz8GjGPOKBtZsUDojOnOAeDjWIBSs2AzgYKB52FcgxQOI0NQOGAvJYmUU5WgDI2fEBuC+jiGCcLhYdiF6uGd/nll0+PfvSjx8WsWbOymKNqQrlHPepRY8ZHztYKLCgFdNeBrqbqaujcrKFxajB1xXbTTTcdOfSLX/xi5pVXw6vfExFqdF/4whfmW5sVf/3rX0+33nqr3Ix5Gff3v/89j33qU5+af9cUPPaxj0363YucuFtuuSV97GMfS7LaL9WLN6yAFViUCnhtK2AFrIAVWNQKQGnSYj9g7uIYp8YvfFnF0M0Fna98APo8jI2h34jGWK0xyodSD+T3h1CsamNMWEB02+hDiUWqBshzRCw7DNUFlFusGl4dkGEFpqMC1157bdJV2G233TZfFf3JT36Shm9LHj4u3Z6vq7TiX/nKV6Z73/vecntQQ6lbmGfOnJle/vKX93IRbLDBBmmVVVZJt912W7rqqqsyPa/jVlpppTxeV3qz02x0bDfccENaccUVmyjl/4DpNmpd4dVdF2rCc8IbK2AFrMBUUsD7YgWsgBWYQgqogdPuhJUvDMfiBECmBfRjJeqxta9cDeUEcWHlC3UMpbENLqzqoKwfnKwAhVeNMMwpDj5scIoF6M8xzLnhlSKGFVjECqy77rrpuc99btJV1z/84Q/ps5/9bNpiiy3S0Ucf3Tahw7t42mmnJTWN97///dNLX/rS4XSO46qqGtrlllsuc8MbID30oQ/NdNSHndtxD3/4w3Njq88Kqxn/6U9/mm9b1n+YnvSkJ+U19JldfXZXa+pWZhj7H6lc6I0VsAJWwApMGQW8I1bACiwcBfSeadRKUN4vQbFRA6XJVDzeWOUE5QX5AnRzQfHrvGoEoL2qqlgAZDIfY2SBzAE5HxvlhIiBXKdYPCC3B/FBAG29OEAmcxPVqcgNr1QwrMAiVmC11VZL7373u9Phhx+e3vnOd+bb6m+66ab07W9/O22zzTb5c7BnnHFGfsq4dlW3HusWZPl6EvLSSy8tdwyuv/76zN33vvfNdrxN5ONha/M6Tk31e9/73rTssssmPX35gAMOSLrlWs3ua17zmvy0ZvG6Gv2BD3wgqX68fTJvBayAFbACVmCKKuDdsgILTAEojdycLBCNHpQxUOx4Y4HcICofY8OKEwCZjOFcJqtN5KE03VDG1nyUA3ltIFOqCUDHQfGhWBVDmV++AF2sOcQFFAsRyy5WDa+eoqymYRT05Fgd8PzAJz/5ydyEqBEZxqWXXjo/lvAcS6gCagCf//zn5wenqVncZJNN0sorr5z0NVef+cxnUjSiejiVvu5njz32SM961rPGVSt+4fXAqnGLmgTQbLvXvI7TDE984hPTgQcemB8At8MOOyT9vuy88875SrV47Ytu3V511VVVblgBK2AFrIAVsALTWgHv/PxWQO/DhJhXvhBxWOi/fxOvOkG+UPuKhZqDMkfNyRegyynWWCjcKF81gnKCfEF+jeCA3AQrF1z4EcPY5lY5QKUZ0PmZqDaqXawaXh2bvqJoFPQZQuXnB2688cb85l2fdxzG7bffPj+W8BxWIOmq73rrrZce97jHjVFDn8lde+21kwDj/5KPGbiQCD0Y6/GPf3zSw6jWWGONpN8//dFJvx9vfvObk27h1q7oc8OzZ8+Wa1gBK2AFrIAVsAJWYPorMB+OAGgbQU0H/VhNnPhRgH4tkMs0RlAA5PkjDk5WgJKXrxro4uBkBeVlBejXAaIzVCcoAEauD11zG3UaAyjMY+SIkw3UMfRrgbRYNbyPecxj0tFHHz0S+rqhNJ9+dNVKt56OwiMe8Yj5tIqnWVIV0EOeTjjhhKTPt+orfXQrs25ZfuYzn5n0NObpposervWJT3wiXX311enZz352fnjWD37wg/x06De96U1J2HvvvdO//vWv6XZo3l8rYAWsgBWwAlbACiwwBepGrl4ESlMXnOqEiGXrWD6QG0b5gmoAmfxA0eDCKiEfSo3iAPQ51QWiRrF8KE0sMGZ95QXVBhRDVwvdeNVEXj6gsAfxIuKCCrB4Nby66qXPBo6CbgFN8+lH88+aNSt/1cqsIbvUUkvNp1U8zZKkwJ133pnOPvvsfCvzlltumY477rikpys/6EEPSm95y1vSoYcemm+j10Ot5kYXXWlVve5KkB0P//nPf3IqGup5HZcnGdroD0P6HK/+GLTVVluln/3sZ+nggw9OWlNN/Oqrr570ECs1vZM9mXpoaodWwApYAStgBayAFVisFIiGTRa6hk5xHGjtiwNyMyk/AITbywE51hyCiqBw8gPKARHmpjgC5cIH8nxAppQDMiciYvkClJx4xbJQOEBURvCyImShy4sTgHYtxQEguxo3ha7w5n3yxgoskQroiqc+63r++ecn/eHmGc94Rtp9992TPserrxO6z33uM0+66LZoDdTVU/3Cyx8FfQxAfHyudl7HaY4a3//+95OeJq0/DO24445JV6p1rKr54Ac/mJv4fffdN+lzv3/961/zA66UM6yAFbACVsAKWAErsCQqAKVRg2JDA+hiKFc9J3pvF+NkVRdQLABto6icOAGQyQheFjoeuvWVy8XNBrqa4GHiWujyzRR5n2KsLJQ5odRFjazyAcVQauXXcMNbqzGVfO/LEqeAmk19vlVXc/VQp3XWWecea6AHXulBWHqqs64gj5pQD1r7y1/+klPR6M7ruDzJYKMHbR1xxBFJdz3oYwDxJGg117pSXX82WZ9V1jBd1ZY1rIAVsAJWwApYAStgBfoKqLkLBsjNYcSRCys+fCi1gOiMyCmArplUrBzQzg8lL344D10u8qqBwocP3Xzihmsn4+p6+dCfL8YrJ7+GG95aDftTVoHFfcee85znpM9+9rNp4403TiuuuOJ8PVxdIdaEX/jCF9Kf//xnuS3UYOrJyfqPwwYbbJCiKVXBvI7TWH1eV5/b1ed3t9hii/w1S+IFNdN6WNXll1+uMONPf/pTtsplxxsrYAWsgBWwAlbACliBngJAL64DKDkoVjnofMWC3vPJQskNx3VOfgAYtwEGcpvh6a8AABAASURBVBmQa0bNqQLxgnzoasVBiSMnWwOow3yLdYyrE/o2kDqWv1g1vH/4wx/y5x31mcdROP7443XMhhWYcgroe2uh/4s8wU7OVeqVr3xleshDHpKuueaapK8H2mWXXZK+4ki3TL///e9Pajx1y/Tmm2/em3dex6mZ1W3K+tzwS17ykqSvWaonXn/99XP46U9/On3rW9/Kn08+55xzkj4br6dO56Q3VsAKWAErYAWsgBVYAhVQEydMduhRE1b14YcNLmJZKO835SsPJZYviBfClx0P0L+KG+PqenEB8VDWExcxdPOID9R5+QEoc0A3DgpXj1W94sWq4dXVpJtvvjmNh/EeiKO/BAD5LxKAtBkJ1Y1MjCD1OcwRtCkrsNAV0Odm1YDqii2Q9IchPfn5ggsuSPqd0IOj1ADXV3e1k/M67t///ndurnVL9lvf+lZN1cNLX/rS3ATrK72OOeaYpM/56qr2dtttl5veXvEcBS6yAlbAClgBK2AFrMDioQCQe5I4GjVs8sPKFwCZXBs56LicbDZArmnc1soPaKwQMRButpGrrXwodVCaTnF5QLURB+R1odgqnV3VCApkAbl5jBxxtQ0fyrpQ6qMOaMeqFlg8ntL8rGc9K+nq7WR4wxvekEb96DOOX//615Mw0dOc9QAhraE38qPmEbfnnnvmfXna056m0LACC1WBL33pS/n8W2mllXrr6jOzuutBeZ3HutL7qU99KineZpttxr2Nel7G6WqybmfW53ZH/eFH3Dvf+c502GGHJT2ZWbW6rfoJT3hCb58dzKMCHmYFrIAVsAJWwAosNgoA+Vig2Bw0m2jwGrfX4CmeCPU41UF/3mEOSh6KjbzmERQLQN4PcYCoHsQH6gSUWmDkeCiN7fAYzVVz4Q/zwOLR8Cb/WAErMEcKqNnUVx096UlPSvo6IF3FnZOBcztOV4t1i/JEc8+aNSs96lGPSmuuuWZ+evNEtc5ZgXlVwOOsgBWwAlbACkw3BdS0CbHftR8cEO4YW9fXvgph7DgoXNTKCtDn6/FAblDFDUNjxUHXrAKixoxRLZS6UX4e1GygjG/c/Pld2RrQz0OJ9X28i9UtzfVB27cCVsAKWAErYAV6CjiwAlbACliBKayAGj7tHtBrDKE0hMoNI8bUPNCG0Pkt2Tgwmm9SeW3o8tBfP9aUFaDkw4cyNmLNKUCpkz8M6I+BUhtzhI1xUOrV0IpTXhbI+y9fAHyFN/nHClgBK2AFrIAVWAIV8CFbAStgBaaWAkC7Q9HABQGlAVRc56Abo1ygrhE3HIsbBnRzDddDt36MA9rmEsh0jJOFwimhWDYAJQfFKg/k+eQLQC6XLyesfAHI9fIDURNWvK/wSgXDClgBK2AFrIAVsAJLsgI+ditgBaaEAnWjNrxDQKZgbPNZj5MPpVa+BkE/FidEXr4wHIsLQJkDyvp1rXwgN6Dha5x8AVA4BsoJkZAPo2uBPD+MXT/Gy2oOWSh1bnilhmEFrIAVsAJWwApYAStgBQYK2FiBRaGAGjVgwqVVowIYvw66HBR/vHFQ8ppTNdDF4oahGkE8jK6Fjgdyk6oxApQmVOMFKHkoPCC6BZDHi9D4gOIAEG6uhX7shreVx44VsAJWwApYAStgBayAFbACQwo4XEgKQL9R07Jq8GQD0NWIizwUPuI6Jx9KXv54gK4Gil/Pp3FAr6mMPKB074FSkVMCSl7+MFQnBB++bEA56OaAzleN8kJ8prf23fBKDcMKWAErYAWsgBWwAlbAClgBKzCpAgu+oG7goFz5HLWq6qBr/FQD/VjceNB4YTgfnCz01xcX9fKh5OWLh/HXh5KDbszwuIg1lwD9McFFHZS8eAH6sTg3vFLBsAJWwApYAStgBayAFbACVsAKLGIF1MhBv2mD0iDGrqlGPvTrgldOgC5f58IH8tVa1QaUA3IInRUvErp9AVIS2QA6vgnzCzouxishH8hrQ7HBKQ+FAxTmOuVz0GxqvwnzC7q1MtFsoIx3w9uI4ZcVsAJWwApYAStgBayAFbACVmCqKBBNXVgozZv2Dzpf8XBNxMoFoIxRDrrmUHHU1Db4sHVuPB+6NaIGylrQ5aBwqtH8gvyA4hrBA7n5jXjYwuj8wmx4h/fJsRWwAlbAClgBK2AFrIAVsAJWwAo0CqjJAxovtY0dlDg1P8o3pn0Nx21i4IzKQ5kP+lZDVA+FVyxAiaFrUqFwqlfNeIg8dPVQ/BgDJYYyP9Aee9SE1XwCEFT7mWHxIsPWvhteqbFI4EWtgBWwAlbAClgBK2AFrIAVsAJFAShNX4m6bTRx0M9Dafyg2LpOo6Hw8iM37NcxdPPD2LFQ8jEXlBoodiJeOejqoD+X8rEv8oHc+EKpA5TOiLwCGJ+fMaO0umWrasMKLEoFvLYVsAJWwApYAStgBayAFVjCFYDS4NUyQNfUQeerRs2frAD9scM51YiDfh10c0I/pzHQz0Op0VyCagQovHzxASA3r8FDVwclB51VnRDj5QuATJ5LOQWy0OehzB9PbHbDK6UMKzDFFPDuWAErYAWsgBWwAlbACiyZCkBp4HT0aujChq84AF2tOCjNXviyo8aJDygvRAzdnMHLClEjC/Saz+BUBygck8/kYAOlRvWC6LDyoeShHFOdU16AkpMfUB2Q1xbnhlcqGFbACkxlBbxvVsAKWAErYAWsgBVY4hRQ4xYHDV0DF/ywrWvDl4WuKQRE9QC0zWEkNLcQMXQ14qGbUzXiaisfkMlzRx4KlxPVBsp8QFsfY6IMulxw41mNBXJ6yja82snbb789GdZgup4D//3vf33++nd4AZwD/m/CdP1vgvfb567PAZ8DPgd8Dkx2Dtx2223te4c77rgjCcNjghu2UVfPEVzYyGls+GFVI19QPiC+hnjFsnVtcLKCcno/fO2116Zbb701N5/q8eRAaXDl11BeAHLjW+fkKycLyLQPrVIA5DFRE3bKNrx33XVXuv766w1r4HPA54DPAZ8D458D1sba+BzwOeBzwOfAYnQO3HDDDeP+e1533XXj5q6vNBg1R3BhNVf4YTWHfEH+MDRmmBtVK061smp2//3vf6ebb75ZPWmGGlEhB80GaLblBcVXXihs2UYMXbMMpV4VygtQOCh2yja8M2fOTA984AMNazDtzoFVVlkl73NYn8f+PfY54HNgYZ0DXsfnms8BnwM+Bxafc2D4veSqq66a32OO928c9WGH62q+nku8MFG9csNjxNXjwpeN2vDvfe9756uxQL4KC6hHzVCTKkDHQfGha25zcbNRbWPyK3zo6nOi2URuyja8eoz0SiutlAxrMN3OgVmzZuXzNux023/vr3/nfA74HFhMzoH832Ifi89nnwM+B6bTObDiiiu2/+2a2/eSUR92+LhrfnidyA3zdaz5Io56cYHgwoqXrzHLLbdc04Km3PSqERWga1Kh+OJzYbOBrtkFcqPc0O0LaP0YJwuFh2KnbMPb7r0dK2AFrIAVsAJWwApYgXuogIdbASswHRSA0qTd031V4zfRHDB6HejzMDqO+aGfjzUjrxhK4wrkphWKVS7qwgKic2MsB0osXzVAniNi2WGoLqCcG16pYFgBK2AFrIAVsAJWwAosOQr4SK3ANFNADZx2Oaz8iQBMlM65eq7az8mhTeTDQpk/4rpcHJQmN3jo16tGgMJH3TCnWLnahi9egP4cw5wbXiliWAErYAWsgBWwAlbACliBJVQBH/bUUWC4mYs9g9LUQbHBy8aYsOJGQXkhctDNBcWv81EnCyUPxYoToGtsYyyUGihWdcoJ8gWgd6UWEN3DePUqglIP3frBQ8kpFtzwSgXDClgBK2AFrIAVsAJWwApYASuQ0iLVAPrN2kQ7Ew0hlDFQ7HhjgLbJnKhmvJz4WLP2oTSdgOiRAPLaQM5rngB0HBQfilUxlPnlC9DFmkNcQLEQsawbXqlgWAErYAWsgBWwAlbAClgBK2AFpoACww2bYmF416BrCiOnOqGOw69tXSO+juUL4lPqHjSlGLo1YayvcYJqZQX5NYIDchOsXHDhRwxjm1vlAJVmQOdnotqo1g1vJYhdK2AFrIAVsAJWwApYAStgBazAolQA+g0c0DaG2i81cbKjAP1aIJcNj4HC52SzgS4GeutBPx6eqxnevqCrBVpeYwQRQJ4/4ok41QAqyWPkiJMN1DH0a4E0Xxve5B8rYAWsgBWwAlbAClgBK2AFrIAVuMcK1I1cPRmUpi441QkRyw7HUMaIF1QTGI4n46HMpTqNDSgOiJMP5QotkBtW8YJyAcUBcdDVQjdeNZGXDyjsQbyI2bNny+Q13fBmKRbIxpNaAStgBayAFbACVsAKWAErYAXmWIFo2DQAxjZ04ocB5Mau5oE6bH0g1463TvCyQDtOcQS1D+T5oDSmUQNkV7VQfBFArhevWBYKB4jKCF5WhCx0eXECkOeTXwPIoca54c1SeLPgFfAKVsAKWAErYAWsgBWwAlbACkykAJRGbaIa5dTICfIng+oCUQvdOsqN4oOTha4eSnNbjxuuiRx0tcHVtdDlg486WSjrQqmLGlnlA4qh1Mqv4Ya3VsO+FVhYCngdK2AFrIAVsAJWwApYASswFwqouYtyYOSVzbpmuBYIqmehayaV0Bwwtla88gLQWz9yYaGbE0otoKEZUacACj8RV+fkA731NY94QX4NN7y1GvatgBVYJAp4UStgBayAFbACVsAKWIGJFQAmLmiyMHHNcEMYMXTjoPObKdsXjObbgsaBrgY6v0klrSXIB3LDqliAEkdOtgZQh+1c0OdnzBjb3o5lelM5sAJWwApYgYWsgJezAlbAClgBK2AFllAF1PzNyaFPVFfn5AuaUxZKgyhfHJRYviBekD8RoiYsdFd0g9N4+QHFUNYTFzH0xyon1Hn5AShzQDcOCqdxQtTKd8MbathaAStgBazAFFTAu2QFrIAVsAJWYMlRAErjNnzEatxqDkbXqQa6HJCvpA7zigP13NDVKx+5sOIEQCbPHTnouJxsNkCugWIbqvfSWEGkLCA3j5EjrrbhQ2l2odRHHdCOVS3gryVKI35CsBEpU1ZgsVBgXs/xeR03mWgLat7J1nXeCkw7BbzDVsAKWAErsEQqAPSOe17fO8U46OaDzu8t0gRQclBsQ+VXzKMA+jlxw1B9oM5BGQvkRlU1QFsCpbFticaBsVxD55fGZ2ewARaPhvfss89OO++8czrhhBPSRD+f+MQnct3f/va3Xtktt9ySjjjiiLTDDjukV7/61ellL3tZ2nrrrdNnPvOZdMkll/Rqb7rppjyH1hvGHnvskY488sj0ve99L9188829ceKG6yeKTzvttN54B1ZgIgV0/tbnk87T4frzzz8/7brrrmnzzTdPG264YXrDG96QPvjBD6bTTz99uLQXz+24G2+8MX3yk5/M82+00UZpyy23TD/60Y96c9bBV77ylbTtttum66+/vqbtWwErYAUmVcAFVsBOXACkAAAQAElEQVQKWIHFVYG6cav9OF7omsLgwtb1ta88jD9OeUFjBPlC7SsWoJunzssXVCOED6UeilVOUB5KAzvKV40A3TjViasB/TyUePbs2YtHw3vZZZeln//85+nSSy+tj3uMf8455+S6uhm94oor0rvf/e705S9/OemNvd6sz5w5M1100UXp5JNPTu9973vTT37yk3auO++8M8+h9YahuuOOOy59/OMfz03Fqaee2o678sorxx03PI/iv/71r+1YO1ZgIgV0rur8Pe+889K5556bz7M77rijN+Rzn/tc/oOO/jikP/jc5z73SVdffXX65S9/mfbee++0yy67JJ3bvUFNMLfj9B+gD3/4w+k73/lOMzqlddddN11++eVpr732SmeeeWbm6o3OdTXr+sOSfvfqnH0rYAWsgBWYKwVcbAWswDRXQO+j4hCgNGyKofMV16jHBA9dPXR+5MezMReQr7ZGHZSGNOKokxWASOVx0I8jCf15gpeFMibmg1IbcVjVClDq1dAqVl4WyPsgXwAWj4Y33YOfQw89NKkZXWuttfLVL10l/ta3vpUb4Oc///nptttuS7pyqxotM2vWrHTIIYekz3/+82mppZYSlbbffvv0qU99Kn3kIx9JW2yxRVpjjTXSDTfckLmf/vSnuWbTTTdNBxxwQA9Pf/rTc+55z3tej1edrjLnpDdWYBIFdA6rZOONN07LLLOM3N4vuhrNE088Mempdbq6e9JJJ6VvfOMb6dvf/na+srrssssm/THo+OOPz2NjMy/j1LhecMEF6VGPelTSH3/22WeftO++++Yp9buVncFGv1NqthV+4AMfSKuvvrpcwwpYAStgBazAfFDAU1iB6acA0O50NHAtUTl1DroxVck8udDNVa+hyaA0oPIDQO89Z/Cyw+OHY0Bl7XjlgRzLF4BcI19OWPkCkOvlB6ImrPgZ2iypuP322/NVXR3/7rvvnp797GcnXflS/IAHPCB96EMfSuutt57CpKtn2Wk2ao71hn655ZZropTf3D/hCU9IG2ywQXrd616X1IDoVk4ldYVMt0yr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"&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;5. When Was the Information Verified?&lt;/h3&gt;

&lt;p dir="ltr"&gt;A PoR is a snapshot, which describes the reserve position at a specific point in time.&lt;/p&gt;

&lt;p dir="ltr"&gt;Therefore it's important to check the verification date, not just the publication date, given the two dates may differ. How often the exchange publishes a new assessment should also be checked.&lt;/p&gt;

&lt;p dir="ltr"&gt;The KuCoin report was published on August 10, 2026, while the technical verification took place on July 31, 2026.&lt;/p&gt;

&lt;p dir="ltr"&gt;This is the main limitation of any point-in-time PoR. An exchange can move assets after the snapshot. More frequent assessments reduce the gap but do not eliminate it.&lt;/p&gt;

&lt;p dir="ltr"&gt;In plain terms, PoR reports become stale. How quickly this happens depends on how often the exchange publishes new verification reports:&lt;/p&gt;

&lt;ul dir="ltr"&gt;
	&lt;li&gt;Daily snapshots become stale within 24 hours.&lt;/li&gt;
	&lt;li&gt;Monthly attestations become stale within a few weeks. This is a common cadence for centralized crypto exchanges.&lt;/li&gt;
	&lt;li&gt;Quarterly audits become stale within three months, leaving a longer period in which an exchange's financial position can change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;Limits of Proof of Reserves&lt;/h2&gt;

&lt;p dir="ltr"&gt;PoR is useful, but it does not answer every question about an exchange. It generally does not establish:&lt;/p&gt;

&lt;ul dir="ltr"&gt;
	&lt;li&gt;Whether reserves are encumbered. Assets can be pledged as collateral, locked in other protocols, or subject to legal claims.&lt;/li&gt;
	&lt;li&gt;What happens between snapshots. Assets can move after the assessment.&lt;/li&gt;
	&lt;li&gt;The quality of the reserves. Two exchanges can report the same coverage ratio while holding very different assets.&lt;/li&gt;
	&lt;li&gt;Operational and security risk. PoR does not show whether an exchange's infrastructure is secure, how it manages access controls, or how it responds to incidents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;This is where broader exchange risk assessment becomes important. CORE3 complements CoinGecko's Trust Score and Proof of Reserves by assessing the dimensions that PoR does not cover, including exchange security, solvency, and transparency. This provides users with a deeper view of an exchange's risk profile than reserve verification alone.&lt;/p&gt;

&lt;p dir="ltr"&gt;For this reason, "Proof of Reserves: yes/no" is a limited measure. The quality and scope of the evidence matter.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;For Exchanges: Publish Evidence That Users Can Verify&lt;/h2&gt;

&lt;p dir="ltr"&gt;Exchanges can make their PoR more useful by publishing the information needed to assess it independently.&lt;/p&gt;

&lt;p dir="ltr"&gt;At a minimum, this should include:&lt;/p&gt;

&lt;ul dir="ltr"&gt;
	&lt;li role="presentation"&gt;assets and networks covered&lt;/li&gt;
	&lt;li role="presentation"&gt;reserve wallet addresses&lt;/li&gt;
	&lt;li role="presentation"&gt;the method used to verify wallet control&lt;/li&gt;
	&lt;li role="presentation"&gt;customer liabilities included in the assessment&lt;/li&gt;
	&lt;li role="presentation"&gt;reserve coverage for each asset&lt;/li&gt;
	&lt;li role="presentation"&gt;reserve composition&lt;/li&gt;
	&lt;li role="presentation"&gt;assessment and verification dates&lt;/li&gt;
	&lt;li role="presentation"&gt;assessment frequency&lt;/li&gt;
	&lt;li role="presentation"&gt;whether customers can verify their own inclusion&lt;/li&gt;
	&lt;li role="presentation"&gt;the independent assessor and the scope of its work&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;A reserve figure on its own gives users little to verify. Detailed, recurring, and independently verifiable disclosures provide much stronger evidence.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Looking Beyond Proof of Reserves&lt;/h2&gt;

&lt;p dir="ltr"&gt;Proof of Reserves is useful, but it covers only one part of exchange risk. It can show whether specific assets covered customer liabilities at a point in time. But it’s not scoped to assess broader security: if the exchange's infrastructure is secure, whether its reserves are exposed to other risks, or how transparent and resilient its operations are.&lt;/p&gt;

&lt;p dir="ltr"&gt;CoinGecko's Trust Score provides a broader view by considering factors such as liquidity, cybersecurity, regulation, and incident history. Its cybersecurity component is supplemented with CORE3 data of exchanges’ penetration test, bug bounty, and Reserves verification audit.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img alt="Cybersecurity CORE3" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136352/content_Screenshot_2026-09-01_at_6.12.43%E2%80%AFPM.webp" style="width: 817px; height: 341px;"&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Apart from Trust Score, on its platform, CORE3 provides deeper insight into exchange risk across three dimensions: Security, Solvency, and Transparency. For Solvency, it goes beyond a simple PoR yes/no check by assessing the quality and scope of reserve evidence, including reserve composition, verification methodology, and disclosure transparency. Security assessment covers the technical and operational risks that PoR does not address, while Transparency assesses the quality and availability of information needed to independently assess an exchange.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img alt="Probability of Loss" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136353/content_Screenshot_2026-09-01_at_12.22.31.webp" style="width: 404px; height: 673px;"&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Together, these signals provide a more complete picture of exchange risk. Proof of Reserves can provide evidence that an exchange has sufficient assets to cover the liabilities included in an assessment. CORE3 supplements this evidence with security, solvency, and transparency data to help users assess the broader Probability of Loss.&lt;/p&gt;

&lt;p dir="ltr"&gt;For exchanges, publishing verifiable reserve information is one way to demonstrate financial transparency. Making this information available for independent assessment gives users and institutions more evidence to evaluate the exchange.&lt;/p&gt;

&lt;p dir="ltr"&gt;Explore exchange risk assessments on &lt;a href="https://core3.io/ratings/exchanges?utm_source=coingecko&amp;amp;utm_medium=referral&amp;amp;utm_campaign=cglearn" target="_blank"&gt;CORE3&lt;/a&gt; and compare &lt;a href="https://www.coingecko.com/en/exchanges" target="_blank"&gt;exchanges&lt;/a&gt; on CoinGecko.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This article is written in collaboration with CORE3.&lt;/em&gt;&lt;/p&gt;
</content>
    <author>
      <name>CoinGecko</name>
    </author>
    <url>https://www.coingecko.com/learn/proof-of-reserves-how-to-check-an-exchange-reserves-health?locale=en</url>
    <summary>Proof of Reserves (PoR) gives crypto exchange users evidence of the assets an exchange holds and the customer liabilities those assets are intended to cover.

On CoinGecko, just 79 of 166 exchanges...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135763</id>
    <published>2026-09-02T09:42:48Z</published>
    <updated>2026-09-02T08:10:03Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/cybersecurity-score-core3?locale=en"/>
    <title>CoinGecko's Cybersecurity Score Now Runs on CORE3: What Changed for 166 Exchanges</title>
    <content type="html">&lt;p dir="ltr"&gt;&lt;a href="https://www.coingecko.com" target="_blank"&gt;CoinGecko&lt;/a&gt;, the world’s largest independent cryptocurrency data aggregator, and CORE3, Hacken's risk infrastructure layer for digital assets, today announced that the cybersecurity component of CoinGecko’s Trust Score for centralized exchanges has migrated from &lt;a href="http://cer.live" target="_blank"&gt;CER.live&lt;/a&gt; to &lt;a href="https://core3.io/?utm_source=coingecko&amp;amp;utm_medium=referral&amp;amp;utm_campaign=migration_annoucement" target="_blank"&gt;CORE3&lt;/a&gt;.&lt;/p&gt;

&lt;p dir="ltr"&gt;CoinGecko’s exchange cybersecurity score was powered by CER.live’s framework for six years. The migration to CORE3 brings a forward-looking assessment of emerging risks of cryptocurrency exchanges before they become losses.&lt;/p&gt;

&lt;p dir="ltr"&gt;The migration covers 166 centralized exchanges. Individual exchange cybersecurity scores are expected to change by no more than two percentage points, ensuring continuity for CoinGecko users. On CoinGecko, users will continue to see an exchange’s cybersecurity rating alongside key assessment indicators, including whether it has undergone penetration testing, maintains a bug bounty program, and has completed a Proof of Reserves audit.&lt;/p&gt;

&lt;p dir="ltr"&gt;Users seeking a broader assessment can access &lt;a href="https://core3.io/ratings/exchanges?utm_source=coingecko&amp;amp;utm_medium=referral&amp;amp;utm_campaign=migration_annoucement" target="_blank"&gt;CORE3’s full risk breakdown&lt;/a&gt; across Security, Solvency, and Transparency. Together, these dimensions inform CORE3’s Probability of Loss (PoL), a forward-looking metric that estimates the likelihood of a loss event arising from factors such as a security breach, insolvency, or operational failure.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What Changed in CoinGecko’s Cybersecurity Trust Score&lt;/h2&gt;

&lt;p dir="ltr"&gt;CORE3 refined the underlying checks during the migration. Individual exchange cybersecurity scores are expected to change by no more than ±2 percentage points as a result, minimizing disruption for CoinGecko users. Users can also access a broader, multidimensional risk breakdown on CORE3, including the&lt;a href="https://core3.io/methodology/exchanges?utm_source=coingecko&amp;amp;utm_medium=referral&amp;amp;utm_campaign=migration_annoucement" target="_blank"&gt; Security, Solvency, and Transparency&lt;/a&gt; categories.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img alt="" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136347/content_Screenshot_2026-09-01_at_6.12.43%E2%80%AFPM.webp" style="width: 817px; height: 341px;"&gt;&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What This Means for Exchanges&lt;/h2&gt;

&lt;p dir="ltr"&gt;Increased transparency helps users and other decision-makers assess and manage counterparty risk more effectively, including how exchanges approach cybersecurity, solvency, and disclosure. Exchanges that have not yet submitted reserve data to CORE3 are encouraged to do so on &lt;a href="https://core3.io/ratings/exchanges?utm_source=coingecko&amp;amp;utm_medium=referral&amp;amp;utm_campaign=migration_annoucement" target="_blank"&gt;CORE3&lt;/a&gt;, as verified reserves provide users with an important signal when assessing counterparty risk and enable qualifying exchanges to receive CORE3's Solvency seal.&lt;/p&gt;

&lt;p dir="ltr"&gt;Operational security—including key management and signer infrastructure, which account for a significant portion of losses in the blockchain market today—is already included in the cybersecurity Trust Score through the cryptocurrency cybersecurity standard (CCSS) from the CORE3 security score.&lt;/p&gt;

&lt;p dir="ltr"&gt;Updated &lt;a href="https://www.coingecko.com/en/exchanges/coinbase-exchange" target="_blank"&gt;Trust Scores&lt;/a&gt; are already available on CoinGecko. Rated entities can review their multidimensional risk breakdown and the criteria behind each category at&lt;a href="https://core3.io/ratings/exchanges?utm_source=coingecko&amp;amp;utm_medium=referral&amp;amp;utm_campaign=migration_annoucement" target="_blank"&gt; core3.io&lt;/a&gt;.&lt;/p&gt;
</content>
    <author>
      <name>CoinGecko</name>
    </author>
    <url>https://www.coingecko.com/learn/cybersecurity-score-core3?locale=en</url>
    <summary>CoinGecko, the world’s largest independent cryptocurrency data aggregator, and CORE3, Hacken&amp;#39;s risk infrastructure layer for digital assets, today announced that the cybersecurity component of Coin...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135766</id>
    <published>2026-09-02T03:16:25Z</published>
    <updated>2026-09-02T03:29:45Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/crypto-pre-ipo-trading-anthropic-openai-perps?locale=en"/>
    <title>Crypto-enabled Pre-IPO Trading: Anthropic and OpenAI Perps Trade 42-106% Higher</title>
    <content type="html">&lt;h2 dir="ltr"&gt;Anthropic's Perpetuals Doubled in Valuation in Under 4 Months&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="pre-ipo trading anthropic" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136359/content_pre-ipo_anthropic.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;Anthropic's perpetual futures (perps) are trading at an average premium of &lt;strong&gt;100.5%&lt;/strong&gt; above the company's last priced funding round, according to CoinGecko and DefiLlama data snapshotted on September 1, 2026. &lt;/p&gt;

&lt;p dir="ltr"&gt;Across the 19 venues currently listing Anthropic pre-IPO perps, implied valuations range from &lt;strong&gt;$1.88T &lt;/strong&gt;(Bitget) to &lt;strong&gt;$1.99T&lt;/strong&gt; (Crypto.com). This is against Anthropic's &lt;strong&gt;$965B&lt;/strong&gt; post-money valuation set in its May 28, 2026 Series H-4 round. The average implied valuation across all 19 venues, &lt;strong&gt;$1.94T&lt;/strong&gt;, is now more than double what any priced primary transaction has valued the company at just 4 months ago.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What are Pre-IPO Perps?&lt;/h2&gt;

&lt;p dir="ltr"&gt;Pre-IPO perps are a distinctly crypto-native instrument: synthetic, cash-settled contracts that let retail traders take leveraged long or short exposure to a private company's implied valuation without holding equity, needing accredited-investor status, or accessing a secondary marketplace like Forge or EquityZen. &lt;/p&gt;

&lt;p dir="ltr"&gt;Exchanges construct a reference price, typically anchored to a data aggregator's tracked valuation or the company's last known funding round, and let the market trade around it. Unlike a spot-backed crypto perpetual, where funding rates and arbitrage against the underlying spot market pull price back toward fair value, there is no way to actually buy or short the private equity itself. That missing arbitrage mechanism is structural, not incidental, and it's the main reason these markets can sustain a persistent premium rather than one that mean-reverts. As of this snapshot, only &lt;strong&gt;2 of the 183 pre-IPO&lt;/strong&gt; companies tracked on DefiLlama's pre-IPO tracker have any perps listed anywhere: Anthropic and OpenAI.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;OpenAI's Perpetuals Trade at a Comparatively Lower Premium&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="pre-ipo openai" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136361/content_pre-ipo_openai.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;OpenAI perps trade at a premium but at roughly half the intensity as compared to Anthropic. Across 18 venues, OpenAI perps averaged a &lt;strong&gt;42.5%&lt;/strong&gt; premium over its &lt;strong&gt;$852B&lt;/strong&gt; valuation, set in the Series F round that closed March 31, 2026 ($122B raised, led by SoftBank, Amazon, and Nvidia). Implied valuations range from &lt;strong&gt;$1.21T&lt;/strong&gt; (Gate) to $1.25T (Crypto.com). Notably, OpenAI's reference valuation carries stronger evidence behind it than Anthropic's: OpenAI reaffirmed the &lt;strong&gt;$852B&lt;/strong&gt; mark with a &lt;strong&gt;$7B &lt;/strong&gt;&lt;a href="https://techcrunch.com/2026/08/10/openai-reportedly-completed-a-7-billion-employee-tender-offer/" rel="nofollow noopener" target="_blank"&gt;employee tender offer&lt;/a&gt; in August 2026, priced at that same valuation. Anthropic has no comparable secondary transaction since its May round, so part of its wider premium may reflect a valuation the market has already moved past, rather than pure overpricing.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Is Pre-IPO Trading Safe?&lt;/h2&gt;

&lt;p dir="ltr"&gt;Regulations around pre-IPO trading is currently murky and trading pre-IPO perps carries distinct risks that users should know about:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;No equity ownership: &lt;/strong&gt;these contracts are cash-settled derivatives referencing a company's implied valuation. The position confers no shares, no voting rights, and no claim on the company itself, regardless of how the position performs.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Possibly stale reference prices: &lt;/strong&gt;As this data shows, funding-round valuations can sit months behind the market's own pricing, and in the absence of a newer secondary transaction, there's no way to confirm whether the market premium reflects real information or simple speculation.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Potential company disavowal: &lt;/strong&gt;Anthropic has publicly warned that any sale or transfer of its stock, or any interest in it, without board approval is void and unrecognized on its books, and specifically flags "forward contracts," tokenized securities, and other indirect-access mechanisms as likely worthless due to these transfer restrictions &lt;a href="https://support.claude.com/en/articles/13704655-unauthorized-anthropic-stock-sales-and-investment-scams" rel="nofollow noopener" target="_blank"&gt;(Anthropic statement)&lt;/a&gt;. While that notice does not name perps specifically, the underlying logic, that no unauthorized mechanism confers real equity or company recognition, applies to any instrument marketed as exposure to Anthropic shares, cash-settled or not.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;Methodology&lt;/h2&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;This is a single date snapshot analysis of perps data (price, 24h volume, open interest, annualized funding rate) sourced from exchange-level data via CoinGecko, snapshotted September 1, 2026.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Implied valuation is calculated by scaling each venue's quoted contract price to a common per-$1-billion-of-valuation unit, consistent across all venues in the dataset.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;OKX's raw quoted price uses a different contract denomination (roughly 1/10th scale) than every other venue in this dataset; it has been normalized ×10 throughout so implied valuations are comparable across venues. This does not apply to any other venue observed.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Funding-round reference valuations are sourced from &lt;a href="https://defillama.com/pre-ipo" rel="nofollow noopener" target="_blank"&gt;DefiLlama's pre-IPO tracker&lt;/a&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;OpenAI's reference valuation was independently reaffirmed via a $7B employee tender offer in August 2026, priced at the same $852B mark. No equivalent post-round confirmation exists for Anthropic; its reference valuation is roughly three months old as of this snapshot with no newer priced round or confirmed secondary transaction identified.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;The Hyperliquid (entropyIO) market is newly deployed via Hyperliquid's HIP-3 framework, following the sunset of Ventuals which previously allowed OpenAI and Anthropic pre-IPO trading on Hyperliquid. As of writing, entropyIO has yet to deploy an OpenAI perps.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;Of the 183 pre-IPO companies tracked on DefiLlama's pre-IPO tracker as of this snapshot, only Anthropic and OpenAI have any identified perps listings on any exchange.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;If you cite these insights, we would appreciate a link credit to this article on CoinGecko, which allows us to keep supplying you with useful data-led content.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This study is for illustrative and informational purposes only, and is not financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Anthropic Perpetual Futures by Venue&lt;/h2&gt;

&lt;table&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Rank&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Exchange&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Price ($)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Implied Valuation&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Premium vs. Funding&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Crypto.com&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,986.10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.99T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;105.81%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Kraken&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,973.56&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.97T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;104.51%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;3&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;OKX*&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,945.10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.95T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;101.56%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;4&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Hyperliquid (entropyIO)**&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,944.60&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.94T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;101.51%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;5&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Gate&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,943.25&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.94T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;101.37%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;6&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Coinbase&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,941.33&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.94T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;101.17%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;7&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Phemex&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,930.79&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;100.08%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;8&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Binance&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,930.58&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;100.06%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;9&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;BingX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,930.28&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;100.03%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Bitunix&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,930.28&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;100.03%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;11&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;LBank&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,930.20&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;100.02%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;12&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Aster&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,930.19&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;100.02%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;13&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Extended&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,929.99&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;100.00%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;14&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Variational&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,929.83&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;99.98%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;15&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;HTX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,929.49&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;99.95%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;16&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;MEXC&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,928.52&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;99.85%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;17&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;KuCoin&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,928.28&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.93T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;99.82%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;18&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Lighter&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,923.70&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.92T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;99.35%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;19&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Bitget&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,883.05&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.88T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;95.13%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p dir="ltr"&gt;*OKX raw quote normalized ×10 to match contract sizing used by other venues. **Hyperliquid (entropyIO) is a permissionless HIP-3 deployer market, not a first-party exchange listing; treated separately from the other 18 venues in any "exchange-listed" framing.&lt;/p&gt;

&lt;p dir="ltr"&gt;These 19 venues represent the complete set of identified Anthropic perpetual listings as of this snapshot, not a subset of a larger pool.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;OpenAI Perpetual Futures by Venue&lt;/h2&gt;

&lt;table&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Rank&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Exchange&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Price ($)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Implied Valuation&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Premium vs. Funding&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;1&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Crypto.com*&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,247.50&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.25T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;46.42%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;OKX**&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,234.60&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.23T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;44.91%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;3&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Kraken&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,229.47&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.23T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;44.30%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;4&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;KuCoin&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,224.35&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.22T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;43.70%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;5&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Aster&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,209.83&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;42.00%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;6&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Bitget&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,209.53&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.96%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;7&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Coinbase&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,209.53&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.96%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;8&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;HTX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,208.43&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.83%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;9&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Lighter&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,208.13&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.80%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Binance&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,207.48&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.72%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;11&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Phemex&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,207.41&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.71%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;12&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;MEXC&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,207.40&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.71%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;13&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;LBank&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,207.25&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.70%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;14&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Extended&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,207.23&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.69%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;15&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;BingX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,207.10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.68%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;16&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Bitunix&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,207.10&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.68%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;17&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Variational&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;DEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,206.90&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.66%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;18&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Gate&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;CEX&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1,206.68&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.21T&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41.63%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p dir="ltr"&gt;*Crypto.com shows 0 in 24h trading volume for this contract at snapshot time; this premium may reflect a stale or unfilled mark rather than a traded price. **OKX raw quote normalized ×10 to match contract sizing used by other venues.&lt;/p&gt;

&lt;p dir="ltr"&gt;These 18 venues represent the complete set of identified OpenAI perpetual listings as of this snapshot.&lt;/p&gt;
</content>
    <author>
      <name>Loke Choon Khei</name>
    </author>
    <url>https://www.coingecko.com/learn/crypto-pre-ipo-trading-anthropic-openai-perps?locale=en</url>
    <summary>Anthropic&amp;#39;s Perpetuals Doubled in Valuation in Under 4 Months



Anthropic&amp;#39;s perpetual futures (perps) are trading at an average premium of 100.5% above the company&amp;#39;s last priced funding round, acc...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135762</id>
    <published>2026-08-31T13:59:03Z</published>
    <updated>2026-09-05T15:29:00Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/best-rwa-data-api?locale=en"/>
    <title>Top 7 Best Real-World Asset RWA Data API (2026)</title>
    <content type="html">&lt;style type="text/css"&gt;.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &gt; ul {
  color: inherit !important;
}
&lt;/style&gt;
&lt;div aria-label="Definition" class="cg-tldr-box" role="region" style="background-color: #e8fcc9; border-radius: 8px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 5px solid #34af00;"&gt;
&lt;h2 style="margin: 0px 0px 1rem; font-size: 1.25rem; color: rgb(25, 65, 45); font-weight: 700;"&gt;TL;DR: Which RWA Data API Should You Use?&lt;/h2&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #000000; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;&lt;a href="https://www.coingecko.com/en/api" target="_blank"&gt;&lt;strong&gt;CoinGecko API&lt;/strong&gt;&lt;/a&gt; is the best &lt;a href="https://docs.coingecko.com/reference/rwa-overview" target="_blank"&gt;&lt;strong&gt;RWA data&lt;/strong&gt;&lt;/a&gt; API for most core market-data use cases, combining a published tokenized-asset classification methodology with price, market cap, and trading pair data across issuers and networks.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;Specialized providers serve specific needs, including rwa.xyz for diligence schemas, Allium for raw warehouse data, Kaiko for regulated benchmark rates, Ondo Finance API for single-issuer integration, and DeFi Llama for RWA DeFi and TVL exposure.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;Tokenized real-world assets (RWAs) are blockchain tokens that represent off-chain assets such as stocks, ETFs, and commodities. The same underlying asset can be represented by multiple tokens issued by different companies on different blockchains, with each token having its own price and market data.&lt;/p&gt;

&lt;p&gt;In this guide, we compare seven RWA data APIs and help you evaluate their coverage, data, and capabilities to find the right provider for your use case.&lt;/p&gt;

&lt;p&gt;&lt;img alt="Top 7 Best RWA Data API (2026)" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136334/content_Top_7_Best_RWA_Data_API_%282026%29.webp" style="max-width: 100%; height: 629px; width: 1200px;"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;How to Choose an RWA Data API&lt;/h2&gt;

&lt;h3&gt;Aggregation&lt;/h3&gt;

&lt;p&gt;Consider whether you need aggregated data across issuers and trading venues or raw data to collect and reconcile yourself.&lt;/p&gt;

&lt;h3&gt;Coverage &amp;amp; asset classes&lt;/h3&gt;

&lt;p&gt;Evaluate coverage based on the market cap and asset classes relevant to your use case, rather than the total number of assets listed. A provider may list thousands of assets but still have limited coverage of the assets that matter to you.&lt;/p&gt;

&lt;h3&gt;Liquidity data&lt;/h3&gt;

&lt;p&gt;Look for data that helps assess how easily an asset can be bought or sold, such as trading volume, order book depth, and liquidity metrics. This helps determine whether a quoted price reflects an actively traded market.&lt;/p&gt;

&lt;h3&gt;Historical data&lt;/h3&gt;

&lt;p&gt;OHLCV and time-series data provide historical price and trading data for charting, analysis, and backtesting.&lt;/p&gt;

&lt;h3&gt;Data reliability and methodology&lt;/h3&gt;

&lt;p&gt;RWA data and coverage can vary significantly between providers. Some assets are fully backed and redeemable, while others only track the price of an underlying asset. Clear classification criteria and published methodologies help you understand what each data point represents and how the provider determines which assets qualify as RWAs.&lt;/p&gt;

&lt;p&gt;This also includes the reliability of the infrastructure delivering the data, such as independent security attestations (e.g. SOC 2) and a published uptime SLA. Not every provider needs a published classification methodology. This matters most for providers that aggregate or classify assets across issuers. Providers that only deliver raw market data or data from a single issuer do not need one.&lt;/p&gt;

&lt;h3&gt;Pricing&lt;/h3&gt;

&lt;p&gt;Consider whether the provider offers self-serve access or requires a sales process, as this can affect how quickly you can test and integrate the API.&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;RWA Data APIs at a Glance&lt;/h2&gt;

&lt;p&gt;CoinGecko combines a published, per-asset classification methodology with aggregated market data across issuers and trading venues. The other six providers take different approaches, including RWA-specific datasets, underlying market data infrastructure, and data focused on specific issuers or DeFi protocols.&lt;/p&gt;

&lt;p&gt;Here’s how the seven providers compare across the key factors:&lt;/p&gt;

&lt;div class="rgt-wrapper" style="--rgt-bg-odd: transparent; --rgt-bg-even: transparent; --rgt-text-color: inherit; --rgt-header-bg: transparent; --rgt-header-text: inherit; --rgt-border-color: currentColor; --rgt-accent-color: inherit; width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; margin:1.5rem 0;"&gt;
&lt;table align="center" class="rgt-table" style="background-color:var(--rgt-bg-odd);border-collapse:collapse;border:1px solid var(--rgt-border-color);color:var(--rgt-text-color);font-size:15px;line-height:1.45;min-width:1700px;table-layout:fixed;width:100%;"&gt;
	&lt;colgroup&gt;
		&lt;col style="width:11.0%;"&gt;
		&lt;col style="width:12.71%;"&gt;
		&lt;col style="width:12.71%;"&gt;
		&lt;col style="width:12.71%;"&gt;
		&lt;col style="width:12.71%;"&gt;
		&lt;col style="width:12.71%;"&gt;
		&lt;col style="width:12.71%;"&gt;
		&lt;col style="width:12.71%;"&gt;
	&lt;/colgroup&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Criterion&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;CoinGecko&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;CoinMarketCap&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;rwa.xyz&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Allium&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Kaiko&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Ondo Finance API&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;DeFi Llama&lt;/span&gt;&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding: 13px 16px; vertical-align: middle; border: 1px solid var(--rgt-border-color); overflow-wrap: break-word; font-weight: 600; text-align: center;"&gt;&lt;strong&gt;Aggregation&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;Yes — Aggregated view across assets, issuers, and trading venues&lt;/p&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;Partial — Links RWA assets and market pairs, but market data is returned separately&lt;/p&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;Partial — Aggregates issuers into asset profiles, but no live trading pair data&lt;/p&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;No — Raw data by source, without a combined RWA view&lt;/p&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;No — Market data for individual instruments&lt;/p&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;No — Limited to Ondo-issued assets&lt;/p&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;Partial — Aggregated asset data, but no trading pair data&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding: 13px 16px; vertical-align: middle; border: 1px solid var(--rgt-border-color); overflow-wrap: break-word; font-weight: 600; text-align: center;"&gt;&lt;strong&gt;Coverages&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;700+ assets&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;7,900+ assets&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;2,550+ assets&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Not available&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Not available&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;440+ assets&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;2,400+ assets&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding: 13px 16px; vertical-align: middle; border: 1px solid var(--rgt-border-color); overflow-wrap: break-word; text-align: center; font-weight: 600;"&gt;&lt;strong&gt;Liquidity data&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Exchange prices, bid-ask spread, and order-book depth&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Exchange prices and volume&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;No exchange-level price or liquidity data&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;No CEX venue data or order-book depth&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Tick-level data&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;No exchange-level price or liquidity data&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;No exchange-level price or liquidity data&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding: 13px 16px; vertical-align: middle; border: 1px solid var(--rgt-border-color); overflow-wrap: break-word; text-align: center; font-weight: 600;"&gt;&lt;strong&gt;Historical data&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Price, market cap, and volume history&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;No dedicated RWA historical endpoint&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Price, NAV, and circulating supply history&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Historical price, market cap, and supply by chain and token&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Historical trade data&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Historical data for Ondo tokens and their underlying stocks&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Historical TVL and market cap data by chain&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding: 13px 16px; vertical-align: middle; border: 1px solid var(--rgt-border-color); overflow-wrap: break-word; text-align: center; font-weight: 600;"&gt;&lt;strong&gt;Data reliability &amp;amp; methodology&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;RWA classification methodology&lt;/li&gt;
				&lt;li&gt;SOC 2 Type II certified&lt;/li&gt;
				&lt;li&gt;99.9% Enterprise uptime SLA&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;RWA listing criteria&lt;/li&gt;
				&lt;li&gt;SOC 2 certified&lt;/li&gt;
				&lt;li&gt;99.95% Enterprise uptime SLA&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Asset-level verification against issuer records&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;RWA classification methodology&lt;/li&gt;
				&lt;li&gt;SOC 2 certified&lt;/li&gt;
				&lt;li&gt;99.9% Enterprise uptime SLA&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Methodology not applicable&lt;/li&gt;
				&lt;li&gt;SOC 2 Type II certified&lt;/li&gt;
				&lt;li&gt;BMR-registered&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Methodology not applicable&lt;/li&gt;
				&lt;li&gt;No uptime SLA&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;RWA classification methodology&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding: 13px 16px; vertical-align: middle; border: 1px solid var(--rgt-border-color); overflow-wrap: break-word; text-align: center; font-weight: 600;"&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Free plan&lt;/li&gt;
				&lt;li&gt;Paid plans from $29/month&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Free plan&lt;/li&gt;
				&lt;li&gt;Paid plans from $29/month&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Enterprise-only API&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Sales-led&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Sales-led&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;Sales-led&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin:0; padding-left:1.1rem;"&gt;
				&lt;li&gt;RWA data only available from $250/month&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;Best RWA Data APIs (2026)&lt;/h2&gt;

&lt;h3&gt;CoinGecko: Best RWA API for Aggregated, Reliable Market Data&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="CoinGecko: Best RWA API for Aggregated, Reliable Market Data" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136080/content_CG.webp" style="max-width: 100%; height: 407px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
CoinGecko is the &lt;a href="https://www.coingecko.com/learn/best-crypto-data-api-ranked" target="_blank"&gt;most widely used crypto and tokenized market data API&lt;/a&gt;, trusted by leading digital asset companies including Coinbase, Kraken, and Etherscan. Its RWA endpoints provide one combined view of stocks, commodities, and ETFs across issuers and blockchains, backed by a published per-asset classification methodology that checks whether the underlying asset is real, backed, and redeemable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;One API for digital asset data:&lt;/strong&gt; RWA data sits alongside 18,000+ coins, 700+ real-world assets, and 44M+ onchain tokens data across 250+ networks under the same API and key, reducing the number of vendors needed to cover the digital asset market.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Published &lt;a href="https://www.coingecko.com/en/api/rwa-classification-methodology" target="_blank"&gt;classification methodology&lt;/a&gt;&lt;/strong&gt; &lt;strong&gt;with live aggregation:&lt;/strong&gt; Three-step review and an exclusion screen, applied per asset, combined with one live view across every underlying token, issuer, and trading venue via &lt;a href="https://docs.coingecko.com/demo/reference/rwas-id" target="_blank"&gt;/rwas/{id}&lt;/a&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Venue tickers and historical data:&lt;/strong&gt; &lt;a href="https://docs.coingecko.com/reference/rwas-id-tickers" target="_blank"&gt;/rwas/{id}/tickers&lt;/a&gt; covers CEX and DEX venues with bid-ask spread, 2% order-book depth, and per-ticker staleness and anomaly flags, while &lt;a href="https://docs.coingecko.com/reference/rwas-id-market-chart" target="_blank"&gt;/rwas/{id}/market_chart&lt;/a&gt; provides aggregated price, market cap, and volume history for charting and backtesting, with up to two years on Basic and full history on Analyst and above.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Cost-efficient pricing:&lt;/strong&gt; 1 credit per call regardless of payload size, through the same API used for crypto and onchain data.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;700+ dedicated RWA assets:&lt;/strong&gt; Stricter qualification criteria require an observable underlying token and active tokenized-market data, resulting in fewer assets than broader RWA catalogs. Other RWA-tagged tokens are still searchable through CoinGecko’s &lt;a href="https://docs.coingecko.com/reference/categories-overview" target="_blank"&gt;coin category&lt;/a&gt; endpoint, which include 2,000+ tagged assets.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No DeFi or yield data for RWAs:&lt;/strong&gt; RWA endpoints focus on market data and do not currently cover protocol-level TVL, lending, or yield data for tokenized assets.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;CoinMarketCap: Best Alternative for Broad Asset Coverage with Limited Reliability Signals&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="CoinMarketCap: Best Alternative for Broad Asset Coverage with Limited Reliability Signals" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136335/content_image_1108_%283%29.webp" style="max-width: 100%; height: 483px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
CoinMarketCap is a market-data provider whose RWA endpoints return aggregated price, market cap, and volume data for a tokenized asset across its linked tokens, along with links to the underlying TradFi exchange.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
&lt;strong&gt;Broad asset coverage:&lt;/strong&gt; 7,900+ tokenized assets across multiple asset classes. An asset can be listed as an RWA even without an active underlying token or tokenized market data, resulting in null API values. A higher indexed count therefore does not necessarily mean higher usable data coverage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No depth or history:&lt;/strong&gt; The endpoints return current price and 24-hour volume, with no order-book depth, trust score, or time-series/OHLCV endpoint for charting or backtesting.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No per-asset review trail:&lt;/strong&gt; Listings require audits or attestations of underlying backing, but there is no documented review trail developers can inspect for a specific token.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Credits scale with data returned:&lt;/strong&gt; Roughly 1 credit per 200 data points, with additional credits per currency conversion, so larger payloads cost more.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;rwa.xyz: Best for Diligence and Compliance Workflows&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="rwa.xyz: Best for Diligence and Compliance Workflows" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136336/content_image_1109_%281%29.webp" style="max-width: 100%; height: 643px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
rwa.xyz is a dedicated reference-data and diligence platform for tokenized RWA, tracking 2,557 assets across 13 classes with a 200-field schema covering off-chain checks, legal validation, custodian records, and fund structure. It helps diligence teams assess whether an asset has passed manual and automated review rather than providing a live-trading view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;2,557 assets tracked across 13 classes:&lt;/strong&gt; Its largest class is tokenized stocks, with 2,130 assets&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;200-field diligence schema:&lt;/strong&gt; Covers off-chain checks, legal validation, custodian records, and fund structure per asset, cross-checked against issuer documentation across three classification frameworks covering asset class, tokenization type, and structure.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Enterprise-only API access:&lt;/strong&gt; The Free and Pro plans do not include API access, which requires a custom Enterprise contract.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No venue ticker endpoint:&lt;/strong&gt; Does not provide venue-level trading or liquidity data.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No published SOC 2 or SLA:&lt;/strong&gt; Does not provide an independent security attestation or published uptime guarantee.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Allium: Best for Raw Blockchain Data&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="Allium: Best for Raw Blockchain Data" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136337/content_image_1110.webp" style="max-width: 100%; height: 885px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
Allium is a blockchain-data vendor built for data engineering teams, delivering raw onchain data, including tokenized RWA data, directly into Snowflake, BigQuery, or Databricks rather than through a ready-made market-data API for direct product use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
&lt;strong&gt;Warehouse-native delivery:&lt;/strong&gt; Raw data is delivered to Snowflake, BigQuery, or Databricks for querying through a team’s existing SQL and pipeline tools.&lt;/li&gt;
	&lt;li&gt;
&lt;strong data-end="242" data-start="206"&gt;Documented asset classification:&lt;/strong&gt; Seven asset classes with native and derivative distinctions by chain, avoiding double-counting of bridged or wrapped supply.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No purpose-built RWA REST API:&lt;/strong&gt; Tokenized-asset data can still be accessed through Allium’s generic Assets API, the login-gated Terminal, or a custom Datashares warehouse contract, but none are purpose-built for tokenized-asset market data.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No CEX trading or order-book data: &lt;/strong&gt;RWA pricing comes from DEX trades, oracle reads, or issuer NAV filings depending on the asset.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No published pricing:&lt;/strong&gt; Pricing and API access require a sales conversation, making costs harder to assess upfront.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Kaiko: Best for Regulated Benchmark Rate&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="Kaiko: Best for Regulated Benchmark Rate" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136081/content_Kaiko.webp" style="max-width: 100%; height: 399px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
Kaiko is a regulated market-data provider focused on 24/7 benchmark rates for underlying assets and per-instrument, tick-level trade data across exchanges, rather than a single aggregated API for tokenized assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Regulated benchmark-rate administration:&lt;/strong&gt; Registered under the EU Benchmark Regulation (BMR), allowing its rates to be used in regulated financial contracts.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Tick-level order books:&lt;/strong&gt; Per instrument across exchanges, including xStocks such as AAPLx and TSLAx, available through an enterprise contract.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No aggregated tokenized-asset API:&lt;/strong&gt; Prices reference the underlying asset rather than the token, with no cross-issuer market-cap or issuer view.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No discovery or structural metadata:&lt;/strong&gt; Users need to know the specific trading pair before querying. Kaiko does not surface the legal custodian, issuer, or proof-of-reserves details, as its reference-data layer focuses on asset codes and mappings rather than diligence documentation.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No published pricing:&lt;/strong&gt; Pricing and API access require a sales conversation, making costs harder to assess upfront.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Ondo Finance API: Best for Direct Issuer Integration&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="Ondo Finance API: Best for Direct Issuer Integration" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136338/content_image_1113.webp" style="max-width: 100%; height: 474px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
Ondo Finance API is the direct data source for Ondo’s own tokenized real-world assets, including stocks and ETFs, returning both onchain token data and underlying stock price and market data in a single response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Dual-layer data:&lt;/strong&gt; Combines onchain token data such as price, 24h change, and holders with underlying stock data including price, 52-week range, volume, and market cap in the same response.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;OHLC historical data:&lt;/strong&gt; Covers 440+ of Ondo’s tokenized US stocks and ETFs across Ethereum, BNB Chain, and Solana.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Single-issuer only:&lt;/strong&gt; Covers only Ondo’s own tokenized products, with no cross-issuer aggregated view.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No cross-venue or CEX ticker data:&lt;/strong&gt; Provides Ondo’s token price only, with no cross-exchange comparison.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No published pricing:&lt;/strong&gt; Pricing and API access require a sales conversation, making costs harder to assess upfront.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;DeFi Llama: Best for RWA DeFi and TVL Exposure&lt;/h3&gt;

&lt;p&gt;&lt;img alt="DeFi Llama: Best for RWA DeFi and TVL Exposure" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136339/content_image_1118.webp" style="max-width: 100%; height: 478px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
DeFi Llama is a DeFi analytics platform that includes dedicated RWA API endpoints for per-asset price, market cap, and TVL, along with protocol and chain-level views, rather than venue-level trading data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Dedicated RWA endpoints:&lt;/strong&gt; Current, stats, list, and chain-level views returning per-asset price, market cap, and TVL, classified by category, platform, and chain.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Published inclusion and exclusion criteria:&lt;/strong&gt; Defines what qualifies as an RWA based on an off-chain basis, public disclosure, and an identifiable responsible entity, along with delisting criteria.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Separate $250/month RWA API tier:&lt;/strong&gt; Requires an additional subscription beyond the $49/month Pro dashboard plan, increasing the cost of access.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No venue-level trading data:&lt;/strong&gt; Liquidity and order-book data are not provided alongside price and TVL.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2&gt;Which RWA Data API Should You Choose?&lt;/h2&gt;

&lt;p&gt;CoinGecko is the recommended starting point for most use cases, while the other providers are better suited to specific workflows.&lt;/p&gt;

&lt;h3&gt;CoinGecko: Core market-data use cases&lt;/h3&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Tokenized market discovery:&lt;/strong&gt; Aggregated venue tickers, 2% depth, and data-quality flags across issuer trading pairs, backed by a published per-asset methodology. This can help exchanges assess liquidity and data quality when evaluating tokenized assets for listing.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Building fintech and digital asset applications:&lt;/strong&gt; One API key for crypto, onchain, and tokenized market data, with an aggregated asset view and price history in a single call.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Price-history backtesting:&lt;/strong&gt; Aggregated historical price, market cap, and volume data for charting and backtesting.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;AI agents, trading bots, and research:&lt;/strong&gt; Tokenized market discovery, issuer and asset comparison, and venue identification through a single API.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;rwa.xyz, Allium, Kaiko, Ondo Finance API, and DeFi Llama: Specialized workflows&lt;/h3&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;rwa.xyz:&lt;/strong&gt; Asset diligence and compliance, with a 200-field reference schema covering asset-level legal, custody, and structural data.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Allium:&lt;/strong&gt; Raw blockchain data delivered directly to Snowflake, BigQuery, or Databricks for data engineering workflows.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Kaiko:&lt;/strong&gt; Regulated benchmark rates and tick-level market data across exchanges.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Ondo Finance API:&lt;/strong&gt; Direct issuer integration combining token and underlying-stock data, with single-issuer scope.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;DeFi Llama:&lt;/strong&gt; RWA DeFi and TVL analysis, with dedicated RWA endpoints for onchain and DeFi market data through its API.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;RWA data can vary significantly in what it covers, from tokenized assets with verified backing and redemption mechanisms to products that only track an underlying price. Choosing the right data source therefore depends on whether you need market data, asset-level diligence, onchain data, benchmark rates, issuer data, or DeFi exposure.&lt;/p&gt;

&lt;p&gt;CoinGecko brings tokenized asset classification, aggregated market data, venue coverage, and historical data together in the same API used for crypto and onchain data. Other providers are suited to more specialized workflows, including asset diligence with rwa.xyz, raw blockchain data with Allium, benchmark rates with Kaiko, issuer-level data with Ondo Finance API, and RWA DeFi data with DeFi Llama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to start building?&lt;/strong&gt; Sign up for the &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;CoinGecko API free Demo plan&lt;/a&gt; to discover, analyze, and compare tokenized assets and issuers via the &lt;a href="https://docs.coingecko.com/demo/reference/rwa-overview" target="_blank"&gt;RWA endpoints&lt;/a&gt;. To access historical chart data and discover trading venues for tokenized assets across CEXs and DEXs, upgrade to a &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;paid API plan&lt;/a&gt; from $29/month and get higher rate limits alongside more API credits, with a flat 1 credit per call regardless of response size.&lt;/p&gt;
</content>
    <author>
      <name>Ru Jun Ang</name>
    </author>
    <url>https://www.coingecko.com/learn/best-rwa-data-api?locale=en</url>
    <summary>.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &amp;amp;gt; ul {
  color: inherit !importan...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135759</id>
    <published>2026-08-26T01:55:38Z</published>
    <updated>2026-08-26T02:52:55Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/nansen-case-study?locale=en"/>
    <title>How Nansen Powers Onchain Intelligence Across 500M+ Wallets &amp; 30+ Chains</title>
    <content type="html">&lt;p dir="ltr"&gt;Nansen is an agentic trading platform that brings onchain analytics and execution, allowing investors to trade everything onchain with AI. Powered by 500 million labeled addresses with real-time data across major networks, Nansen helps investors, funds, and protocols turn complex onchain activity into actionable insights, providing visibility into market movements, wallet activity, and capital flows - right alongside trading. Its AI-powered features enable users to discover opportunities, execute trades, and manage portfolios through a single platform more efficiently.&lt;/p&gt;

&lt;p dir="ltr"&gt;In 2026, Nansen expanded into active trading execution across Hyperliquid, Solana, and Base, while continuing to add support for emerging networks such as Robinhood Chain. &lt;a href="https://www.coingecko.com/en/api" target="_blank"&gt;CoinGecko API&lt;/a&gt; supports this expansion by giving Nansen consistent access to real-time and historical market data across both established and newly launched networks.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;img alt="How Nansen Powers Onchain Intelligence Across 500M+ Wallets &amp;amp; 30+ Chains" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136314/content_Nansen_x_CoinGecko_%282%29.webp" style="width: 1200px; height: 628px;"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2 dir="ltr"&gt;Key Metrics at a Glance&lt;/h2&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;CoinGecko delivers price and market data across the 30+ blockchains Nansen tracks&lt;/strong&gt;, covering assets traded on centralized exchanges and long-tail onchain tokens.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;CoinGecko API's data powers key Nansen features, including Smart Money, Portfolio, and PnL&lt;/strong&gt;, providing the pricing foundation users rely on to analyze opportunities and make trading decisions.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Nansen added support for Robinhood Chain within one day&lt;/strong&gt;, enabled by CoinGecko’s ready coverage of new networks, helping the team move quickly when new market demand emerges.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2 dir="ltr"&gt;The Challenge: Scaling Onchain Intelligence Across Multiple Chains&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://nansen.ai/" target="_blank"&gt;Nansen&lt;/a&gt; needed timely and reliable market data across more than 30+ chains, covering established assets and long-tail tokens traded exclusively onchain. As the platform expanded from research into live execution, this data needed to support more than static dashboards. It had to provide actionable market context for token discovery, portfolio analysis, Smart Money intelligence, and real-time trading decisions.&lt;/p&gt;

&lt;p dir="ltr"&gt;Nansen also required historical market data to help users examine performance over time and give Nansen AI deeper context when analyzing onchain activity.&lt;/p&gt;

&lt;hr&gt;
&lt;h2 dir="ltr"&gt;Why Nansen Chose CoinGecko API&lt;/h2&gt;

&lt;p&gt;CoinGecko gives Nansen a unified market data layer across centralized and decentralized markets. Its coverage of major assets, long-tail onchain tokens, and newly launched networks allows Nansen to expand into new chains and product experiences without building separate market data integrations for each one.&lt;/p&gt;

&lt;p&gt;CoinGecko’s batched API endpoints also allow Nansen to retrieve data for multiple assets within a single request. Combined with a predictable credit model where one API request consumes one call credit, this helps Nansen manage data retrieval and infrastructure costs efficiently as its asset and chain coverage grows.&lt;/p&gt;

&lt;p&gt;While Nansen combines multiple data sources to maintain data quality, CoinGecko remains an integral source for market prices across its products and experiences.&lt;/p&gt;

&lt;div aria-label="Testimonial" role="region" style="background-color: #e8fcc9; border-radius: 8px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 5px solid #34af00;"&gt;
&lt;h3 style="margin: 0px 0px 1rem; color: #19412D; font-weight: 700;"&gt;What Nansen Says About CoinGecko API&lt;/h3&gt;

&lt;p style="line-height: 1.6; color: #34af00; margin-bottom: 1.5rem; font-weight: 500;"&gt;"Tracking Smart Money across dozens of chains only works if the underlying price data holds up. CoinGecko's coverage and uptime are what let us make that promise to our users. It also helps us respond quickly when new market demand emerges. We wouldn't have been able to integrate Robinhood Chain within a day if CoinGecko hadn't already had that network covered and readily available."&lt;/p&gt;

&lt;p style="margin: 0; font-weight: 500; color: #19412D;"&gt;— Hans Olav, Director of Engineering at Nansen&lt;/p&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 dir="ltr"&gt;How Nansen Leverages CoinGecko API&lt;/h2&gt;

&lt;p dir="ltr"&gt;CoinGecko market data is integrated across Nansen's core product experiences, powering token screeners, Smart Money intelligence, token pages, Nansen AI, and user portfolios.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Smart Money and Token Screeners&lt;/h3&gt;

&lt;p dir="ltr"&gt;Nansen's Token Screener combines market performance with proprietary signals such as Smart Money flows and trending onchain activity. This allows traders to compare what the market is doing with the wallets and entities driving that activity.&lt;/p&gt;

&lt;p dir="ltr"&gt;The &lt;a href="http://docs.coingecko.com/reference/coins-markets" target="_blank"&gt;/coins/markets&lt;/a&gt; endpoint returns prices, market capitalization, fully diluted valuation, trading volume, rankings, and price changes for up to 250 assets in one request. For long-tail tokens traded onchain, Nansen uses &lt;a href="http://docs.coingecko.com/reference/tokens-data-contract-addresses" target="_blank"&gt;/onchain/networks/{network}/tokens/multi/{addresses}&lt;/a&gt; to retrieve token and market data across multiple contract addresses efficiently.&lt;/p&gt;

&lt;p dir="ltr"&gt;Together, these endpoints give Nansen a scalable market data layer for screening established coins and newly active onchain tokens alongside its Smart Money signals.&lt;/p&gt;

&lt;p dir="ltr" style="text-align: center;"&gt;&lt;img alt="Nansen Smart Money and Token Screeners powered by CoinGecko API" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136313/content_image_1104.webp" style="width: 1200px; height: 530px;"&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Detailed Token Pages and Charts&lt;/h3&gt;

&lt;p dir="ltr"&gt;Nansen's detailed token pages bring market performance, onchain activity, and project information into a single view. For assets traded on both CEXs and DEXs, Nansen uses the &lt;a href="http://docs.coingecko.com/reference/coins-id" target="_blank"&gt;/coins/{id}&lt;/a&gt; endpoint to obtain market data and metadata, while the &lt;a href="http://docs.coingecko.com/reference/coins-id-market-chart" target="_blank"&gt;/coins/{id}/market_chart&lt;/a&gt; endpoint provides historical prices, market capitalization, and trading volume for line charts.&lt;/p&gt;

&lt;p dir="ltr"&gt;For assets exclusively traded onchain, Nansen uses the &lt;a href="http://docs.coingecko.com/reference/token-ohlcv-token-address" target="_blank"&gt;/onchain/networks/{network}/tokens/{token_address}/ohlcv/{timeframe}&lt;/a&gt; endpoint to display candlestick charts of a specific token. The &lt;a href="http://docs.coingecko.com/reference/token-info-contract-address" target="_blank"&gt;/onchain/networks/{network}/tokens/{address}/info&lt;/a&gt; endpoint enriches token pages with names, symbols, logos, websites, descriptions, and social profiles.&lt;/p&gt;

&lt;p dir="ltr"&gt;Nansen also uses &lt;a href="http://docs.coingecko.com/reference/tokens-info-recent-updated" target="_blank"&gt;/onchain/tokens/info_recently_updated&lt;/a&gt; to efficiently identify recently updated token information and subsequently retrieves new data to keep its product surfaces current.&lt;/p&gt;

&lt;p dir="ltr" style="text-align: center;"&gt;&lt;img alt="Nansen detailed token pages and charts powered by CoinGecko API" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136308/content_Detailed_Token_Pages_and_Charts.webp" style="width: 1200px; height: 672px;"&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Onchain Intelligence in Nansen AI&lt;/h3&gt;

&lt;p dir="ltr"&gt;Nansen's agentic experience enables users to interact with onchain data through natural language, including generating live charts and intelligence views within a conversation. When &lt;a href="https://academy.nansen.ai/en/help/articles/4676097-nansen-ai-101" target="_blank"&gt;Nansen AI&lt;/a&gt; delivers market insights or visualizations, it draws from the same market and onchain price endpoints used across the platform, ensuring consistent data across conversational experiences and core product surfaces.&lt;/p&gt;

&lt;p dir="ltr" style="text-align: center;"&gt;&lt;img alt="Onchain intelligence in Nansen AI powered by CoinGecko API" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136309/content_Onchain_Intelligence_in_Nansen_AI.webp" style="width: 1200px; height: 815px;"&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Portfolio and PnL Valuations&lt;/h3&gt;

&lt;p dir="ltr"&gt;Nansen's Portfolio and PnL experiences require current pricing across the assets held by each user, including long-tail tokens that trade exclusively onchain. For coins traded on CEXs and DEXs, the &lt;a href="http://docs.coingecko.com/reference/simple-price" target="_blank"&gt;/simple/price&lt;/a&gt; endpoint provides lightweight price lookups across up to 500+ assets in a single API call. For onchain tokens, the &lt;a href="http://docs.coingecko.com/reference/onchain-simple-price" target="_blank"&gt;/onchain/simple/networks/{network}/token_price/{addresses}&lt;/a&gt; endpoint retrieves real-time prices across multiple contract addresses in an efficient batched request.&lt;/p&gt;

&lt;p dir="ltr"&gt;For historical performance analysis, Nansen uses &lt;a href="http://docs.coingecko.com/reference/coins-id-market-chart" target="_blank"&gt;/coins/{id}/market_chart&lt;/a&gt; to access time-series data including historical prices, market caps, and trading volumes, supporting realized and unrealized PnL calculations.&lt;/p&gt;

&lt;p dir="ltr" style="text-align: center;"&gt;&lt;img alt="Nansen Portfolio and PnL valuations powered by CoinGecko API" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136310/content_Portfolio_and_PnL_Valuations.webp" style="width: 1200px; height: 669px;"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2 dir="ltr"&gt;Business Outcomes: Powering Market Context Efficiently Across Nansen&lt;/h2&gt;

&lt;p dir="ltr"&gt;CoinGecko's market data complements Nansen's intelligence layer of more than 500M+ labeled addresses across over 30+ chains. This combination connects prices and market performance with wallet activity, Smart Money flows, known entities, and portfolio positions across Nansen's trading experiences, AI features, and developer tools.&lt;/p&gt;

&lt;p dir="ltr"&gt;To efficiently scale market context across 30+ chains, Nansen uses an activity-based model that leverages its own onchain activity data to identify actively traded assets, then queries CoinGecko's endpoints for the assets that require updated pricing.&lt;/p&gt;

&lt;p dir="ltr"&gt;By bringing timely market context and onchain intelligence together, Nansen gives traders a more complete view of what is moving, which wallets are involved, and how those movements affect their portfolios.&lt;/p&gt;

&lt;p dir="ltr" style="text-align: center;"&gt;&lt;a href="https://www.coingecko.com/en/api/enterprise" target="_blank"&gt;&lt;img alt="Subscribe to CoinGecko API - Enterprise" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102135985/content_Subcribe_to_CoinGecko_API_CTA_-_Enterprise.webp" style="width: 1200px; height: 235px;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2 dir="ltr"&gt;What's Next On Nansen's Roadmap&lt;/h2&gt;

&lt;p dir="ltr"&gt;Nansen is deepening its agentic trading infrastructure with AI-powered agents that can surface, analyze, and act on onchain signals. Its roadmap includes execution across more chains and assets, improved Smart Money tracking and trading strategies, and new API and CLI tools for builders.&lt;/p&gt;

&lt;p dir="ltr"&gt;CoinGecko's price and market data will remain foundational as Nansen extends these capabilities across additional assets and product experiences.&lt;/p&gt;

&lt;hr&gt;
&lt;h2 dir="ltr"&gt;Get In Touch&lt;/h2&gt;

&lt;p dir="ltr"&gt;Ready to supercharge your crypto project? Fill in the form below to connect with our &lt;a href="https://www.coingecko.com/en/api/enterprise" target="_blank"&gt;API Sales team&lt;/a&gt; for a custom CoinGecko API plan tailored to enterprise needs.&lt;/p&gt;

&lt;p dir="ltr"&gt; &lt;/p&gt;
&lt;script charset="utf-8" type="text/javascript" src="//js-na2.hsforms.net/forms/embed/v2.js"&gt;&lt;/script&gt;&lt;script&gt;
  hbspt.forms.create({
    portalId: "5275236",
    formId: "bb29793b-e1fe-41e9-bef0-b8df8c35fe44",
    region: "na2"
  });
&lt;/script&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This article was written in collaboration with Nansen team.&lt;/em&gt;&lt;/p&gt;
</content>
    <author>
      <name>CoinGecko</name>
    </author>
    <url>https://www.coingecko.com/learn/nansen-case-study?locale=en</url>
    <summary>Nansen is an agentic trading platform that brings onchain analytics and execution, allowing investors to trade everything onchain with AI. Powered by 500 million labeled addresses with real-time da...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135758</id>
    <published>2026-08-25T15:10:10Z</published>
    <updated>2026-08-30T02:17:04Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/best-crypto-webhook-api?locale=en"/>
    <title>Top 5 Best Crypto Webhook APIs (2026): Real-time Notifications</title>
    <content type="html">&lt;style type="text/css"&gt;.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &gt; p {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &gt; ul {
  color: inherit !important;
}
&lt;/style&gt;
&lt;div aria-label="Definition" class="cg-tldr-box" role="region" style="background-color: #e8fcc9; border-radius: 8px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 5px solid #34af00;"&gt;
&lt;h2 id="tl;dr" style="margin: 0px 0px 1rem; font-size: 1.25rem; color: rgb(25, 65, 45); font-weight: 700;"&gt;TL;DR: Which Crypto Webhook API Should You Use? &lt;/h2&gt;

&lt;p style="font-size: 1rem; line-height: 1.6; margin-bottom: 1.5rem;"&gt;&lt;strong&gt;&lt;a href="https://docs.coingecko.com/webhooks" target="_blank"&gt;CoinGecko Webhooks&lt;/a&gt; support market-data events, while Alchemy, Moralis, Helius, and QuickNode focus on onchain events tied to specific wallets, contracts, or transactions. &lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #000000; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;Market-wide events such as metadata changes, price alerts, and new listings: CoinGecko API.&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;Wallet, contract, or onchain transaction events: Alchemy, Moralis, Helius, or QuickNode.&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;Production apps may need both layers for market-data and onchain events.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;Most crypto applications check for updates on a schedule. A price tracker polls every few seconds, a compliance script checks token metadata every hour, and a wallet re-scans a batch of addresses on a cron job. Polling works well when regular checks are enough, while webhooks deliver updates as events occur.&lt;/p&gt;

&lt;p&gt;A webhook uses a different approach. Your server registers an endpoint once, and the provider sends a request when an event occurs instead of your application polling for updates. This can reduce API requests and provide real-time updates.&lt;/p&gt;

&lt;p&gt;Crypto webhooks can deliver different types of events, depending on the provider. These include market-data events such as price, metadata, and listing-status changes, and onchain events like confirmed transactions, contract logs, and token mints.&lt;/p&gt;

&lt;p&gt;This guide compares five crypto webhook APIs, including CoinGecko, Alchemy, Moralis, Helius, and QuickNode, and explains which use cases each one is best suited for.&lt;/p&gt;

&lt;p&gt;&lt;img alt="Top 5 Best Crypto Webhook APIs 2026 comparing CoinGecko, Alchemy, Moralis, Helius, and QuickNode." height="629" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136300/content_Top_5_Best_Crypto_Webhook_APIs_%282026%29__Real-time_Notifications_%281%29.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="how-to-choose-a-crypto-webhook-api"&gt;How to Choose a Crypto Webhook API&lt;/h2&gt;

&lt;p&gt;All five providers use HTTP-based webhooks. The differences that matter are the events, coverage, delivery behavior, security, and filtering each provider supports:&lt;/p&gt;

&lt;h3 id="supported-event-types"&gt;Supported event types&lt;/h3&gt;

&lt;p&gt;Evaluate providers based on the specific events your application needs to react to.&lt;/p&gt;

&lt;h3 id="chain-and-market-coverage"&gt;Chain and market coverage&lt;/h3&gt;

&lt;p&gt;Coverage includes the chains, exchanges, and markets supported by each provider. It determines whether one provider can meet your needs or whether you need multiple providers for full coverage.&lt;/p&gt;

&lt;h3 id="delivery-reliability-and-retry-behavior"&gt;Delivery reliability and retry behavior&lt;/h3&gt;

&lt;p&gt;Review how failed deliveries are handled, including retry attempts and backoff, since temporary outages can otherwise result in missed events.&lt;/p&gt;

&lt;h3 id="authentication-and-payload-security"&gt;Authentication and payload security&lt;/h3&gt;

&lt;p&gt;Webhook endpoints are publicly accessible. Signature verification confirms that a payload came from the provider before it is processed.&lt;/p&gt;

&lt;h3 id="event-filtering"&gt;Event filtering&lt;/h3&gt;

&lt;p&gt;Filtering determines whether applications can subscribe only to the addresses, coins, or event types they need, or receive a broader stream and filter it after delivery. Both approaches can work. With a broader stream, the application can check each payload against its watchlist before processing it.&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="crypto-webhook-apis-at-a-glance"&gt;Crypto Webhook APIs at a Glance&lt;/h2&gt;

&lt;p&gt;CoinGecko supports market-data webhooks for coin metadata, price alerts, and new listings across its tracked catalog. The other four focus on onchain events, including activity from specific wallets, contracts, and transactions.&lt;/p&gt;

&lt;p&gt;Here’s how the five providers compare across the key factors:&lt;/p&gt;

&lt;div class="rgt-wrapper" style="--rgt-bg-odd: transparent; --rgt-bg-even: transparent; --rgt-text-color: inherit; --rgt-header-bg: transparent; --rgt-header-text: inherit; --rgt-border-color: currentColor; --rgt-accent-color: inherit; width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; margin:1.5rem 0;"&gt;
&lt;table class="rgt-table" style="width:100%; min-width:1180px; border-collapse:collapse; table-layout:fixed; font-size:15px; line-height:1.45; color:var(--rgt-text-color); border:1px solid var(--rgt-border-color); background-color:var(--rgt-bg-odd);"&gt;
	&lt;colgroup&gt;
		&lt;col style="width:12.0%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
	&lt;/colgroup&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Criterion&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;CoinGecko&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Alchemy&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Moralis&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Helius&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;QuickNode&lt;/span&gt;&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Event types&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Coin metadata changes&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Price-target alerts (private beta)&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;New listings (private beta)&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Address activity&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;NFT activity&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Custom GraphQL-defined events&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Wallet and contract activity (EVM, Bitcoin, Solana)&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;100+ decoded blockchain activities&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Raw Solana transactions&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Any event you define in a filter function&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;From raw blocks and logs to fully decoded activity&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Coverage&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;44M+ tokens&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;1,900+ exchanges&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;250+ chains&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;30+ EVM chains&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Solana address events (early beta)&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;~19 EVM chains&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Bitcoin&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Solanavia dedicated Streams product&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Solana only&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;50+ chains&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Reliability&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Free retries with exponential backoff&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Transparent auto-disable thresholds&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Exponential-backoff retries on non-2xx responses&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;7-attempt backoff over 24 hours&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;At-least-once delivery (duplicates possible)&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Up to 3 retries only&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Configurable retries&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Re-delivery after chain reorganizations or previously sent data&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Entry pricing&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;From $29/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;100k credits/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;10 credits per event, free retries&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Pay-as-you-go&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;~40 CU per typical event&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;From $49/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;2M CU/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;10 CU per record, scales with transaction complexity&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;From $49/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;2M CU/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;1 credit per delivered event, even on failure&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;From $49/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;80M credits/mo&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;30 credits per payload, free retries&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Filtering&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;All active coins with no per-asset setup&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Filter on arrival by coin ID or changed fields&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Address lists&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;NFT contract or collection&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Custom GraphQL query&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Per-contract, per-address, and event filters&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Address list&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;100+ transaction types&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Programmable filters/transforms&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;JavaScript or Go&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Best for&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Wallets, exchanges, portfolio trackers, and analytics dashboards syncing coin metadata, with price alerts and new-listing events for automated workflows&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;EVM dApps and exchanges monitoring wallet activity at scale&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Multi-chain apps, cross-chain payment gateways, and wallets operating across EVM, Bitcoin, and Solana&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Solana-native trading bots, NFT marketplaces, and compliance tools that need decoded transaction context&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Teams needing broad onchain coverage or custom pipelines into Kafka, S3, or Postgres&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="best-crypto-webhook-apis-2026"&gt;Best Crypto Webhook APIs (2026)&lt;/h2&gt;

&lt;h3 id="coingecko-api-best-for-market-data-webhooks"&gt;CoinGecko API: Best for Market-Data Webhooks&lt;/h3&gt;

&lt;p&gt;&lt;img alt="CoinGecko API homepage showing crypto market data coverage trusted by MetaMask, Coinbase, and Nansen." height="408" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136080/content_CG.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p&gt;CoinGecko API is the &lt;a href="https://www.coingecko.com/learn/best-crypto-data-api-ranked" target="_blank"&gt;most popular crypto price and market data API&lt;/a&gt;, trusted by industry leaders including MetaMask, Coinbase, and Etherscan. Webhooks bring that same data to your server in real time, delivering market-data events aggregated from exchanges and networks. This provides ready-to-use data without requiring you to index raw onchain activity.&lt;/p&gt;

&lt;p&gt;Webhooks start at $29/month on the Basic plan, which includes WebSocket access and 100K monthly API credits. Selected plans also support &lt;a href="https://docs.coingecko.com/docs/crypto-payment" target="_blank"&gt;crypto and stablecoin payments&lt;/a&gt; across six chains, a flexible payment option for crypto-native developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Broadest coverage:&lt;/strong&gt; &lt;a href="https://docs.coingecko.com/webhooks/cg-coin-info-updated" target="_blank"&gt;cg.coin.info.updated&lt;/a&gt; covers metadata, links, categories, and contract-address changes across every active tracked coin, including new-chain deployments and migrations, with no per-asset setup.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Flat pricing:&lt;/strong&gt; 10 credits per delivered event, regardless of payload size, with free retries. Webhooks deliver updates as events occur, reducing repeated polling.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Transparent reliability:&lt;/strong&gt; Failed deliveries retry with exponential backoff, with published auto-disable thresholds of 14 failed retries on one event over ~24 hours or 300 aggregate failures over 12 hours.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No upstream per-coin filtering:&lt;/strong&gt; &lt;code&gt;cg.coin.info.updated&lt;/code&gt; is a catalog-wide signal, so applications must filter events against their own watchlists using &lt;code&gt;data.id&lt;/code&gt; and &lt;code&gt;data.changes[]&lt;/code&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Private beta events:&lt;/strong&gt; &lt;a href="https://docs.coingecko.com/webhooks/cg-coin-price-updated" target="_blank"&gt;cg.coin.price.updated&lt;/a&gt; and &lt;a href="https://docs.coingecko.com/webhooks/cg-coin-listed" target="_blank"&gt;cg.coin.listed&lt;/a&gt; are currently in private preview. Submit this &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfL4qPtKg5WJuBkBjrrrq0MoJHWhCNBkuRY1zYciHdOCgHiVQ/viewform" rel="nofollow noopener" target="_blank"&gt;form&lt;/a&gt; to get early access.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="alchemy-production-evm-address-monitoring"&gt;Alchemy: Production EVM Address Monitoring&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="Alchemy platform dashboard showing 18.2M transactions and 99.99% uptime for onchain address monitoring." height="771" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136301/content_alchemy.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
Alchemy Notify focuses on wallet activity across EVM chains. Its Address Activity webhooks support 30+ EVM chains, with Solana support currently in early beta. NFT Activity and Custom Webhooks have narrower EVM-chain coverage and do not currently support Solana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Address Activity:&lt;/strong&gt; Supports up to 100,000 addresses per webhook. Custom Webhooks support custom GraphQL queries to define the addresses and log topics that trigger deliveries.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;NFT Activity:&lt;/strong&gt; Covers mints, sales, and transfers across Ethereum, Arbitrum, Optimism, and Polygon without requiring manual log parsing.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Payload-based pricing:&lt;/strong&gt; Webhook costs scale with payload size at 0.04 compute units per byte, rather than a flat per-event model.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No aggregated market data:&lt;/strong&gt; Focuses on onchain activity rather than aggregated coin metadata, prices, or listings.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="moralis-wallet-activity-across-evm-bitcoin-and-solana"&gt;Moralis: Wallet Activity Across EVM, Bitcoin, and Solana&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="Moralis platform showing Data APIs, Streams, DataShare, and Data Feeds for exporting blockchain data." height="700" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136302/content_moralis.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
Moralis Streams supports multi-chain applications such as payment gateways and wallets that would otherwise need separate integrations per chain. A single Streams setup delivers wallet and contract activity rather than raw blocks across 19 EVM mainnets, Bitcoin, and Solana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Event filtering:&lt;/strong&gt; Supports per-contract, per-address, and per-event filters across EVM, Bitcoin, and Solana from one dashboard.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Two-stage delivery:&lt;/strong&gt; Sends a webhook when a transaction is first detected (&lt;code&gt;confirmed: false&lt;/code&gt;) and again when finalized (&lt;code&gt;confirmed: true&lt;/code&gt;).&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No replay protection:&lt;/strong&gt; Moralis signs payloads with Keccak-256 via the &lt;code&gt;x-signature&lt;/code&gt; header, but the signature does not include a timestamp or nonce. A captured payload could therefore be replayed, requiring additional transaction verification for sensitive actions.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Per-record pricing:&lt;/strong&gt; EVM records cost 10 CU each, and a single delivery can contain transactions, logs, and internal transactions. A 100-token NFT mint can generate 100 records, costing 1,000 CU for one delivery.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="helius-solana-transaction-data"&gt;Helius: Solana Transaction Data&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="Helius homepage highlighting low-latency Solana RPCs, transaction landing, and data streaming tools." height="525" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136303/content_helius.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
Helius focuses on Solana, with Enhanced Webhooks that parse Solana transactions into labeled events such as NFT sales, token transfers, and swaps. It also offers Raw Webhooks for transactions involving watched addresses without event-type filtering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Event parsing:&lt;/strong&gt; Enhanced Webhooks provide labeled transaction events for use cases such as NFT marketplaces, trading bots, and compliance tools.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Filtering:&lt;/strong&gt; Enhanced Webhooks support filtering by address list and transaction type to limit delivered events.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Basic authentication:&lt;/strong&gt; Helius uses an optional static header rather than cryptographic payload signing. A leaked header can be replayed, and payload integrity cannot be verified. For sensitive actions, independently verify the referenced transaction signature on Solana before acting.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Limited retries:&lt;/strong&gt; Failed deliveries are retried up to 3 times before the event is dropped. Delivery is at-least-once, so duplicate events are possible.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Additional credit charges:&lt;/strong&gt; Each event costs 1 credit regardless of whether your endpoint processes it successfully. Creating, editing, or deleting a webhook costs 100 credits each.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="quicknode-broad-onchain-coverage-custom-data-pipelines"&gt;QuickNode: Broad Onchain Coverage, Custom Data Pipelines&lt;/h3&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;img alt="QuickNode homepage showing real-time blockchain webhooks with guaranteed delivery across 135 networks." height="477" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136304/content_quicknode.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;&lt;br&gt;
QuickNode Streams provides broad onchain coverage, raw blockchain data, and multiple delivery options beyond a single webhook endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Widest onchain coverage:&lt;/strong&gt; EVM chains, Bitcoin, Solana, XRPL, and Stellar, with 50+ chains in total.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Custom data processing:&lt;/strong&gt; Supports JavaScript and Go for filtering and transforming onchain data, from raw logs to decoded application events.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Multiple destinations:&lt;/strong&gt; Streams can deliver to webhooks and data destinations such as Kafka, S3-compatible storage, Azure Blob Storage, or Postgres.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Raw data by default:&lt;/strong&gt; Streams delivers block, log, receipt, and trace data. Turning this into decoded events such as ERC-20 transfers or swaps requires your own filtering and decoding logic.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Processing costs:&lt;/strong&gt; QuickNode processes every block before applying the filters, so narrowing the events you receive does not reduce the 30-credit payload charge.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2 id="which-crypto-webhook-api-should-you-choose"&gt;Which Crypto Webhook API Should You Choose?&lt;/h2&gt;

&lt;p&gt;CoinGecko's Webhooks are suited to market-data events, while Alchemy, Moralis, Helius, and QuickNode focus on onchain activity.&lt;/p&gt;

&lt;p&gt;A production stack may use both. For example, a wallet app might use CoinGecko to keep coin metadata and prices in sync for its UI, while relying on Alchemy or Moralis to detect deposits and withdrawals. The providers therefore complement each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CoinGecko: Market-data events&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;code&gt;cg.coin.info.updated&lt;/code&gt; keeps wallets, exchanges, portfolio trackers, analytics dashboards, and alert bots in sync when a project rebrands, migrates its contract address, or updates a link, without polling every tracked coin.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;code&gt;cg.coin.listed&lt;/code&gt; supports listing-alert products, asset-onboarding pipelines, trading terminals, multi-chain wallets, and social-sentiment tools that need to know when CoinGecko indexes a new coin.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;code&gt;cg.coin.price.updated&lt;/code&gt; supports trading bots, price-alert apps, notification bots, and no-code automation platforms such as Zapier or IFTTT when a coin crosses a defined price threshold.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Alchemy, Moralis, Helius, and QuickNode: Onchain events&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Alchemy:&lt;/strong&gt; EVM applications tracking wallet activity at scale, with Address Activity supporting up to 100K addresses per webhook.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Moralis:&lt;/strong&gt; Multi-chain applications across EVM, Bitcoin, and Solana through a single Streams API, such as multi-chain applications and payment gateways.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Helius:&lt;/strong&gt; Solana applications that need decoded transaction events rather than raw transaction data, such as trading bots, NFT marketplaces, and compliance tools.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;QuickNode:&lt;/strong&gt; Applications needing broad onchain coverage, custom data processing, or multiple delivery destinations, including webhooks and data warehouses.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;The right choice depends on the type of events your application needs. CoinGecko is suited to market-data events, including metadata syncing ,price alerts and new listings, while Alchemy, Moralis, Helius, and QuickNode focus on onchain address and transaction monitoring.&lt;/p&gt;

&lt;p&gt;To learn more about implementing CoinGecko Webhooks, see the &lt;a href="https://www.coingecko.com/learn/how-to-get-real-time-crypto-updates-via-webhook.com" target="_blank"&gt;CoinGecko Webhook walkthrough&lt;/a&gt;, which covers endpoint setup, signature verification, and idempotency. For a broader comparison of crypto APIs for trading bots and AI agents, see our guide to the &lt;a href="https://www.coingecko.com/learn/best-crypto-api-algorithmic-trading-bots-ai-agents.com" target="_blank"&gt;best crypto APIs for algorithmic trading bots and AI agents&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to start building?&lt;/strong&gt; &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;CoinGecko API Basic plan from $29/month&lt;/a&gt; includes 1 webhook endpoint, WebSocket API access, 100K monthly call credits, and a commercial license. Analyst plans include 5 webhook endpoints, 500K monthly call credits, 500 RPM rate limit, and access to exclusive endpoints. A &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;free CoinGecko API key&lt;/a&gt; is also available for exploring the broader API before upgrading to a plan with Webhooks.&lt;/p&gt;
</content>
    <author>
      <name>Ru Jun Ang</name>
    </author>
    <url>https://www.coingecko.com/learn/best-crypto-webhook-api?locale=en</url>
    <summary>.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &amp;amp;gt; p {
  color: inherit !important...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135757</id>
    <published>2026-08-25T04:07:23Z</published>
    <updated>2026-08-25T09:16:54Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/hyperliquid-aqav2-hype-buyback-revenue-increase?locale=en"/>
    <title>The Next Hyperliquid Catalyst: HYPE's Upcoming 18% Revenue Increase</title>
    <content type="html">&lt;div dir="ltr"&gt;&lt;img alt="Hyperliquid catalyst chart 1" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136297/content_HYPE_AQAv2_Buybacks.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;Hyperliquid's daily protocol revenue is set to rise by an estimated &lt;strong&gt;18.06% &lt;/strong&gt;in October 3, 2026 once its Aligned Quote Assets v2 (AQAv2) framework begins generating cash flow to the &lt;strong&gt;Assistance Fund (AF), the on-chain wallet responsible for &lt;a href="https://www.coingecko.com/en/coins/hyperliquid" target="_blank"&gt;HYPE&lt;/a&gt; buybacks.&lt;/strong&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;What Is AQAv2?&lt;/h3&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://hyperliquid.gitbook.io/hyperliquid-docs/hypercore/aligned-quote-assets" rel="nofollow noopener" target="_blank"&gt;AQAv2 &lt;/a&gt;is a framework designed to ensure that stablecoins deployed on Hyperliquid are aligned with the Hyperliquid ecosystem. In May 14, 2026, a deal was made that involved USDC issuer Circle and treasury deployer Coinbase. It was agreed that Hyperliquid’s official stablecoin, USDH, would sunset and for USDC to take its place. In return, ~90% of the reserve yield generated by USDC deposits on Hyperliquid would be shared with the Hyperliquid protocol, and go towards HYPE buybacks.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Hyperliquid-USDC Deal Timeline&lt;/h2&gt;

&lt;p dir="ltr"&gt;This AQAv2 deployment timeline unfolds across these several dates, while some users on X have flagged out the August 26 date, the actual important date to watch for is October 3, 2026.&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;June 8, 2026: &lt;/strong&gt;AQAv2 activation, publication of Coinbase’s treasury wallet address (0xc20699185c15D0a2fD65779BB5d69f5b0B113c00)&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;August 26, 2026: &lt;/strong&gt;Reserve yield accrual begins. Largely symbolic with no cash moves yet.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;October 3, 2026: &lt;/strong&gt;Expected first payments to the Assistance Fund. The real catalyst with actual buy pressure placed on HYPE.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;AQAv2 Revenue Projections&lt;/h2&gt;

&lt;p dir="ltr"&gt;At the time of writing USDC deposits on Hyperliquid totals &lt;strong&gt;$6.74B.&lt;/strong&gt; Under a base-case 3% treasury yield assumption and with ~90% of yield being directed towards Hyperliquid, &lt;strong&gt;we estimate AQAv2 could add ~$498,575 in daily revenue for additional HYPE buybacks, or $182M in annual revenue.&lt;/strong&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;The current trailing 7-day average daily revenue of the Hyperliquid protocol is &lt;strong&gt;$2.76M as of August 19, 2026, which means this upcoming revenue source would raise Hyperliquid’s expected revenue by ~18.06%.&lt;/strong&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Worth noting, current 3-month Treasury bill rates sit at approximately 3.67%, comfortably above our 3% base-case assumption. &lt;strong&gt;This suggests our estimate is likely conservative rather than aggressive.&lt;/strong&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Other Interest Rate Scenarios&lt;/h3&gt;

&lt;table&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Yield Rate&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Daily Add-on&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Annualized Add-on&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;% Increase vs. Baseline Revenue&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Low&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$332,384&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$121.32M&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;12.04%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Base&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;3%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$498,575&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$181.98M&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;18.06%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;High&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;5%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$830,959&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$303.30M&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;30.09%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p dir="ltr"&gt;Baseline: $2,761,383 trailing 7-day average daily revenue as of August 19, 2026. Formula: Total HL USDC (live) × yield rate × 90% protocol share ÷ 365 days.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Conclusion&lt;/h2&gt;

&lt;p dir="ltr"&gt;While it is not an assurance of prices, revenue remains a key predictor for the HYPE token due to its uniquely high revenue buyback policies. Compared to most other crypto tokens, Hyperliquid currently directs 97-99% of protocol revenue to HYPE buybacks.&lt;/p&gt;

&lt;p&gt;This gives Hyperliquid the unique property of being able to be priced like a stock, with analysts from digital asset manager Grayscale, even releasing &lt;a href="https://research.grayscale.com/reports/hyperliquid-breaks-the-mold" rel="nofollow noopener" target="_blank"&gt;a report&lt;/a&gt; in May 2026, where HYPE traded at a 14x multiple (lower is better) — less than a third of comparables like Robinhood and Interactive Brokers, which trade in the 35-50x range.&lt;/p&gt;

&lt;p dir="ltr"&gt;Overall, market sentiment toward HYPE is notably bullish heading into that date: Polymarket currently prices an 80% implied probability that HYPE breaks $90 by the end of 2026.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Methodology&lt;/h3&gt;

&lt;p dir="ltr"&gt;Daily and 7-day average revenue figures are sourced from CoinGecko and DefiLlama on-chain data. The AQAv2 daily revenue add-on is calculated as: Total HL USDC (live) × yield rate × 90% protocol share ÷ 365 days, using a $6.74 billion USDC reserve figure and the 2%/3%/5% yield rate scenarios as published on Hyperliquid's hl.eco AQAv2 dashboard. The 3% "Base" case reflects &lt;a href="https://hl.eco/stables" rel="nofollow noopener" target="_blank"&gt;hl.eco's&lt;/a&gt; own labeled conservative estimate.&lt;/p&gt;

&lt;p dir="ltr"&gt;This is a forward-looking, scenario-based estimate, not a forecast of actual trading revenue. The $2,761,383 baseline (trailing 7-day average daily revenue as of August 19, 2026) is held flat for illustrative purposes only; Hyperliquid's actual trading-fee revenue will continue to fluctuate independently of the AQAv2 add-on. The projection also assumes a static $6.74 billion USDC reserve — actual deposits may grow or shrink before October 3, which would change the add-on independent of the yield-rate assumption. Key dates (accrual start, first payment) are derived from Hyperliquid's official documentation on Aligned Quote Assets.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;If you cite these insights, we would appreciate a link credit to this article on CoinGecko, which allows us to keep supplying you with useful data-led content.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This study is for illustrative and informational purposes only, and is not financial advice.&lt;/em&gt;&lt;/p&gt;
</content>
    <author>
      <name>Loke Choon Khei</name>
    </author>
    <url>https://www.coingecko.com/learn/hyperliquid-aqav2-hype-buyback-revenue-increase?locale=en</url>
    <summary>

Hyperliquid&amp;#39;s daily protocol revenue is set to rise by an estimated 18.06% in October 3, 2026 once its Aligned Quote Assets v2 (AQAv2) framework begins generating cash flow to the Assistance Fund...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135756</id>
    <published>2026-08-20T03:47:30Z</published>
    <updated>2026-08-25T14:52:15Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/stream-real-time-crypto-prices-python?locale=en"/>
    <title>How to Get Real-Time Crypto Prices in Python with REST &amp; WebSockets</title>
    <content type="html">&lt;style type="text/css"&gt;pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.cgcode .hll { background-color: #ffffcc }
.cgcode { background: #f8f8f8; }
.cgcode .c { color: #3D7B7B; font-style: italic } /* Comment */
.cgcode .err { border: 1px solid #F00 } /* Error */
.cgcode .k { color: #008000; font-weight: bold } /* Keyword */
.cgcode .o { color: #666 } /* Operator */
.cgcode .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.cgcode .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.cgcode .cp { color: #9C6500 } /* Comment.Preproc */
.cgcode .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.cgcode .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.cgcode .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.cgcode .gd { color: #A00000 } /* Generic.Deleted */
.cgcode .ge { font-style: italic } /* Generic.Emph */
.cgcode .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.cgcode .gr { color: #E40000 } /* Generic.Error */
.cgcode .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.cgcode .gi { color: #008400 } /* Generic.Inserted */
.cgcode .go { color: #717171 } /* Generic.Output */
.cgcode .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.cgcode .gs { font-weight: bold } /* Generic.Strong */
.cgcode .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.cgcode .gt { color: #04D } /* Generic.Traceback */
.cgcode .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.cgcode .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.cgcode .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.cgcode .kp { color: #008000 } /* Keyword.Pseudo */
.cgcode .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.cgcode .kt { color: #B00040 } /* Keyword.Type */
.cgcode .m { color: #666 } /* Literal.Number */
.cgcode .s { color: #BA2121 } /* Literal.String */
.cgcode .na { color: #687822 } /* Name.Attribute */
.cgcode .nb { color: #008000 } /* Name.Builtin */
.cgcode .nc { color: #00F; font-weight: bold } /* Name.Class */
.cgcode .no { color: #800 } /* Name.Constant */
.cgcode .nd { color: #A2F } /* Name.Decorator */
.cgcode .ni { color: #717171; font-weight: bold } /* Name.Entity */
.cgcode .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.cgcode .nf { color: #00F } /* Name.Function */
.cgcode .nl { color: #767600 } /* Name.Label */
.cgcode .nn { color: #00F; font-weight: bold } /* Name.Namespace */
.cgcode .nt { color: #008000; font-weight: bold } /* Name.Tag */
.cgcode .nv { color: #19177C } /* Name.Variable */
.cgcode .ow { color: #A2F; font-weight: bold } /* Operator.Word */
.cgcode .w { color: #BBB } /* Text.Whitespace */
.cgcode .mb { color: #666 } /* Literal.Number.Bin */
.cgcode .mf { color: #666 } /* Literal.Number.Float */
.cgcode .mh { color: #666 } /* Literal.Number.Hex */
.cgcode .mi { color: #666 } /* Literal.Number.Integer */
.cgcode .mo { color: #666 } /* Literal.Number.Oct */
.cgcode .sa { color: #BA2121 } /* Literal.String.Affix */
.cgcode .sb { color: #BA2121 } /* Literal.String.Backtick */
.cgcode .sc { color: #BA2121 } /* Literal.String.Char */
.cgcode .dl { color: #BA2121 } /* Literal.String.Delimiter */
.cgcode .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.cgcode .s2 { color: #BA2121 } /* Literal.String.Double */
.cgcode .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.cgcode .sh { color: #BA2121 } /* Literal.String.Heredoc */
.cgcode .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.cgcode .sx { color: #008000 } /* Literal.String.Other */
.cgcode .sr { color: #A45A77 } /* Literal.String.Regex */
.cgcode .s1 { color: #BA2121 } /* Literal.String.Single */
.cgcode .ss { color: #19177C } /* Literal.String.Symbol */
.cgcode .bp { color: #008000 } /* Name.Builtin.Pseudo */
.cgcode .fm { color: #00F } /* Name.Function.Magic */
.cgcode .vc { color: #19177C } /* Name.Variable.Class */
.cgcode .vg { color: #19177C } /* Name.Variable.Global */
.cgcode .vi { color: #19177C } /* Name.Variable.Instance */
.cgcode .vm { color: #19177C } /* Name.Variable.Magic */
.cgcode .il { color: #666 } /* Literal.Number.Integer.Long */
body.tw-dark pre { line-height: 125%; }
body.tw-dark td.linenos .normal { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
body.tw-dark span.linenos { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
body.tw-dark td.linenos .special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
body.tw-dark span.linenos.special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
body.tw-dark .cgcode .hll { background-color: #6e7681 }
body.tw-dark .cgcode { background: #0d1117; color: #E6EDF3 }
body.tw-dark .cgcode .c { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .err { color: #F85149 }
body.tw-dark .cgcode .esc { color: #E6EDF3 }
body.tw-dark .cgcode .g { color: #E6EDF3 }
body.tw-dark .cgcode .k { color: #FF7B72 }
body.tw-dark .cgcode .l { color: #A5D6FF }
body.tw-dark .cgcode .n { color: #E6EDF3 }
body.tw-dark .cgcode .o { color: #FF7B72; font-weight: bold }
body.tw-dark .cgcode .x { color: #E6EDF3 }
body.tw-dark .cgcode .p { color: #E6EDF3 }
body.tw-dark .cgcode .ch { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .cm { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .cp { color: #8B949E; font-weight: bold; font-style: italic }
body.tw-dark .cgcode .cpf { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .c1 { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .cs { color: #8B949E; font-weight: bold; font-style: italic }
body.tw-dark .cgcode .gd { color: #FFA198; background-color: #490202 }
body.tw-dark .cgcode .ge { color: #E6EDF3; font-style: italic }
body.tw-dark .cgcode .ges { color: #E6EDF3; font-weight: bold; font-style: italic }
body.tw-dark .cgcode .gr { color: #FFA198 }
body.tw-dark .cgcode .gh { color: #79C0FF; font-weight: bold }
body.tw-dark .cgcode .gi { color: #56D364; background-color: #0F5323 }
body.tw-dark .cgcode .go { color: #8B949E }
body.tw-dark .cgcode .gp { color: #8B949E }
body.tw-dark .cgcode .gs { color: #E6EDF3; font-weight: bold }
body.tw-dark .cgcode .gu { color: #79C0FF }
body.tw-dark .cgcode .gt { color: #FF7B72 }
body.tw-dark .cgcode .g-Underline { color: #E6EDF3; text-decoration: underline }
body.tw-dark .cgcode .kc { color: #79C0FF }
body.tw-dark .cgcode .kd { color: #FF7B72 }
body.tw-dark .cgcode .kn { color: #FF7B72 }
body.tw-dark .cgcode .kp { color: #79C0FF }
body.tw-dark .cgcode .kr { color: #FF7B72 }
body.tw-dark .cgcode .kt { color: #FF7B72 }
body.tw-dark .cgcode .ld { color: #79C0FF }
body.tw-dark .cgcode .m { color: #A5D6FF }
body.tw-dark .cgcode .s { color: #A5D6FF }
body.tw-dark .cgcode .na { color: #E6EDF3 }
body.tw-dark .cgcode .nb { color: #E6EDF3 }
body.tw-dark .cgcode .nc { color: #F0883E; font-weight: bold }
body.tw-dark .cgcode .no { color: #79C0FF; font-weight: bold }
body.tw-dark .cgcode .nd { color: #D2A8FF; font-weight: bold }
body.tw-dark .cgcode .ni { color: #FFA657 }
body.tw-dark .cgcode .ne { color: #F0883E; font-weight: bold }
body.tw-dark .cgcode .nf { color: #D2A8FF; font-weight: bold }
body.tw-dark .cgcode .nl { color: #79C0FF; font-weight: bold }
body.tw-dark .cgcode .nn { color: #FF7B72 }
body.tw-dark .cgcode .nx { color: #E6EDF3 }
body.tw-dark .cgcode .py { color: #79C0FF }
body.tw-dark .cgcode .nt { color: #7EE787 }
body.tw-dark .cgcode .nv { color: #79C0FF }
body.tw-dark .cgcode .ow { color: #FF7B72; font-weight: bold }
body.tw-dark .cgcode .pm { color: #E6EDF3 }
body.tw-dark .cgcode .w { color: #6E7681 }
body.tw-dark .cgcode .mb { color: #A5D6FF }
body.tw-dark .cgcode .mf { color: #A5D6FF }
body.tw-dark .cgcode .mh { color: #A5D6FF }
body.tw-dark .cgcode .mi { color: #A5D6FF }
body.tw-dark .cgcode .mo { color: #A5D6FF }
body.tw-dark .cgcode .sa { color: #79C0FF }
body.tw-dark .cgcode .sb { color: #A5D6FF }
body.tw-dark .cgcode .sc { color: #A5D6FF }
body.tw-dark .cgcode .dl { color: #79C0FF }
body.tw-dark .cgcode .sd { color: #A5D6FF }
body.tw-dark .cgcode .s2 { color: #A5D6FF }
body.tw-dark .cgcode .se { color: #79C0FF }
body.tw-dark .cgcode .sh { color: #79C0FF }
body.tw-dark .cgcode .si { color: #A5D6FF }
body.tw-dark .cgcode .sx { color: #A5D6FF }
body.tw-dark .cgcode .sr { color: #79C0FF }
body.tw-dark .cgcode .s1 { color: #A5D6FF }
body.tw-dark .cgcode .ss { color: #A5D6FF }
body.tw-dark .cgcode .bp { color: #E6EDF3 }
body.tw-dark .cgcode .fm { color: #D2A8FF; font-weight: bold }
body.tw-dark .cgcode .vc { color: #79C0FF }
body.tw-dark .cgcode .vg { color: #79C0FF }
body.tw-dark .cgcode .vi { color: #79C0FF }
body.tw-dark .cgcode .vm { color: #79C0FF }
body.tw-dark .cgcode .il { color: #A5D6FF }

.cg-code-block { background:#ffffff; }
body.tw-dark .cg-code-block { background:#0d1117 !important; }
.cgcode.cg-code-body { background: transparent !important; }
body.tw-dark .cgcode.cg-code-body { background: transparent !important; }
.cg-code-linenos { color:#8b949e; }
body.tw-dark .cg-code-linenos { color:#6e7681 !important; }
.cg-code-footer { color:#57606a; border-top-color:#d0d7de; }
body.tw-dark .cg-code-footer { color:#8b949e !important; border-top-color:#30363d !important; }
.cg-code-footer a { color:#57606a !important; }
body.tw-dark .cg-code-footer a { color:#8b949e !important; }


body.tw-dark div[style*="background:#eeeeee"] {
  background-color: #22272e !important;
  border-color: #444c56 !important;
  color: #adbac7 !important;
}
body.tw-dark div[style*="background:#eeeeee"] strong { color: #adbac7 !important; }
body.tw-dark div[style*="background:#eeeeee"] a { color: #6cb6ff !important; }
body.tw-dark div[style*="background:#eeeeee"] code {
  background-color: transparent !important;
}
&lt;/style&gt;
&lt;style type="text/css"&gt;.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &gt; ul {
  color: inherit !important;
}
&lt;/style&gt;
&lt;div aria-label="Definition" class="cg-tldr-box" role="region" style="background-color: #e8fcc9; border-radius: 8px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 5px solid #34af00;"&gt;
&lt;h2 style="margin: 0px 0px 1rem; font-size: 1.25rem; color: rgb(25, 65, 45); font-weight: 700;"&gt;TL;DR&lt;/h2&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #000000; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;&lt;a href="https://www.coingecko.com/en/api" target="_blank"&gt;CoinGecko API&lt;/a&gt; supports multiple delivery methods for both aggregated coin prices and onchain DEX token prices through REST, and WebSocket APIs.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;REST is best for scheduled, bulk, or historical price retrieval, while WebSocket is best for continuous, lower-latency updates. REST &lt;code&gt;/simple/price&lt;/code&gt; costs 1 credit per call and is cached for up to 20s, while WebSocket costs 0.1 credit per price update.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;Most real-time crypto price trackers start with a REST API call at a set interval. Each request returns the latest available price, and the next request is made when the interval ends. This works well when periodic updates are sufficient. If you need prices as they update, WebSocket provides a different approach. You open one connection and receive price updates as they arrive, without repeatedly requesting the same data.&lt;/p&gt;

&lt;p&gt;REST and WebSocket serve different purposes. This guide shows you how to build both approaches in Python using CoinGecko price data and explains when to use each one.&lt;/p&gt;

&lt;p&gt;&lt;img alt="CoinGecko API offers three data delivery methods: REST polling, WebSocket streaming, and webhook." src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102135797/original_Data_Delivery_Methods_Demo_V2.gif" style="max-width: 100%; width: 1200px; height: 801px;"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Prerequisites &amp;amp; Setup&lt;/h2&gt;

&lt;p&gt;You’ll need a CoinGecko API key. A free Demo API key is sufficient to access the REST API endpoints. If you don’t have one, follow the guide to &lt;a href="https://support.coingecko.com/hc/en-us/articles/21880397454233-User-Guide-How-to-sign-up-for-CoinGecko-Demo-API-and-generate-an-API-key" target="_blank"&gt;get a free Demo API key&lt;/a&gt;. The WebSocket implementation requires a &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;Basic plan&lt;/a&gt; or higher.&lt;/p&gt;

&lt;p&gt;Your API key type must match the base URL and authentication header used in your requests:&lt;/p&gt;

&lt;div class="rgt-wrapper" style="--rgt-bg-odd: transparent; --rgt-bg-even: transparent; --rgt-text-color: inherit; --rgt-header-bg: transparent; --rgt-header-text: inherit; --rgt-border-color: currentColor; --rgt-accent-color: inherit; width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; margin:1.5rem 0;"&gt;
&lt;table class="rgt-table" style="width:100%; min-width:600px; border-collapse:collapse; table-layout:fixed; font-size:15px; line-height:1.45; color:var(--rgt-text-color); border:1px solid var(--rgt-border-color); background-color:var(--rgt-bg-odd);"&gt;
	&lt;colgroup&gt;
		&lt;col style="width:20%;"&gt;
		&lt;col style="width:45%;"&gt;
		&lt;col style="width:35%;"&gt;
	&lt;/colgroup&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:normal; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Key type&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:normal; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Base URL&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:normal; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Header&lt;/span&gt;&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Demo&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;https://api.coingecko.com/api/v3&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;x-cg-demo-api-key&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Paid&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;https://pro-api.coingecko.com/api/v3&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;x-cg-pro-api-key&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;strong&gt;Choose the Price Data You Need&lt;/strong&gt;&lt;/p&gt;

&lt;p style="margin-top:0;;margin-bottom:1rem;"&gt;CoinGecko provides two types of price data, with different endpoints for each asset type.&lt;/p&gt;

&lt;ul style="margin-top: 16px;;margin-bottom:1rem;"&gt;
	&lt;li&gt;
&lt;strong&gt;Coins:&lt;/strong&gt; Aggregated market data for established assets such as Bitcoin, Ethereum, and Solana, identified by Coin API ID (e.g. &lt;code&gt;bitcoin&lt;/code&gt;). This is the market price shown on CoinGecko’s site&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Onchain DEX tokens:&lt;/strong&gt; Token prices from decentralized exchanges, identified by network ID, and contract address (e.g. &lt;code&gt;eth:0xc02a…cc2&lt;/code&gt;). This is suited to new or long-tail tokens and is powered by &lt;a href="https://www.geckoterminal.com/" rel="nofollow noopener" target="_blank"&gt;GeckoTerminal&lt;/a&gt;’s data.&lt;/li&gt;
&lt;/ul&gt;

&lt;div dir="ltr" style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"&gt;
&lt;strong&gt;Note: &lt;/strong&gt;CoinGecko unified its API with the &lt;a href="https://www.geckoterminal.com/dex-api" rel="nofollow noopener" target="_blank"&gt;GeckoTerminal API&lt;/a&gt;, so standard market data and onchain DEX data are now accessible through a single CoinGecko API.&lt;/div&gt;

&lt;p&gt;Both asset types are available through REST and WebSocket. The sections below cover both delivery methods for each asset type.&lt;/p&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;strong&gt;Python setup&lt;/strong&gt;&lt;/p&gt;

&lt;p style="margin-top:0;;margin-bottom:1rem;"&gt;You'll also need Python 3.8 or later and two libraries:&lt;/p&gt;

&lt;div dir="ltr" style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;;margin-bottom:1rem;"&gt;&lt;code&gt;pip install requests websockets&lt;/code&gt;&lt;/div&gt;

&lt;div dir="ltr" style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"&gt;💡 &lt;strong&gt;Prefer less setup?&lt;/strong&gt; You can call these endpoints with CoinGecko's official &lt;a href="https://docs.coingecko.com/docs/sdk-python" target="_blank"&gt;Python SDK&lt;/a&gt; or &lt;a href="https://docs.coingecko.com/docs/sdk-typescript" target="_blank"&gt;TypeScript SDK&lt;/a&gt; instead of raw HTTP requests. The SDK handles the base URL, headers, and authentication for you, so there is less boilerplate to write.&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;How to Get Real-Time Crypto Prices in Python with a REST API&lt;/h2&gt;

&lt;p&gt;The REST approach repeatedly requests data from the CoinGecko API. Use the &lt;a href="https://docs.coingecko.com/demo/reference/simple-price" style="color:#000;text-decoration:none;" target="_blank"&gt;&lt;code&gt;/simple/price&lt;/code&gt;&lt;/a&gt; endpoint with the coins and quote currencies to track, then repeat the request at your chosen interval.&lt;/p&gt;

&lt;p&gt;Two parameters are relevant here. &lt;code&gt;include_last_updated_at=true&lt;/code&gt; returns the UNIX timestamp of the latest price update, which you can use to check data freshness, while &lt;code&gt;ids&lt;/code&gt; supports up to 515 coins in a single request.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://api.coingecko.com/api/v3"&lt;/span&gt;
&lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"x-cg-demo-api-key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;COINS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"bitcoin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"ethereum"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"solana"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# up to 515 ids in one call&lt;/span&gt;
&lt;span class="n"&gt;POLL_INTERVAL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"POLL_INTERVAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Demo cache 60s; paid 20s&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;fetch_prices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Fetch current prices for several coins in a single request."""&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/simple/price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;","&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="s2"&gt;"vs_currencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"usd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"include_24hr_change"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"include_last_updated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Official CoinGecko Python SDK equivalent:&lt;/span&gt;
    &lt;span class="c1"&gt;#   pip install coingecko-sdk&lt;/span&gt;
    &lt;span class="c1"&gt;#&lt;/span&gt;
    &lt;span class="c1"&gt;#   from coingecko_sdk import Coingecko&lt;/span&gt;
    &lt;span class="c1"&gt;#   client = Coingecko(demo_api_key=API_KEY, environment="demo")&lt;/span&gt;
    &lt;span class="c1"&gt;#   response = client.simple.price.get(&lt;/span&gt;
    &lt;span class="c1"&gt;#       ids=",".join(coin_ids),&lt;/span&gt;
    &lt;span class="c1"&gt;#       vs_currencies="usd",&lt;/span&gt;
    &lt;span class="c1"&gt;#       include_24hr_change=True,&lt;/span&gt;
    &lt;span class="c1"&gt;#       include_last_updated_at=True,&lt;/span&gt;
    &lt;span class="c1"&gt;#   )&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;poll_forever&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;POLL_INTERVAL&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Print a timestamped price line for each coin on every poll."""&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;prices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fetch_prices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;polled_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"%H:%M:%S"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;polled_at&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; no data returned"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;

            &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"usd"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"usd_24h_change"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"last_updated_at"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;

            &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;polled_at&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;12,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  "&lt;/span&gt;
                &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+6.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;% 24h   data age: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;s"&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"-"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;poll_forever&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;COINS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/stream-real-time-crypto-prices-python/rest_poller.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;rest_poller.py&lt;/a&gt; hosted with ❤ by GitHub &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/stream-real-time-crypto-prices-python/rest_poller.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Here’s what the response looks like:&lt;/p&gt;

&lt;p&gt;&lt;img alt="CoinGecko's /simple/price REST endpoint returns bitcoin, ethereum, and solana prices with 24h change in one call." height="865" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136277/content_coingecko-simple-price-rest-api-json-output.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;h3&gt;Get Real-Time DEX Token Prices via REST&lt;/h3&gt;

&lt;p&gt;For DEX-traded tokens, use the &lt;a href="https://docs.coingecko.com/demo/reference/onchain-simple-price" target="_blank"&gt;Token Price by Token Addresses&lt;/a&gt; endpoint. It supports price lookups using a network ID and token contract address, including tokens that don't have a CoinGecko coin ID.&lt;/p&gt;

&lt;p style="margin-bottom:1rem;"&gt;You can query up to 100 token addresses per call on the same network, with real-time, cacheless responses. If a token’s contract address is already known, pair it with the correct network ID from the &lt;a href="https://docs.coingecko.com/reference/networks-list" target="_blank"&gt;Networks List&lt;/a&gt; endpoint. To discover new tokens, see &lt;a href="https://www.coingecko.com/learn/how-to-track-new-tokens-onchain" target="_blank"&gt;How to Track New Tokens Onchain&lt;/a&gt;.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://api.coingecko.com/api/v3"&lt;/span&gt;
&lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"x-cg-demo-api-key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;NETWORK&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"eth"&lt;/span&gt;
&lt;span class="n"&gt;TOKEN_ADDRESSES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# WETH&lt;/span&gt;
&lt;span class="n"&gt;POLL_INTERVAL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"POLL_INTERVAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;fetch_token_prices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_addresses&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Fetch current onchain token prices for one or more contract addresses."""&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/onchain/simple/networks/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/token_price/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token_addresses&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"include_24hr_price_change"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Official CoinGecko Python SDK equivalent:&lt;/span&gt;
    &lt;span class="c1"&gt;#   client.onchain.simple.networks.token_price.get_addresses(&lt;/span&gt;
    &lt;span class="c1"&gt;#       ",".join(token_addresses), network=network, include_24hr_price_change=True&lt;/span&gt;
    &lt;span class="c1"&gt;#   )&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;poll_forever&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_addresses&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;POLL_INTERVAL&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Print a timestamped price line for each token on every poll."""&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fetch_token_prices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_addresses&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;attrs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;polled_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"%H:%M:%S"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;token_addresses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"token_prices"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"h24_price_change_percentage"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;polled_at&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;44&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; no data returned"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;

            &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;polled_at&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;44&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;12,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  "&lt;/span&gt;
                &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+6.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;% 24h"&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"-"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;poll_forever&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NETWORK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TOKEN_ADDRESSES&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/stream-real-time-crypto-prices-python/rest_dex_poller.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;rest_dex_poller.py&lt;/a&gt; hosted with ❤ by GitHub &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/stream-real-time-crypto-prices-python/rest_dex_poller.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Here’s what the response looks like:&lt;/p&gt;

&lt;p&gt;&lt;img alt="GeckoTerminal's onchain simple token price endpoint returns a DEX token's price and 24h change by contract address." height="581" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136278/content_geckoterminal-onchain-simple-token-price-output.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;How to Stream Crypto Prices in Python with WebSockets&lt;/h2&gt;

&lt;p&gt;With &lt;a href="https://docs.coingecko.com/websocket" target="_blank"&gt;CoinGecko’s WebSocket&lt;/a&gt;, a persistent connection remains open to receive price updates as they become available, without continuously polling for new data. The &lt;a href="https://docs.coingecko.com/websocket/cgsimpleprice" target="_blank"&gt;CGSimplePrice&lt;/a&gt; channel streams the same aggregated coin prices available through &lt;code&gt;/simple/price&lt;/code&gt;. CoinGecko sends an update only when the price changes, so each message contains a new price rather than a repeated value. For large-cap, actively traded coins, updates can arrive as frequently as every ~10 seconds.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;CGSimplePrice&lt;/code&gt; channel can be tested directly in the &lt;a href="https://docs.coingecko.com/websocket/cgsimpleprice" target="_blank"&gt;CoinGecko WebSocket docs&lt;/a&gt;. For other WebSocket URLs, &lt;a href="https://websocketking.com/" rel="nofollow noopener" target="_blank"&gt;WebSocket King&lt;/a&gt; provides a general-purpose WebSocket client for testing connections.&lt;/p&gt;

&lt;p&gt;Example in the CoinGecko docs:&lt;/p&gt;

&lt;p&gt;&lt;img alt="CGSimplePrice channel can be tested directly in the CoinGecko WebSocket docs" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136284/content_websocket_docs_%281%29.webp" style="max-width: 100%; height: 424px; width: 1200px;"&gt;&lt;/p&gt;

&lt;h3&gt;Subscribing to the CGSimplePrice channel&lt;/h3&gt;

&lt;p style="margin-bottom:1rem;"&gt;Connecting to the WebSocket involves three steps, with the subscription message requiring the correct format and parameters:&lt;/p&gt;

&lt;ol style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;Connect to &lt;code&gt;wss://stream.coingecko.com/v1?x_cg_pro_api_key=YOUR_KEY&lt;/code&gt;. The server sends two greeting messages, a connection acknowledgement and a welcome message. You can also pass the API key in the &lt;code&gt;x-cg-pro-api-key&lt;/code&gt; header to keep it out of connection logs.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Subscribe to the channel. The &lt;code&gt;identifier&lt;/code&gt; value must be a JSON string nested inside the JSON message, not a nested object: &lt;code&gt;"identifier": "{\"channel\":\"CGSimplePrice\"}"&lt;/code&gt;. Sending it as an object will prevent the subscription from working as expected.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Send a &lt;code&gt;set_tokens&lt;/code&gt; message specifying the coins to track.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;websockets&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;STREAM_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"wss://stream.coingecko.com/v1?x_cg_pro_api_key=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;COINS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"bitcoin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"ethereum"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"solana"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;VS_CURRENCIES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"usd"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# The identifier is a JSON string nested inside the JSON message, not an object.&lt;/span&gt;
&lt;span class="n"&gt;CHANNEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"channel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"CGSimplePrice"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# CGSimplePrice payloads use abbreviated keys.&lt;/span&gt;
&lt;span class="n"&gt;FIELDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"i"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"coin_id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"vs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"vs_currency"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"p"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"pp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"price_24h_change_percentage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"last_updated_at"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;format_update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Turn an abbreviated payload into a readable line."""&lt;/span&gt;
    &lt;span class="n"&gt;coin_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"i"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"p"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"pp"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;received_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"%H:%M:%S"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Any field can be null when data is unavailable.&lt;/span&gt;
    &lt;span class="n"&gt;price_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;12,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'no price'&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;13&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;change_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+6.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;"     -"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;received_at&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 24h"&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;stream_prices&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;websockets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STREAM_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# 1. The server greets us before we subscribe to anything.&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

        &lt;span class="c1"&gt;# 2. Subscribe to the channel.&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"subscribe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;}))&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

        &lt;span class="c1"&gt;# 3. Tell the channel which coins to stream.&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                        &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="s2"&gt;"coin_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;COINS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="s2"&gt;"vs_currencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;VS_CURRENCIES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="s2"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"set_tokens"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# 4. Read updates as the server pushes them.&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;raw_message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"ping"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;  &lt;span class="c1"&gt;# informational heartbeat; safe to ignore&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"c"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"C1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;format_update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="s2"&gt;"message"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[server] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stream_prices&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/stream-real-time-crypto-prices-python/ws_stream.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;ws_stream.py&lt;/a&gt; hosted with ❤ by GitHub &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/stream-real-time-crypto-prices-python/ws_stream.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Running this script produces output like the following:&lt;/p&gt;

&lt;p&gt;&lt;img alt="Running ws_stream.py opens a terminal ready to stream live CoinGecko WebSocket price updates in Python." height="801" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136289/original_websocket-stream-crypto-prices-python-terminal.gif" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;h3&gt;Stream Real-Time DEX Token Prices via WebSocket&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.coingecko.com/websocket/onchainsimpletokenprice" style="color:#000;text-decoration:none;" target="_blank"&gt;&lt;code&gt;OnchainSimpleTokenPrice&lt;/code&gt;&lt;/a&gt; uses the same connection setup, with only the lookup and &lt;code&gt;identifier&lt;/code&gt; differing.&lt;/p&gt;

&lt;p style="margin-bottom:1rem;"&gt;The lookup uses &lt;code&gt;network_id:token_address&lt;/code&gt; instead of a coin ID, with &lt;code&gt;n&lt;/code&gt; (network) and &lt;code&gt;ta&lt;/code&gt; (token address) replacing &lt;code&gt;i&lt;/code&gt; (coin ID). &lt;code&gt;OnchainSimpleTokenPrice&lt;/code&gt; and &lt;a href="https://docs.coingecko.com/websocket/onchainohlcv" style="color:#000;text-decoration:none;" target="_blank"&gt;&lt;code&gt;OnchainOHLCV&lt;/code&gt;&lt;/a&gt; both provide ~1-second updates for actively traded tokens and pools. &lt;a href="https://docs.coingecko.com/websocket/onchaintrade" style="color:#000;text-decoration:none;" target="_blank"&gt;&lt;code&gt;OnchainTrade&lt;/code&gt;&lt;/a&gt; streams individual pool trades at ~0.1-second intervals.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;websockets&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;STREAM_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"wss://stream.coingecko.com/v1?x_cg_pro_api_key=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;NETWORK&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"eth"&lt;/span&gt;
&lt;span class="n"&gt;TOKEN_ADDRESSES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"WETH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"0x6982508145454ce325ddbe47a25d4ec3d2311933"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"PEPE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"SHIB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"0x514910771af9ca656af840dff83e8264ecf986ca"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"LINK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;CHANNEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"channel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"OnchainSimpleTokenPrice"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;format_update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Turn an abbreviated payload into a readable line."""&lt;/span&gt;
    &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ta"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TOKEN_ADDRESSES&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"p"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"pp"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;received_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"%H:%M:%S"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Any field can be null when data is unavailable.&lt;/span&gt;
    &lt;span class="n"&gt;price_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;12,.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'no price'&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;13&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;change_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+6.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;"     -"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;received_at&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; 24h"&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;stream_dex_prices&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;websockets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STREAM_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# 1. The server greets us before we subscribe to anything.&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

        &lt;span class="c1"&gt;# 2. Subscribe to the channel.&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"subscribe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;}))&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

        &lt;span class="c1"&gt;# 3. Tell the channel which tokens to stream.&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                        &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="s2"&gt;"network_id:token_addresses"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                                &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NETWORK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;TOKEN_ADDRESSES&lt;/span&gt;
                            &lt;span class="p"&gt;],&lt;/span&gt;
                            &lt;span class="s2"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"set_tokens"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# 4. Read updates as the server pushes them.&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;raw_message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"ping"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;  &lt;span class="c1"&gt;# informational heartbeat; safe to ignore&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"c"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"C1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;format_update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="s2"&gt;"message"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[server] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stream_dex_prices&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/stream-real-time-crypto-prices-python/ws_dex_stream.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;ws_dex_stream.py&lt;/a&gt; hosted with ❤ by GitHub &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/stream-real-time-crypto-prices-python/ws_dex_stream.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Running this script produces output like the following:&lt;/p&gt;

&lt;p&gt;&lt;img alt="Running ws_dex_stream.py opens a terminal ready to stream real-time DEX token prices via WebSocket." height="516" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136286/original_websocket-dex-token-price-stream-python-terminal.gif" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;&lt;img alt="Subscribe to CoinGecko API now! " loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136272/content_Subcribe_to_CoinGecko_API_CTA_-_websocket_%286%29.webp" style="max-width: 100%; height: 235px; width: 1200px;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;How to Build a Live Candlestick Chart with Onchain OHLCV Streams&lt;/h2&gt;

&lt;p&gt;The CoinGecko &lt;code&gt;OnchainOHLCV&lt;/code&gt; channel streams OHLCV data for a pool to power live candlestick charts. Updates arrive at ~1-second intervals for actively traded pools. Each message updates the current candle until the interval closes, then a new candle starts at the next timestamp.&lt;/p&gt;

&lt;p&gt;The connection and subscription steps follow the same pattern as the other onchain channels, with two additional parameters: &lt;code&gt;interval&lt;/code&gt; (for example, &lt;code&gt;1m&lt;/code&gt; or &lt;code&gt;1h&lt;/code&gt;) and &lt;code&gt;token&lt;/code&gt; (&lt;code&gt;base&lt;/code&gt; or &lt;code&gt;quote&lt;/code&gt;) to specify which side of the pool to chart.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;collections&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;websockets&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# a Basic-plan (paid) key&lt;/span&gt;
&lt;span class="n"&gt;STREAM_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"wss://stream.coingecko.com/v1?x_cg_pro_api_key=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;NETWORK&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"eth"&lt;/span&gt;
&lt;span class="n"&gt;POOL_ADDRESS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640"&lt;/span&gt;  &lt;span class="c1"&gt;# WETH/USDC&lt;/span&gt;
&lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"1m"&lt;/span&gt;
&lt;span class="n"&gt;CHANNEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"channel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"OnchainOHLCV"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;MAX_CANDLES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;
&lt;span class="n"&gt;candles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxlen&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MAX_CANDLES&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ring buffer feeding the chart&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Print one candle as a colored line; swap this for a real chart library."""&lt;/span&gt;
    &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"up"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"c"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"o"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;"down"&lt;/span&gt;
    &lt;span class="n"&gt;candle_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fromtimestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;tz&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"%H:%M:%S"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;candle_time&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; O:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'o'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.4f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; H:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'h'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.4f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; "&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"L:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'l'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.4f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; C:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'c'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.4f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; V:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'v'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;stream_candles&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;websockets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STREAM_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# 1. The server greets us before we subscribe to anything.&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

        &lt;span class="c1"&gt;# 2. Subscribe to the channel.&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"subscribe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;}))&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

        &lt;span class="c1"&gt;# 3. Tell the channel which pool to stream.&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                        &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="s2"&gt;"network_id:pool_addresses"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NETWORK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;POOL_ADDRESS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                            &lt;span class="s2"&gt;"interval"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="s2"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"base"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="s2"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"set_pools"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# 4. Read candle updates as the server pushes them.&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;raw_message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ch"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;"G3"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;
            &lt;span class="c1"&gt;# Replace the in-progress candle, or start a new one when the timestamp changes.&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;candles&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;candles&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="n"&gt;candles&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;candles&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stream_candles&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/stream-real-time-crypto-prices-python/ws_candlestick.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;ws_candlestick.py&lt;/a&gt; hosted with ❤ by GitHub &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/stream-real-time-crypto-prices-python/ws_candlestick.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Here’s what the response looks like:&lt;/p&gt;

&lt;p&gt;&lt;img alt="A successful CoinGecko WebSocket connection returns a code 3000 message confirming the session is established." height="257" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136273/original_ws_candlestick_output.gif" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;render()&lt;/code&gt; with a charting library such as &lt;a href="https://tradingview.github.io/lightweight-charts/" rel="nofollow noopener" target="_blank"&gt;Lightweight Charts&lt;/a&gt; or &lt;a href="https://github.com/matplotlib/mplfinance/" rel="nofollow noopener" target="_blank"&gt;mplfinance&lt;/a&gt; to display the candlestick chart and update it with each message.&lt;/p&gt;

&lt;p&gt;&lt;img alt="A live OnchainOHLCV candlestick chart streams real-time WETH/USDC 1-minute price data via WebSocket." height="640" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136275/original_image-1787197245582.gif" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;How to Keep a WebSocket Connection Open in Python&lt;/h2&gt;

&lt;p style="margin-bottom:1rem;"&gt;For a stream that runs continuously, the connection needs to handle interruptions such as deployments, reboots, and network issues.&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Ping/pong is handled automatically:&lt;/strong&gt; CoinGecko’s server sends a ping every 10 seconds and closes the connection if no pong is received within 20 seconds. The &lt;code&gt;websockets&lt;/code&gt; library responds automatically, so no manual heartbeat loop is needed.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Reconnect with exponential backoff and jitter:&lt;/strong&gt; When multiple connections close at the same time, backoff spreads reconnection attempts, while jitter prevents clients from retrying simultaneously.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Re-subscribe after reconnecting:&lt;/strong&gt; Each new WebSocket connection starts without the subscriptions from the previous connection, so the subscription must be sent again after reconnecting.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Handle clean connection closes:&lt;/strong&gt; A WebSocket can close without raising an error. For example, CoinGecko may close the connection during a planned deployment. In this case, Python exits the &lt;code&gt;async for&lt;/code&gt; loop normally instead of raising an exception, so reconnect logic inside &lt;code&gt;except&lt;/code&gt; will not run. Handle the connection closing explicitly so the client reconnects with the same backoff used for other disconnections.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To keep the CoinGecko WebSocket price stream running across disconnections, handle reconnection and re-subscription as follows:&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;websockets&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;STREAM_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"wss://stream.coingecko.com/v1?x_cg_pro_api_key=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;COINS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"bitcoin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"ethereum"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"solana"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;CHANNEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"channel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"CGSimplePrice"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;BASE_DELAY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# seconds&lt;/span&gt;
&lt;span class="n"&gt;MAX_DELAY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;  &lt;span class="c1"&gt;# cap, so backoff never grows unbounded&lt;/span&gt;
&lt;span class="n"&gt;STABLE_AFTER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;  &lt;span class="c1"&gt;# a connection lasting this long counts as healthy&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;stamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"%H:%M:%S"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;stamp&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Re-establish the subscription. A new connection has none."""&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"subscribe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;}))&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CHANNEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="s2"&gt;"coin_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;COINS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="s2"&gt;"vs_currencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"usd"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                        &lt;span class="s2"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"set_tokens"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Print updates until the server stops sending them."""&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;raw_message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"ping"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;  &lt;span class="c1"&gt;# informational heartbeat; safe to ignore&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"c"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"C1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"p"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;price_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;"no price"&lt;/span&gt;
            &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'i'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'unknown'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"server: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;stream_with_reconnect&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;connected_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;monotonic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# websockets answers the server's pings automatically, so there is&lt;/span&gt;
            &lt;span class="c1"&gt;# no heartbeat code to write here.&lt;/span&gt;
            &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;websockets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STREAM_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"connected"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="c1"&gt;# Reaching here means the server closed the connection cleanly.&lt;/span&gt;
            &lt;span class="c1"&gt;# That is not an exception, so it must be handled explicitly -&lt;/span&gt;
            &lt;span class="c1"&gt;# otherwise the loop reconnects instantly and spins.&lt;/span&gt;
            &lt;span class="n"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"closed by server"&lt;/span&gt;

        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;websockets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exceptions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WebSocketException&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ne"&gt;OSError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__name__&lt;/span&gt;

        &lt;span class="n"&gt;uptime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;monotonic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;connected_at&lt;/span&gt;

        &lt;span class="c1"&gt;# Only treat the connection as healthy if it actually stayed up.&lt;/span&gt;
        &lt;span class="c1"&gt;# A socket that closes immediately every time is still failing.&lt;/span&gt;
        &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;uptime&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;STABLE_AFTER&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

        &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BASE_DELAY&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;MAX_DELAY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# jitter&lt;/span&gt;

        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"disconnected after &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;uptime&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.1f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;s (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) - retry &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.1f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;s"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stream_with_reconnect&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"stopped"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/stream-real-time-crypto-prices-python/ws_resilient.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;ws_resilient.py&lt;/a&gt; hosted with ❤ by GitHub &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/stream-real-time-crypto-prices-python/ws_resilient.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Here’s what the response looks like:&lt;/p&gt;

&lt;p&gt;&lt;img alt="Running ws_resilient.py opens a terminal demonstrating automatic WebSocket reconnection handling in Python." height="693" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136287/original_websocket-resilient-reconnect-python-terminal.gif" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;WebSocket vs REST API: How to Choose for Crypto Prices&lt;/h2&gt;

&lt;p&gt;REST polling works well when your application needs the latest price at intervals you control, while WebSocket is better suited for continuous price updates as they happen. Neither is better than the other. The right choice depends on how your application needs to use the price data.&lt;/p&gt;

&lt;p&gt;The table below shows which option is better suited to common use cases:&lt;/p&gt;

&lt;div class="rgt-wrapper" style="--rgt-bg-odd: transparent; --rgt-bg-even: transparent; --rgt-text-color: inherit; --rgt-header-bg: transparent; --rgt-header-text: inherit; --rgt-border-color: currentColor; --rgt-accent-color: inherit; width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; margin:1.5rem 0;"&gt;
&lt;table class="rgt-table" style="width:100%; min-width:900px; border-collapse:collapse; table-layout:fixed; font-size:15px; line-height:1.45; color:var(--rgt-text-color); border:1px solid var(--rgt-border-color); background-color:var(--rgt-bg-odd);"&gt;
	&lt;colgroup&gt;
		&lt;col style="width:20%;"&gt;
		&lt;col style="width:16%;"&gt;
		&lt;col style="width:64%;"&gt;
	&lt;/colgroup&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:normal; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Use case&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:normal; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Recommended delivery method&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:normal; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Rationale&lt;/span&gt;&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Page loads and one-off snapshots&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;REST&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;A request to &lt;code&gt;/simple/price&lt;/code&gt; returns the current price in one response without maintaining a persistent connection.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Reports, cron jobs, and scheduled snapshots&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;REST&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;A scheduled job calls &lt;code&gt;/simple/price&lt;/code&gt; for coin prices or &lt;code&gt;/onchain/simple/networks/{network}/token_price/{addresses}&lt;/code&gt; for onchain token prices each time it runs.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Serverless and stateless functions&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;REST&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;A single HTTP request works well with short-lived functions such as AWS Lambda, which run, return a response and then stop.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Tracking many coins or tokens&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;REST&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
&lt;code&gt;/simple/price&lt;/code&gt; returns prices for up to 515 coins per call for 1 credit. The onchain Token Price by Token Addresses endpoint (&lt;code&gt;/onchain/simple/networks/{network}/token_price/{addresses}&lt;/code&gt;) returns up to 100 contract addresses per call.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Historical or backfill data&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;REST&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Endpoints such as &lt;a href="https://docs.coingecko.com/demo/reference/coins-id-market-chart-range#coin-historical-chart-data-within-time-range-by-id" target="_blank"&gt;/coins/{id}/market_chart/range&lt;/a&gt; and &lt;a href="https://docs.coingecko.com/demo/reference/pool-ohlcv-contract-address#pool-ohlcv-chart-by-pool-address" target="_blank"&gt;/onchain/networks/{network}/pools/{pool_address}/ohlcv/{timeframe}&lt;/a&gt; provide historical price and OHLCV data for a specified date range.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Live tickers, trading interfaces, and dashboards&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;WebSocket&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
&lt;code&gt;CGSimplePrice&lt;/code&gt; and &lt;code&gt;OnchainSimpleTokenPrice&lt;/code&gt; push price updates instead of requiring repeated requests. Updates occur every ~10 seconds for large-cap coins and ~1 second for actively traded onchain pools.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Automated and algorithmic execution&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;WebSocket&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;A subscribed bot receives updates over one open connection with lower latency than polling, letting it react to new price data as soon as it arrives.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Interactive candlestick charts&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;WebSocket&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
&lt;code&gt;OnchainOHLCV&lt;/code&gt; streams OHLCV data for a pool, with updates at ~1-second intervals for actively traded pools. Charts can update with each new data point.&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Need to know only when something changes?&lt;/strong&gt; &lt;a href="https://docs.coingecko.com/webhooks" target="_blank"&gt;CoinGecko’s webhooks&lt;/a&gt; provide an alternative delivery method for event-driven updates. Instead of polling or maintaining a persistent connection, your server receives a callback when a subscribed event occurs. The &lt;a href="https://docs.coingecko.com/webhooks/cg-coin-info-updated" target="_blank"&gt;cg.coin.info.updated&lt;/a&gt; webhook triggers when coin metadata changes, including links, categories, contract addresses, or images. &lt;a href="https://docs.coingecko.com/webhooks/cg-coin-price-updated" target="_blank"&gt;Price Alerts (cg.coin.price.updated)&lt;/a&gt; trigger when a price target is reached, while &lt;a href="https://docs.coingecko.com/webhooks/cg-coin-new-listed" target="_blank"&gt;New Listings (cg.coin.listed)&lt;/a&gt; notify you of new listings — both are currently in private beta. &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfL4qPtKg5WJuBkBjrrrq0MoJHWhCNBkuRY1zYciHdOCgHiVQ/viewform" rel="nofollow noopener" target="_blank"&gt;Submit this form&lt;/a&gt; to request early access.&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;CoinGecko supports &lt;a href="https://www.coingecko.com/en/api/data-delivery" target="_blank"&gt;multiple delivery methods&lt;/a&gt; through one API for aggregated coin and onchain DEX token prices. Use REST API when the cache interval is sufficient, or WebSocket for lower-latency updates and powering live interfaces, with reconnect logic to keep the stream running.&lt;/p&gt;

&lt;p&gt;A price feed can be integrated into different applications and workflows. The &lt;a href="https://www.coingecko.com/learn/crypto-price-alerts-trending-coins-categories" target="_blank"&gt;crypto price alerts for trending coins and categories&lt;/a&gt; guide shows how price updates can trigger notifications, while the &lt;a href="https://www.coingecko.com/learn/how-to-build-a-solana-sniper-bot-in-python" target="_blank"&gt;Solana Sniper Bot&lt;/a&gt; guide shows how lower-latency updates can support automated trading. For visualization, the &lt;a href="https://www.coingecko.com/learn/crypto-portfolio-dashboard-python" target="_blank"&gt;crypto portfolio dashboard in Python&lt;/a&gt; guide shows how to display crypto prices. For a market-risk use case, the &lt;a href="https://www.coingecko.com/learn/stablecoin-depeg-risk-detection" target="_blank"&gt;stablecoin depeg risk detection&lt;/a&gt; guide shows how different delivery methods can be combined to monitor market risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to start building?&lt;/strong&gt; Sign up for a &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;free Demo API plan&lt;/a&gt; to fetch crypto prices with the REST API. When you need lower-latency price updates, upgrade to the &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;Basic plan&lt;/a&gt; for WebSocket and webhook access, higher API credit and rate limits, with a commercial license included.&lt;/p&gt;
</content>
    <author>
      <name>Ru Jun Ang</name>
    </author>
    <url>https://www.coingecko.com/learn/stream-real-time-crypto-prices-python?locale=en</url>
    <summary>pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent;...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135755</id>
    <published>2026-08-18T08:27:02Z</published>
    <updated>2026-08-20T02:28:35Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/build-news-based-ai-crypto-trading-bot?locale=en"/>
    <title>How to Build a News-Based AI Crypto Trading Bot in Python</title>
    <content type="html">&lt;style type="text/css"&gt;pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.cgcode .hll { background-color: #ffffcc }
.cgcode { background: #f8f8f8; }
.cgcode .c { color: #3D7B7B; font-style: italic } /* Comment */
.cgcode .err { border: 1px solid #F00 } /* Error */
.cgcode .k { color: #008000; font-weight: bold } /* Keyword */
.cgcode .o { color: #666 } /* Operator */
.cgcode .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.cgcode .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.cgcode .cp { color: #9C6500 } /* Comment.Preproc */
.cgcode .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.cgcode .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.cgcode .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.cgcode .gd { color: #A00000 } /* Generic.Deleted */
.cgcode .ge { font-style: italic } /* Generic.Emph */
.cgcode .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.cgcode .gr { color: #E40000 } /* Generic.Error */
.cgcode .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.cgcode .gi { color: #008400 } /* Generic.Inserted */
.cgcode .go { color: #717171 } /* Generic.Output */
.cgcode .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.cgcode .gs { font-weight: bold } /* Generic.Strong */
.cgcode .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.cgcode .gt { color: #04D } /* Generic.Traceback */
.cgcode .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.cgcode .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.cgcode .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.cgcode .kp { color: #008000 } /* Keyword.Pseudo */
.cgcode .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.cgcode .kt { color: #B00040 } /* Keyword.Type */
.cgcode .m { color: #666 } /* Literal.Number */
.cgcode .s { color: #BA2121 } /* Literal.String */
.cgcode .na { color: #687822 } /* Name.Attribute */
.cgcode .nb { color: #008000 } /* Name.Builtin */
.cgcode .nc { color: #00F; font-weight: bold } /* Name.Class */
.cgcode .no { color: #800 } /* Name.Constant */
.cgcode .nd { color: #A2F } /* Name.Decorator */
.cgcode .ni { color: #717171; font-weight: bold } /* Name.Entity */
.cgcode .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.cgcode .nf { color: #00F } /* Name.Function */
.cgcode .nl { color: #767600 } /* Name.Label */
.cgcode .nn { color: #00F; font-weight: bold } /* Name.Namespace */
.cgcode .nt { color: #008000; font-weight: bold } /* Name.Tag */
.cgcode .nv { color: #19177C } /* Name.Variable */
.cgcode .ow { color: #A2F; font-weight: bold } /* Operator.Word */
.cgcode .w { color: #BBB } /* Text.Whitespace */
.cgcode .mb { color: #666 } /* Literal.Number.Bin */
.cgcode .mf { color: #666 } /* Literal.Number.Float */
.cgcode .mh { color: #666 } /* Literal.Number.Hex */
.cgcode .mi { color: #666 } /* Literal.Number.Integer */
.cgcode .mo { color: #666 } /* Literal.Number.Oct */
.cgcode .sa { color: #BA2121 } /* Literal.String.Affix */
.cgcode .sb { color: #BA2121 } /* Literal.String.Backtick */
.cgcode .sc { color: #BA2121 } /* Literal.String.Char */
.cgcode .dl { color: #BA2121 } /* Literal.String.Delimiter */
.cgcode .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.cgcode .s2 { color: #BA2121 } /* Literal.String.Double */
.cgcode .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.cgcode .sh { color: #BA2121 } /* Literal.String.Heredoc */
.cgcode .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.cgcode .sx { color: #008000 } /* Literal.String.Other */
.cgcode .sr { color: #A45A77 } /* Literal.String.Regex */
.cgcode .s1 { color: #BA2121 } /* Literal.String.Single */
.cgcode .ss { color: #19177C } /* Literal.String.Symbol */
.cgcode .bp { color: #008000 } /* Name.Builtin.Pseudo */
.cgcode .fm { color: #00F } /* Name.Function.Magic */
.cgcode .vc { color: #19177C } /* Name.Variable.Class */
.cgcode .vg { color: #19177C } /* Name.Variable.Global */
.cgcode .vi { color: #19177C } /* Name.Variable.Instance */
.cgcode .vm { color: #19177C } /* Name.Variable.Magic */
.cgcode .il { color: #666 } /* Literal.Number.Integer.Long */
body.tw-dark pre { line-height: 125%; }
body.tw-dark td.linenos .normal { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
body.tw-dark span.linenos { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
body.tw-dark td.linenos .special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
body.tw-dark span.linenos.special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
body.tw-dark .cgcode .hll { background-color: #6e7681 }
body.tw-dark .cgcode { background: #0d1117; color: #E6EDF3 }
body.tw-dark .cgcode .c { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .err { color: #F85149 }
body.tw-dark .cgcode .esc { color: #E6EDF3 }
body.tw-dark .cgcode .g { color: #E6EDF3 }
body.tw-dark .cgcode .k { color: #FF7B72 }
body.tw-dark .cgcode .l { color: #A5D6FF }
body.tw-dark .cgcode .n { color: #E6EDF3 }
body.tw-dark .cgcode .o { color: #FF7B72; font-weight: bold }
body.tw-dark .cgcode .x { color: #E6EDF3 }
body.tw-dark .cgcode .p { color: #E6EDF3 }
body.tw-dark .cgcode .ch { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .cm { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .cp { color: #8B949E; font-weight: bold; font-style: italic }
body.tw-dark .cgcode .cpf { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .c1 { color: #8B949E; font-style: italic }
body.tw-dark .cgcode .cs { color: #8B949E; font-weight: bold; font-style: italic }
body.tw-dark .cgcode .gd { color: #FFA198; background-color: #490202 }
body.tw-dark .cgcode .ge { color: #E6EDF3; font-style: italic }
body.tw-dark .cgcode .ges { color: #E6EDF3; font-weight: bold; font-style: italic }
body.tw-dark .cgcode .gr { color: #FFA198 }
body.tw-dark .cgcode .gh { color: #79C0FF; font-weight: bold }
body.tw-dark .cgcode .gi { color: #56D364; background-color: #0F5323 }
body.tw-dark .cgcode .go { color: #8B949E }
body.tw-dark .cgcode .gp { color: #8B949E }
body.tw-dark .cgcode .gs { color: #E6EDF3; font-weight: bold }
body.tw-dark .cgcode .gu { color: #79C0FF }
body.tw-dark .cgcode .gt { color: #FF7B72 }
body.tw-dark .cgcode .g-Underline { color: #E6EDF3; text-decoration: underline }
body.tw-dark .cgcode .kc { color: #79C0FF }
body.tw-dark .cgcode .kd { color: #FF7B72 }
body.tw-dark .cgcode .kn { color: #FF7B72 }
body.tw-dark .cgcode .kp { color: #79C0FF }
body.tw-dark .cgcode .kr { color: #FF7B72 }
body.tw-dark .cgcode .kt { color: #FF7B72 }
body.tw-dark .cgcode .ld { color: #79C0FF }
body.tw-dark .cgcode .m { color: #A5D6FF }
body.tw-dark .cgcode .s { color: #A5D6FF }
body.tw-dark .cgcode .na { color: #E6EDF3 }
body.tw-dark .cgcode .nb { color: #E6EDF3 }
body.tw-dark .cgcode .nc { color: #F0883E; font-weight: bold }
body.tw-dark .cgcode .no { color: #79C0FF; font-weight: bold }
body.tw-dark .cgcode .nd { color: #D2A8FF; font-weight: bold }
body.tw-dark .cgcode .ni { color: #FFA657 }
body.tw-dark .cgcode .ne { color: #F0883E; font-weight: bold }
body.tw-dark .cgcode .nf { color: #D2A8FF; font-weight: bold }
body.tw-dark .cgcode .nl { color: #79C0FF; font-weight: bold }
body.tw-dark .cgcode .nn { color: #FF7B72 }
body.tw-dark .cgcode .nx { color: #E6EDF3 }
body.tw-dark .cgcode .py { color: #79C0FF }
body.tw-dark .cgcode .nt { color: #7EE787 }
body.tw-dark .cgcode .nv { color: #79C0FF }
body.tw-dark .cgcode .ow { color: #FF7B72; font-weight: bold }
body.tw-dark .cgcode .pm { color: #E6EDF3 }
body.tw-dark .cgcode .w { color: #6E7681 }
body.tw-dark .cgcode .mb { color: #A5D6FF }
body.tw-dark .cgcode .mf { color: #A5D6FF }
body.tw-dark .cgcode .mh { color: #A5D6FF }
body.tw-dark .cgcode .mi { color: #A5D6FF }
body.tw-dark .cgcode .mo { color: #A5D6FF }
body.tw-dark .cgcode .sa { color: #79C0FF }
body.tw-dark .cgcode .sb { color: #A5D6FF }
body.tw-dark .cgcode .sc { color: #A5D6FF }
body.tw-dark .cgcode .dl { color: #79C0FF }
body.tw-dark .cgcode .sd { color: #A5D6FF }
body.tw-dark .cgcode .s2 { color: #A5D6FF }
body.tw-dark .cgcode .se { color: #79C0FF }
body.tw-dark .cgcode .sh { color: #79C0FF }
body.tw-dark .cgcode .si { color: #A5D6FF }
body.tw-dark .cgcode .sx { color: #A5D6FF }
body.tw-dark .cgcode .sr { color: #79C0FF }
body.tw-dark .cgcode .s1 { color: #A5D6FF }
body.tw-dark .cgcode .ss { color: #A5D6FF }
body.tw-dark .cgcode .bp { color: #E6EDF3 }
body.tw-dark .cgcode .fm { color: #D2A8FF; font-weight: bold }
body.tw-dark .cgcode .vc { color: #79C0FF }
body.tw-dark .cgcode .vg { color: #79C0FF }
body.tw-dark .cgcode .vi { color: #79C0FF }
body.tw-dark .cgcode .vm { color: #79C0FF }
body.tw-dark .cgcode .il { color: #A5D6FF }

.cg-code-block { background:#ffffff; }
body.tw-dark .cg-code-block { background:#0d1117 !important; }
.cgcode.cg-code-body { background: transparent !important; }
body.tw-dark .cgcode.cg-code-body { background: transparent !important; }
.cg-code-linenos { color:#8b949e; }
body.tw-dark .cg-code-linenos { color:#6e7681 !important; }
.cg-code-footer { color:#57606a; border-top-color:#d0d7de; }
body.tw-dark .cg-code-footer { color:#8b949e !important; border-top-color:#30363d !important; }
.cg-code-footer a { color:#57606a !important; }
body.tw-dark .cg-code-footer a { color:#8b949e !important; }


body.tw-dark div[style*="background:#eeeeee"] {
  background-color: #22272e !important;
  border-color: #444c56 !important;
  color: #adbac7 !important;
}
body.tw-dark div[style*="background:#eeeeee"] strong { color: #adbac7 !important; }
body.tw-dark div[style*="background:#eeeeee"] a { color: #6cb6ff !important; }
body.tw-dark div[style*="background:#eeeeee"] code {
  background-color: transparent !important;
}
&lt;/style&gt;
&lt;style type="text/css"&gt;.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &gt; ul {
  color: inherit !important;
}
&lt;/style&gt;
&lt;div aria-label="Definition" class="cg-tldr-box" role="region" style="background-color: #e8fcc9; border-radius: 8px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 5px solid #34af00;"&gt;
&lt;h2 style="margin: 0px 0px 1rem; font-size: 1.25rem; color: rgb(25, 65, 45); font-weight: 700;"&gt;TL;DR&lt;/h2&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #000000; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;&lt;a href="https://www.coingecko.com/en/api" target="_blank"&gt;CoinGecko API&lt;/a&gt; powers a news-driven trading bot that pulls headlines from the &lt;a href="https://docs.coingecko.com/reference/news" target="_blank"&gt;Crypto News&lt;/a&gt; endpoint, scores them with an LLM, validates signals against live market data, and executes paper trades locally.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;The bot cross-checks every coin mentioned in a headline against market cap and trading volume from &lt;a href="https://docs.coingecko.com/demo/reference/coins-markets#coins-list-with-market-data" target="_blank"&gt;CoinGecko’s Coins List with Market Data&lt;/a&gt; endpoint before sizing a trade.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;Crypto price moves are often triggered by events such as regulatory rulings, exchange listings, protocol exploits, or sudden ETF inflows. A news-based trading bot targets these catalysts directly. It reads each headline as it appears in the news feed, assesses its likely price impact, and acts on a predefined rule instead of waiting for the price to move first.&lt;/p&gt;

&lt;p&gt;In this guide, you'll build a Python trading bot using the CoinGecko API that reads real-time crypto news, scores each headline with a large language model (LLM), confirms the signal against live market data, and records simulated trades in a local paper-trading portfolio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Disclosure:&lt;/strong&gt; All trades in this guide are paper trades with no exchange keys or real orders involved. This guide is for educational purposes only and does not constitute financial advice. All trading involves risk. Please do your own research before making any investment decisions.&lt;/p&gt;

&lt;p&gt;&lt;img alt="CoinGecko API guide banner for building a news-based crypto trading bot in Python with an LLM and paper trading." height="628" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136256/content_How_to_Build_a_News-Based_Crypto_Trading_Bot_in_Python.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Prerequisites &amp;amp; Setup&lt;/h2&gt;

&lt;p&gt;You'll need a CoinGecko API key. The &lt;a href="https://docs.coingecko.com/reference/news" target="_blank"&gt;Crypto News&lt;/a&gt; endpoint is available exclusively on the &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;Analyst plan and above&lt;/a&gt;, which also includes 500K monthly API credits, 500 calls per minute, and access to 80+ endpoints.&lt;/p&gt;

&lt;p&gt;If you're using the free Demo API, follow the guide to &lt;a href="https://support.coingecko.com/hc/en-us/articles/21880397454233-User-Guide-How-to-sign-up-for-CoinGecko-Demo-API-and-generate-an-API-key" target="_blank"&gt;get a free Demo API key&lt;/a&gt;. You can also connect individual RSS feeds from news publishers to build the bot for free, although this requires more setup and does not provide the structured coin-filtering available through CoinGecko’s news endpoint.&lt;/p&gt;

&lt;p&gt;This guide uses Claude as the example, but the same approach works with any LLM that supports structured or JSON output, such as OpenAI and Gemini. Swap the client setup and model name, and the rest of the pipeline stays unchanged.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
requests
pandas
anthropic
python-dotenv
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/requirements.txt" style="color:#57606a;text-decoration:none;" target="_blank"&gt;requirements.txt&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/requirements.txt" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="na"&gt;COINGECKO_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;CG-your_api_key_here&lt;/span&gt;
&lt;span class="na"&gt;COINGECKO_PLAN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;analyst&lt;/span&gt;
&lt;span class="na"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;sk-ant-your_key_here&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/example.env" style="color:#57606a;text-decoration:none;" target="_blank"&gt;.env&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/example.env" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:1rem;"&gt;Install the dependencies.&lt;/p&gt;

&lt;div dir="ltr" style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"&gt;&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Next, the configuration module below switches the API host and authentication header based on your plan, allowing the same codebase to run on either the Demo API or a paid plan. It also keeps the strategy thresholds in one place, letting you tune the bot without changing the trading logic.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;dotenv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;

&lt;span class="n"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;PLAN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"COINGECKO_PLAN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"demo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ANTHROPIC_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ANTHROPIC_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;PLAN&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"analyst"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"pro"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://pro-api.coingecko.com/api/v3"&lt;/span&gt;
    &lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"x-cg-pro-api-key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://api.coingecko.com/api/v3"&lt;/span&gt;
    &lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"x-cg-demo-api-key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Fix these before testing so you are not tuning against results&lt;/span&gt;
&lt;span class="c1"&gt;# you have already seen.&lt;/span&gt;
&lt;span class="n"&gt;MIN_SENTIMENT_SCORE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.35&lt;/span&gt;
&lt;span class="n"&gt;MIN_CONFIDENCE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.60&lt;/span&gt;

&lt;span class="c1"&gt;# Universe filters.&lt;/span&gt;
&lt;span class="n"&gt;MIN_MARKET_CAP_USD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100_000_000&lt;/span&gt;
&lt;span class="n"&gt;MIN_VOLUME_USD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5_000_000&lt;/span&gt;

&lt;span class="n"&gt;STARTING_CASH_USD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;10_000.0&lt;/span&gt;
&lt;span class="n"&gt;POSITION_PCT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;          &lt;span class="c1"&gt;# 5% of equity per trade&lt;/span&gt;
&lt;span class="n"&gt;COOLDOWN_HOURS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;           &lt;span class="c1"&gt;# per coin, prevents stacking one news cycle&lt;/span&gt;
&lt;span class="n"&gt;FEE_PCT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.001&lt;/span&gt;              &lt;span class="c1"&gt;# 0.1% per side&lt;/span&gt;
&lt;span class="n"&gt;SLIPPAGE_PCT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.002&lt;/span&gt;         &lt;span class="c1"&gt;# 0.2% assumed adverse fill&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/config.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;config.py&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/config.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;div dir="ltr" style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"&gt;
&lt;strong&gt;💡 Pro tip:&lt;/strong&gt; Every endpoint in this guide can also be called using CoinGecko's official &lt;a href="https://docs.coingecko.com/docs/sdk-python" target="_blank"&gt;Python SDK&lt;/a&gt; or &lt;a href="https://docs.coingecko.com/docs/sdk-typescript" target="_blank"&gt;TypeScript SDK&lt;/a&gt; instead of raw HTTP requests. The SDK handles the base URL, headers, and authentication for you.&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;How to Fetch Crypto News in Python&lt;/h2&gt;

&lt;p&gt;CoinGecko API returns structured crypto news through the &lt;a href="https://docs.coingecko.com/reference/news" target="_blank"&gt;Crypto News&lt;/a&gt; endpoint, aggregating articles from 100+ curated sources including Decrypt, Bankless, BeInCrypto, and delivering them as JSON for direct parsing. Each article includes the headline, publisher, ISO 8601 timestamp, article URL, thumbnail, and a list of CoinGecko coin IDs matched to the article.&lt;/p&gt;

&lt;p&gt;The endpoint supports &lt;code&gt;page&lt;/code&gt; and &lt;code&gt;per_page&lt;/code&gt; for pagination, &lt;code&gt;coin_id&lt;/code&gt; for asset-level filtering, &lt;code&gt;language&lt;/code&gt; for localized articles, and &lt;code&gt;type&lt;/code&gt; for distinguishing news from guides. Results can be paginated across up to 20 pages of 20 articles, allowing up to 400 articles in a single pass.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HEADERS&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;fetch_latest_news&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Fetch the most recent crypto news articles."""&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"per_page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"coin_id"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/news"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# SDK equivalent: client.news.get(per_page=10)&lt;/span&gt;
    &lt;span class="c1"&gt;# The endpoint returns a bare JSON array, not an object with a data key&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fetch_latest_news&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'posted_at'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'source_name'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"  coins: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'related_coin_ids'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/fetch_news.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;fetch_news.py&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/fetch_news.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Running this script produces output like the following:&lt;/p&gt;

&lt;p&gt;&lt;img alt="Terminal output of fetch_news.py showing five real crypto news headlines with source, timestamp, and related coin IDs." height="718" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136257/content_image_1090.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;How to Turn a News Headline Into a Trading Signal&lt;/h2&gt;

&lt;p&gt;CoinGecko API provides the live market data needed to turn news into trading signals. The bot sends each headline to an LLM, which scores the news and returns structured values the trading strategy can use, including a sentiment score from -1 to 1, a confidence score from 0 to 1, and a short explanation for logging. The sentiment and confidence scores drive the trading decision, while the bot uses CoinGecko market data to confirm the signal, with only signals that pass both checks reaching the paper trader.&lt;/p&gt;

&lt;h3&gt;How to Score News Sentiment with an LLM&lt;/h3&gt;

&lt;p&gt;First, the model should score the potential price impact of the news, not whether the news is generally positive or negative. For example, a regulatory crackdown on a competing chain could be positive for the asset being analyzed.&lt;/p&gt;

&lt;p&gt;Second, the model should be allowed to return a score of zero when a headline has no clear directional impact. Forcing a positive or negative score can turn neutral news into false trading signals. Below is an example of a simple scoring layer alongside system prompts for the downstream LLMs.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;anthropic&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ANTHROPIC_API_KEY&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"""You score crypto news headlines for short-term price impact.&lt;/span&gt;

&lt;span class="s2"&gt;Return JSON only, matching this schema:&lt;/span&gt;
&lt;span class="s2"&gt;{"score": float, "confidence": float, "reasoning": string}&lt;/span&gt;

&lt;span class="s2"&gt;score: -1.0 (strongly bearish) to 1.0 (strongly bullish) for the coin named&lt;/span&gt;
&lt;span class="s2"&gt;confidence: 0.0 to 1.0&lt;/span&gt;

&lt;span class="s2"&gt;Score the likely effect on price, not whether the news is good in general.&lt;/span&gt;
&lt;span class="s2"&gt;Return score 0.0 and confidence 0.0 when a headline carries no clear&lt;/span&gt;
&lt;span class="s2"&gt;directional signal. Most headlines are noise, and scoring them as neutral&lt;/span&gt;
&lt;span class="s2"&gt;is the correct answer."""&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;score_headline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;source_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Convert a headline into a numeric trading signal."""&lt;/span&gt;
    &lt;span class="c1"&gt;# Source is included because a wire service and an unattributed blog&lt;/span&gt;
    &lt;span class="c1"&gt;# do not deserve the same weight&lt;/span&gt;
    &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"claude-sonnet-4-5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
            &lt;span class="s2"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"Source: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;source_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Headline: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;samples&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Bitcoin Demand Strengthens as ETFs Add $865M and New Wallets Hit One-Year High"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Blockonomi"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Eliza Labs founder sells $25M in ElizaOS tokens as project collapses after lawsuit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Crypto Briefing"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Crypto card spending hits $759 million in July 2026, led by USDC and USDT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"COINTURK NEWS"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;score_headline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'score'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  conf &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'confidence'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"       &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'reasoning'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/score_news.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;score_news.py&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/score_news.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p style="margin-bottom:1rem;"&gt;Here's what the output looks like: &lt;img alt="Claude scores a bullish Bitcoin ETF headline +0.68 with 0.81 confidence, citing sustained spot demand as the catalyst." height="278" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136258/content_image-1787108077532.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p&gt;A headline does not always capture the full sentiment, nuance, or context of an article, so treat these scores as an initial signal rather than a definitive assessment. For a stronger signal, fetch and analyze the full article text with tools such as Firecrawl, Jina Reader, or Tavily, and use that context to refine the sentiment and confidence scores, where the publisher’s terms of use and crawling policies allow it.&lt;/p&gt;

&lt;p&gt;Alternatively, CoinGecko’s &lt;a href="https://docs.coingecko.com/reference/insights" target="_blank"&gt;Coin Insights&lt;/a&gt; endpoint can provide an additional layer of structured, AI-generated coin-level context, reducing the need to build and maintain a separate article-crawling workflow. Coin Insights is currently available to Enterprise clients; developers interested in accessing the endpoint can &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdpFCxXSIylFhEgrlj5Dt5gsOMyq_TkPjeV-044Pz3Wy8WuMA/viewform" rel="nofollow noopener" target="_blank"&gt;submit their interest here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;&lt;img alt="CoinGecko API: stay ahead of the markets with accurate and reliable crypto data." loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136259/content_Subcribe_to_CoinGecko_API_CTA_-_BAU_Crypto_Data_%283%29.webp" style="max-width: 100%; height: 235px; width: 1200px;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;How to Confirm a Trading Signal Against Live Market Data&lt;/h3&gt;

&lt;p&gt;The CoinGecko API’s price data adds market context before a trade is placed. A positive headline score reflects what the LLM thinks the news could mean for the asset, while live price data shows how the market is responding. The signal only qualifies for execution when both the news assessment and market data align, helping filter out signals that may already be reflected in the price.&lt;/p&gt;

&lt;p style="margin-bottom:1rem;"&gt;The function below runs three checks in order. If any check fails, the bot skips the trade:&lt;/p&gt;

&lt;ol style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Signal strength:&lt;/strong&gt; The sentiment score and confidence must meet the thresholds in &lt;code&gt;config.py&lt;/code&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Price direction:&lt;/strong&gt; The coin’s price over the past hour should move in the same direction as the signal. If the news is bullish but the price is falling, the bot skips the trade.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Recent price move:&lt;/strong&gt; If the coin has already moved more than &lt;code&gt;MAX_ALREADY_MOVED_PCT&lt;/code&gt; in the past hour, the bot assumes the initial move may have already happened and skips the trade.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MIN_SENTIMENT_SCORE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MIN_CONFIDENCE&lt;/span&gt;

&lt;span class="n"&gt;MAX_ALREADY_MOVED_PCT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;8.0&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;should_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Apply every gate between a scored headline and an order."""&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;MIN_SENTIMENT_SCORE&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;MIN_CONFIDENCE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"below score or confidence threshold"&lt;/span&gt;

    &lt;span class="n"&gt;change_1h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;

    &lt;span class="c1"&gt;# A bullish story on a falling coin means the market knows something&lt;/span&gt;
    &lt;span class="c1"&gt;# the headline does not&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;change_1h&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"price disagrees with signal (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change_1h&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+.1f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;% 1h)"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;change_1h&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;MAX_ALREADY_MOVED_PCT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"move already priced in (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change_1h&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+.1f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;% 1h)"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"confirmed"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;should_exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""A simple, illustrative exit rule: reverse out of a position on a&lt;/span&gt;
&lt;span class="sd"&gt;    sufficiently bearish, price-confirmed signal. This is not a production&lt;/span&gt;
&lt;span class="sd"&gt;    exit strategy -- see the note below the paper-trading example for what&lt;/span&gt;
&lt;span class="sd"&gt;    a real one needs."""&lt;/span&gt;
    &lt;span class="n"&gt;change_1h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;MIN_SENTIMENT_SCORE&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;MIN_CONFIDENCE&lt;/span&gt;
            &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;change_1h&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;cases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"agrees, not yet moved"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.68&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.81&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"price disagrees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="mf"&gt;0.68&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.81&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"already priced in"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="mf"&gt;0.68&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.81&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;9.4&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"low confidence"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="mf"&gt;0.41&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;should_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'TRADE'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'SKIP '&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;6&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;exit_cases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"bearish, price confirms"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.71&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"bearish, not yet moved"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.71&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;exit_cases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit_now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;should_exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;change_1h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"price_change_percentage_1h_in_currency"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'EXIT'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exit_now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'HOLD'&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;6&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; score &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change_1h&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+.1f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;% 1h"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/confirm_signal.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;confirm_signal.py&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/confirm_signal.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;The example below shows how each condition can block a trade. Each rejection maps to a specific check in the function, making it clear why the trade was skipped. When the bot rejects a trade later, the log shows which condition blocked it, making the decision easier to review and debug.&lt;/p&gt;

&lt;p&gt;&lt;img alt="should_trade confirms one signal while should_exit triggers on a -0.71 score paired with a -1.4% 1h price move." height="273" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136261/content_image_1087.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;How to Paper Trade a News Strategy in Python&lt;/h2&gt;

&lt;p&gt;A paper trading bot keeps a local record of cash and open positions and simulates trades using real market prices without sending orders to an exchange. CoinGecko API provides the market data, while the bot handles the simulated trading locally.&lt;/p&gt;

&lt;p&gt;For more realistic results, the bot uses the next candle’s open price to simulate each trade. This gives the market time to react to the news before the simulated entry and avoids making the strategy look more profitable than it would be in practice.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sqlite3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;datetime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STARTING_CASH_USD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;POSITION_PCT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;COOLDOWN_HOURS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;FEE_PCT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SLIPPAGE_PCT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PaperPortfolio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;db_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"portfolio.db"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# signal_log records every scored headline, not only executed ones.&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;executescript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"""&lt;/span&gt;
&lt;span class="s2"&gt;            CREATE TABLE IF NOT EXISTS positions (&lt;/span&gt;
&lt;span class="s2"&gt;                coin_id TEXT PRIMARY KEY, qty REAL, entry_price REAL, opened_at TEXT);&lt;/span&gt;
&lt;span class="s2"&gt;            CREATE TABLE IF NOT EXISTS trades (&lt;/span&gt;
&lt;span class="s2"&gt;                id INTEGER PRIMARY KEY, coin_id TEXT, side TEXT, qty REAL,&lt;/span&gt;
&lt;span class="s2"&gt;                price REAL, headline TEXT, score REAL, executed_at TEXT);&lt;/span&gt;
&lt;span class="s2"&gt;            CREATE TABLE IF NOT EXISTS signal_log (&lt;/span&gt;
&lt;span class="s2"&gt;                id INTEGER PRIMARY KEY, coin_id TEXT, headline TEXT, score REAL,&lt;/span&gt;
&lt;span class="s2"&gt;                confidence REAL, executed INTEGER, reason TEXT, logged_at TEXT);&lt;/span&gt;
&lt;span class="s2"&gt;            CREATE TABLE IF NOT EXISTS cash (balance REAL);&lt;/span&gt;
&lt;span class="s2"&gt;        """&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"SELECT 1 FROM cash"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchone&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"INSERT INTO cash VALUES (?)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STARTING_CASH_USD&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;in_cooldown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="sd"&gt;"""Stop one news cycle from opening five positions in the same coin."""&lt;/span&gt;
        &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;"SELECT executed_at FROM trades WHERE coin_id=? ORDER BY id DESC LIMIT 1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchone&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
        &lt;span class="n"&gt;last&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fromisoformat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hours&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;COOLDOWN_HOURS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;buy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"SELECT balance FROM cash"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchone&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;notional&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;POSITION_PCT&lt;/span&gt;

        &lt;span class="c1"&gt;# Assume an adverse fill and pay the fee. Optimistic fills are the&lt;/span&gt;
        &lt;span class="c1"&gt;# fastest way to build a strategy that only works on paper&lt;/span&gt;
        &lt;span class="n"&gt;effective_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fill_price&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;SLIPPAGE_PCT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;notional&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;FEE_PCT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;

        &lt;span class="n"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;notional&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;effective_price&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"UPDATE cash SET balance = balance - ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"INSERT OR REPLACE INTO positions VALUES (?,?,?,?)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;effective_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;"INSERT INTO trades (coin_id, side, qty, price, headline, score, executed_at)"&lt;/span&gt;
            &lt;span class="s2"&gt;" VALUES (?,?,?,?,?,?,?)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"BUY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;effective_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="sd"&gt;"""Close an open position at the given fill price."""&lt;/span&gt;
        &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;"SELECT qty, entry_price FROM positions WHERE coin_id=?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchone&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
        &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entry_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;

        &lt;span class="c1"&gt;# Selling into a move works against you the same way buying does,&lt;/span&gt;
        &lt;span class="c1"&gt;# so slippage and fees are applied on the way out too&lt;/span&gt;
        &lt;span class="n"&gt;effective_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fill_price&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;SLIPPAGE_PCT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;proceeds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;effective_price&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;FEE_PCT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"UPDATE cash SET balance = balance + ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;proceeds&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"DELETE FROM positions WHERE coin_id=?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;"INSERT INTO trades (coin_id, side, qty, price, headline, score, executed_at)"&lt;/span&gt;
            &lt;span class="s2"&gt;" VALUES (?,?,?,?,?,?,?)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"SELL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;effective_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;has_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;"SELECT 1 FROM positions WHERE coin_id=?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchone&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;log_signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;executed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="sd"&gt;"""Record every scored headline; skipping this call leaves the false-signal report empty."""&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;"INSERT INTO signal_log (coin_id, headline, score, confidence,"&lt;/span&gt;
            &lt;span class="s2"&gt;" executed, reason, logged_at) VALUES (?,?,?,?,?,?,?)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;executed&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/paper_trader.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;paper_trader.py&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/paper_trader.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;The bot fetches the latest news, filters out previously processed articles, scores new headlines, identifies the relevant coin, checks the signal against its price, and records the simulated trade. It also calculates PnL once per cycle using &lt;a href="https://docs.coingecko.com/demo/reference/simple-price" target="_blank"&gt;CoinGecko's Simple Price&lt;/a&gt; endpoint, which accepts up to 515 coin IDs in a single request, allowing the bot to price all open positions and previously traded coins in one call.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MIN_MARKET_CAP_USD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MIN_VOLUME_USD&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;fetch_news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;fetch_latest_news&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;score_news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;score_headline&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;confirm_signal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;should_trade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;should_exit&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;paper_trader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PaperPortfolio&lt;/span&gt;

&lt;span class="n"&gt;seen_urls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;portfolio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PaperPortfolio&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_portfolio_pnl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Realized PnL from closed trades plus unrealized PnL from open&lt;/span&gt;
&lt;span class="sd"&gt;    positions, both powered by a single bulk price call."""&lt;/span&gt;
    &lt;span class="n"&gt;positions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s2"&gt;"SELECT coin_id, qty, entry_price FROM positions"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchall&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;trades&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s2"&gt;"SELECT coin_id, side, qty, price FROM trades"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchall&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;coin_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"realized_usd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"unrealized_usd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"positions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]}&lt;/span&gt;

    &lt;span class="c1"&gt;# A single call covers every coin the bot has ever touched;&lt;/span&gt;
    &lt;span class="c1"&gt;# /simple/price accepts up to 515 IDs per request.&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/simple/price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;","&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;"vs_currencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"usd"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;prices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"usd"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;

    &lt;span class="n"&gt;realized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
    &lt;span class="n"&gt;cost_basis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;side&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"BUY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;cost_basis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setdefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;side&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"SELL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;
            &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;cost_basis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;lot_qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lot_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cost_basis&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="n"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lot_qty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;realized&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;lot_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;lot_qty&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;matched&lt;/span&gt;
                &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;matched&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;lot_qty&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;cost_basis&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;cost_basis&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lot_qty&lt;/span&gt;

    &lt;span class="n"&gt;unrealized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
    &lt;span class="n"&gt;open_positions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entry_price&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;current_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current_price&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;
        &lt;span class="n"&gt;pnl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;entry_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;unrealized&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;pnl&lt;/span&gt;
        &lt;span class="n"&gt;open_positions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"coin_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"qty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"pnl_usd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pnl&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"realized_usd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;realized&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"unrealized_usd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unrealized&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"positions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;open_positions&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;run_cycle&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fetch_latest_news&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# The same story is syndicated across outlets and reappears on every&lt;/span&gt;
        &lt;span class="c1"&gt;# poll. Without this check the bot buys the same news repeatedly&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;seen_urls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;
        &lt;span class="n"&gt;seen_urls&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

        &lt;span class="n"&gt;coin_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"related_coin_ids"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log_signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                 &lt;span class="n"&gt;executed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"no related coin"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/coins/markets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"vs_currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"usd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;","&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_ids&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="s2"&gt;"price_change_percentage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"1h,24h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
             &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"market_cap"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;MIN_MARKET_CAP_USD&lt;/span&gt;
             &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"total_volume"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;MIN_VOLUME_USD&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"market_cap"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Logged with no coin_id, since nothing matched survived the&lt;/span&gt;
            &lt;span class="c1"&gt;# size and liquidity filter at all&lt;/span&gt;
            &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log_signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                 &lt;span class="n"&gt;executed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"no tradeable coin"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;

        &lt;span class="n"&gt;signal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;score_headline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"source_name"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;coin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;should_exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"current_price"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                                &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"       SELL &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'symbol'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; @ $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'current_price'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;

        &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;should_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;in_cooldown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
            &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"cooldown active"&lt;/span&gt;

        &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log_signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                             &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;executed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'score'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"       skip: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;

        &lt;span class="n"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;buy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"current_price"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                            &lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"       BUY &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'symbol'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; @ $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'current_price'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;run_cycle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;pnl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_portfolio_pnl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"Realized $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pnl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'realized_usd'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | "&lt;/span&gt;
              &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"Unrealized $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pnl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'unrealized_usd'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;+,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/bot.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;bot.py&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/bot.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code&gt;run_cycle()&lt;/code&gt; also checks &lt;code&gt;should_exit()&lt;/code&gt; before looking for a new entry. If the bot already holds a position and a new headline is sufficiently bearish and the price confirms the move, it sells instead of buying.&lt;/p&gt;

&lt;p&gt;Here's what the output looks like:&lt;/p&gt;

&lt;p style="margin-bottom:1rem;"&gt;&lt;img alt="Paper trading bot buys bitcoin at $64,869, then sells at $64,200 on a bearish reversal, closing -$6.16 realized PnL." height="475" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136262/content_image_1086.webp" style="max-width:100%;height:auto;" width="600"&gt;&lt;/p&gt;

&lt;div dir="ltr" style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"&gt;
&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;buy() &lt;/code&gt;and &lt;code&gt;sell()&lt;/code&gt;apply &lt;code&gt;FEE_PCT(0.1%)&lt;/code&gt;and &lt;code&gt;SLIPPAGE_PCT(0.2%)&lt;/code&gt;from &lt;code&gt;config.py&lt;/code&gt;, so PnL already reflects these costs on both entry and exit.&lt;/div&gt;

&lt;p style="margin-bottom:1rem;"&gt;This exit rule is intentionally simple and is not intended for production trading. Before using it, consider:&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;Backtesting against historical data.&lt;/li&gt;
	&lt;li&gt;Analyzing how different news types affect price.&lt;/li&gt;
	&lt;li&gt;Defining an appropriate holding period.&lt;/li&gt;
	&lt;li&gt;Adding independent stop-loss and take-profit rules.&lt;/li&gt;
	&lt;li&gt;Considering other factors relevant to the asset and strategy.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2&gt;How to Reduce False Signals in a News Trading Bot&lt;/h2&gt;

&lt;p&gt;To reduce false signals, check which filter rejects the most headlines and tune that filter first. Change one threshold at a time so you can see what each adjustment changes. The bot logs every scored headline through &lt;code&gt;log_signal()&lt;/code&gt;, including headlines that do not result in a trade, giving you a clear record to review and tune the strategy.&lt;/p&gt;

&lt;div class="cg-code-block" style="display:flex;overflow-x:auto;background:#ffffff;padding:1rem 0;border-radius:6px;"&gt;
&lt;pre class="cg-code-linenos" style="margin:0;padding:0 1rem;color:#8b949e;text-align:right;user-select:none;border:none;background:transparent;"&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23&lt;/pre&gt;

&lt;pre class="cgcode cg-code-body" style="margin:0;padding:0 1rem;flex:1;background:transparent;"&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sqlite3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pandas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pd&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;rejection_breakdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"portfolio.db"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""Show which check is filtering out the most signals."""&lt;/span&gt;
    &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"SELECT reason, executed FROM signal_log"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;breakdown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"executed"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rename_axis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reset_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;breakdown&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"pct_of_total"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;breakdown&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;breakdown&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;breakdown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rejection_breakdown&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; headlines scored over the period&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;breakdown&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iterrows&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'count'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;4&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'pct_of_total'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;5.1f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%   &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'reason'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="cg-code-footer" style="font-size:0.85rem;color:#57606a;border-top:1px solid #d0d7de;padding-top:0.5rem;margin:0 0 1.5rem;"&gt;
&lt;a href="https://github.com/cg-growth/content/blob/main/build-news-based-ai-crypto-trading-bot/false_signal_report.py" style="color:#57606a;text-decoration:none;" target="_blank"&gt;false_signal_report.py&lt;/a&gt; hosted with ❤ by GitHub  &lt;a href="https://raw.githubusercontent.com/cg-growth/content/main/build-news-based-ai-crypto-trading-bot/false_signal_report.py" rel="nofollow noopener" style="color:#57606a;" target="_blank"&gt;view raw&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Here’s what the bot’s &lt;code&gt;signal_log&lt;/code&gt; report looks like: &lt;img alt="65% of 412 scored headlines are rejected for having no tradeable coin, the largest false-signal category by far." height="401" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136263/content_image-1787108083160.webp" style="max-width:100%;height:auto;" width="1200"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.coingecko.com/webhooks" target="_blank"&gt;CoinGecko webhooks&lt;/a&gt; provide a push-based alternative, with the &lt;code&gt;cg.coin.info.updated&lt;/code&gt; event covering coin metadata changes such as contract migrations, symbol or logo updates, category changes, and public notices. Newly added &lt;code&gt;public_notices&lt;/code&gt; can be scored with the same LLM used for news headlines, giving the bot another source of event-based signals.&lt;/p&gt;

&lt;div dir="ltr" style="background:rgba(127,127,127,0.14);border:1px solid rgba(127,127,127,0.35);padding:5px 10px;margin-top:1rem;"&gt;
&lt;strong&gt;Update as of June 2026:&lt;/strong&gt; CoinGecko webhooks are now available on the &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;Basic plan&lt;/a&gt; starting at just $29/month.&lt;/div&gt;

&lt;p&gt;For price movements, the &lt;code&gt;cg.coin.price.updated&lt;/code&gt; webhook event triggers when a tracked coin crosses a configured price threshold or shows abnormal volatility. This webhook event is currently in private beta – &lt;a href="https://forms.gle/4e6hqGmHynM9dmDMA" rel="nofollow noopener" target="_blank"&gt;join the waitlist&lt;/a&gt; for early access.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;&lt;img alt="CoinGecko Webhooks push real-time crypto data across 250+ networks starting at $29 per month." loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136264/content_Subcribe_to_CoinGecko_API_CTA_-_webhook_%284%29.webp" style="max-width: 100%; height: 234px; width: 1200px;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;With CoinGecko API, you can build a Python trading bot that covers the full news-to-trade workflow, from ingesting headlines and scoring them with an LLM to matching them with tradeable coins, checking live price data, and recording simulated trades in a local ledger. Start with paper trading to test and refine the strategy, identify issues, and evaluate its behavior before connecting it to exchange APIs for live execution.&lt;/p&gt;

&lt;p&gt;To combine headlines with price and OHLC data, see our guide on &lt;a href="https://www.coingecko.com/learn/build-ai-crypto-trading-bot" target="_blank"&gt;building an AI crypto trading bot&lt;/a&gt;. For more on the Crypto News endpoint, including coin filtering and pagination, &lt;a href="https://www.coingecko.com/learn/crypto-news-api-python" target="_blank"&gt;fetching real-time crypto news with Python&lt;/a&gt; covers the details. To test a strategy against historical data, explore our &lt;a href="https://www.coingecko.com/learn/crypto-backtesting-python" target="_blank"&gt;crypto backtesting guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ready to start building? The &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;CoinGecko API Analyst plan&lt;/a&gt; unlocks the Crypto News endpoint, 500K monthly call credits, 500 RPM, and full historical depth for backtesting. If you are not ready to subscribe yet, start with a &lt;a href="https://support.coingecko.com/hc/en-us/articles/21880397454233-User-Guide-How-to-sign-up-for-CoinGecko-Demo-API-and-generate-an-API-key" target="_blank"&gt;free Demo API key&lt;/a&gt; to explore 50+ endpoints with 10K free monthly API call credits.&lt;/p&gt;
</content>
    <author>
      <name>Ru Jun Ang</name>
    </author>
    <url>https://www.coingecko.com/learn/build-news-based-ai-crypto-trading-bot?locale=en</url>
    <summary>pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent;...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135751</id>
    <published>2026-08-18T05:36:04Z</published>
    <updated>2026-08-18T06:17:07Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/majors-vs-altcoins-ethereum-dex-trader-profitability-2020-2026?locale=en"/>
    <title>Trading Majors vs. Altcoins: Ethereum DEX Trader Profitability, 2020-2026</title>
    <content type="html">&lt;div dir="ltr"&gt;&lt;img alt="eth dex trader chart 1" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136253/content_evm_dex_trader_chart_1.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;Ethereum on-chain traders are having their worst year on record in terms of trading performance. The overall median win rate across active DEX traders fell to &lt;strong&gt;26.29%&lt;/strong&gt; in the twelve months to August 2026, down &lt;strong&gt;25.91 percentage points &lt;/strong&gt;from &lt;strong&gt;52.20%&lt;/strong&gt; the year before — a&lt;strong&gt; 49.63%&lt;/strong&gt; relative decline. Since 2020, when the median win rate stood at &lt;strong&gt;80.65%&lt;/strong&gt;, the figure has fallen by &lt;strong&gt;54.36 percentage points&lt;/strong&gt;, a &lt;strong&gt;67.40%&lt;/strong&gt; relative drop, the lowest point in our seven-year dataset.&lt;/p&gt;

&lt;p dir="ltr"&gt;In this study, we tracked the &lt;strong&gt;top 500 &lt;/strong&gt;tokens by market capitalization as of August 2026 on CoinGecko. We further excluded non-Ethereum tokens and stablecoins, leaving us &lt;strong&gt;200 &lt;/strong&gt;remaining tokens (CoinGecko's top 500 ranking already excludes rehypothecated tokens). These 200 tokens are broken into two mutually-exclusive trader cohorts: &lt;strong&gt;Majors-Only&lt;/strong&gt; (wallets that traded exclusively the top 10 tokens that year) and &lt;strong&gt;Altcoins (Any)&lt;/strong&gt; – wallets that traded any token ranked 11-200 that year. &lt;strong&gt;Note that wallets who trade both altcoins and majors are considered under the Altcoin (Any) cohort. &lt;/strong&gt;This is because altcoin traders typically also trade majors.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Is It Better To Trade Altcoins or Majors?&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="eth dex trader chart 2" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136254/content_evm_dex_trader_chart_2.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;In terms of win rates, the data shows a relatively even split.&lt;/strong&gt; Majors traders posted &lt;strong&gt;a higher median win rate in 3 of the 7 years studied (2020, 2025, 2026), while Altcoin traders were ahead in the other 4 (2021, 2022, 2023, 2024)&lt;/strong&gt; — including a narrow 2022 edge (38.61% vs. 38.39%).&lt;/p&gt;

&lt;p dir="ltr"&gt;The more revealing pattern shows up in PnL: &lt;strong&gt;Altcoin traders' median PnL moved in the same direction as Majors traders' in every single year studied (a 0.975 correlation), but consistently amplified &lt;/strong&gt;— &lt;strong&gt;in 6 of the 7 years, Altcoin's median PnL was roughly 3-6.6x the size of Majors'&lt;/strong&gt;, whether positive or negative. When Majors traders made money, Altcoin traders tended to make several times more; when Majors traders lost money, Altcoin traders lost several times more too.&lt;/p&gt;

&lt;p dir="ltr"&gt;Overall, no single cohort dominates consistently on win rate — but on PnL, the story is less about who wins and more about how much each cohort's fortunes are magnified by the same underlying trend.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Median Wallet PnL by Year: Majors vs. Altcoins&lt;/h3&gt;

&lt;table&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Year&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Majors Median PnL&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Altcoin Median PnL&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2020&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$177.49&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$727.90&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2021&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$339.21&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$2,016.02&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2022&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;-$222.18&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;-$733.03&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2023&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$9.64&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$130.11&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2024&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$66.97&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$440.62&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2025&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$13.35&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$8.50&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2026&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;-$20.75&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;-$94.05&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 dir="ltr"&gt;Ethereum Altcoin Traders Cohort Size&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="eth dex trader chart 3" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136255/content_evm_dex_trader_chart_3.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Altcoin traders are a shrinking share of the market, but showed some signs of recovery since 2024. &lt;/strong&gt;Altcoin traders made up &lt;strong&gt;15.82%&lt;/strong&gt; of the trader population at their peak in 2021, falling to a&lt;strong&gt; low of 7.22% in 2024 &lt;/strong&gt;— &lt;strong&gt;a 54.36% relative decline &lt;/strong&gt;— before &lt;strong&gt;recovering to 10.82% by 2026&lt;/strong&gt;, still 23.15% below the 2020 starting point of 14.08%.&lt;/p&gt;

&lt;p dir="ltr"&gt;This shift did not track overall market growth in a simple way. 2024 was the single busiest year in our dataset by trader count — the combined population (Majors + Altcoins) peaked at &lt;strong&gt;874,013 wallets&lt;/strong&gt;, the same year overall win rates also hit their&lt;strong&gt; post-2020 high of 65.43% (see Chart 1) &lt;/strong&gt;— yet it's also the exact year Altcoin share bottomed out. In other words, at the moment the market was performing best and attracting the most traders overall, altcoins were capturing the smallest slice of that activity.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Total trader population on Ethereum fell 3.96% in 2025 and a further 25.14% in 2026 to 628,326.&lt;/strong&gt; Meanwhile, Altcoin share climbed, rising even as the total population shrank suggests &lt;strong&gt;Altcoin wallets held up somewhat better than Majors wallets during the recent contraction,&lt;/strong&gt; rather than altcoin trading genuinely attracting new participants.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Methodology&lt;/h2&gt;

&lt;p dir="ltr"&gt;This analysis covers Ethereum decentralized exchange (DEX) trading activity across all major protocols indexed in Dune Analytics' unified dex_evm.trades table (Uniswap, Curve, SushiSwap, Balancer, and others). You may find our dashboard and dune queries &lt;a href="https://dune.com/coingecko_content/eth-dex-trader-pnl-win-rate-by-market-cap-tier" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Trader population:&lt;/strong&gt; An active trader is defined as any Ethereum wallet with between 10 and 2,000 DEX trades within a given study year. This range filters out one-off/dust wallets on the low end and automated bots/routers on the high end (some wallets recorded millions of trades per year, clearly non-human activity). Each year's eligible-wallet population is computed independently. Known contract/router addresses (per Dune's labels.owner_addresses table, where coverage exists) are excluded; label coverage on Dune is incomplete, so this is a best-effort filter rather than a guarantee.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Token groups: &lt;/strong&gt;Tokens are drawn from CoinGecko's top 500 coins by market cap (as of 2026), with stablecoins excluded, filtered to the ~200 tokens with a genuine Ethereum ERC-20 contract (native assets on other chains, such as SOL, XRP, or ADA, do not trade on Ethereum DEXs and are correctly excluded). BTC and ETH are manually mapped to their canonical WBTC and WETH contract addresses, since neither exists natively on Ethereum. These ~200 tokens are then re-ranked among themselves (not by original global rank) into two mutually-exclusive trader cohorts: Majors-Only and Altcoins (Any). A wallet is classified as Majors-Only only if it traded exclusively top-10 tokens in that study year; a wallet is classified as Altcoins (Any) if it traded any token ranked 11-200 that year, regardless of whether it also traded majors — in which case its entire trading activity for that year (both majors and altcoin legs) is counted toward the Altcoins (Any) cohort's statistics, not split between groups.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Important limitation: &lt;/strong&gt;this token list reflects 2026 market-cap rankings, applied retroactively to 2020-2026. A token that did not exist in an earlier year (or was not yet prominent) simply shows zero or reduced activity in that year, by construction rather than as a data gap. This means the study measures "how today's most significant Ethereum-tradeable tokens have performed for their traders through recent history," rather than a true point-in-time ranking for each year.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;PnL calculation: &lt;/strong&gt;For each wallet and token, cost basis is calculated using a weighted-average method (not FIFO): a wallet's cost basis for a token is the running average price of everything it has bought so far within that year. Realized PnL on a sell = sale proceeds minus (quantity sold × average cost basis at that point). A sell only counts if the wallet made a prior buy of that same token in the same year; sells with no in-year buy history are excluded rather than treated as breakeven or loss. Wallets need at least 3 matched sells within a given group/year to be included in that group's statistics.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Win rate: &lt;/strong&gt;Calculated at the wallet level using the same weighted-average cost basis, not FIFO. A sale is scored as a "win" if the sale proceeds exceed the sold quantity multiplied by the wallet's average cost basis at that point in time. A sell only counts toward win rate if the wallet has a matching buy of that same token earlier in the same year; sells with no prior in-year purchase are excluded rather than counted as either a win or a loss. Win rate is the percentage of a wallet's qualifying sells that were profitable, and each group's reported win rate (median or average) is calculated across all wallets with at least 3 qualifying sells in that group for that year.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Data-quality guard: &lt;/strong&gt;a small number of sells were excluded (~0.07% in testing) where the sold quantity exceeded 1,000x the wallet's cumulative bought quantity for that token — this targets a specific failure mode found during development, where rebasing tokens, decimals metadata errors, and certain scam contracts produced quantity mismatches between a wallet's buy and sell legs, resulting in nonsensical implied per-token costs.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Other notes: &lt;/strong&gt;gas costs are not netted into PnL figures. Study years run from August 11 of the labeled year to August 11 of the following year (e.g., "2026" covers August 11, 2025 through August 11, 2026).&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;If you cite these insights, we would appreciate a link credit to this article on CoinGecko, which allows us to keep supplying you with useful data-led content.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;Related reading: &lt;a href="https://www.coingecko.com/research/publications/pump-fun-traders-are-making-a-comeback" target="_blank"&gt;Pump.fun Traders are Making a Comeback&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This study is for illustrative and informational purposes only, and is not financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Year-over-Year Summary: ETH DEX Trader Win Rate &amp;amp; PnL, Majors + Altcoins Combined&lt;/h3&gt;

&lt;table&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Year&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Overall Median Win Rate&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Total Aggregate Realized PnL&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Total Traders Analyzed&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2020&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;80.65%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$0.21B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;48,808&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2021&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;71.21%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$24.03B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;563,439&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2022&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;38.68%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;-$15.30B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;500,795&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2023&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;58.25%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$0.69B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;614,940&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2024&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;65.43%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$6.02B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;874,013&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2025&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;52.20%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.68B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;839,375&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2026&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;26.29%&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;-$3.30B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;628,326&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 dir="ltr"&gt;Trader Cohort Size and Altcoin Trader Share&lt;/h3&gt;

&lt;table&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Year&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Majors-Only&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Altcoin (any)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Total Traders&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Altcoin Share&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2020&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;41,936&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;6,872&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;48,808&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;14.08%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2021&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;474,328&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;89,111&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;563,439&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;15.82%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2022&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;450,781&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;50,014&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;500,795&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;9.99%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2023&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;553,948&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;60,992&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;614,940&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;9.92%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2024&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;810,878&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;63,135&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;874,013&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;7.22%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2025&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;767,186&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;72,189&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;839,375&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;8.60%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2026&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;560,334&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;67,992&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;628,326&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;10.82%&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</content>
    <author>
      <name>Loke Choon Khei</name>
    </author>
    <url>https://www.coingecko.com/learn/majors-vs-altcoins-ethereum-dex-trader-profitability-2020-2026?locale=en</url>
    <summary>

Ethereum on-chain traders are having their worst year on record in terms of trading performance. The overall median win rate across active DEX traders fell to 26.29% in the twelve months to Augus...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135750</id>
    <published>2026-08-18T02:10:05Z</published>
    <updated>2026-08-30T02:18:46Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/best-crypto-api-algorithmic-trading-bots-ai-agents?locale=en"/>
    <title>Best Crypto API for Algorithmic Trading Bots &amp; AI Agents (2026)</title>
    <content type="html">&lt;style type="text/css"&gt;.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &gt; ul {
  color: inherit !important;
}

body.tw-dark div[style*="background:#eeeeee"] {
  background-color: #22272e !important;
  border-color: #444c56 !important;
  color: #adbac7 !important;
}
body.tw-dark div[style*="background:#eeeeee"] strong { color: #adbac7 !important; }
body.tw-dark div[style*="background:#eeeeee"] a { color: #6cb6ff !important; }
body.tw-dark div[style*="background:#eeeeee"] code {
  color: inherit !important;
  background-color: transparent !important;
}
&lt;/style&gt;
&lt;div aria-label="Definition" class="cg-tldr-box" role="region" style="background-color: #e8fcc9; border-radius: 8px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 5px solid #34af00;"&gt;
&lt;h2 id="tl;dr" style="margin: 0px 0px 1rem; font-size: 1.25rem; color: rgb(25, 65, 45); font-weight: 700;"&gt;TL;DR&lt;/h2&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #000000; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;&lt;a href="https://www.coingecko.com/en/api" target="_blank"&gt;CoinGecko API&lt;/a&gt; is the best crypto API for algorithmic trading bots and AI agents as it combines broadest market coverage, deep historical depth, real-time delivery, cost-efficient 1-credit-per-request pricing model, rich market context, and AI-native integrations.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;
	&lt;p&gt;For specialized requirements, other providers offer capabilities tailored to specific workflows. QuickNode is suitable for MEV and onchain execution, CoinAPI for institutional order book data and FIX connectivity, exchange-native APIs for direct venue execution, and TAAPI.IO for pre-built technical indicators.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;A trading bot or AI agent can only make decisions with high-quality market data. Reliable market data gives automated systems the foundation they need to identify opportunities, understand market conditions, and execute strategies with confidence. Price and volume provide the foundation for understanding market activity, while contextual data adds the reasoning layer behind those movements. By incorporating market context, AI agents can better interpret changing conditions, identify relevant signals, and make more informed decisions.&lt;/p&gt;

&lt;p&gt;There is no single best crypto API for every trading strategy. The right choice depends on the type of system being built, whether it is day trading a basket of large-cap assets, screening for onchain memecoin launches, or running a market-making strategy that relies on raw order book depth.&lt;/p&gt;

&lt;p&gt;This guide explains how to evaluate crypto APIs for trading bots by comparing leading providers and helps you find the right solution for your algorithmic trading strategy and technical requirements.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This guide is for educational purposes only and is not financial advice. All trading involves risk. Please do your own research before making any investment decisions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;img alt="Best Crypto API for Algorithmic Trading Bots &amp;amp; AI Agents (2026) " src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136248/content_Best_Crypto_API_for_Algorithmic_Trading_Bots___AI_Agents_%282026%29_%281%29.webp" style="max-width: 100%; height: 630px; width: 1200px;"&gt;&lt;/em&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="how-to-choose-a-crypto-api-for-algorithmic-trading-bots-and-ai-agents"&gt;How to Choose a Crypto API for Algorithmic Trading Bots and AI Agents&lt;/h2&gt;

&lt;p&gt;Choosing a crypto API for trading bots comes down to six key factors: coverage, historical depth, data delivery methods, cost efficiency, market context, and agent-ready integration. These determine whether a bot or AI agent has the data required to execute its strategy effectively.&lt;/p&gt;

&lt;h3 id="coverage-and-breadth"&gt;Coverage and breadth&lt;/h3&gt;

&lt;p&gt;How many exchanges, chains, and assets an API supports, and whether it brings centralized and decentralized exchange data together under one integration. Broad data coverage enables bots and AI agents to access more market signals through a single integration, supporting a wider range of strategies and expanding potential use cases.&lt;/p&gt;

&lt;h3 id="historical-depth-and-granularity"&gt;Historical depth and granularity&lt;/h3&gt;

&lt;p&gt;How far back an API's data goes and how granular the candles are. This determines how thoroughly a strategy can be tested before deploying it with real capital.&lt;/p&gt;

&lt;h3 id="delivery-methods-and-latency"&gt;Delivery methods and latency&lt;/h3&gt;

&lt;p&gt;Data delivery refers to how providers make data available and how quickly updates reach your systems. Each provider offers different delivery methods, and no single approach is inherently superior. WebSocket is suited to latency-sensitive strategies such as high-frequency trading that require a continuous price stream, while webhooks work well as triggers for specific coin events.&lt;/p&gt;

&lt;h3 id="cost-efficiency-and-strategy-profitability"&gt;Cost efficiency and strategy profitability&lt;/h3&gt;

&lt;p&gt;Cost directly impacts strategy profitability and the economics of running a trading system. For example, if a strategy spends $1 on data to generate a signal and the trade generates $2 in gross profit, half of that profit is already consumed by data costs.&lt;/p&gt;

&lt;p&gt;The impact becomes more significant because trading bots often make API requests that do not result in trades. They must continuously scan markets, evaluate signals, and monitor conditions before determining whether to enter a position. The key metric is not only the cost per API call, but the cost of generating a usable trading signal. As strategies scale, pricing models based on request volume, data size, or access to deeper market data can materially affect overall returns.&lt;/p&gt;

&lt;h3 id="market-context"&gt;Market context&lt;/h3&gt;

&lt;p&gt;Market data such as price and volume shows the outcome of market activity, while contextual data such as news, insights, sector performance, and narrative shifts helps AI agents understand the factors behind those movements to enable better reasoning when deciding a trade.&lt;/p&gt;

&lt;h3 id="agent-ready-integration"&gt;Agent-ready integration&lt;/h3&gt;

&lt;p&gt;How easily AI agents can discover, access, and use an API without manual documentation or custom integration. Tools such as MCP servers, Agent Skills, CLIs, and x402 endpoints enable agents to interact with data through AI-native interfaces.&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="crypto-api-for-algorithmic-trading-bots-and-ai-agents-at-a-glance"&gt;Crypto API for Algorithmic Trading Bots and AI Agents at a Glance&lt;/h2&gt;

&lt;p&gt;For most trading bots and AI agents, CoinGecko API is the strongest choice, combining broadest coverage, deep historical depth, real-time delivery, and agent-ready integration through MCP Servers, Agent Skills, and keyless x402 endpoints, all at a cost-efficient flat cost per call pricing model.&lt;/p&gt;

&lt;p&gt;More specialized cases, such as MEV and onchain execution, raw order book depth and FIX connectivity, pre-built technical indicators, or direct order execution on a single exchange, are better served by QuickNode, CoinAPI, TAAPI.IO, or an exchange-native API like Binance.&lt;/p&gt;

&lt;p&gt;The table below compares five crypto API providers based on the factors that matter most for building crypto trading bots and AI agents:&lt;/p&gt;

&lt;div class="rgt-wrapper" style="--rgt-bg-odd: transparent; --rgt-bg-even: transparent; --rgt-text-color: inherit; --rgt-header-bg: transparent; --rgt-header-text: inherit; --rgt-border-color: currentColor; --rgt-accent-color: inherit; width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; margin:1.5rem 0;"&gt;
&lt;table class="rgt-table" style="width:100%; min-width:1180px; border-collapse:collapse; table-layout:fixed; font-size:15px; line-height:1.45; color:var(--rgt-text-color); border:1px solid var(--rgt-border-color); background-color:var(--rgt-bg-odd);"&gt;
	&lt;colgroup&gt;
		&lt;col style="width:12%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
		&lt;col style="width:17.6%;"&gt;
	&lt;/colgroup&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Criterion&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;CoinGecko API&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;QuickNode&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;CoinAPI&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;TAAPI.IO&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Binance (Exchange-Native API)&lt;/span&gt;&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Coverage and breadth&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;44M+ assets&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;1,900+ exchanges (CEX &amp;amp; DEX)&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;250+ networks&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Raw blockchain data only – no market data&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;80+ chains&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;18K+ coins, 400+ exchanges (CEX only)&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;&amp;lt;10 DEX venue coverage with no unified cross-chain index&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;5,000+ assets across 5 exchanges, with 200+ technical indicators from RSI to Ichimoku Cloud.&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;470+ coins and 1,300+ trading pairs across 18 chains&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Historical depth and granularity&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Daily market data since 2013&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Hourly and 5-minute intervals since 2018&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Onchain OHLCV down to 1-second intervals since 2021&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Archive nodes return raw onchain state at any past block&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Tick-by-tick trades and L2/L3 order book history since 2010 at 1-second granularity&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;No stored history of its own. Computes indicators live from a rolling window of 50 to 3,000 recent candles&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Candlestick intervals from 1 second to 1 month, up to 1,000 candles per request&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Delivery methods and latency&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;REST API: real-time and historical market data&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;&lt;a class="rgt-link" href="https://docs.coingecko.com/websocket" rel="noopener noreferrer" target="_blank"&gt;WebSocket&lt;/a&gt;: sub-second streaming of aggregated prices, tick-level onchain trades, &amp;amp; 1-second OHLCV.&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;&lt;a class="rgt-link" href="https://docs.coingecko.com/webhooks" rel="noopener noreferrer" target="_blank"&gt;Webhooks&lt;/a&gt;: coin event notifications&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;JSON-RPC over HTTPS: direct blockchain node access&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;WebSocket: sub-second streaming for new blocks, pending transactions, and contract logs&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;REST API: real-time and historical market data&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;WebSocket: sub-second streaming of single-exchange trades, quotes, OHLCV, &amp;amp; L2/L3 order books&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;FIX: low-latency market-data feed&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;REST API: Returns computed indicator values&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;WebSocket: sub-second streaming for indicator updates&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Native REST API and WebSocket access to Binance market data&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Real-time trade streams and 1-second order book depth updates&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Cost and profitability impact&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Flat Credit Model: 1 credit = 1 API call, regardless of payload size&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Keyless &amp;amp; free Demo API key with 10K call credits/mo and 100 RPM&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Plans starting from $29/month with WebSocket, webhook &amp;amp; commercial license included with 100K call credits, 300 RPM&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Metered by API credits, with each call costing up to 50 credits depending on the blockchain&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Advanced APIs (e.g., Trace, Debug, Token, NFT) consume up to 100 credits per call&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Free trial includes 10M credits&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Paid plans from $49/month (80M credits) to $999/month (2B credits)&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Metered pricing, with separate billing for each product:&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Market Data API: 1 credit / 100 data points, available from $79/month&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Exchange Rates API: Per rate (from $0.50/100)&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Indexes API: Pay as you go&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Flat Files: Per request ($10/1k) + data by GB&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;All plans, including Enterprise, is capped at 20 indicator calculations per request&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Limited to a 7-day trial only for Basic and Pro plans.&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Paid plans from €15/month with 400 indicators/min, 20 requests/min, and 1 symbol per request&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;Free API key&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Rate limit of 6,000 request weight/min for market data&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;Order limits of 100 orders/10 seconds and 200K orders/day&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Market context&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;ul style="margin-top: 16px;"&gt;
				&lt;li&gt;
				&lt;p&gt;&lt;a class="rgt-link" href="https://docs.coingecko.com/reference/news" rel="noopener noreferrer" target="_blank"&gt;Crypto News&lt;/a&gt;: 100+ curated publishers across 30+ languages&lt;/p&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;p&gt;&lt;a class="rgt-link" href="https://docs.coingecko.com/reference/insights" rel="noopener noreferrer" target="_blank"&gt;Coin Insights&lt;/a&gt;: AI-synthesized coin-level market summaries&lt;/p&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;None&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;None&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;None&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;None&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Agent-ready integration&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
&lt;a class="rgt-link" href="https://docs.coingecko.com/ai-integration" rel="noopener noreferrer" target="_blank"&gt;AI Integrations&lt;/a&gt;, SDKs, MCP, CLI, Agent Skills, and x402 pay-per-use endpoints&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;None&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;MCP only&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;SDKs (OpenAI function-calling support)&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;None&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Most trading bots and AI agents, including day and swing trading, sector rotation, memecoin screening, copy trading, and autonomous trading workflows&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;MEV bots, arbitrage bots, and onchain execution such as Jito bundle submission and mempool-dependent strategies&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;HFT and market-making needing L2/L3 raw order book depth or FIX, such as quote-both-sides market makers and FIX-based institutional desks&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Pre-computed technical indicators without building a TA pipeline, such as an RSI or MACD crossover bot&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Direct order execution on the selected venue, like single-exchange spot or grid-trading bots&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="best-crypto-apis-for-algorithmic-trading-bots-and-ai-agents"&gt;Best Crypto APIs for Algorithmic Trading Bots and AI Agents&lt;/h2&gt;

&lt;h3 id="coingecko-api:-best-all-in-one-crypto-api-for-trading-strategies-and-ai-agents"&gt;CoinGecko API: Best All-in-One Crypto API for Trading Strategies and AI Agents&lt;/h3&gt;

&lt;p&gt;&lt;img alt="CoinGecko API " loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136080/content_CG.webp" style="max-width: 100%; height: 407px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p&gt;CoinGecko API is the &lt;a href="https://www.coingecko.com/learn/best-crypto-data-api-ranked" target="_blank"&gt;most widely used crypto market data API&lt;/a&gt; for both developers and AI agents, trusted by major trading platforms including Kraken, Coinbase, and ChainGPT. As the largest independent crypto data aggregator by coverage, it combines broad market data with AI-native access.&lt;/p&gt;

&lt;p&gt;CoinGecko API offers an accessible entry point, with the Basic plan starting at $29/month and including WebSocket streaming and instant Webhook notifications for real-time data delivery. Selected plans also support &lt;a href="https://docs.coingecko.com/docs/crypto-payment" target="_blank"&gt;crypto and stablecoin payments&lt;/a&gt;, providing flexible payment options for crypto-native developers and traders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Broadest market coverage:&lt;/strong&gt; CoinGecko provides coverage across 17K+ coins, 44M+ tokens, 1,900+ exchanges, and 250+ networks, all accessible through a single API.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Real-time delivery method:&lt;/strong&gt; CoinGecko's &lt;a href="https://docs.coingecko.com/websocket" target="_blank"&gt;WebSocket&lt;/a&gt; streams across CEX and DEX markets, giving bots live pricing without aggregating multiple venues. The same connection pushes tick-level onchain pool trades at 0.1-second updates. Additionally, its webhooks (&lt;a href="https://docs.coingecko.com/webhooks/cg-coin-info-updated" target="_blank"&gt;coin.info.updated&lt;/a&gt;) instantly notify agents of coin metadata changes, such as contract migrations, security notices, and risk alerts, enabling real-time reactions without continuous polling.&lt;/p&gt;

	&lt;div dir="ltr" style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;margin-top:1rem;"&gt;
&lt;strong&gt;Update as of June 2026:&lt;/strong&gt; CoinGecko WebSockets &amp;amp; webhooks are now available on the &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;Basic plan&lt;/a&gt; starting at just $29/month.&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Cost Efficiency &amp;amp; Strategy Profitability:&lt;/strong&gt; Every API call consumes exactly one credit, regardless of payload size, keeping costs efficient as strategies scale. This makes it easier to estimate data costs and maintain profitability as trading volume grows.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Market Context &amp;amp; Insights:&lt;/strong&gt; The &lt;a href="https://docs.coingecko.com/reference/news" target="_blank"&gt;Crypto News&lt;/a&gt; endpoint aggregates 100+ curated publishers across 30+ languages into a single feed filterable by coin, with up to 400 articles per query. The &lt;a href="https://docs.coingecko.com/reference/insights" target="_blank"&gt;Coin Insights&lt;/a&gt; endpoint adds coin-specific market summaries, helping agents interpret movements by understanding the factors and signals behind them.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Agent-ready integration:&lt;/strong&gt; CoinGecko's &lt;a href="https://docs.coingecko.com/docs/ai-agent-hub/mcp-server" target="_blank"&gt;MCP server&lt;/a&gt; allows AI agents to call API tools directly through Claude, Cursor, and other MCP-compatible clients without requiring custom integrations. CoinGecko's &lt;a href="https://docs.coingecko.com/docs/ai-agent-hub/skills" target="_blank"&gt;Agent Skills&lt;/a&gt; extends this by giving agents built-in knowledge of the API, while the &lt;a href="https://docs.coingecko.com/ai-integration/cli" target="_blank"&gt;CLI&lt;/a&gt; enables direct command-line access for developers and AI workflows across environments such as Claude Code, Gemini, and Codex. &lt;a href="http://x402" rel="nofollow noopener" target="_blank"&gt;x402&lt;/a&gt; endpoints enable a more autonomous workflow by allowing agents to pay for API calls per-request, without manual account setup or API key configuration.&lt;/p&gt;

	&lt;p&gt;According to MPPScan, CoinGecko API is the most widely used crypto data source among AI agents on the Machine Payments Protocol (MPP), based on transaction volume as of August 2026.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li style="list-style:none;"&gt;
	&lt;p style="margin-top:1.5rem;margin-bottom:1rem;"&gt;&lt;img alt="CoinGecko API is the most widely used crypto data source among AI agents on the Machine Payments Protocol (MPP), based on transaction volume as of August 2026." loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136249/content_Group_1244831306_%281%29.webp" style="max-width: 100%; height: 476px; display: block; margin: 0px; width: 600px;"&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li style="list-style:none;"&gt;
	&lt;p style="margin-top:1.5rem;margin-bottom:1rem;"&gt;Source: &lt;a href="https://www.mppscan.com/?d=30&amp;amp;s=total_amount" rel="nofollow noopener" target="_blank"&gt;MPPscan&lt;/a&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No full L2/L3 order-book coverage:&lt;/strong&gt; It provides aggregated pricing and broad market analytics, including spread and market depth metrics for market monitoring and analysis.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;No execution or RPC layer:&lt;/strong&gt; CoinGecko focuses on crypto market data and does not provide trade execution or raw blockchain RPC access.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="quicknode:-best-for-mev-and-onchain-execution"&gt;QuickNode: Best for MEV and Onchain Execution&lt;/h3&gt;

&lt;p&gt;&lt;img alt="QuickNode" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136250/content_image_1062.webp" style="max-width: 100%; height: 460px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p&gt;QuickNode focuses on blockchain infrastructure rather than market data aggregation, providing direct access to raw onchain data across 80+ chains. Its infrastructure supports use cases such as MEV trading strategies and direct onchain execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Raw RPC and node access:&lt;/strong&gt; Direct RPC, REST, and gRPC access to blockchain data across multiple chains, enabling bots to query onchain state, interact with smart contracts, and broadcast transactions.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;MEV infrastructure:&lt;/strong&gt; Provides MEV-focused infrastructure such as Jito bundle submission on Solana for atomic, MEV-protected transaction delivery, alongside multi-region transaction broadcasting and streams for real-time push-based onchain event delivery.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Event-driven and serverless tooling:&lt;/strong&gt; Streams push raw blockchain-level events, such as new blocks, transactions, and logs, directly to applications, webhooks, or data warehouses, while Functions allow developers to run serverless onchain logic without managing infrastructure.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
&lt;strong&gt;Credit-based pricing:&lt;/strong&gt; QuickNode uses a credit system, where API usage consumes credits based on request complexity. Simple API requests typically cost 20–50 credits, while advanced operations such as Trace, Debug, Token, and NFT APIs cost up to 100 credits. Some resource-intensive operations can cost up to 200 credits per request depending on the chain and API type. For example, the Build plan's 80M monthly credits support up to 4M simple Ethereum requests or 1M advanced requests. Usage can vary across chains, with higher-cost networks consuming credits faster.&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;No market data coverage:&lt;/strong&gt; It focuses on blockchain infrastructure, providing node access and onchain events. It does not provide cross-exchange price aggregation, market cap data, category rankings, or unified asset identities across chains. As a result, bots need a separate market data layer before using QuickNode for onchain execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="coinapi:-best-for-advanced-order-book-data-and-fix-connectivity"&gt;CoinAPI: Best for Advanced Order Book Data and FIX Connectivity&lt;/h3&gt;

&lt;p&gt;&lt;img alt="CoinAPI " loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136084/content_coinAPI.webp" style="max-width: 100%; height: 568px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p&gt;CoinAPI is built specifically for institutional CEX infrastructure, offering normalized tick data, deep historical market data, raw order book depth, and FIX protocol connectivity for quantitative trading and algorithmic research.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Order book depth:&lt;/strong&gt; Provides normalized Level 2 order book data across supported venues, while full L3 order-by-order data is limited to select venues such as Coinbase and Bitso, with broader coverage requiring custom integration.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;FIX connectivity:&lt;/strong&gt; Supports FIX protocol access on higher-tier plans, with regional endpoints across NCSA, EMEA, and APAC to reduce latency for institutional trading workflows.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Deep tick history:&lt;/strong&gt; Tick-level trade and order book history dating back to 2010 with 1-second granularity, useful for market microstructure analysis and quantitative research.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Execution beyond data:&lt;/strong&gt; Execution Management System (EMS) provides cross-venue smart order routing, combining data access with trade execution capabilities.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Limited onchain coverage:&lt;/strong&gt; Covers primarily CEX markets, with fewer than 10 DEX venues and no unified cross-chain index, requiring additional data sources for broader onchain market coverage.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Fragmented pricing model with metered usage:&lt;/strong&gt; CoinAPI separates pricing across five products (Market Data, Indexes, EMS Trading, Exchange Rates, Flat Files), so costs can compound as you add more data services. Furthermore, its Market Data uses a credit-based billing model that charges based on returned data volume rather than per call, making costs less predictable as usage scales.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="taapi.io:-best-for-pre-built-technical-indicators"&gt;TAAPI.IO: Best for Pre-Built Technical Indicators&lt;/h3&gt;

&lt;p&gt;&lt;img alt="TAAPI.io " loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136251/content_image_1063.webp" style="max-width: 100%; height: 649px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p&gt;TAAPI.IO is a hosted technical indicator API that provides ready-to-use indicators without requiring developers to build their own calculation pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Indicator breadth:&lt;/strong&gt; Provides 200+ pre-built technical indicators, including RSI, MACD, and Bollinger Bands&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Bulk queries:&lt;/strong&gt; Bots can request indicator calculations across multiple symbols and timeframes in a single API call&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Trial-only access:&lt;/strong&gt; Basic and Pro plans offer a 7-day trial, with limits of 400 indicators/min and 50 candles on Basic, and 2,400 indicators/min and 300 candles on Pro.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Limited multi-symbol requests:&lt;/strong&gt; Basic is capped at 1 symbol per request, requiring separate calls for each trading pair. Users running broader market scans need to upgrade to higher tiers for larger batch support.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Not a market data source:&lt;/strong&gt; TAAPI.IO focuses on technical indicators rather than market data. It does not provide market cap, cross-exchange pricing, or asset discovery.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="binance-&amp;amp;-exchange-native-trading-apis:-best-for-direct-venue-execution"&gt;Binance &amp;amp; Exchange-Native Trading APIs: Best for Direct Venue Execution&lt;/h3&gt;

&lt;p&gt;&lt;img alt="Binance API " loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136252/content_image_1064.webp" style="max-width: 100%; height: 291px; width: 1200px;"&gt;&lt;/p&gt;

&lt;p&gt;Exchange-native APIs serve as the execution layer, connecting trading systems to individual venues for order placement, account management, and market access. Most major platforms provide their own APIs, giving bots access to their trading infrastructure and liquidity. Binance is one of the most widely used examples due to its trading volume, but the appropriate API depends on the venue where a strategy operates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Direct execution:&lt;/strong&gt; Gives bots direct access to Binance’s trading infrastructure, including its native order book, liquidity, and order execution capabilities.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Granular market data:&lt;/strong&gt; Provides order book data with up to 5,000 levels, plus candlestick intervals from 1 second to 1 month and up to 1,000 candles per request across Binance’s listed coins and trading pairs.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin-top: 16px;"&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Regulatory and regional availability limits:&lt;/strong&gt; Binance’s services vary by market due to regulatory restrictions, including suspending new EU services after not securing a MiCA license, restrictions from the UK’s FCA, and restrictions on its app and website for users in Malaysia. In the US, Binance operates through a separate entity.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Single-venue coverage:&lt;/strong&gt; Provides only Binance’s market data and liquidity, without cross-exchange aggregation, global market coverage, sector-level metrics, or asset discovery beyond Binance listings.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p style="margin-top:1.5rem;margin-bottom:0;"&gt;&lt;strong&gt;Alternatives to Binance&lt;/strong&gt;&lt;/p&gt;

&lt;p style="margin-top:0;"&gt;Coinbase Advanced Trade, Kraken, Bybit, OKX, Bitget, and Gate.io offer REST and WebSocket trading APIs.&lt;/p&gt;

&lt;p&gt;For bots trading across multiple exchanges, CCXT provides a unified REST interface for more than 100 exchanges across Python, TypeScript, and other languages. It does not provide its own market data layer. Every request is routed directly to the underlying exchange, so bots inherit each venue's rate limits, regional availability, and uptime.&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="how-to-choose-the-right-crypto-api-for-your-algorithmic-trading-bot-or-ai-agent?"&gt;How to Choose the Right Crypto API for Your Algorithmic Trading Bot or AI Agent?&lt;/h2&gt;

&lt;p&gt;For most bots and agents, CoinGecko API provides the broad market data layer, while specialist APIs cover narrower jobs such as MEV execution, raw order-book depth, or pre-built indicators.&lt;/p&gt;

&lt;p&gt;The table below maps trading strategies and technical requirements to the APIs best suited for each role.&lt;/p&gt;

&lt;div class="rgt-wrapper" style="--rgt-bg-odd: transparent; --rgt-bg-even: transparent; --rgt-text-color: inherit; --rgt-header-bg: transparent; --rgt-header-text: inherit; --rgt-border-color: currentColor; --rgt-accent-color: inherit; width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; margin:1.5rem 0;"&gt;
&lt;table class="rgt-table" style="width:100%; min-width:900px; border-collapse:collapse; table-layout:fixed; font-size:15px; line-height:1.45; color:var(--rgt-text-color); border:1px solid var(--rgt-border-color); background-color:var(--rgt-bg-odd);"&gt;
	&lt;colgroup&gt;
		&lt;col style="width:18%;"&gt;
		&lt;col style="width:18%;"&gt;
		&lt;col style="width:64%;"&gt;
	&lt;/colgroup&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Use Case&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Recommended API&lt;/span&gt;&lt;/th&gt;
			&lt;th class="rgt-th" scope="col" style="padding:13px 16px; vertical-align:middle; background-color:rgb(1, 87, 92); color:var(--rgt-header-text); font-weight:700; border:1px solid var(--rgt-border-color); white-space:nowrap; overflow-wrap:break-word; text-align:center;"&gt;&lt;span style="color:#ffffff;"&gt;Why&lt;/span&gt;&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Day trading and swing trading bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;CoinGecko's &lt;a class="rgt-link" href="https://docs.coingecko.com/demo/reference/coins-markets" rel="noopener noreferrer" target="_blank"&gt;Coins List with Market Data&lt;/a&gt; endpoint returns current prices and volume data for up to 250 assets per call, allowing bots to monitor large watchlists more efficiently without increasing request volume for each individual asset.&lt;/p&gt;

			&lt;p&gt;Its WebSocket adds continuous price streaming on top, enabling bots to receive real-time updates without relying on continuous polling.&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Portfolio rebalancing bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CoinGecko’s &lt;a class="rgt-link" href="https://docs.coingecko.com/reference/coins-id-market-chart" rel="noopener noreferrer" target="_blank"&gt;Coin Historical Chart Data&lt;/a&gt; endpoint provides daily historical closing prices back to 2013, giving users the price history needed to set target allocations and monitor portfolio drift.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;News-reactive trading bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;CoinGecko's &lt;a class="rgt-link" href="https://docs.coingecko.com/reference/news" rel="noopener noreferrer" target="_blank"&gt;News&lt;/a&gt; endpoint aggregates real-time coverage from 100+ publishers into a single feed filterable by coin, with up to 400 articles per query. The &lt;a class="rgt-link" href="https://docs.coingecko.com/reference/insights" rel="noopener noreferrer" target="_blank"&gt;Coin Insights&lt;/a&gt; endpoint adds AI-generated summaries and insights for individual coins.&lt;/p&gt;

			&lt;p&gt;Its Webhooks complement these data sources by providing real-time metadata change notifications, helping bots incorporate updated coin information into their decision-making workflows. Together, they give bots access to market-moving news, metadata-driven signals, and contextual insights that help them better interpret price movements.&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Sector rotation and narrative-tracking bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CoinGecko's &lt;a class="rgt-link" href="https://docs.coingecko.com/demo/reference/coins-categories" rel="noopener noreferrer" target="_blank"&gt;Coins Categories&lt;/a&gt; endpoint returns 700+ categories with market data in a single call. This enables bots to analyze sector-level performance, monitor shifts in category market share, and incorporate broader market trends into their strategies.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Memecoin sniping bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CoinGecko's onchain &lt;a class="rgt-link" href="https://docs.coingecko.com/reference/pools-megafilter" rel="noopener noreferrer" target="_blank"&gt;Pool Megafilter&lt;/a&gt; endpoint screens and ranks 45M+ DEX pools using 30+ filters and safety signals, including pool age, honeypot checks, GT Score, and holder concentration metrics. Bots can use these signals to evaluate pool risks before executing trades.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Copy trading bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CoinGecko's &lt;a class="rgt-link" href="https://docs.coingecko.com/reference/top-token-traders-token-address" rel="noopener noreferrer" target="_blank"&gt;Top Token Traders&lt;/a&gt; endpoint returns up to 50 top traders per token, enabling bots to monitor wallet activity and identify trading behavior that can complement price-based signals.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Derivatives and options trading bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CoinGecko's &lt;a class="rgt-link" href="https://docs.coingecko.com/demo/reference/derivatives-tickers" rel="noopener noreferrer" target="_blank"&gt;Derivatives Tickers&lt;/a&gt; endpoint returns open interest and 24-hour USD volume across derivatives exchanges in a single call, enabling bots to incorporate derivatives market positioning into leverage-aware trading strategies.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Autonomous AI trading agent&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CoinGecko's MCP server, Agent SKILL, CLI, and x402 endpoints let agents access data through native tool interfaces without requiring developers to manually write API calls. x402 enables agents to pay per call and retrieve data without requiring an account or API key, reducing manual setup requirements.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;MEV and arbitrage bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;QuickNode&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;QuickNode's Jito bundle submission and low-latency multi-region broadcast provide fast transaction delivery for MEV strategies, where identifying an opportunity is only useful if the bot can execute before competing transactions.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;HFT or market-making bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CoinAPI&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CoinAPI's normalized Level 2 order book depth and FIX connectivity provide the queue-position and market microstructure data required for market-making strategies&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Indicator-driven trading bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;TAAPI.IO&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;
			&lt;p&gt;TAAPI.IO provides 200+ precomputed indicators, allowing bots to use signals such as RSI or MACD crossovers without developers implementing and maintaining indicator calculations themselves.&lt;/p&gt;

			&lt;p&gt;CoinGecko API can complement it by providing market coverage, cross-asset context, market cap, category, and news context beyond technical indicators.&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-even" style="background-color:var(--rgt-bg-even);"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Single-exchange trade execution&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;Exchange-native APIs&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;Exchange-native APIs such as Binance and Coinbase bundle order execution with the exchange's own order book and liquidity, making them suitable for simple single-venue strategies such as long-only or grid trading.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr class="rgt-tr-odd"&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;&lt;strong&gt;Multi-exchange execution bot&lt;/strong&gt;&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:middle; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:center;"&gt;CCXT + CoinGecko&lt;/td&gt;
			&lt;td class="rgt-td" style="padding:13px 16px; vertical-align:top; border:1px solid var(--rgt-border-color); overflow-wrap:break-word; text-align:left;"&gt;CCXT unifies order placement across 100+ exchanges in one codebase, while CoinGecko API provides aggregated market data, asset discovery, and market context that CCXT does not offer. With that, they give bots a unified execution layer and the market data layer needed to evaluate trading opportunities.&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Different trading strategies rely on different API strengths. CoinGecko API provides the broadest, most cost-efficient market data layer for most trading bot and AI agent use cases, spanning market coverage, historical depth, market context, and AI-native access. Other providers can complement this layer for specialized requirements, including QuickNode for MEV and onchain execution, CoinAPI for raw order book depth and FIX connectivity, exchange-native APIs for order execution, and TAAPI.IO for pre-built technical indicators.&lt;/p&gt;

&lt;p&gt;Developers looking to build further can refer to the &lt;a href="https://www.coingecko.com/learn/python-trading-bot-automate-trades" target="_blank"&gt;crypto trading bot in Python&lt;/a&gt; tutorial for connecting CoinGecko API to a trading loop and the &lt;a href="https://www.coingecko.com/learn/backtesting-crypto-trading-strategies-python" target="_blank"&gt;crypto trading strategy backtesting&lt;/a&gt; guide for validating strategies against historical data. Those exploring AI agents can learn more from the &lt;a href="https://www.coingecko.com/learn/build-crypto-ai-agent" target="_blank"&gt;crypto AI agent&lt;/a&gt; tutorial, &lt;a href="https://www.coingecko.com/learn/openclaw-crypto-trading-bot" target="_blank"&gt;OpenClaw AI agent trading&lt;/a&gt;, and &lt;a href="https://www.coingecko.com/learn/x402-pay-per-use-crypto-api" target="_blank"&gt;x402 pay-per-use resources&lt;/a&gt;, which cover MCP integration, autonomous data access, and agent payments. For specific strategies, the &lt;a href="https://www.coingecko.com/learn/crypto-top-gainers-losers-python-bot" target="_blank"&gt;top gainers and losers Python bot&lt;/a&gt; covers a momentum-screening approach, the &lt;a href="https://www.coingecko.com/learn/build-news-based-ai-crypto-trading-bot" target="_blank"&gt;news-based AI trading bot&lt;/a&gt; scores live headlies with an LLM before executing trades, and the &lt;a href="https://www.coingecko.com/learn/how-to-build-a-solana-sniper-bot-in-python" target="_blank"&gt;Solana sniper bot&lt;/a&gt; evalutes new pools before entering trades.&lt;/p&gt;

&lt;p&gt;Ready to start building? Get your &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;free CoinGecko API key&lt;/a&gt; today to access the market data layer behind trading bots and AI agents. As your strategy and needs grow, start with the &lt;a href="https://www.coingecko.com/en/api/pricing" target="_blank"&gt;Basic plan from $29/month&lt;/a&gt; with access to WebSocket and Webhook delivery, then upgrade to the Analyst plan for exclusive endpoints such as News and Pool Megafilter, along with full historical data access from 2013, higher API credits, and higher rate limits.&lt;/p&gt;
</content>
    <author>
      <name>Ru Jun Ang</name>
    </author>
    <url>https://www.coingecko.com/learn/best-crypto-api-algorithmic-trading-bots-ai-agents?locale=en</url>
    <summary>.tw-dark .cg-tldr-box {
  background-color: rgba(52, 175, 0, 0.12) !important;
}
.tw-dark .cg-tldr-box h2 {
  color: inherit !important;
}
.tw-dark .cg-tldr-box &amp;amp;gt; ul {
  color: inherit !importan...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135749</id>
    <published>2026-08-14T03:38:18Z</published>
    <updated>2026-08-20T06:14:02Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/pendle-tori-trusd-strusd-institutional-yield?locale=en"/>
    <title>Pendle and Tori: Unlocking Institutional Opportunities in DeFi and RWA</title>
    <content type="html">&lt;div aria-label="Definition" role="region" style="background-color: #F1F5F9; border-radius: 12px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 4px solid #4BCC00;"&gt;
&lt;h2 style="margin: 0px 0px 1rem; font-size: 1.25rem; color: #0F172A; font-weight: 700;"&gt;Overview of Pendle x Tori Finance&lt;/h2&gt;

&lt;p style="font-size: 1rem; line-height: 1.6; color: #64748B; margin-bottom: 1.5rem;"&gt;&lt;strong style="color: #334155;"&gt;Tori Finance brings institutional trading-desk returns on-chain, and Pendle lets you trade that yield as fixed or floating.&lt;/strong&gt;&lt;/p&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #64748B; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Tori runs delta-neutral strategies:&lt;/strong&gt; money-market carry, futures arbitrage, and calendar spreads, the same playbook used by desks managing pension and sovereign capital, and channels the returns into an on-chain synthetic dollar, trUSD.&lt;/span&gt;&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Staking trUSD mints strUSD:&lt;/strong&gt; a token that automatically compounds that strategy yield.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Both trUSD and strUSD are now live on Pendle:&lt;/strong&gt; where they're split into PT (fixed yield) and YT (floating yield exposure), maturing 26 November 2026.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Pendle x Tori" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136246/content_Pendle_x_Tori.webp" style="width: 1200px; height: 628px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This article is brought to you by &lt;a href="https://app.pendle.finance/trade/markets" target="_blank"&gt;Pendle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;If you hold stablecoins today, most of your yield options fall into a couple of approaches: park them somewhere safe and earn close to nothing, or chase a higher APY that often comes from recycled crypto-native leverage and incentives rather than a genuinely new source of returns. Tori Finance is trying to add a different option to the mix: yield sourced from the kind of fixed-income and arbitrage strategies that have quietly funded pension funds and institutional desks for decades, verified on-chain instead of trusted on a statement. Pendle then lets you decide exactly how you want exposure to that yield: locked in and fixed, or floating and leveraged.&lt;/p&gt;

&lt;p dir="ltr"&gt;Here's how the two fit together, and what it actually means for you as a user.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What Is Tori Finance?&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://tori.finance/" target="_blank"&gt;Tori Finance&lt;/a&gt; brings institutional-grade, market-neutral trading strategies on-chain. Instead of one yield source, its strategy book runs three approaches long used by professional trading desks:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Money-market carry&lt;/strong&gt;: borrowing where short-term rates are low, lending where they are higher, and hedging the currency exposure fully back to USD. The difference between the two rates, after the hedge, is the yield.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Futures arbitrage&lt;/strong&gt;: profiting from pricing gaps between spot and futures markets&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Calendar spreads&lt;/strong&gt;: trading the price difference between contracts of different maturities&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;These are delta-neutral strategies, meaning the book isn't betting on crypto going up or down. It's hedged back to USD and harvesting structural spreads that exist regardless of market direction. And none of it depends on crypto: the returns are driven by global money market monetary policy rather than crypto sentiment, which is what makes them structurally uncorrelated with crypto cycles. That's the yield source backing trUSD, Tori's synthetic dollar.&lt;/p&gt;

&lt;p dir="ltr"&gt;trUSD is not a fiat-backed stablecoin like USDC or USDT. It’s a synthetic dollar backed by the trading positions above, and Tori's documentation states that its market price is not guaranteed to equal $1.00. Staking trUSD mints strUSD, a yield-bearing token that automatically compounds the strategy's returns as they come in.&lt;/p&gt;

&lt;p dir="ltr"&gt;Tori went live on Ethereum in July 2026 and has already grown past $63M in TVL. The seed round was led by Delphi Ventures, with RockawayX, which manages over $2B in digital assets, serving as the vault's risk curator and anchor LP, independently monitoring off-chain positions and capital flows without relying on data Tori itself provides. On top of that, because the strategies run off-chain, Tori built real-time verification in from day one: Accountable provides live proof of solvency covering reserves, collateral ratio, strategy allocation, and delta neutrality, all viewable on-chain by anyone. Smart contracts are audited by Sherlock and Nethermind, with 24/7 monitoring from Hypernative and a $1M bug bounty on top.&lt;/p&gt;

&lt;p dir="ltr"&gt;As Tori founder Samed Duzcay puts it: "The yield is generated from real economic activity, not from recycling crypto-native capital."&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What Is Pendle?&lt;/h2&gt;

&lt;p dir="ltr"&gt;Pendle is the world's largest yield trading platform in crypto. To understand what that means, it helps to think about what happens when you hold any yield-bearing asset in this case would be strUSD.&lt;/p&gt;

&lt;p dir="ltr"&gt;Yield-bearing assets bundle together your original principal, and a stream of income generated on top of it. Normally these can’t be separated, but Pendle lets you unbundle them into two tradable tokens:&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;PT (Principal Token)&lt;/strong&gt;: This is your original deposit. Holding PT locks in a fixed rate of return; you buy it at a discount and receive full face value at maturity, so you know exactly what you're earning the moment you buy, regardless of what happens to the underlying yield afterward.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;YT (Yield Token)&lt;/strong&gt;: This represents the yield stream alone. Holding YT gives you leveraged exposure to whatever the underlying strategy earns over time; if it performs well, you benefit more than a PT holder would; if it doesn't, you feel that too.&lt;/p&gt;

&lt;p dir="ltr"&gt;Pendle already applies this mechanism across dozens of on-chain yield sources, including trUSD and strUSD through PendleV2, its core spot yield trading product. Pendle also runs Boros, a separate product for leveraged margin trading of any rate, from on-chain funding rates to off-chain institutional yield, extending Pendle's reach into markets beyond spot yield.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;How trUSD and strUSD Fit Into Pendle&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;img alt="trUSD and strUSD on Pendle" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136247/content_trUSD_and_strUSD_on_Pendle.webp" style="width: 1200px; height: 304px;"&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Both trUSD and strUSD are now live on Pendle, split into their own PT and YT markets:&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;PT-trUSD / PT-strUSD&lt;/strong&gt; is for users who want certainty. Buying it locks in a fixed rate through maturity on 26 November 2026; whatever rate you lock in is what you get, independent of how the strategy book performs between now and then. This is the option for anyone who wants predictable, institutional-style returns without needing to track the market. As of time of writing, PT-strUSD is pricing a fixed rate of 11.56%, and PT-trUSD around 9.51%. However, like any market, these rates move with supply and demand on Pendle, so check the app for the current number before committing.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;YT-trUSD / YT-strUSD&lt;/strong&gt; is for users who want upside. If you think Tori's carry, arbitrage, and spread strategies are about to perform particularly well, YT gives you leveraged exposure to that floating yield rather than a locked-in rate, currently around 33x. That leverage cuts both ways: it amplifies gains if the underlying strategy outperforms, and amplifies losses if it doesn't.&lt;/p&gt;

&lt;p dir="ltr"&gt;Because both pools sit on Ethereum with the same maturity date, the position has one clean expiry to plan around rather than several overlapping ones. And a fixed position doesn't mean idle capital: PT-trUSD can already be used as collateral on Morpho money markets, so locking in a rate doesn't stop that capital from doing more work elsewhere.&lt;/p&gt;

&lt;p dir="ltr"&gt;Combined, as of time of writing, the two markets hold roughly $19M in total liquidity and around $270K in daily trading volume, with the strUSD market carrying the bulk of it. As it’s a live, tradeable market rather than a locked position, pricing and depth will likely shift over time.&lt;/p&gt;

&lt;p dir="ltr"&gt;To illustrate the demand: the pre-deposit vault opened 23 June with a $50M cap and took in $44M in its first 24 hours. strUSD itself went live 27 July with day-one integrations across Pendle, Morpho, Curve, and Royco, ready to be plugged straight into tools you're probably already using.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;The Bigger Picture&lt;/h2&gt;

&lt;p dir="ltr"&gt;Tori's backing includes partnerships with regulated desks, including one managing $10–20B for pension and trust funds, which is the kind of counterparty relationship rarely paired with on-chain infrastructure. Looking ahead, Tori also has multi-chain expansion planned via Chainlink's CCIP (a burn-and-mint cross-chain token standard), which would extend trUSD and strUSD access beyond Ethereum.&lt;/p&gt;

&lt;p dir="ltr"&gt;What Tori and Pendle have built together gives everyday on-chain users a way to access yield that used to sit exclusively behind institutional trading desks. It's verifiable in real time rather than taken on faith, and tradeable as either a locked-in fixed rate or leveraged floating exposure depending on what you're optimizing for. As with any yield strategy, none of this is risk-free or guaranteed. Returns depend on how the underlying arbitrage, carry, and spread strategies actually perform, which is exactly why the transparency tooling (Accountable's proof-of-solvency dashboard, RockawayX's independent monitoring, and the Sherlock/Nethermind audits) matters: it lets you evaluate that risk yourself.&lt;/p&gt;

&lt;p dir="ltr"&gt;If you want to explore trUSD or strUSD, you can find both pools directly on the Pendle app and decide which side of the yield trade fits what you're looking for.&lt;/p&gt;

&lt;hr&gt;
&lt;p dir="ltr"&gt;This article is intended for informational purposes only and does not constitute financial advice. Always do your own research before making any investment decisions.&lt;/p&gt;
</content>
    <author>
      <name>CoinGecko</name>
    </author>
    <url>https://www.coingecko.com/learn/pendle-tori-trusd-strusd-institutional-yield?locale=en</url>
    <summary>
Overview of Pendle x Tori Finance

Tori Finance brings institutional trading-desk returns on-chain, and Pendle lets you trade that yield as fixed or floating.


	Tori runs delta-neutral strategies...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135748</id>
    <published>2026-08-13T03:52:06Z</published>
    <updated>2026-08-13T07:54:52Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/top-agent-cards-ai-payments?locale=en"/>
    <title>Top Agent Cards for 2026</title>
    <content type="html">&lt;div aria-label="Summary" role="region" style="background-color: #F1F5F9; border-radius: 12px; padding: 1.5rem 1.75rem; margin: 2rem 0; border-left: 4px solid #4BCC00;"&gt;
&lt;h2 style="margin: 0px 0px 1rem; font-size: 1.25rem; color: #0F172A; font-weight: 700;"&gt;What Are Agent Cards?&lt;/h2&gt;

&lt;p style="font-size: 1rem; line-height: 1.6; color: #64748B; margin-bottom: 1.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Agent cards are scoped payment credentials that let an AI agent spend on a consumer's behalf without ever holding the consumer's real card number.&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;

&lt;ul style="margin: 0; padding-left: 1.5rem; color: #64748B; font-size: 0.95rem;"&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Visa, Mastercard, Amex, and Stripe&lt;/strong&gt; all launched their own agent card programs between 2025 and 2026, each with different rules on reusability, approval flow, and fees.&lt;/span&gt;&lt;/li&gt;
	&lt;li style="margin-bottom: 0.5rem;"&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Most purchases still require human approval&lt;/strong&gt; as of mid-2026 — agents aren't yet spending fully autonomously.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#64748B;"&gt;&lt;strong style="color:#334155;"&gt;Liability, security, and fee structures remain unresolved&lt;/strong&gt; across the industry, and a separate, more fragmented set of protocols (AP4M, x402, MPP, AP2) is emerging for business-to-business and machine-to-machine payments.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Top Agent Cards" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136244/content_Top_Agent_Cards.webp" style="width: 1200px; height: 628px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;AI agents can now research a purchase, compare options, and negotiate on your behalf — but for most of their history, they've hit a wall at checkout. Someone still had to type in a card number. That changed in 2025 and 2026, as major card networks and fintechs began issuing agent cards: payment credentials designed specifically for an autonomous AI agent to spend on a person's behalf, without ever handing over the person's real card details.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What Problem Do Agent Cards Solve?&lt;/h2&gt;

&lt;p dir="ltr"&gt;Handing an AI agent your actual card number creates three potential problems:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Merchant trust:&lt;/strong&gt; A merchant receiving a checkout request has no way to tell a legitimate AI agent acting on a real customer's behalf from a bot or bad actor impersonating one.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Consumer authorization:&lt;/strong&gt; There's no standard way to prove which agent is authorized, what it's allowed to buy, and how much it's allowed to spend — without a human approving every single transaction.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Accountability:&lt;/strong&gt; If an agent buys the wrong item, buys too much of something, or gets manipulated into an unwanted purchase, there's no established process for who's liable and how the transaction gets reversed.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;Agent cards address all three with one mechanism: a credential that's cryptographically scoped to a specific agent, a specific spending policy, and a specific consumer. That scoping is what lets a merchant verify the agent instead of guessing, defines exactly what and how much the agent can buy without a human approving each purchase, and ties every transaction back to a traceable consent record if something goes wrong.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Agent Cards Compared: Fees, Reusability, and Approval&lt;/h2&gt;

&lt;table border="1" cellpadding="5" cellspacing="5" style="width:100%;"&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Product&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Network/Issuer&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Card type&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Reusable?&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Approval required?&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Fees&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Visa Intelligent Commerce / Trusted Agent Protocol&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Visa (via issuing bank); layers onto OpenAI/Stripe's ACP inside ChatGPT&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Wraps whatever Visa credit, debit, or prepaid card the consumer already links&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Reusable, scoped to spending limits and an approved-merchant list&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Yes — consumer gets a notification to approve each purchase in early rollout&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;No separate consumer fee disclosed; standard Visa interchange applies. Commercial terms of the ChatGPT integration specifically are undisclosed&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Mastercard Agent Pay&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Mastercard (Citi and US Bank were first issuers)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Wraps an existing Mastercard credit or debit card via a tokenized "Agentic Token"&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Reusable by default — one token per agent, scoped at setup (e.g. "groceries only," a monthly cap); can also be issued single-use or time-limited&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Not a live per-tap prompt — consent and scope are set upfront; a separate "Verifiable Intent" record documents what was asked for&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;No separate consumer fee disclosed; standard Mastercard interchange applies&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;American Express ACE Developer Kit + Agent Purchase Protection™&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Amex&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Amex credit/charge cards&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Not yet publicly detailed&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Not yet publicly detailed&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;No separate consumer fee disclosed&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Stripe Issuing for Agents + Link&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Stripe (issued via bank partners, on Visa/Mastercard rails)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Prepaid/debit-style virtual cards drawing from a funded Issuing balance, not revolving credit&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Supports true single-use cards, capped to one merchant, one transaction, or a set amount&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Configurable by the developer/business issuing the card, not a fixed consumer prompt&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$0.10 per virtual card issued, plus 0.2% + $0.20 per transaction after the first $500K in volume (waived below that)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;AgentCard (Alchemy)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Built on Visa Intelligent Commerce&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Wraps whatever Visa card the consumer links&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Inherits Visa Intelligent Commerce's scoping options&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Inherits Visa's approval flow&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Not publicly disclosed&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;InFlow&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Built on Visa Intelligent Commerce&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Wraps whatever Visa card the business/consumer links&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Inherits Visa Intelligent Commerce's scoping options&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Inherits Visa's approval flow&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Not publicly disclosed&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p dir="ltr"&gt;Where a fee isn't publicly disclosed, that's because most of these products aren't separate card products with their own pricing — they're a tokenization/authorization layer sitting on top of a card the consumer already has, so the applicable fee is whatever that underlying card's rate already is. Reusability and approval flows vary by issuer configuration rather than being fixed to the product — the table reflects the default or most commonly described setup as of mid-2026.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;1. Visa Intelligent Commerce / Trusted Agent Protocol&lt;/h2&gt;

&lt;p dir="ltr"&gt;Tell ChatGPT you want wireless headphones under $150, and it finds a qualifying pair and completes the purchase — that's Visa's own example of what its integration with OpenAI enables. Visa's &lt;a href="https://developer.visa.com/capabilities/trusted-agent-protocol" rel="nofollow noopener" target="_blank"&gt;Trusted Agent Protocol&lt;/a&gt; issues a Verified Agent ID alongside a consent record signed by the consumer's card issuer, so a merchant can confirm both that the agent is legitimate and that the consumer actually authorized it. Inside ChatGPT specifically, this sits on top of an existing layer rather than replacing it: ChatGPT's checkout has run on the &lt;a href="https://developers.openai.com/commerce/guides/key-concepts" rel="nofollow noopener" target="_blank"&gt;Agentic Commerce Protocol (ACP)&lt;/a&gt; since September 2025, an open standard co-developed by OpenAI and Stripe, in which Stripe issues a Shared Payment Token (SPT) that lets ChatGPT initiate a payment without ever seeing the buyer's card details. Visa's &lt;a href="https://usa.visa.com/about-visa/newsroom/press-releases.releaseId.22496.html" rel="nofollow noopener" target="_blank"&gt;June 2026 integration&lt;/a&gt; adds Visa's own tokenization, agent identification, and fraud-monitoring infrastructure on top of that protocol, letting eligible cards use network-level tokenized credentials for agent-initiated purchases inside ChatGPT and OpenAI's Codex. By December 2025, Visa &lt;a href="https://usa.visa.com/about-visa/newsroom/press-releases.releaseId.21961.html" rel="nofollow noopener" target="_blank"&gt;reported&lt;/a&gt; hundreds of controlled, real-world agent-initiated transactions and projected millions of consumers would use agent checkout by the 2026 holiday season.&lt;/p&gt;

&lt;h4 dir="ltr"&gt;Features&lt;/h4&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Reusable&lt;/strong&gt;: Yes, within set spending limits and an approved-merchant list, until the consumer revokes access&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Approval&lt;/strong&gt;: In the early rollout, the agent sends a notification and the consumer approves each purchase before it's completed; Visa expects this to loosen as trust builds&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fees&lt;/strong&gt;: Rides on standard Visa interchange; the specific commercial terms of the Visa/ChatGPT integration haven't been disclosed&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;2. Mastercard Agent Pay&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://www.mastercard.com/us/en/news-and-trends/press/2025/april/mastercard-unveils-agent-pay-pioneering-agentic-payments-technology-to-power-commerce-in-the-age-of-ai.html" rel="nofollow noopener" target="_blank"&gt;Launched in April 2025&lt;/a&gt; with Microsoft, IBM, and Braintree as initial partners, &lt;a href="https://www.mastercard.com/us/en/business/artificial-intelligence/mastercard-agent-pay.html" rel="nofollow noopener" target="_blank"&gt;Agent Pay&lt;/a&gt; issues an "Agentic Token" — an extension of Mastercard's existing tokenization infrastructure (MDES) — that represents a cardholder's card, scoped to one agent and one commerce policy. Citi and US Bank were the first two issuers to give their cardholders access. Microsoft's Copilot Checkout, built on Agent Pay, launched to consumers in January 2026 in partnership with PayPal.&lt;/p&gt;

&lt;h4 dir="ltr"&gt;Features&lt;/h4&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Reusable&lt;/strong&gt;: Yes by default — one token per agent, scoped at issuance (e.g., category, monthly cap, day-of-week restrictions); can also be configured as single-use&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Approval&lt;/strong&gt;: No live per-transaction tap; consent and scope are set upfront, with a separate "Verifiable Intent" record capturing what the consumer actually asked for&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fees&lt;/strong&gt;: No separate consumer fee disclosed; standard Mastercard interchange applies; revocation of a specific agent's access is real-time through the issuer's app&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;3. American Express Agentic Commerce Experiences (ACE) Developer Kit&lt;/h2&gt;

&lt;p dir="ltr"&gt;Amex released its &lt;a href="https://www.businesswire.com/news/home/20260414231355/en/American-Express-Debuts-Agentic-Commerce-Experiences-ACE-Developer-Kit-and-Announces-Industry-First-Protection-for-Registered-Agent-Purchases" rel="nofollow noopener" target="_blank"&gt;Agentic Commerce Experiences (ACE)™ Developer Kit&lt;/a&gt; in April 2026, a framework covering five integrated services: agent registration (verifying which AI agents are trusted to transact), account enablement (letting a cardmember register a card for agentic use), intent intelligence (capturing purchase intent for authentication and disputes), tokenized payment credentials, and cart-context sharing for validation. Alongside it, Amex announced Amex Agent Purchase Protection™ — a pledge, described as an industry first, to protect cardmembers from charges caused by a registered AI agent's error, provided the agent transmitted authenticated purchase intent at the time of the transaction. This is the clearest explicit liability commitment among the major networks so far; Visa and Mastercard haven't published an equivalent guarantee.&lt;/p&gt;

&lt;h4 dir="ltr"&gt;Features&lt;/h4&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Reusable / approval flow&lt;/strong&gt;: Not yet publicly detailed beyond the five ACE services above&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fees&lt;/strong&gt;: No separate consumer fee disclosed&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;4. Stripe Issuing for Agents + Link&lt;/h2&gt;

&lt;p dir="ltr"&gt;Rather than creating a new type of credential, &lt;a href="https://stripe.com/blog/giving-agents-the-ability-to-pay" rel="nofollow noopener" target="_blank"&gt;Stripe extended its existing card-issuing infrastructure&lt;/a&gt;: agents get programmatic access to a consumer's Link wallet, and can be issued one-time-use virtual cards or a &lt;a href="https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens" rel="nofollow noopener" target="_blank"&gt;Shared Payment Token&lt;/a&gt; backed by the cards and bank accounts already saved in that wallet. This is a lower-friction option for merchants already built on Stripe. The trade-off: Visa and Mastercard's frameworks issue an identity credential — a Verified Agent ID or Agentic Token — that any merchant on their network can independently check against the issuer; Stripe's cards are recognized as legitimate within Stripe's own processing relationship with a merchant, not via a shared, cross-network identity standard.&lt;/p&gt;

&lt;h4 dir="ltr"&gt;Features&lt;/h4&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Reusable&lt;/strong&gt;: Configurable — supports genuine single-use cards capped to one merchant, one transaction, or a set dollar amount&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Approval&lt;/strong&gt;: Set by whichever business or developer is issuing the card, not a standard consumer-facing prompt&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fees&lt;/strong&gt;: $0.10 per virtual card issued, plus 0.2% + $0.20 per transaction after the first $500K in volume (waived below that) — this is a platform/developer cost, not a disclosed consumer surcharge&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;5. AgentCard (Alchemy)&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://www.prnewswire.com/news-releases/alchemy-introduces-agentcard-a-payments-and-identity-platform-for-ai-agents-built-on-visa-intelligent-commerce-302803786.html" rel="nofollow noopener" target="_blank"&gt;Alchemy's AgentCard&lt;/a&gt; integrates with Visa Intelligent Commerce to give an agent what the company describes as a complete identity-and-payment stack, provisioned through a single API. Alchemy's stated use cases — an agent booking travel, ordering groceries, or renewing a subscription for a consumer without that consumer touching a checkout screen — are the company's own examples of intended use rather than independently confirmed case studies; no third-party reporting confirms these specific scenarios happening at scale.&lt;/p&gt;

&lt;h4 dir="ltr"&gt;Features&lt;/h4&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Reusability / approvals / fees:&lt;/strong&gt; Inherits whatever Visa Intelligent Commerce offers underneath, since AgentCard is a layer on top rather than a separate credential&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;6. InFlow&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://www.inflowpay.ai/news/b2ai-is-live-inflow-to-launch-agent-native-commerce-infrastructure-with-implementation-of-visa-intelligent-commerce" rel="nofollow noopener" target="_blank"&gt;InFlow&lt;/a&gt; describes itself as "B2AI" infrastructure — Visa Intelligent Commerce supplies the underlying payment credentials and merchant acceptance, while InFlow layers on identity, multi-currency wallet functionality, and a policy-governed payments engine so a business can safely let agents transact on its behalf.&lt;/p&gt;

&lt;h4 dir="ltr"&gt;Features&lt;/h4&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Reusability / approvals / fees:&lt;/strong&gt; Same as above — inherits Visa Intelligent Commerce's mechanics; InFlow's own pricing isn't publicly disclosed&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;Are Agent Cards Safe?&lt;/h2&gt;

&lt;p dir="ltr"&gt;Agent cards solve the mechanical problem of letting an agent pay, but several key questions remain unresolved:&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Liability:&lt;/strong&gt; Who absorbs the cost when an agent makes an erroneous or unauthorized purchase? Amex is the clearest case so far, with its named Amex Agent Purchase Protection™ commitment; Visa and Mastercard haven't published an equivalent guarantee yet.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Security:&lt;/strong&gt; An agent's payment credential is a new attack surface — credential theft or prompt injection during an automated checkout flow could result in unauthorized spending in ways that don't map cleanly onto existing card-fraud playbooks.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Regulation:&lt;/strong&gt; Consumer protection law was written with a human pressing "buy" in mind. Regulators haven't yet settled how existing rules on authorization, disputes, and chargebacks apply when an AI agent is the one initiating the transaction.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fragmentation:&lt;/strong&gt; Visa, Mastercard, Amex, and various fintechs are each building their own agent-credential standard. Whether these converge into something interoperable, or remain a patchwork merchants have to integrate with individually, is still an open question.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Fee economics:&lt;/strong&gt; No network currently discloses a separate consumer-facing surcharge for agent-initiated purchases — but merchant-side fees, and merchant appetite for them, have already reshaped one major product. OpenAI began charging a 4% transaction fee to US Shopify merchants using ChatGPT's Instant Checkout starting January 26, 2026 (&lt;a href="https://www.pymnts.com/news/ecommerce/2026/shopify-merchants-to-pay-4percent-fee-on-sales-made-through-chatgpt-checkout/" rel="nofollow noopener" target="_blank"&gt;PYMNTS&lt;/a&gt;). By March 2026, OpenAI scaled back in-chat, product-listing checkout — reportedly after only about a dozen of the millions of eligible Shopify merchants had actually integrated, and while OpenAI still lacked its own system for collecting and remitting US sales tax — in favor of routing purchases through integrated retailer apps like Instacart, Target, and Expedia (&lt;a href="https://www.forbes.com/sites/jasongoldberg/2026/03/10/why-openais-checkout-retreat-spells-trouble-for-its-commerce-strategy/" rel="nofollow noopener" target="_blank"&gt;Forbes&lt;/a&gt;). The underlying open standard, the Agentic Commerce Protocol, is still active and still being developed for that app-based model; what's changed is the scope of direct, in-chat checkout, not the protocol itself. The commercial terms of Visa's newer card-network-level integration with ChatGPT remain undisclosed.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;What's Next for AI Agent Payments?&lt;/h2&gt;

&lt;p dir="ltr"&gt;Everything above is consumer-facing: a credential tied to one person's spending authority. A separate, faster-moving, and more fragmented landscape is emerging for a different problem: businesses and AI agents paying each other directly, often in stablecoins, at machine speed and often in fractions of a cent. Mastercard's &lt;a href="https://www.mastercard.com/us/en/business/artificial-intelligence/mastercard-agent-pay/agent-pay-for-machines.html" rel="nofollow noopener" target="_blank"&gt;Agent Pay for Machines&lt;/a&gt;, Coinbase's &lt;a href="https://github.com/coinbase/x402" rel="nofollow noopener" target="_blank"&gt;x402&lt;/a&gt;, Stripe's Machine Payments Protocol, and Google's &lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol" rel="nofollow noopener" target="_blank"&gt;AP2&lt;/a&gt; are all built by different companies, solve overlapping but distinct pieces of that problem, and aren't interchangeable with one another. None of them are cards — they're payment protocols and settlement rails, and untangling how they actually relate to each other deserves its own explainer.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;The Bottom Line&lt;/h2&gt;

&lt;p dir="ltr"&gt;By mid-2026, giving an AI agent a way to pay stopped being a novelty and became a real, if still early-stage, product category. The mechanics — tokenized credentials, issuer-signed consent, spending policies — are converging across networks even as the branding differs. The open questions now are less about whether agents can pay, and more about who's accountable when they get it wrong.&lt;/p&gt;
</content>
    <author>
      <name>CoinGecko</name>
    </author>
    <url>https://www.coingecko.com/learn/top-agent-cards-ai-payments?locale=en</url>
    <summary>
What Are Agent Cards?

Agent cards are scoped payment credentials that let an AI agent spend on a consumer&amp;#39;s behalf without ever holding the consumer&amp;#39;s real card number. 


	Visa, Mastercard, Amex...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135745</id>
    <published>2026-08-12T01:52:42Z</published>
    <updated>2026-08-12T07:48:18Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/regulatory-gap-asia-prediction-markets?locale=en"/>
    <title>The $43M Regulatory Gap in Asia’s Prediction Markets</title>
    <content type="html">&lt;div&gt;&lt;img alt="Regulatory Gap in Asia Prediction Markets" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136243/content_Regulatory_Gap_in_Asia_Prediction_Markets.webp" style="width: 1200px; height: 628px;"&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;As prediction markets scale globally, their legal treatment diverges sharply by region. The US and UK have absorbed them into existing derivatives and betting frameworks, while most of Asia lacks any comparable regulatory path, leaving billions in liquidity flowing offshore untaxed and unsupervised. This report by Tiger Research and Limitless examines why that institutional gap exists and what building a regulatory foundation for prediction markets in Asia would require.&lt;/em&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3&gt;Key Takeaways&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Asian markets lack the regulatory architecture needed to classify prediction markets, forcing regulators to leave them in a gray area.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Western jurisdictions leverage existing frameworks like derivatives regulation in the US or betting laws in the UK, which create clear entry paths for operators and establish regulatory oversight.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The absence of a framework in Asia does not suppress market activity, as evidenced by significant liquidity flowing into offshore platforms, but it prevents tax collection and consumer protection.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Building a regulatory foundation requires a public deliberative process to determine whether prediction markets should be treated as derivatives, gambling, or a new third category.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2&gt;1. Definition and the Importance of Classification&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prediction markets have value as information platforms, as Tiger Research's &lt;a href="https://reports.tiger-research.com/p/do-you-really-know-prediction-markets-eng" rel="noopener" target="_blank"&gt;earlier report on prediction markets&lt;/a&gt; established, but the law has never drawn a clean line between them and gambling.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That raises the question of how the law defines gambling, and in particular betting.&lt;/p&gt;

&lt;div&gt;&lt;img alt="Excerpt from Section 9 of the UK Gambling Act 2005 defining the subject matter of betting" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136204/content_1.webp" style="width: 1200px; height: 737px;"&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.legislation.gov.uk/ukpga/2005/19/section/9" rel="nofollow noopener" target="_blank"&gt;Section 9 of the UK’s Gambling Act 2005&lt;/a&gt; broadly defines the subject matter of betting as follows, and brings any such activity within the scope of gambling regulation once monetary value attaches to it.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;the outcome of a race, competition or other event or process,&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;the likelihood of anything occurring or not occurring, or&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;whether anything is or is not true.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under this legal definition, prediction markets attach economic value to the outcome of a specific event or the determination of a fact, which means they share much of their structural core with betting, the central element of gambling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The core of the regulatory debate ultimately comes down to a question of definition: whether to 1) bring prediction markets within the traditional gambling regulatory framework, 2) reclassify them under a financial architecture such as derivatives, or 3) establish them as an independent category through separate legislation.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;2. The West: How Institutional Pathways Produced Different Outcomes&lt;/h2&gt;

&lt;p&gt;Compared to Asia, Western jurisdictions have a more permissive stance toward prediction markets, but not because of a cultural tolerance for gambling. It reflects the availability of institutional architecture that allows them to bypass a direct confrontation with gambling law. The main pathways were as follows.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;United States&lt;/strong&gt;: Prediction markets were classified as derivatives (swaps) under the Commodity Exchange Act and brought within the existing registration framework.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;United Kingdom&lt;/strong&gt;: The market was accommodated within a general-purpose “betting intermediary” licensing regime.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;European Union&lt;/strong&gt;: Where contracts are classified as financial instruments, a binary options ban applies; where that classification is avoided, strict national gambling laws present a second barrier.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The consistent pattern is that institutional incorporation was only possible in jurisdictions that possessed an alternative regulatory framework, derivatives law or a flexible licensing regime, independent of gambling statutes.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;2.1. United States: Extending the Definition of Derivatives&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The United States accommodated prediction markets not by endorsing the gambling framing but by applying the existing contract structure of the Commodity Exchange Act (CEA) in a purposeful way.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Commodity Futures Modernization Act of 2000 (CFMA)&lt;/strong&gt;: Established the foundation through an open-ended definition of “excluded commodity,” which allowed non-financial variables such as election outcomes and weather events to be classified alongside conventional commodities such as crude oil.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Dodd-Frank Act of 2010&lt;/strong&gt;: Gave the CFTC two critical powers:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;
		&lt;p&gt;Exclusive federal jurisdiction over event contracts.&lt;/p&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;p&gt;The authority under Rule 40.11 to prohibit individual contracts related to terrorism, assassination, war, and gaming.&lt;/p&gt;
		&lt;/li&gt;
	&lt;/ol&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither statute was designed with prediction markets in mind, but together they created the legal basis for treating such contracts as financial agreements rather than gambling. They also established a centralized regulatory counterparty in the CFTC, replacing what would otherwise have been a fragmented process of state-by-state lobbying.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The legal architecture that accumulated over time produced a market ordered around licensed entities.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In November 2020, Kalshi secured Designated Contract Market (DCM) status, allowing it to sell a broad range of event contracts to retail investors. Polymarket, after a 2022 enforcement action, moved toward regulatory compliance through its 2025 acquisition of licensed exchange QCEX.&lt;/p&gt;

&lt;h3&gt;2.2. United Kingdom: Incorporation Through a General Licensing Framework&lt;/h3&gt;

&lt;p&gt;Rather than treating prediction markets as an extension of derivatives, the UK approached them as a form of betting and used the existing Gambling Act 2005 to accommodate them within the regulatory perimeter. Three provisions were particularly important.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Section 9&lt;/strong&gt;: Defines betting broadly enough to provide a flexible legal foundation for prediction markets.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Section 13&lt;/strong&gt;, “betting intermediary”: Captures the structural feature of prediction markets precisely, as they match contracts between users rather than taking direct positions themselves.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Section 65(4)&lt;/strong&gt;: Allows the licensing categories to be adjusted by ministerial order, giving the framework the capacity to absorb new market models without separate legislation.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In February 2026, the Gambling Commission clarified that prediction market platforms fall within the “betting intermediary” category and must obtain the corresponding license. Rather than a blanket prohibition, this constituted a clearly defined entry path, with strict penalties for unlicensed operation on one side and an open registration window on the other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Despite this established framework, the major global platforms have been cautious about entering the UK market, for reasons rooted in their US litigation strategy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both Kalshi and Polymarket have staked considerable legal argument on the position that prediction contracts are financial derivatives rather than gambling. Obtaining a UK “betting intermediary” license would formally designate them as gambling operators, which would undermine their legal position in ongoing US proceedings.&lt;/p&gt;

&lt;div&gt;&lt;img alt="Matchbook Predictions" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136205/content_2.webp"&gt;&lt;/div&gt;

&lt;p&gt;This gave the UK a market environment shaped differently from the global standard, one that in practice created ideal conditions for UK-local operators to build their business. Matchbook, an existing betting exchange, drew on its betting intermediary license to launch “Matchbook Predictions” in January 2026, and Versus, a newer entrant, obtained a UKGC general betting license and launched its own prediction market.&lt;/p&gt;

&lt;h3&gt;2.3. Europe: Dual Closure Under Financial and Gambling Regulation&lt;/h3&gt;

&lt;p&gt;The regulatory landscape on the European continent combines financial regulation under MiFID II with individual national gambling laws to form a two-layer barrier.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Any contract classified as a financial instrument immediately encounters the binary options prohibition.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Any contract that escapes that classification then faces strict national gambling definitions.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In July 2026, the European Securities and Markets Authority (ESMA) made the financial regulation dimension explicit in an official statement, which stated that the binary payout structure of event contracts falls squarely within the scope of the binary options ban. This effectively closed the financial product route into the European market.&lt;/p&gt;

&lt;p&gt;Prediction markets face equally difficult conditions under gambling law. France is the clearest illustration: the Autorité Nationale des Jeux (ANJ) implemented a phased enforcement escalation that concluded by classifying prediction market operations as illegal gambling.&lt;/p&gt;

&lt;div&gt;&lt;img alt="Prediction Market Regulation 2026" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136206/content_3.webp"&gt;&lt;/div&gt;

&lt;p&gt;The one exception is Gibraltar. In July 2026, Gibraltar designed a dedicated legislative framework, the Prediction Market Regulations, that defines prediction markets as a distinct “third category.” This is a strategy of creating a new pathway rather than working within the existing frameworks, but as Gibraltar is not an EU member state, the approach has the limitation of not being subject to mutual recognition within Europe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The closed structure in Europe is not necessarily permanent, however. The European Commission has currently made the legal treatment of prediction markets a formal item under review as part of its Markets in Crypto-Assets Regulation (MiCA) review process. Depending on the conclusions of the report due in June 2027, the door remains open to a shift toward a new institutional framework for accommodating prediction markets.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;3. Asia: The Present State of Institutional Absence&lt;/h2&gt;

&lt;p&gt;Asian jurisdictions have two structural obstacles that do not exist in the same form in Western markets.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;State-controlled gambling licensing&lt;/strong&gt;: There is no general-purpose licensing framework capable of accommodating private sector innovation in the manner of the UK’s “betting intermediary” category. Licensing authority is allocated through state-controlled monopoly structures.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Constraints on financial product classification&lt;/strong&gt;: The financial laws of South Korea and Japan use closed, positive-list definitions of underlying assets, which makes the kind of broad reclassification the US achieved through the concept of “non-financial contingent events”, legally unavailable.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;As the Western cases demonstrate, whether a prediction market takes hold depends on which path defines it, either existing financial product architecture or gambling regulation. The fundamental constraint facing Asian markets, however, is that neither classification system offers an institutional foundation capable of accommodating this new business model.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Legal betting markets already exist across Asia, in Japan, South Korea, Singapore, and Hong Kong, so any view that denies the market on grounds of emotional resistance or cultural specificity diverges considerably from the actual situation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The central question, then, is not whether the market is socially accepted, but how a regulatory foundation could be designed to accommodate this new market model.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;3.1. South Korea: Absent Architecture and Criminal Enforcement as the Default&lt;/h3&gt;

&lt;p&gt;Domestic discussion of prediction markets has not reached the stage of debating their legal status or social value. The existing regulatory framework treats them as speculative products by default, which cuts off substantive deliberation before it can begin.&lt;/p&gt;

&lt;p&gt;The relevant statutory provisions are already in conflict with how prediction markets operate. The Act on Special Cases Concerning Regulation and Punishment of Speculative Acts covers “prize businesses,” defined as businesses that distribute money or property in exchange for correctly predicting the outcome of a specific event. This is structurally similar to what prediction markets do.&lt;/p&gt;

&lt;p&gt;The legal question is not fully resolved, however. Prize business law presupposes a casino-style structure in which the operator directly controls the stake pool. Modern platforms such as Polymarket use a matching architecture in which the operator facilitates contracts between users rather than holding funds directly. No judicial interpretation has yet addressed how this structural difference would be treated under existing statutes.&lt;/p&gt;

&lt;p&gt;The financial regulatory route is also closed. The Capital Markets Act uses a positive-list approach to defining underlying assets. While financial indicators are covered, there is no explicit basis for classifying non-financial variables such as election outcomes as derivatives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because the right to operate betting businesses is in any case reserved for state-monopoly entities, private platforms cannot enter the market through this channel either.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;3.2. Japan: Sophisticated Workarounds and the Limits of an Informal Practice&lt;/h3&gt;

&lt;div&gt;&lt;img alt="Structure of Prediction Markets in Japan" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136207/content_4.webp"&gt;&lt;/div&gt;

&lt;p&gt;Prediction markets in Japan have followed a pattern of regulatory workaround rather than institutional incorporation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The method local platforms have adopted resembles the three-shop system, a mechanism that originated in the pachinko industry, in that it physically severs the direct cash flow within the operating process.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Platform operator: &lt;/strong&gt;The platform blocks direct cash deposits and instead runs a free reward model based on activities such as watching advertisements. It also eliminates any cash exchange function within the platform itself, which removes “gain or loss through property” as a defining element of gambling.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Reward issuer: &lt;/strong&gt;A third party independent of the platform issues the reward, such as a gift certificate, for a successful prediction. Separating the platform operator from the issuing entity removes the legal risk of the operator becoming a direct party to the exchange of rewards for cash.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;External cash-out market:&lt;/strong&gt; A peer-to-peer transfer market and affiliated merchants outside the platform form the ecosystem where the reward is actually spent or converted into cash. Because the operating platform does not participate in this distribution process, the structure remains independent and avoids meeting the legal elements of the offense of gambling.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This is ultimately an informal commercial practice that emerged in a regulatory grey zone rather than a structure built on firm legal footing. Global platforms are either blocked from the Japanese market or operating under strict constraints through cryptocurrency exchanges. The substantive level of policy discussion in Japan is not materially different from that in South Korea.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;4. What Asian Markets Are Forgoing&lt;/h2&gt;

&lt;p&gt;The absence of institutional architecture in Asia does not mean that the market does not exist. More than $52 million (approximately ₩72.8 billion) in liquidity flowed into prediction markets tied to South Korea’s June 2026 local elections, demonstrating that user participation in offshore platforms has already crossed a meaningful threshold even without a domestic regulatory framework. These transactions fall outside the tax system, consumer protection mechanisms are absent, and market integrity oversight is impossible.&lt;/p&gt;

&lt;p&gt;Regulators face three available responses:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Extend existing criminal statutes to impose sanctions (the current South Korean approach).&lt;/strong&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Use technical means to block platform access entirely (the Singapore model).&lt;/strong&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Bring prediction markets within the regulatory perimeter, capturing tax revenue and supervisory authority in the process.&lt;/strong&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only the third option can precisely achieve the practical regulatory objectives of tax collection, consumer protection, and market transparency.&lt;/p&gt;

&lt;p&gt;Global annual transaction volume in prediction markets is projected to exceed $200 billion in 2026. Assuming conservatively that South Korean domestic users account for 1% of that volume, transaction volume attributable to any given Asian market would reach $2 billion. Depending on the tax model adopted, that would generate estimated new annual tax revenue of between $4 million and $43.2 million.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The more important point is not the size of these figures in isolation. Without regulatory accommodation, these transactions will not disappear; they will continue in an unregulated environment. Regulators will forgo both tax and supervisory authority while continuing to bear administrative and criminal enforcement costs.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;5. Reframing the Regulatory Approach to Prediction Markets&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;As noted above, the institutional accommodation of prediction markets depends on which existing regulatory architecture, gambling or financial product, is used to define them.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Gambling regulatory framework&lt;/strong&gt;: This path adapts existing Asian models for state-approved speculative activities, such as sports betting pools or integrated resort casinos. It is consistent with the state monopoly structure and can be justified through the public fund rationale, but it has inherent limitations in accommodating the business models of private platforms.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Derivatives regulatory framework&lt;/strong&gt;: This represents the most operationally viable path with the least legal friction. It would involve fine-tuning the definition of financial products, drawing on precedents such as the acceptance of non-financial variables under Japan’s Financial Instruments and Exchange Act (FIEA) or on the language of “economic risk” in Korea’s Capital Markets Act. This approach avoids direct conflict with existing state gambling monopolies while pre-empting concerns about speculation and market manipulation by limiting eligible underlying assets to publicly verifiable statistical variables.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;Creation of a standalone third category&lt;/strong&gt;: This involves designing a dedicated legislative framework, as Gibraltar has done. It allows for the most precise regulatory calibration but carries the highest legislative and political costs, given the absence of precedent.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is worth noting that this is a long-term institutional undertaking rather than a near-term outcome. In many Asian jurisdictions, basic public discourse on the legal identity of prediction markets has not yet formed. Securing the legislative momentum necessary for any of these paths requires first establishing a public deliberative process and building broad social consensus on the value of prediction markets.&lt;/p&gt;

&lt;p&gt;One point worth noting is that prediction markets remain an unfamiliar concept across Asia, and no entity has taken the lead in shaping discourse around the prediction market. As a result, even the most basic agenda items have yet to be discussed.&lt;/p&gt;

&lt;div&gt;&lt;img alt="Core Agenda for Prediction Markets" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136208/content_5.webp"&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Precisely analyzing how prediction markets function overall requires a formal public forum, such as a public-private roundtable, built around the core issues raised above, and establishing one is now an urgent priority.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even once that level of discussion is set, an entity capable of carrying it onto the actual policy table is essential. Specialized research organizations such as Limitless Research demonstrate data-driven forecasting models in practice, and in doing so play a central role in establishing the market’s value system and shaping public discourse.&lt;/p&gt;

&lt;p&gt;The process by which organizations with specialized analytical capacity, beginning with &lt;a href="https://www.limitless-research.org/" rel="nofollow noopener" target="_blank"&gt;Limitless Research&lt;/a&gt;, demonstrate the reliability and public value of their data will be the decisive catalyst that elevates the fragmented discourse on prediction markets into a core agenda item within the institutional system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prediction markets carry distinct benefits and risks, though reaching an institutional conclusion before that debate has even taken place would be a hasty approach that overlooks the core issue. What is needed now is the constructive discourse that has not yet occurred.&lt;/strong&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="https://reports.tiger-research.com/subscribe?utm_source=coingecko&amp;amp;utm_medium=post&amp;amp;utm_campaign=" rel="noopener" target="_blank"&gt;Dive deep into Asia’s Web3 market with Tiger Research.&lt;br&gt;
Be among the 23,000+ pioneers who receive exclusive market insights.&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3&gt;Disclaimer&lt;/h3&gt;

&lt;p&gt;This report was partially funded by Limitless. It was independently produced by our researchers using credible sources. The findings, recommendations, and opinions are based on information available at publication time and may change without notice. We disclaim liability for any losses from using this report or its contents and do not warrant its accuracy or completeness. The information may differ from others’ views. This report is for informational purposes only and is not legal, business, investment, or tax advice. References to securities or digital assets are for illustration only, not investment advice or offers. This material is not intended for investors.&lt;/p&gt;

&lt;h3&gt;Terms of Usage&lt;/h3&gt;

&lt;p&gt;Tiger Research allows the fair use of its reports. ‘Fair use’ is a principle that broadly permits the use of specific content for public interest purposes, as long as it doesn’t harm the commercial value of the material. If the use aligns with the purpose of fair use, the reports can be utilized without prior permission. However, when citing Tiger Research’s reports, it is mandatory to 1) clearly state ‘Tiger Research’ as the source, 2) include the Tiger Research &lt;a href="https://drive.google.com/drive/folders/1wDipGyey04EqFO6yZU90ZIe-jsKCDaqR" rel="nofollow noopener" target="_blank"&gt;logo&lt;/a&gt;. If the material is to be restructured and published, separate negotiations are required. Unauthorized use of the reports may result in legal action.&lt;/p&gt;
</content>
    <author>
      <name>Tiger Research</name>
    </author>
    <url>https://www.coingecko.com/learn/regulatory-gap-asia-prediction-markets?locale=en</url>
    <summary>

As prediction markets scale globally, their legal treatment diverges sharply by region. The US and UK have absorbed them into existing derivatives and betting frameworks, while most of Asia lacks...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135746</id>
    <published>2026-08-07T03:08:12Z</published>
    <updated>2026-08-07T03:42:12Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/crypto-hacks-and-exploits-2016-to-2026?locale=en"/>
    <title>Crypto Hacks/Exploits Through The Years 2016-2026</title>
    <content type="html">&lt;h1 dir="ltr"&gt;&lt;img alt="crypto hacks chart 1" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136209/content_crypto_hacks_chart_1.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/h1&gt;

&lt;p dir="ltr"&gt;Since 2016, DeFi projects and crypto exchanges have lost over &lt;strong&gt;$14.27B&lt;/strong&gt; to hacks and exploits. This figure is conservative — it does not account for individual wallet hacks or the secondary damage caused by an erosion of trust and liquidity across the ecosystem.&lt;/p&gt;

&lt;p dir="ltr"&gt;2022 remains the single costliest year on record at &lt;strong&gt;$2.77B&lt;/strong&gt;, narrowly ahead of 2021's &lt;strong&gt;$2.66B&lt;/strong&gt;. 2026 has logged &lt;strong&gt;164&lt;/strong&gt; separate incidents through early August, more than any full prior year &lt;strong&gt;(2025's 97 is the next-highest)&lt;/strong&gt;. Some of that is likely better detection and tracking rather than a stark increase in attacks, though anecdotally, the pace has felt faster in recent years too with talks of AI being major contributing factors.&lt;/p&gt;

&lt;p dir="ltr"&gt;2023 and 2024 saw a decline in hacks amid the post-FTX bear market, before a sharp uptick in 2025 as crypto recovered, driven in large part by the infamous&lt;strong&gt; $1.4B&lt;/strong&gt; North Korea-linked hack of crypto exchange Bybit.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;2026 Hacks In a Nutshell&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="crypto hacks chart 2" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136210/content_crypto_hacks_chart_2.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;In 2026, April alone accounted for &lt;strong&gt;$644.9M&lt;/strong&gt;, more than half of everything lost to hacks in the first seven months of the year, and it happened almost consecutively one after the other. Drift Trade was hit first on April 1 &lt;strong&gt;($295M),&lt;/strong&gt; then Kelp followed just over two weeks later on April 18 &lt;strong&gt;($293M)&lt;/strong&gt;. Though hit by separate hacking groups, both exploiters were allegedly linked to North Korean state hackers.&lt;/p&gt;

&lt;p dir="ltr"&gt;Of these two hacks, the Kelp exploit caused structural damage throughout DeFi. Attackers found a weakness in Kelp's LayerZero bridge, minted roughly &lt;strong&gt;$293M&lt;/strong&gt; of unbacked rsETH out of thin air, and dumped it straight into Aave as collateral to borrow real assets. Aave's TVL fell from &lt;strong&gt;$25.93B &lt;/strong&gt;on April 17 to &lt;strong&gt;$21.80B&lt;/strong&gt; just two days later, and the damage didn't stop there. By July 21, Aave's TVL had continued sliding to &lt;strong&gt;$14.40B,&lt;/strong&gt; a&lt;strong&gt; 44.5%&lt;/strong&gt; decline from its pre-hack level, part of a broader wipeout of trust across DeFi lending that has yet to reverse.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;What Happens to Governance Tokens Post-Hack?&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="crypto hacks chart 3" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136211/content_crypto_hacks_chart_3.webp" style="width: 1200px; height: 1200px;"&gt;&lt;/div&gt;

&lt;p&gt;Hacks create a second category of financial damage that falls on the holders of the affected protocol's governance token, who lose money on the market's reaction even if they had no direct exposure to the exploit itself. Step Finance is the worst-case example: its exploit left the protocol insolvent, Step Finance has since shut down entirely, and STEP is down &lt;strong&gt;99.4%&lt;/strong&gt;.&lt;/p&gt;

&lt;p dir="ltr"&gt;Drift* and Resolv are still operating, but their tokens haven't recovered either: DRIFT is down&lt;strong&gt; 80.2%&lt;/strong&gt; since its April 1 exploit, and RESOLV is down &lt;strong&gt;71.7%&lt;/strong&gt; since March. BONK, the most recent hack on this list (July 6), shows that market reaction can be costlier than the exploit itself: BonkDAO's treasury was drained of &lt;strong&gt;$21.3M &lt;/strong&gt;through a malicious governance vote, yet BONK's token lost &lt;strong&gt;$138.65M &lt;/strong&gt;in market capitalization since.&lt;/p&gt;

&lt;p dir="ltr"&gt;Note: Drift has renamed to Velocity and has not yet relaunched their platform. It remains to be seen if the platform can bounce back from their massive hack&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Methodology&lt;/h3&gt;

&lt;p dir="ltr"&gt;Yearly totals (2016-2026) combine the DeFiWatch REKT Database (2018-2022) with DeFiLlama's hack tracker (2023-2026, snapshot taken August 5, 2026); 2026 figures are year-to-date through August 3-5, 2026, and not a complete-year total. &lt;/p&gt;

&lt;p dir="ltr"&gt;Monthly 2026 breakdowns are sourced entirely from the DeFiLlama snapshot; a second Verus-Ethereum Bridge incident in July ($7.53 million) has been folded into that month's "Others" total rather than shown separately, since May's Verus-Ethereum Bridge incident is the one specifically named in this analysis.&lt;/p&gt;

&lt;p dir="ltr"&gt;Governance token market cap figures use CoinGecko daily price and market cap data, with a pre-hack baseline calculated as the 7-day average market cap ending the day before each hack, compared against the most recent available data (August 4, 2026). Hacked protocols without an independently-tradeable governance token of their own (including exchanges, bridges without native tokens, and hardware wallets) are excluded from the token-level analysis (chart 3). KernelDAO's KERNEL was used in place of rsETH for the Kelp exploit specifically because this analysis measures governance-token market impact, not TVL or redemption flows.&lt;/p&gt;

&lt;p dir="ltr"&gt;If you cite these insights, we would appreciate a link credit to this article on CoinGecko, which allows us to keep supplying you with useful data-led content.&lt;/p&gt;

&lt;p dir="ltr"&gt;Related reading:&lt;a href="https://www.coingecko.com/research/publications/crypto-hacks-exploits-by-year" target="_blank"&gt; Which Was the Worst Year for Crypto Hacks and Exploits?&lt;/a&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;This study is for illustrative and informational purposes only, and is not financial advice.&lt;/p&gt;

&lt;p dir="ltr"&gt;Appendix: Raw Data&lt;/p&gt;

&lt;table&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Year&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Total Lost&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Incidents&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2016&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$60M&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;n/a&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2017&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$157.7M&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;n/a&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2018&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.13B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;n/a&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2019&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$390M&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;n/a&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2020&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$570M&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;17&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2021&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$2.66B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;71&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2022&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$2.77B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;67&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2023&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.52B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;97&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2024&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.27B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;94&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2025&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$2.55B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;97&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;2026 (YTD)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$1.2B&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;164&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p dir="ltr"&gt;The number of hacking incidents pre 2020 is marked as n/a as a reliable count of incidents cannot be established.&lt;br&gt;
 &lt;/p&gt;
</content>
    <author>
      <name>Loke Choon Khei</name>
    </author>
    <url>https://www.coingecko.com/learn/crypto-hacks-and-exploits-2016-to-2026?locale=en</url>
    <summary>

Since 2016, DeFi projects and crypto exchanges have lost over $14.27B to hacks and exploits. This figure is conservative — it does not account for individual wallet hacks or the secondary damage ...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/102135738</id>
    <published>2026-08-07T01:59:12Z</published>
    <updated>2026-08-07T07:24:38Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/sec-defi-curators-securities-regulation?locale=en"/>
    <title>SEC Eyes DeFi Risk Curators as $25.9B Market Faces Scrutiny</title>
    <content type="html">&lt;div&gt;&lt;img alt="Risk Curators Regulatory Scrutiny" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136212/content_Risk_Curators_Regulatory_Scrutiny.webp" style="width: 1200px; height: 628px;"&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;On July 22, 2026, SEC Commissioner Hester Peirce issued a statement titled "Headstands and Summervaults," identifying on-chain vaults and lending strategies as potential subjects of existing securities law. This report by Tiger Research examines the parties likely to be affected and how the industry is responding.&lt;/em&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3&gt;Key Takeaways&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Applied broadly, the legal reasoning could extend beyond vaults and curators to discretionary products generally, a segment representing approximately $25.9 billion in TVL.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The SEC is not targeting code that operates outside its reach. It is targeting the human actors who exercise discretion over that code.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Teams building compliance-oriented DeFi protocols, including Steakhouse Financial and Maple Finance, have been anticipating and preparing for exactly this kind of regulatory attention.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Historical precedent suggests that only two outcomes have proven durable: full registration under existing securities law, or the creation of new statutory exemptions through legislation.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The responses currently available to market participants are, at best, interim measures. Only curators with sufficient capital to build post-action compliance infrastructure will retain their market position. Smaller curators without those resources will be displaced.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;1. The SEC Is Targeting Discretion, Not Code&lt;/h2&gt;

&lt;div&gt;&lt;img alt="Crypto Vaults and Lending Strategies" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136132/content_1.webp" style="width: 1200px; height: 1049px;"&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;On July 22, 2026, SEC Commissioner Hester Peirce issued &lt;a href="https://www.sec.gov/newsroom/speeches-statements/peirce-statement-crypto-vaults-lending-strategies-072226" rel="nofollow noopener" target="_blank"&gt;a statement titled “Headstands and Summervaults,”&lt;/a&gt; arguing that&lt;a href="https://www.sec.gov/files/dlt-framework.pdf" rel="nofollow noopener" target="_blank"&gt; the Howey Test&lt;/a&gt;, the legal standard established by a 1946 Supreme Court decision, could be applied to on-chain vaults and lending strategies under existing securities law.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Howey Test evaluates the economic substance of how capital is raised and managed. It does not require new legislation or regulatory rulemaking to be applied. It is a fact-based standard that has been consistently applied to new financial instruments regardless of their technical form. An on-chain vault or decentralized lending strategy, however sophisticated its blockchain architecture, could qualify as an investment contract under securities law if its structure satisfies the test’s three core criteria. When all three are met, the product is classified as a security.&lt;/p&gt;

&lt;div&gt;&lt;img alt="Howey Test" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136133/content_2.webp" style="width: 1200px; height: 1256px;"&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The statement carries no immediate enforcement authority, as it reflects the view of a single commissioner. It is, however, the first instance in which the SEC Crypto Task Force’s developing framework has been mapped onto specific products, and it has prompted concern among relevant market participants.&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
&lt;a href="https://www.coingecko.com/en/coins/morpho" target="_blank"&gt;MORPHO&lt;/a&gt;, the token of the vault infrastructure protocol Morpho, fell roughly 5% immediately after the announcement.&lt;/p&gt;

&lt;p&gt;If this legal reasoning were to be applied in practice, the regulatory target would almost certainly not be the smart contracts that power the vaults. It would be the risk curators and the DeFi actors who exercise real discretion over how assets are deployed. The vault infrastructure that Morpho has built is a technical instrument for asset management, and code with no controlling party is not a natural subject of direct regulatory sanction.&lt;/p&gt;

&lt;h2&gt;2. Why Curators Are the Target&lt;/h2&gt;

&lt;div&gt;&lt;img alt="Vault Deposit Structure" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136134/content_3.webp" style="width: 1200px; height: 657px;"&gt;&lt;/div&gt;

&lt;p&gt;Curators determine how much capital is allocated across a vault and what level of risk that capital is exposed to. In that sense, they exercise genuine discretion over depositors’ assets. The vault itself is simply a tool through which curators manage those assets. Most vaults are built as smart contracts deployed without admin keys or upgrade permissions, meaning even the original deployer cannot halt their operation or alter their logic.&lt;/p&gt;

&lt;p&gt;Financial regulation, as it has historically operated, presupposes the existence of an identifiable legal entity capable of receiving a subpoena, having assets frozen, or complying with a cease-and-desist order. Immutable code with no controlling party has no such administrator.&lt;/p&gt;

&lt;p&gt;The regulatory consequence is that enforcement attention has moved from code to discretion. Earlier cases involving Tornado Cash and Uniswap Labs illustrate the pattern.&lt;/p&gt;

&lt;p&gt;The Tornado Cash case turned on whether immutable code could constitute sanctionable property. The Uniswap Labs case asked whether the company operating a non-custodial interface had effectively functioned as an unregistered broker or exchange. Both cases focused on the legal status of code and the act of running a service. Neither reached the question of investment discretion as a basis for securities liability.&lt;/p&gt;

&lt;div&gt;&lt;img alt="Tornado Cash and Uniswap Labs cases" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136135/content_4.webp" style="width: 1200px; height: 845px;"&gt;&lt;/div&gt;

&lt;p&gt;This case is different. The operative question is no longer who built the protocol but who selects which assets a depositor’s capital is exposed to, how much is allocated to each market, and how interest rate conditions and collateral parameters are adjusted to influence returns. Consider a curator that selects specific lending markets from a broader set, withdraws capital when risk rises, and shifts weight toward higher-yielding markets. Depositors place their capital with that curator because they trust its judgment, not because they trust the underlying smart contract. Returns and losses flow directly from the curator’s decisions. That pattern of professional discretion exercised on behalf of depositors is precisely what gives rise to the “expectation of profits from the efforts of others” that the Howey Test identifies as a defining feature of an investment contract.&lt;/p&gt;

&lt;p&gt;The curator is the most clearly identifiable party exercising that discretion within the on-chain vault ecosystem. That is why it sits at the center of the regulatory frame.&lt;/p&gt;

&lt;h2&gt;3. Which Categories Fall Within Scope&lt;/h2&gt;

&lt;p&gt;If this legal reasoning is applied broadly, its reach does not stop at risk curators. The SEC’s analytical focus is on who is making investment decisions on behalf of users.&lt;/p&gt;

&lt;p&gt;Liquid restaking operators decide which validators or actively validated services (AVSs) receive asset allocations. Yield aggregators compare returns and risk across lending and liquidity markets and move capital accordingly. On-chain asset allocation services adjust holdings and weights over time. Where a specific team or operator is making ongoing decisions about asset selection and reallocation, the function is materially similar to that of a curator.&lt;/p&gt;

&lt;p&gt;The relevant scope is therefore wider than the vault product category alone. Whether any specific service falls within it depends on who, within that service, is selecting assets, changing allocations, and controlling exposure to loss. Aggregating potential exposure across categories defined by that criterion produces a total &lt;a href="https://www.coingecko.com/learn/total-value-locked?locale=en" target="_blank"&gt;TVL&lt;/a&gt; of approximately $25.9 billion.&lt;/p&gt;

&lt;div&gt;&lt;img alt="DeFi TVL Exposed to Discretionary Control" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136136/content_5.webp" style="width: 1200px; height: 901px;"&gt;&lt;/div&gt;

&lt;p&gt;The legal standard is unlikely to be applied uniformly across all of these participants. Its intensity will vary with the structure of the discretion involved.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;At higher risk,&lt;/strong&gt; where regulatory scrutiny would be most intense, are structures in which discretion is exercised opaquely in ways depositors cannot verify on-chain in real time, such as off-chain delegation and undercollateralized lending.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;At medium risk&lt;/strong&gt; are standard vault curators and liquid restaking structures that exercise allocation discretion, with capital flows recorded transparently on-chain and constrained by governance mechanisms such as timelocks and guardian roles.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;strong&gt;At lower risk,&lt;/strong&gt; and closest to compliance, are immutable protocol deployments with no controlling party, and financial products already registered under securities law.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The parties most accurately positioned to assess their own legal exposure are the operators themselves. This is why curators and adjacent market participants began developing tailored responses, including investor qualification restrictions, third-party compliance arrangements, and formal private placement exemptions, before the commissioner’s statement was issued.&lt;/p&gt;

&lt;h2&gt;4. Four Design Approaches to Reducing Regulatory Exposure&lt;/h2&gt;

&lt;div&gt;&lt;img alt="Approaches to reduce regulatory exposure" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136137/content_6.webp" style="width: 1200px; height: 1596px;"&gt;&lt;/div&gt;

&lt;p&gt;The responses developed to date do not resolve the underlying legal question. They are focused primarily on reducing the probability of regulatory application and limiting the legal liability of the operating entity.&lt;/p&gt;

&lt;p&gt;Two analytical axes separate the approaches: whether a recognized legal exemption has been obtained, and whether actual asset allocation authority has changed. Measured against those criteria, the market’s current responses fall into four types.&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;
	&lt;p&gt;Direct investor qualification: advance verification and sales restricted to accredited or qualified investors.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Established regulated distribution channels: routing through exchanges or regulated entities that have completed KYC on their users.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Collateral-level whitelisting: controlling permitted collateral assets through coordination with asset issuers.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Structural separation of permissioned lending and permissionless yield tokens: bifurcating institutional lending execution from retail-accessible yield exposure.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;4.1 Investor Qualification: Grove and GLDY&lt;/h3&gt;

&lt;div&gt;&lt;img alt="Investor qualification by case" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136138/content_7.webp" style="width: 1200px; height: 1588px;"&gt;&lt;/div&gt;

&lt;p&gt;The most direct way to reduce regulatory exposure is to control investor eligibility before any capital is accepted.&lt;/p&gt;

&lt;p&gt;Steakhouse Financial launched Grove in June 2025 as an institutional-only on-chain capital allocation channel. Access is restricted to institutional RWA investors who have passed advance qualification screening.&lt;/p&gt;

&lt;p&gt;Orca, in May 2026, partnered with Streamex Corp (Nasdaq: STEX) to open the GLDY pool for accredited investors only. GLDY is a yield-bearing tokenized security backed by physical gold reserves, issued explicitly under Regulation D, Rule 506(c), the private placement exemption under U.S. securities law. Investor accounts begin with on-chain transfers frozen and are unlocked only after passing Streamex’s KYC and accredited investor verification.&lt;/p&gt;

&lt;p&gt;Both approaches target institutional and accredited investors, establishing a logical basis for using the private placement exemption without full public registration.&lt;/p&gt;

&lt;p&gt;Investor qualification, however, does not neutralize a product’s characterization as an investment contract under the Howey Test. Accredited investor status is more directly relevant to the distribution path than to the question of whether a security exists in the first place. This is a practical risk-management approach within the current legal framework, not a fundamental change in legal character.&lt;/p&gt;

&lt;p&gt;The curator’s core function of selecting assets and setting allocation weights within the vault remains unchanged, which is the structural limitation these access controls cannot address.&lt;/p&gt;

&lt;h3&gt;4.2. Existing KYC and Compliance Infrastructure: Sentora&lt;/h3&gt;

&lt;div&gt;&lt;img alt="Leveraging Existing KYC and Compliance Infrastructure" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136139/content_8.webp" style="width: 1200px; height: 1127px;"&gt;&lt;/div&gt;

&lt;p&gt;Rather than building its own qualification framework, Sentora combines existing KYC-based distribution channels with regulated asset issuance infrastructure.&lt;/p&gt;

&lt;p&gt;Kraken’s DeFi Earn product is the clearest example. Veda provides the vault infrastructure; Chaos Labs manages the Balanced and Boosted vaults; Sentora serves as risk manager for the Advanced vault, overseeing capital allocation across on-chain protocols and managing risk and liquidity.&lt;/p&gt;

&lt;p&gt;This arrangement has since been adopted more broadly. Coinbase has combined Morpho and Steakhouse Financial to launch USDC lending through Prime and High Yield vaults. Binance has connected its users to Morpho vaults managed by Steakhouse and Gauntlet.&lt;/p&gt;

&lt;p&gt;Exchange-level KYC confirms user identity, and issuer compliance frameworks support reserve and redemption structures. Neither addresses who is deciding which assets and markets receive how much capital. External compliance infrastructure reduces risk at the asset and distribution level but does not absorb the regulatory exposure or legal liability of the risk manager making allocation decisions.&lt;/p&gt;

&lt;h3&gt;4.3 Asset-Level Whitelisting: Aave Horizon&lt;/h3&gt;

&lt;div&gt;&lt;img alt="Aave Horizon Pool" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136140/content_9.webp" style="width: 1200px; height: 705px;"&gt;&lt;/div&gt;

&lt;p&gt;Aave launched Aave Horizon in August 2025 as an institutional RWA lending market. The product is structurally separated from the core protocol and designed to the specifications required for institutional asset management.&lt;/p&gt;

&lt;p&gt;Aave Horizon’s distinctive design choice is to share control over permitted collateral with asset issuers rather than restricting user access directly at the distribution stage. Whitelists for tokenized collateral assets are managed by the issuers themselves: Circle, Ripple, Superstate, and Centrifuge (which includes Janus Henderson products). The protocol itself remains permissionless for any wallet holding whitelisted assets.&lt;/p&gt;

&lt;p&gt;The governing control is not who accesses the market but which assets are eligible. Risk parameters follow recommendations from LlamaRisk, and collateral valuations are supported by NAV data verified by Chainlink in real time. Aave Horizon builds on existing Aave lending infrastructure rather than constructing a new chain or independent protocol.&lt;/p&gt;

&lt;p&gt;Sharing verification responsibility with asset issuers does not extinguish Aave Horizon’s own legal and operational liability for its risk parameter decisions.&lt;/p&gt;

&lt;h3&gt;4.4 Structural Separation of Permissioned Lending and Permissionless Yield: Maple Finance&lt;/h3&gt;

&lt;div&gt;&lt;img alt="Leveraging existing KYC and compliance infrastructure" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/102136141/content_10.webp" style="width: 1200px; height: 718px;"&gt;&lt;/div&gt;

&lt;p&gt;In April 2024, Maple Finance converted its entire platform to a whitelist structure. All loans are now fully overcollateralized, and Maple Direct, its in-house credit team, conducts borrower underwriting, ongoing monitoring, and margin calls directly. Access is limited to approved institutional borrowers and lenders.&lt;/p&gt;

&lt;p&gt;The most notable aspect of Maple’s design is the separation between the permissioned lending operation and permissionless yield access. In 2024, Maple launched the Syrup protocol, through which retail users can deposit USDC without KYC and receive SyrupUSDC in return. Those deposits flow into the same institutional lending pool that Maple Direct already manages with its accredited borrowers. The lending itself operates under rigorous institutional compliance. The right to receive the yield that lending generates is packaged into a permissionless token and made available to any user.&lt;/p&gt;

&lt;p&gt;This structure relocates regulatory exposure rather than eliminating it. Maple Direct’s underwriting and management discretion, including borrower selection, collateral terms, and margin calls, remains intact. The arrangement by which institutional lending returns are passed to SyrupUSDC holders generates its own question of whether that token constitutes an investment contract under the Howey Test, together with separate distribution liability.&lt;/p&gt;

&lt;p&gt;The structural separation of permissioned lending and permissionless yield is a deliberate repositioning of where regulatory scrutiny lands. It does not change the legal liability of the entities managing the capital or the fundamental nature of the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cases above address different regulatory contact points but share a common limitation. They are operational defensive structures designed to manage regulatory exposure by separating investors, assets, and distribution channels. They are not final solutions that extinguish legal risk.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mapped against the two analytical axes introduced earlier:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;One approach has obtained an explicit legal exemption: the Orca/GLDY structure, which applies Regulation D, Rule 506(c) directly.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The remaining approaches manage and constrain regulatory exposure: Grove, Sentora, Aave Horizon, and Maple Finance, through a combination of institutional qualification restrictions, third-party compliance infrastructure, and collateral whitelisting.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Restricting distribution and filtering eligibility does not resolve the underlying legal liability that attaches to a curator or protocol’s discretionary asset selection and allocation decisions.&lt;/p&gt;

&lt;h2&gt;5. What History Shows Works&lt;/h2&gt;

&lt;p&gt;The future of the on-chain asset management market will be determined not by the surface appearance of the code but by the institutional frameworks established to govern the scope of discretion, the transparency of disclosure, and the allocation of legal liability.&lt;/p&gt;

&lt;p&gt;The measures examined above reduce immediate regulatory exposure and provide room to use existing private placement exemptions. They do not answer the foundational questions of what criteria govern a curator’s allocation decisions and who bears responsibility when losses occur.&lt;/p&gt;

&lt;p&gt;The historical record is consistent on one point: access restrictions alone have not produced durable institutionalization.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Closed-end funds in the 1920s and 1930s saw widespread abuse of “blind pool” structures in which managers did not disclose their investment targets. The Investment Company Act of 1940 resolved this not by restricting access but by institutionalizing the asset management function itself.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;In 2008, when the SEC determined that LendingClub’s peer-to-peer loan notes were securities, the company suspended new registrations and restructured as an issuer of SEC-registered notes tied to its loans, eventually listing publicly in 2014.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;In 2012, the crowdfunding industry’s demand for reduced fundraising restrictions led to the JOBS Act and the creation of Regulation Crowdfunding.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What the three cases share is that they did not stop at restricting investor access. They established the legal character of the product, the obligations of the operating entity, the scope of required disclosure, and the allocation of loss. Sustainable growth for new financial instruments requires that market participants be able to predict, in advance, both their rights and their legal responsibilities.&lt;/p&gt;

&lt;p&gt;On-chain vaults and DeFi markets face the same institutionalization challenge. The available paths are:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Full registration under existing securities law.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Private placement exemptions targeting qualified investors.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Immutable protocol design that eliminates discretion entirely.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;New regulatory exemptions specific to on-chain finance, such as those proposed to the SEC by Ava Labs and the Solana Policy Institute.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whichever path is taken, the central task is the same: establishing who makes investment decisions, what disclosures are required, and where liability falls when outcomes are adverse.&lt;/p&gt;

&lt;h2&gt;6. Compliance Costs as a New Barrier to Entry&lt;/h2&gt;

&lt;p&gt;The factor that will ultimately determine competitive position in the on-chain asset management market is the capacity to absorb compliance costs structurally and to demonstrate legal accountability.&lt;/p&gt;

&lt;p&gt;Because regulators cannot directly control code, the framework that holds human actors legally accountable for the discretion they exercise over it will only become more clearly defined. Regardless of how effectively a firm has positioned itself in the interim, formal registration or explicit exemption frameworks will eventually require every operator to demonstrate the legal basis for its management structure and the boundaries of its liability. At that point, compliance obligations, encompassing KYC infrastructure, legal review, on-chain asset valuation, bespoke institutional contracts, and loss-absorption structures, will cease to be administrative overhead. They will become an independent cost item requiring sustained capital investment.&lt;/p&gt;

&lt;p&gt;The internalization of these compliance costs will drive a meaningful reordering of the curator market. Large curators with capital, operating scale, and established institutional relationships will be able to distribute compliance costs efficiently and consolidate their market position. Smaller curators, without the capital to fund independent infrastructure, will face a choice between bearing disproportionate costs and accepting consolidation into larger regulated protocols or distribution channels.&lt;/p&gt;

&lt;p&gt;The real value of the grace period that interim strategies have secured will be determined by what is built during it. Those who use this time to design formal registration pathways, identify viable exemptions, and establish clear liability structures in advance will find that regulatory requirements become a source of competitive advantage rather than a barrier. For those who defer, mounting compliance costs will erode profitability and, ultimately, foreclose market participation.&lt;/p&gt;

&lt;hr&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="https://reports.tiger-research.com/subscribe?utm_source=coingecko&amp;amp;utm_medium=post&amp;amp;utm_campaign=" target="_blank"&gt;Dive deep into Asia’s Web3 market with Tiger Research.&lt;br&gt;
Be among the 23,000+ pioneers who receive exclusive market insights.&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3&gt;Disclaimer&lt;/h3&gt;

&lt;p&gt;This report has been prepared based on materials believed to be reliable. However, we do not expressly or impliedly warrant the accuracy, completeness, and suitability of the information. We disclaim any liability for any losses arising from the use of this report or its contents. The conclusions and recommendations in this report are based on information available at the time of preparation and are subject to change without notice. All projects, estimates, forecasts, objectives, opinions, and views expressed in this report are subject to change without notice and may differ from or be contrary to the opinions of others or other organizations.&lt;/p&gt;

&lt;p&gt;This document is for informational purposes only and should not be considered legal, business, investment, or tax advice. Any references to securities or digital assets are for illustrative purposes only and do not constitute an investment recommendation or an offer to provide investment advisory services. This material is not directed at investors or potential investors.&lt;/p&gt;

&lt;h3&gt;Terms of Usage&lt;/h3&gt;

&lt;p&gt;Tiger Research allows the fair use of its reports. ‘Fair use’ is a principle that broadly permits the use of specific content for public interest purposes, as long as it doesn’t harm the commercial value of the material. If the use aligns with the purpose of fair use, the reports can be utilized without prior permission. However, when citing Tiger Research’s reports, it is mandatory to 1) clearly state ‘Tiger Research’ as the source, 2) include the Tiger Research &lt;a href="https://drive.google.com/drive/folders/1wDipGyey04EqFO6yZU90ZIe-jsKCDaqR" rel="nofollow noopener" target="_blank"&gt;logo&lt;/a&gt;. If the material is to be restructured and published, separate negotiations are required. Unauthorized use of the reports may result in legal action.&lt;/p&gt;
</content>
    <author>
      <name>Tiger Research</name>
    </author>
    <url>https://www.coingecko.com/learn/sec-defi-curators-securities-regulation?locale=en</url>
    <summary>

On July 22, 2026, SEC Commissioner Hester Peirce issued a statement titled &amp;quot;Headstands and Summervaults,&amp;quot; identifying on-chain vaults and lending strategies as potential subjects of existing secu...</summary>
  </entry>
  <entry>
    <id>tag:www.coingecko.com,2005:Post/11470</id>
    <published>2026-08-05T00:35:46Z</published>
    <updated>2026-08-17T09:26:15Z</updated>
    <link rel="alternate" type="text/html" href="https://www.coingecko.com/learn/top-cold-hardware-wallets-crypto?locale=en"/>
    <title>Top 6 Cold Wallets to Store Your Crypto</title>
    <content type="html">&lt;blockquote style="background-color: #e8fcc9; border-radius: 8px; padding: 1.5rem 1.75rem; margin: 2rem 0; font-style: normal;"&gt;
&lt;h2 style="margin: 0px; font-size: 1.125rem; line-height: 1.6; color: rgb(52, 175, 0); font-weight: 500;"&gt;Top Cold Wallets for Storing Cryptocurrencies&lt;/h2&gt;

&lt;footer style="margin-top: 1rem; font-size: 0.95rem; font-weight: 500; color: #19412D;"&gt;
&lt;p dir="ltr"&gt;&lt;meta charset="utf-8"&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="color:#000000;"&gt;The top cold wallets for securely storing cryptocurrencies offline are:&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style="color:#000000;"&gt;OneKey&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#000000;"&gt;Ledger&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#000000;"&gt;Trezor&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#000000;"&gt;SafePal&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#000000;"&gt;Tangem&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color:#000000;"&gt;Ellipal&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;&lt;span style="color:#000000;"&gt;Key Points:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;meta charset="utf-8"&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;span style="color:#000000;"&gt;Cold wallets, also known as hardware wallets, are offline custody devices for crypto assets. They store private keys offline and connect to other devices via USB or Bluetooth rather than maintaining a constant internet connection like hot wallets.&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p&gt;&lt;span style="color:#000000;"&gt;This offline storage method provides the highest level of security for crypto assets. Keeping wallet keys offline significantly reduces the risk of private key theft and unauthorized access.&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p&gt;&lt;span style="color:#000000;"&gt;Ledger and Trezor dominate the hardware wallet market as the largest providers. The industry now offers diverse options, including card-based wallets and devices with advanced security features like the Smart Transaction Defense system from OneKey.&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;/footer&gt;
&lt;/blockquote&gt;

&lt;div dir="ltr"&gt;
&lt;hr&gt;
&lt;img alt="Top Cold Wallets Crypto" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/34509/content_Top_Cold_Wallets.webp" style="width: 1200px; height: 600px;"&gt;
&lt;/div&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;This article was updated in August 2026 by &lt;a data-view-component="true" href="https://www.coingecko.com/author/veralim" target="_blank"&gt;Vera Lim&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p dir="ltr"&gt;Cryptocurrency wallets are a key part of the crypto space, as you need them to manage your assets. These can be custodial or non-custodial, and the latter can be split into software (hot) or hardware (cold) wallets. &lt;a href="https://www.coingecko.com/learn/hot-wallet?locale=en" target="_blank"&gt;Hot wallets&lt;/a&gt; like &lt;a href="https://www.coingecko.com/learn/complete-beginners-guide-to-metamask?locale=en" target="_blank"&gt;MetaMask&lt;/a&gt; and &lt;a href="https://www.coingecko.com/learn/complete-guide-to-using-trust-wallet?locale=en" target="_blank"&gt;Trust Wallet&lt;/a&gt; have grown popular over the years, scoring high in terms of convenience. Meanwhile, cold wallets are focused on security, and are the recommended way for users to store long-term holdings. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;What Are Cold Wallets?&lt;/h2&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://www.coingecko.com/learn/hot-wallet-vs-cold-wallet?locale=en" target="_blank"&gt;Cold wallets&lt;/a&gt; are also called hardware wallets. Cold wallets are hardware devices resembling USB storage devices with connectivity features like USB, WIFI and Bluetooth. Cold wallets secure crypto assets held in a blockchain account by storing the wallet’s private keys offline, unlike hot wallets which are always connected to the internet.&lt;/p&gt;

&lt;p dir="ltr"&gt;This makes cold wallets more inconvenient to use, as signing transaction requests involves more steps. However, their reduced convenience is a key part of its rigid security structure. Some popular cold wallets include Trezor, Ledger, SafePal, and Tangem Wallet. The security level of cold wallets is usually rated according to the EAL metrics.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;What Is the EAL rating?&lt;/h3&gt;

&lt;p dir="ltr"&gt;EAL (Evaluation Assurance Level) rating is the security ranking standard for IT products like cryptocurrency cold wallets. It ranks tech products’ assurance levels from 1 to 7, where higher levels imply more rigorous security measures. The EAL rating system considers the product design, functional analysis, and performance in penetration testing, and accords an EAL score based on the average performance.&lt;/p&gt;

&lt;p dir="ltr"&gt;Most cold wallets have an EAL rating of 5 and above, where the qualification promises users a high level of independently assured security with a rigorous development approach.&lt;/p&gt;

&lt;p dir="ltr"&gt;Do note that the EAL level does not measure the security of the system itself, and it only states at what level (EAL1-7) the system was tested.&lt;/p&gt;

&lt;p dir="ltr"&gt;Now, let’s look at some of the notable cold wallets and their key features.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Open Source vs. Closed Source: Which Is More Secure?&lt;/h3&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Open-source cold wallets&lt;/strong&gt;, like Trezor and OneKey, make their firmware code publicly available, allowing independent researchers to audit how the device generates keys and processes transactions rather than trusting the vendor's word alone. This transparency can lead to faster bug discovery and patching, since anyone can review the code.&lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;strong&gt;Closed-source wallets&lt;/strong&gt;, like Ledger and Tangem, keep their firmware private, arguing that concealing the implementation raises the cost of vulnerability research for attackers. This doesn't mean the code goes unchecked; closed-source firmware is still typically &lt;a href="https://support.ledger.com/article/Third-party-Security-Assessment-Report" rel="nofollow noopener" target="_blank"&gt;audited&lt;/a&gt; by independent third-party security firms and put through bug bounty programs, just privately rather than open to public review.&lt;/p&gt;

&lt;p dir="ltr"&gt;Neither approach guarantees security on its own — it comes down to how well each is executed, not just whether the code is public.&lt;/p&gt;

&lt;h4 dir="ltr"&gt;The Coldcard Incident&lt;/h4&gt;

&lt;p dir="ltr"&gt;In July 2026, a firmware bug in Coinkite's open-source Coldcard wallets led to tens of millions of dollars in Bitcoin theft. The root cause was a 2021 update that used a weaker, software-based random number generator instead of a hardware-based one, allowing attackers to reconstruct private keys offline.&lt;/p&gt;

&lt;p dir="ltr"&gt;The bug had been sitting in publicly viewable code for &lt;a href="https://www.techtimes.com/articles/322392/20260731/coldcard-hardware-wallet-hacked-via-firmware-bug-that-bypassed-rng-five-years.htm" rel="nofollow noopener" target="_blank"&gt;five years&lt;/a&gt; before it was caught, which the industry has pointed to as a counterexample to the idea that open code gets bugs found and fixed faster. The incident shows that open source alone doesn't guarantee security; it's one factor among several, including engineering practices and entropy sourcing.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;OneKey: Open-Source Security with Smart Transaction Defense and Wireless Connectivity&lt;/h2&gt;

&lt;p dir="ltr"&gt;This section is brought to you by &lt;a href="https://onekey.so/?utm_source=Coingecko&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=sponsored&amp;amp;utm_content=Article" target="_blank"&gt;OneKey&lt;/a&gt;.&lt;/p&gt;

&lt;div dir="ltr"&gt;&lt;img alt="OneKey" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/34529/content_OneKey_V2.webp" style="width: 1200px; height: 556px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://onekey.so/?utm_source=Coingecko&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=sponsored&amp;amp;utm_content=Article" target="_blank"&gt;OneKey&lt;/a&gt; stands out in the hardware wallet space by combining top-tier security elements with a commitment to full transparency through open-source code. Founded in 2020, OneKey has quickly established itself, backed by industry leaders like Coinbase Ventures and Dragonfly.&lt;/p&gt;

&lt;p dir="ltr"&gt;As a fully open-source hardware wallet, both the firmware and the companion software are publicly auditable. OneKey devices are secured by EAL 6+ certified chips, offering the same level of banking-grade security found in government IDs and bank cards.&lt;/p&gt;

&lt;p dir="ltr"&gt;The OneKey ecosystem is managed via the native OneKey App (available on mobile, PC, Mac, and as a browser extension). This app allows users to track, send, receive, and swap assets across networks. OneKey supports over 100 blockchains and 30,000+ coins and tokens, including &lt;a href="https://www.coingecko.com/en/coins/bitcoin" target="_blank"&gt;Bitcoin&lt;/a&gt;, &lt;a href="https://www.coingecko.com/en/coins/ethereum" target="_blank"&gt;Ethereum&lt;/a&gt;, &lt;a href="https://www.coingecko.com/en/coins/solana" target="_blank"&gt;Solana&lt;/a&gt;, and various NFTs.&lt;/p&gt;

&lt;p dir="ltr"&gt;A key security feature is SignGuard, which works across the devices and the app to block risky signatures and flag malicious contracts, phishing sites, or drainers in real-time before a transaction is confirmed. The hardware is also designed with a Quantum-Ready Architecture to address future cryptographic threats.&lt;/p&gt;

&lt;p dir="ltr"&gt;Here are some OneKey hardware wallet options:&lt;/p&gt;

&lt;h3 dir="ltr"&gt;OneKey Pro&lt;/h3&gt;

&lt;p dir="ltr"&gt;The OneKey Pro is the flagship device, designed for advanced users prioritizing a full-feature experience and maximum physical isolation. It retails for &lt;strong&gt;$278&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Key Features&lt;/strong&gt;: It is equipped with four separate &lt;strong&gt;EAL 6+ Secure Elements&lt;/strong&gt; and offers multiple connectivity options, including &lt;strong&gt;Air-gapped signing&lt;/strong&gt; (via a built-in camera for QR codes), &lt;strong&gt;Bluetooth&lt;/strong&gt;, and &lt;strong&gt;USB-C&lt;/strong&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Display &amp;amp; Interaction&lt;/strong&gt;: It features a large &lt;strong&gt;3.5-inch HD color touchscreen&lt;/strong&gt; (480x800) and supports fast authentication via &lt;strong&gt;fingerprint recognition&lt;/strong&gt;.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Power&lt;/strong&gt;: It supports &lt;strong&gt;Qi wireless charging&lt;/strong&gt;, making it the first air-gapped cold wallet with this capability.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;OneKey Classic 1S&lt;/h3&gt;

&lt;p dir="ltr"&gt;The Classic 1S provides a balance of high security and portability at an affordable price of &lt;strong&gt;$99&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Key Features&lt;/strong&gt;: It uses a single &lt;strong&gt;EAL 6+ Secure Element&lt;/strong&gt; and maintains a compact, thin form factor (5.2 mm).&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Display &amp;amp; Interaction&lt;/strong&gt;: The device uses a &lt;strong&gt;1.54-inch monochrome OLED display&lt;/strong&gt; and four physical navigation buttons for transaction confirmation.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Connectivity&lt;/strong&gt;: It connects via &lt;strong&gt;USB-C&lt;/strong&gt; and &lt;strong&gt;Bluetooth&lt;/strong&gt; for full platform support (Windows, macOS, Linux, Android, and iOS).&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 dir="ltr"&gt;OneKey Classic 1S Pure&lt;/h3&gt;

&lt;p dir="ltr"&gt;Priced at &lt;strong&gt;$79&lt;/strong&gt;, this model is tailored for long-term HODLers who prefer a battery-free device.&lt;/p&gt;

&lt;ul&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Key Features&lt;/strong&gt;: Identical to the Classic 1S in terms of security and display, it uses a single &lt;strong&gt;EAL 6+ Secure Element&lt;/strong&gt; and the same compact design.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li aria-level="1" dir="ltr"&gt;
	&lt;p dir="ltr" role="presentation"&gt;&lt;strong&gt;Power&lt;/strong&gt;: The "Pure" version is &lt;strong&gt;battery-free&lt;/strong&gt; and requires a constant USB-C connection to operate, minimizing the risks associated with internal batteries and maximizing longevity.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 dir="ltr"&gt;Ledger: The Popular Hardware Wallet Classic&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Top Cold Wallets Ledger" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/21381/content_ledger_hardware.webp" style="width: 1200px; height: 370px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;Ledger launched the Ledger Nano S, its first hardware wallet in 2016 as a safe storage medium for Bitcoin. Since then, it has released about five cold wallets including the Ledger Nano X, Ledger Flex, and Ledger Nano S Plus, and has grown its support for crypto assets, including NFTs. Ledger wallets store your &lt;a href="https://www.coingecko.com/learn/what-are-public-and-private-keys?locale=en" target="_blank"&gt;private keys&lt;/a&gt; offline and connect to smart devices for advanced operations like staking and purchasing assets through Ledger Live – the software interface for the Ledger wallet.&lt;/p&gt;

&lt;p dir="ltr"&gt;You can manage your assets either through the native Ledger Live app, which supports 500 coins and Ethereum and Polygon NFTs, or through 50 supported third-party wallets like MetaMask, which supports over 5,000 coins and multi-blockchain NFTs. &lt;/p&gt;

&lt;p dir="ltr"&gt;Ledger Wallet also supports connection through third-party wallets like MetaMask. Through &lt;a href="https://www.ledger.com/ledger-live" rel="nofollow noopener" target="_blank"&gt;Ledger Live&lt;/a&gt; and third-party wallet connections, users can access DeFi platforms and dApps deployed on the supported networks. &lt;/p&gt;

&lt;p dir="ltr"&gt;For all Ledger devices, you can recover access to your assets through a 24-word secret recovery phrase, or you may opt for the controversial &lt;a href="https://www.coingecko.com/learn/ledger-recover-community-concerns" target="_blank"&gt;Ledger Recover&lt;/a&gt;, which allows users to retrieve lost private keys. &lt;/p&gt;

&lt;p dir="ltr"&gt;Here are some Ledger wallet options:&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Ledger Nano S Plus&lt;/h3&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://shop.ledger.com/products/ledger-nano-s-plus" rel="nofollow noopener" target="_blank"&gt;Ledger Nano S Plus&lt;/a&gt; sells for as low as $79. It comes in a plastic body with a stainless steel swivel, a 1.09-inch screen display, and a USB-C connection. It has a security rating of EAL6+ and an ANSSI CSPN certification. The Ledger Nano S Plus is supported on the Ledger Live application and can connect to decentralized applications through third-party wallets. However, the Ledger Nano S Plus only works on desktop and Android.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Ledger Nano X&lt;/h3&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://shop.ledger.com/pages/ledger-nano-x" rel="nofollow noopener" target="_blank"&gt;Ledger Nano X&lt;/a&gt; tops the Nano S Plus device with a wider body but retains the 1.09 inch screen size. It has a battery with up to five hours of normal use, and offers additional iOS compatibility.The Ledger Nano S has a security rating of EAL5+ and an ANSSI CSPN certification, with USB-C connection and Bluetooth connectivity. At time of writing, the Ledger Nano X retails for $149.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Ledger Stax&lt;/h3&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://shop.ledger.com/pages/ledger-stax" rel="nofollow noopener" target="_blank"&gt;Ledger Stax&lt;/a&gt; is Ledger’s most advanced cryptocurrency cold wallet with an EAL6+ rating, and prices start at $399 at the time of writing. The Ledger Stax is equipped with a 3.7 inch curved screen, and a battery time of up to 10 hours or 150 transactions. In addition to the usual USB-C connection, the Ledger Stax also features Bluetooth and specialized NFC (Near Field Communication). &lt;/p&gt;

&lt;h2 dir="ltr"&gt;Trezor: Open Source Hardware Wallets&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Top Cold Wallets Trezor" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/34508/content_Trezor.webp" style="width: 1200px; height: 487px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;&lt;a href="https://affil.trezor.io/aff_c?offer_id=133&amp;amp;aff_id=1143" target="_blank"&gt;Trezor&lt;/a&gt; launched one of the earliest forms of contemporary cold wallets – the Trezor Model One on July 19, 2014, and followed up with the Model T about four years later. Trezor is an open source cold wallet for storing cryptocurrencies, and it combines the seed phrase with a non-stored passphrase that makes hacks of the physical device unlikely. &lt;/p&gt;

&lt;p dir="ltr"&gt;Trezor currently has three cold wallet options under its wing. Each wallet supports over 1,000 crypto assets and up to 80 blockchain networks. Trezor wallet mobile application, &lt;a href="https://trezor.io/trezor-suite" rel="nofollow noopener" target="_blank"&gt;Trezor Suite&lt;/a&gt;, allows users to connect their devices to a smart device and perform advanced operations including trading assets and paying for daily essentials, where every transaction requires confirmation on the accompanying Trezor hardware wallet. Like other cold wallets, Trezor also supports DeFi transactions through third-party wallet connections.&lt;/p&gt;

&lt;p dir="ltr"&gt;However, note that Trezor only offers USB-C/USB-A connections, and is only compatible with MacOS, Windows, Linux, and Android, where iOS capabilities are limited to view-only.&lt;/p&gt;

&lt;p dir="ltr"&gt;Here are some Trezor wallets:&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Trezor Safe 7&lt;/h3&gt;

&lt;p dir="ltr"&gt;The Trezor Safe 7 includes a transparent, auditable Secure Element (TROPIC01), open to anyone to audit and verify how it protects your crypto. The TROPIC01 chip is combined with an additional EAL6+ secure element. It also uses post-quantum cryptography to secure firmware updates, device authentication, and the boot process, protecting wallets against future quantum computing threats. It will also offer wireless charging and bluetooth connectivity. The Trezor Safe 7 retails at $249.&lt;/p&gt;

&lt;h3 dir="ltr"&gt;Trezor Safe 5&lt;/h3&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://affil.trezor.io/aff_c?offer_id=133&amp;amp;aff_id=1143" rel="nofollow noopener" target="_blank"&gt;Trezor Safe 5&lt;/a&gt; was released on 14 June 2024; it is the latest Trezor wallet device and the most advanced yet. The Trezor Safe 5 retails at $169 and comes with a 1.54 Inch Gorilla Glass 3 color touchscreen. It has an EAL6+ security rating and is open-source like other Trezor wallets. Connectivity-wise, the Trezor Safe 5 utilizes a USB-C cable. &lt;/p&gt;

&lt;h3 dir="ltr"&gt;Trezor Safe 3&lt;/h3&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://affil.trezor.io/aff_c?offer_id=133&amp;amp;aff_id=1143" rel="nofollow noopener" target="_blank"&gt;Trezor Safe 3&lt;/a&gt; was released on 12 October 2023, and is priced at $79 at the time of writing. It is equipped with a 0.96 inch monochromatic display and two control buttons. Like the Trezor Safe 5, the Trezor Safe 3 utilizes USB-C for connectivity. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;SafePal: Extensive Support for Tokens and Chains&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Top Cold Wallets SafePal" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/21383/content_safepal_hardware.webp" style="width: 1200px; height: 414px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;SafePal S1 – the first SafePal hardware wallet – was launched in May 2019. Since then, the firm has added two more hardware wallet devices to its product list. Safepal wallets support over 100 blockchain networks and millions of NFTs and tokens – to check if your token is supported and on what device, you can check out &lt;a href="https://www.safepal.com/en/coin/lists" rel="nofollow noopener" target="_blank"&gt;SafePal’s Supported Assets page&lt;/a&gt;. &lt;/p&gt;

&lt;p dir="ltr"&gt;SafePal’s hardware wallets are compatible with the &lt;a href="https://www.safepal.com/" rel="nofollow noopener" target="_blank"&gt;SafePal hot wallet&lt;/a&gt;, allowing hardware wallet owners to perform advanced operations like interacting with decentralized applications with their wallets. The SafePal hot wallet is available as a native application for Android and iOS devices and as a browser extension for desktop devices. &lt;/p&gt;

&lt;p dir="ltr"&gt;SafePal’s hardware wallets also feature a self-destruct mechanism that triggers if the secure element is tampered with, during which the secure element will erase all wallet data. &lt;/p&gt;

&lt;h3 dir="ltr"&gt;SafePal S1/S1 pro&lt;/h3&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://www.safepal.com/en/store/s1" rel="nofollow noopener" target="_blank"&gt;S1&lt;/a&gt; series features fully air-gapped and 100% offline hardware wallets – the SafePal S1 and the newer S1 Pro. The S1 Pro offers an improvement in battery life (S1 – 400mAh, S1 Pro – 500mAh) and uses more premium housing materials for the cold wallet. The S1 retails at $49.99, while the S1 Pro is priced at $89.99. &lt;/p&gt;

&lt;p dir="ltr"&gt;However, both wallets share many similarities. The S1 and S1 Pro have the same screen size and security features. Both wallets use a 100% air-gapped signing mechanism, with its secure chip having an EAL rating of 5+. These wallets also use QR codes for connection, although there is also a USB-C option.&lt;/p&gt;

&lt;p dir="ltr"&gt;SafePal X1&lt;/p&gt;

&lt;p dir="ltr"&gt;The &lt;a href="https://www.safepal.com/en/store/x1" rel="nofollow noopener" target="_blank"&gt;SafePal X1&lt;/a&gt; retails for $69.99, and comes with a 1.8 inch monochrome display screen, a 12-button control pad, and a 200mAh battery. It uses a high-speed Bluetooth 5.0 signing mechanism for improved efficiency, with its secure chip rated EAL5+. The SafePal X1 is also open source, with its code available on github for maximum trust and efficiency. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;Tangem Wallet: Leveraging NFC Technology for One-Tap Convenience&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Top Cold Wallets Tangem" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/21384/content_tangem_wallet.webp" style="width: 1200px; height: 486px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;Tangem Wallet uses chip technology and NFC (Near Field Communication) technology to develop a cold wallet for crypto assets. Tangem Wallets are cards with chips attached, and are equipped with NFC technology for connectivity. The communication technology is supported by mobile devices (Android 6.0 or higher and iOS 15.0 or higher). &lt;/p&gt;

&lt;p dir="ltr"&gt;The chip in the card generates a random private key that is never exposed, ensuring the wallet cannot be compromised, and each Tangem Wallet can contain up to three Tangem cards, all of which are tied to the same wallet. Each card holds a copy of the wallet keys, which are generated during the activation process and copied to each of the available cards. The Tangem 1.0 does not generate passphrases, but this can be done on the Tangem 2.0.&lt;/p&gt;

&lt;p dir="ltr"&gt;To transact using the &lt;a href="https://www.tangem.com/en/" rel="nofollow noopener" target="_blank"&gt;Tangem Wallet&lt;/a&gt;, the user only needs to tap the card on their device to activate it. Tangem Wallets work with the Tangem App, which is available as a native app for Android and iOS devices. Through the app, users can manage their assets and perform DeFi transactions like swapping and staking. &lt;/p&gt;

&lt;p dir="ltr"&gt;Tangem also offers the Ring wallet. The Ring wallet works the same way as the card wallets, however, the chip is embedded in a ring for more portability, and will replace at least one card in a three-card Tangem wallet.&lt;/p&gt;

&lt;p dir="ltr"&gt;Tangem wallet supports over 61 blockchain networks and thousands of crypto assets including NFTs on these networks. The Tangem card wallet sells for $54.90 at the time of writing, while the Tangem Ring is $160.&lt;/p&gt;

&lt;h2 dir="ltr"&gt;Ellipal: The First 100% Air-Gapped Wallet&lt;/h2&gt;

&lt;div dir="ltr"&gt;&lt;img alt="Top Cold Wallets Ellipal" loading="lazy" src="https://assets.coingecko.com/coingecko/public/ckeditor_assets/pictures/21385/content_ellipal.webp" style="width: 1200px; height: 326px;"&gt;&lt;/div&gt;

&lt;p dir="ltr"&gt;Ellipal claims to be the first cold wallet developer to produce a 100% air-gapped wallet. The Hong Kong-based wallet development firm was launched in 2018 and released their first cold wallet – Ellipal – the same year. This was followed by the Ellipal Titan about a year later. Ellipal wallets are EAL5+ rated and support over 10,000 crypto assets including tokens from over 80 blockchain networks and NFTs for Ethereum and other supported networks.&lt;/p&gt;

&lt;p dir="ltr"&gt;According to the team, the Ellipal wallet is completely disconnected from the internet and is equipped with an efficient QR Code scanner for connecting to third-party applications and running transactions. Ellipal wallet users can connect their wallet to the Ellipal App, a native mobile application that can be installed on Android and iOS devices to manage their assets and run advanced transactions like staking and swapping. Ellipal wallets are also compatible with hot wallets like the MetaMask Wallet. Through third-party connections, users can access decentralized applications. Ellipal has two flagship wallets; the &lt;a href="https://www.ellipal.com/products/ellipal-titan-mini" rel="nofollow noopener" target="_blank"&gt;Ellipal Titan Mini&lt;/a&gt; and &lt;a href="https://www.ellipal.com/products/ellipal-titan" rel="nofollow noopener" target="_blank"&gt;Ellipal 2.0&lt;/a&gt;. Both wallets are tamper-proof and feature a self-destruct anti-hacking mechanism, and users can create up to 10 accounts and store NFTs on Ethereum and Polygon. The Titan Mini officially retails for $99 and features a 2.7 inch HD screen with a 600mAh battery. Ellipal 2.0 is Ellipal’s most advanced cold wallet yet, and officially retails at a significantly higher price of $169. It has a larger 4.0 inch screen and a 1400mAh battery. Like the Titan Mini, Ellipal 2.0 is compatible with the Ellipal App and third-party wallet. The Ellipal 2.0 also comes with a pattern PIN – a feature that is not available on the Titan Mini. &lt;/p&gt;

&lt;h2 dir="ltr"&gt;Comparison Table of Listed Cold Wallets&lt;/h2&gt;

&lt;table border="1" cellpadding="5" cellspacing="5" style="width:100%;"&gt;
	&lt;colgroup&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
		&lt;col&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style="width: 20%;"&gt;
			&lt;p dir="ltr"&gt; &lt;/p&gt;
			&lt;/td&gt;
			&lt;td style="width: 10%;"&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;EAL rating&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td style="width: 30%;"&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Assets Supported&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td style="width: 30%;"&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Devices supported&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td style="width: 10%;"&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Price ($)&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;b id="docs-internal-guid-8f56c74a-7fff-a1b6-8274-4be417475efd"&gt;OneKey Pro&lt;/b&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;EAL6+&lt;/td&gt;
			&lt;td&gt;Over 100 blockchains and 30,000+ coins and tokens&lt;/td&gt;
			&lt;td&gt;Windows, macOS, Linux, Android, and iOS&lt;/td&gt;
			&lt;td&gt;$278&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;strong&gt;OneKey Classic 1S&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;EAL6+&lt;/td&gt;
			&lt;td&gt;Over 100 blockchains and 30,000+ coins and tokens&lt;/td&gt;
			&lt;td&gt;Windows, macOS, Linux, Android, and iOS&lt;/td&gt;
			&lt;td&gt;$99&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;OneKey Classic 1S Pure&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;EAL6+&lt;/td&gt;
			&lt;td&gt;Over 100 blockchains and 30,000+ coins and tokens&lt;/td&gt;
			&lt;td&gt;Windows, macOS, Linux, Android, and iOS&lt;/td&gt;
			&lt;td&gt;$79&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Ledger Nano S Plus&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL6+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 5,000 assets including NFTs from multiple blockchain networks&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Windows, macOS, Linux, and Android devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$79&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Ledger Nano X&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL5+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 5,000 assets including NFTs from multiple blockchain networks&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Windows, macOS, Linux, Android and iOS devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$149&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Ledger Stax&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL6+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 5,000 assets including NFTs from multiple blockchain networks&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Windows, macOS, Linux, Android  and iOS devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$399&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Trezor Safe 7&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;EAL6+&lt;/td&gt;
			&lt;td&gt;Over 1,000 cryptocurrencies including Bitcoin, Dogecoin, and Litecoin.&lt;/td&gt;
			&lt;td&gt;Windows, macOS, Linux, Android  and iOS devices&lt;/td&gt;
			&lt;td&gt;$249&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Trezor Safe 5&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL6+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 1,000 cryptocurrencies including Bitcoin, Dogecoin, and Litecoin.&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Windows, macOS, Linux, and Android devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$169&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Trezor Safe 3&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL6+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 1,000 cryptocurrencies including Bitcoin, Dogecoin, and Litecoin.&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Windows, macOS, Linux, and Android devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$79&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;SafePal X1&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL5+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 100 blockchains, unlimited tokens, and NFTs&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Extension on Chrome, FireFox, and Edge.&lt;/p&gt;

			&lt;p dir="ltr"&gt;Android and iOS devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$69.99&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;SafePal S1/S1 Pro&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL5+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 100 blockchains, unlimited tokens, and NFTs&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Extension on Chrome, FireFox, and Edge.&lt;/p&gt;

			&lt;p dir="ltr"&gt;Android and iOS devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$49.99/$89.99&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Tangem Wallet&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL6+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 60 blockchain networks and thousands of crypto assets on supported networks&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Android and iOS devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;From $54.90&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;&lt;strong&gt;Ellipal Titan Mini/2.0&lt;/strong&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;EAL5+&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Over 10,009 cryptocurrencies and over 80 blockchain networks.&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;Android and iOS devices&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p dir="ltr"&gt;$99/$169&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 dir="ltr"&gt;Final Thoughts&lt;/h2&gt;

&lt;p dir="ltr"&gt;Storing your assets in cold wallets is the recommended safety practice. Despite the convenience of software (hot) crypto wallets, they have been implicated in several cases of crypto hacks as they are constantly connected to the internet. Cold wallets tackle this risk by disconnecting your blockchain wallet from the internet. However, this is not to discount the convenience of hot wallets, as it’s recommended for users to use a hot wallet for regular transactions, while using cold wallets for long-term storage and holding of crypto assets.&lt;/p&gt;

&lt;p dir="ltr"&gt;If you are looking to improve the security of your crypto investments using cold wallets, this article reviews some of the best cold wallets. It is important to consider the features of a cold wallet as they apply to you and choose one that serves your needs. Also, note that this article reviews cold wallets for educational purposes only and should not be taken as financial advice. &lt;/p&gt;

&lt;p dir="ltr"&gt;&lt;em&gt;An earlier version of this article was written by &lt;a href="https://www.coingecko.com/author/joelagbo" target="_blank"&gt;Joel Agbo&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
    <author>
      <name>CoinGecko</name>
    </author>
    <url>https://www.coingecko.com/learn/top-cold-hardware-wallets-crypto?locale=en</url>
    <summary>
Top Cold Wallets for Storing Cryptocurrencies




The top cold wallets for securely storing cryptocurrencies offline are:


	OneKey
	Ledger
	Trezor
	SafePal
	Tangem
	Ellipal


Key Points:



	
	Co...</summary>
  </entry>
</feed>
