Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Learn more about what you can do with Kaiko data and how to make successful system requests in our use-case micro-guides.
These are just a few examples of how Kaiko data can help you achieve your strategic goals. If you need help with a use case not currently featured, please reach out to our Support Team.
A comprehensive breakdown of Kaiko's data and endpoints
Ensure market integrity with automated monitoring and alerts. Detect potential market manipulation, with a user-friendly dashboard.
Coming soon.
Our Latest Updates
2024-07-19
We’ve made improvements to how you integrate our data by enabling real-time access to BigQuery, so you can now access our insights when and where you need them most.
This means you can conduct ongoing real-time analysis directly in the BigQuery platform, eliminating the need for support from your development team in making individual API calls. BigQuery also brings the power of data visualization to Kaiko data.
This update applies to:
You can learn more about how to receive Kaiko data through BigQuery or check out the full range of products available through BigQuery in our data dictionary.
Track the most popular assets on leading DEXs such as Uniswap to uncover high-potential early stage tokens not yet listed on centralized exchanges.
With the Market Metrics , you can use the following parameters to source the specific information you're looking for:
Evaluate the market outlook for various dates using our solution. IV provides one figure that accounts for options contracts with various strikes and expiries, enabling a more accurate view of the overall market sentiment. For example, if an IV curve is steep to the left, this suggests the prevailing market sentiment sees prices falling.
With the Implied Volatility endpoint, you can use the following parameters. This example calculates just one expiry, but you can also run a script locally to request and combine expiries like the chart above. Contact our operations team for support with this.
2025-05-08
Asset code "MYX" is now assigned to MYX Finance. MYX Network has been re-assigned to use code "MYXN"
2025-05-15
Instruments for ebtc.finance (0x661c70333aa1850ccdbae82776bb436a0fcfeefb) have been updated to use Asset Code "EBTCF"
2025-05-16
Asset code "A" is now assigned to Vaulta. Instruments referring to Alpha Token have been remapped to use the asset code "ALPHAT".
Asset code "BOLD" is now assigned to the V2 Liquity BOLD Token (0x6440f144b7e50d6a8439336510312d2f54beb01d). Instruments referring to the Legacy Token (0xb01dd87b29d187f3e3a4bf6cdaebfb97f3d9ab98) have been remapped to use the asset code "BOLDV1".
A comprehensive breakdown of Kaiko's Analytics endpoints.
2024-06-27
Corrected instrument mapping for the following Perpetual-Futures on Bybit V2. These were originally assigned the quote asset USDT in error:
WIF-USDC
WLD-USDC
TON-USDC
2024-06-24
Updated documentation for implied volatilities smile and surface.
Accurately value your digital assets to meet fair value standards and regulatory requirements.
2024-03-15
Added documentation for trades v3.
Added blockchain parameter for instruments reference data.
A comprehensive breakdown our Data Feeds.
2025-02-27
All Clover Finance instruments listed under the base asset code of "CLOVER" will be remapped to use the code "CLV". Please use "CLV" to access any clover finance instruments.
2025-02-12
The asset code "LAYER" has been assigned to Solayer. Unilayer, has been re-assigned to use the asset code "UNILAYER".
2025-02-21
The asset code "AIC" has been assigned to AI Companions. ASCSIGN INC has been re-assigned to use the asset code "ASCSIGN".
exchange
usp3
start_time
2024-04-05T00:00:00.000Z
end_time
2024-04-13T00:00:00.000Z
interval
1d
page_size
100
sort
asc
Here's an example of an HTTP string request using the values above:
https://us.market-api.kaiko.io/v2/data/analytics.v2/exchange_metrics?exchange=usp3&start_time=2024-04-05T00:00:00.000Z&end_time=2024-04-13T00:00:00.000Z&interval=1d&page_size=100&sort=asc
When you receive your response, search for the following fields to find the data you need:
timestamp
asset_code
asset_total_volume_usd
base
btc
quote
usd
exchange
drbt
value_time
2024-09-25T10:20:09.224Z
expiry
2024-06-28T00:00:00.000Z
deltas
0.05
You can find specific asset codes from our instruments explorer or reference data.
Here's an example of an HTTP string request using the values above.
When you receive your response, search for the following fields to find the data you need:
implied_volatilities_strike
implied_volatilities_implied_volatility

Identify the number of addresses that hold at least 1% of the asset's total supply to effectively measure its popularity and the strength of its price discovery process.
How to build the request
With the Market Metrics Asset endpoint, you can use the following parameters to source the specific information you're looking for:
asset
crv
start_time
You can find specific asset codes from our or .
Here's an example of an HTTP string request using the values above:
When you receive your response, search for the following fields to find the data you need:
main_holders
number_of_holders
total_supply
For a more in-depth analysis of all wallets holding a particular asset, you can utilize .
2025-06-16
Asset code "HOME" is now assigned to Defi.app. OtterHome has been re-assigned to use code "OTTERHOME"
We’ve significantly expanded our decentralized exchange (DEX) and liquidity & borrowing (L&B) coverage across several Kaiko products. You can now access data for the following platforms:
Raydium: AMM, CLLM
Meteora: CLLM, DLLM
Orca: CLLM
Camelot
This enhanced coverage reflects out ongoing commitment to offer the latest and most comprehensive DeFi data. Check out the full coverage details here:
If you'd like to add any of these platforms to your Kaiko subscription, contact your Account Manager, or email .
Our coverage for centralized spot markets.
Convert your price to one of over 70 FOREX pairs with IFRs-Compliant rates for tax and compliance purposes.
Historical data: Since July 22, backfill on request
Live data: Yes
Granularity: Time periods between 1-minute and 1-day
Asset Coverage: > 70 pairs including:
aud-cad, aud-chf, aud-hkd, aud-jpy, aud-nzd, aud-sgd, aud-usd, cad-chf, cad-hkd, cad-jpy, cad-sgd, chf-hkd, chf-jpy, chf-zar, eur-aud, eur-cad, eur-chf, eur-czk, eur-dkk, eur-gbp, eur-hkd, eur-huf, eur-jpy, eur-nok, eur-nzd, eur-pln, eur-sek, eur-sgd, eur-try, eur-usd, eur-zar, gbp-aud, gbp-cad, gbp-chf, gbp-hkd, gbp-jpy, gbp-nzd, gbp-pln, gbp-sgd, gbp-usd, gbp-zar, hkd-jpy, nzd-cad, nzd-chf, nzd-hkd, nzd-jpy, nzd-sgd, sgd-chf, sgd-jpy, try-jpy, usd-cad, usd-chf, usd-cnh, usd-czk, usd-dkk, usd-hkd, usd-huf, usd-inr, usd-jpy, usd-mxn, usd-nok, usd-pln, usd-sek, usd-sgd, usd-thb, usd-try, usd-zar, zar-jpy
Price slippage measures how liquid a market is by measuring the gap between the expected and actual price of a marker order. When markets drop and there are large sell-offs, slippage often increases and it becomes harder to buy or sell at your desired price. This varies by exchange, trading pair, and time of day. Using Kaiko's data, we can measure potential BTC slippage across exchanges for different trade sizes. This provides valuable insight for market traders looking to minimize losses.
Use (slippage) with the following parameters to replicate this chart.
Identify an asset's liquidity, put it into a ranking and then compare it with the market cap to evaluate its true value. Go beyond simple market capitalization to generate more accurate token value estimates.
The graph above shows the market depth for FFT, and highlights how there was a significant drop in liquidity - even though it was in the top 20 for market cap - prior to its collapse.
With the Market Metrics Asset endpoint, you can use the following parameters to source the specific information you're looking for:
Evaluate an asset's volume-to-liquidity ratio. If the USD volume substantially exceeds the depth of the order books (a high volume-to-depth ratio), it suggests that the genuine market demand isn't accurately represented by the current trading volume, hinting at possible wash trading.
The liquidity-volume-ratio is significantly higher on Bitforex.
With the Market Metrics Asset endpoint, you can use the following parameters to source the specific information you're looking for:
Market depth is a measure of how well a market can handle large orders without impacting asset prices. A "deep" market has enough volume on both sides - bids (buy orders) and asks (sell orders) - to handle large orders while keeping prices stable. Market depth varies between exchanges and over time, so traders often monitor it across different platforms to determine the best market on which to trade.
Use (assets) with the following parameters to replicate this chart.
2025-09-26
We've identified some mapping discrepancies around instruments with the asset code NEIRO. This appears to originate from different exchanges using this same code to refer to at least 3 distinct assets.
The mapping in our reference data will be updated as outlined below:
NEIROCTO : First NEIRO on ETH
1NEIRO : NEIRO ETH
NEIRO
supports Bitcoin, Ethereum and Solana* blockchains, with comprehensive coverage for each network, including:
All native coin transfers
All token transfers (e.g., ERC-20, where applicable)
Staking deposits and withdrawals
To see the status of all Kaiko endpoints, visit .
Market Cap and Supply is available as part of our packages.
aave, aero, aster, bch, bgb, bnb, bonk, btc, cake, crv, dai, doge, ena, ens, ethfi, fdusd, fet, fil, floki, flr, grt, gt, imx, jup, kas, ldo, leo, link, ltc, mnt, myx, nexo, okb, ondo, op, paxg, pendle, pepe, pump, pyusd, ray, render, shib, sky, spx, trump, uni, usd1, usdc, usde, usdt, virtual, wif, wld, wlfi, xaut, xrp
The Kaiko Instrument explorer offers the same information as our various reference data endpoints, but in a user-friendly interface. .
Get a market-representative execution benchmark that’s ideal for reporting and demonstrating execution efficiency to clients.
Historical data: No
Live data: Yes
Granularity: Every second
A list of our published Reference Rates
https://us.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile?base=btc"e=usd&value_time=2024-09-09T14:00:00.000Z&expiry=2024-10-25T00:00:00.000Z&exchanges=drbt&strikes=30000,40000,50000,60000,70000,80000,90000,1000002025-09-23
Instruments listed below are update to use the base asset code ONOMY
CoinEx spot nom-btc becomes onomy-btc
Bitfinex spot nom-usd becomes onomy-usd & nom-usdt becomes
KuCoin spot nom-usdt
MEXC spot nom-usdt
bbsp & Bitget Spot bgsp: Instrument code 'pumpfun-usdt' will refer to Pump.fun for all ongoing dataExchange coverage: Price calculated using the top 10 exchanges on the Kaiko Exchange Ranking.
Asset coverage: Any traded traded pair on the given top 10 exchanges.
Limitations: Pricing is for specific trading pairs. If the pair doesn't belong to one of our vetted Exchanges (Top 10), the “unvetted” parameter needs to be set to “true” to get a price.
Methodology: 10s. Aggregation Period MidPrice + VWAP. Download here.
2023-01-01T00:00:00.000Z
end_time
2023-01-04T00:00:00.000Z
interval
1d
Arbitrum
Pancakeswap
Morpho
Gas fees
We provide historical data back to each chain's inception alongside real-time updates. We continuously expand our coverage, and can support new blockchains quickly. * Solana blockchain includes 30-days rolling history as part of any standard package. Custom packages offering longer rolling histories back to inception are also available.

Kaiko Blockchain Monitoring now supports Solana. Solana has emerged as a crucial platform for stablecoin growth and DeFi app development, and this enhancement reflects our commitment to supporting the networks most valuable to our clients. Kaiko Blockchain Monitoring provides real-time insights across all supported blockchains, with full historical coverage back to each chain’s inception. You can learn more about Kaiko Blockchain Monitoring here.
exchange
cbse
... and then
stmp
itbi
krkn
okcn
instrument_class
spot
intrument
btc-usd
Here's an example of a cURL string request using the values above:
When you receive your response, search for the following fields to find the data you need:
timestamp
ask_slippage
bid_slippage
Order Book Snapshots are available through the API with a 1-month rolling window. While this means you can't recreate the example shown above, the instant live data meets most trading and analysis needs.

asset
FTT
start_time
2022-11-05T00:00:00.000Z
end_time
2022-11-28T00:00:00.000Z
interval
1d
sources
true
You can find specific asset codes from our instruments explorer or reference data.
NOTE: To calculate the gap between market depth, you'll need access to market cap data.
Here's an example of an HTTP string request using the values above:
https://us.market-api.kaiko.io/v2/data/analytics.v2/asset_metrics?start_time=2022-11-05T00:00:00.000Z&end_time=2022-11-28T00:00:00.000Z&asset=fft&interval=1d
When you receive your response, search for the following fields to find the data you need:
timestamp
buy_market_depths
sell_market_depths
asset
ltc
start_time
2023-12-28T00:00:00.000
end_time
2024-01-28T00:00:00.000Z
interval
1d
sources
true
You can find specific asset codes from our instruments explorer or reference data.
Here's an example of an HTTP string request using the values above:
When you receive your response, search for the following fields to find the data you need:
total_off_chain_volume_usd
buy_market_depths - bid_volume_1
sell_market_depths - ask_volume_1
Stream
-
-
-
-
-
REST API
Since Genesis
Yes
Event-level (sub transaction)
AWS, Azure, Google Cloud Platform
Since Genesis
New CSV once a day
Event-level (sub transaction)
asset
btc
start_time
2022-11-05T00:00:00.000Z
end_time
2022-11-28T00:00:00.000Z
interval
1d
sources
true
Here's an example of a cURL string request using the values above:
When you receive your response, search for the following fields to find the data you need:
timestamp
buy_market_depths:
exchange
volume_usds: {bid_volume_0_1}
sell_market_depths:
exchange
volume_usds: {ask_volume_0_1}

(bid_volume_1) and asks (ask_volume_1) within 1% of the mid-price.Everything you need to start consuming Kaiko data across all our delivery channels:
Everything you need to get started with Kaiko Indices.
If you'd like to be alerted when we make changes to our products, sign-up to our mailing list here.
Stream
-
-
-
-
-
REST API
DEXs: Since Genesis CEXs: Since 2010
No. T+1 ₁
1h, 1d
Note: for the "token information" category, we only cover ERC-20 tokens. Only 50 tokens have been backfilled, but we can add more on demand.
All cefi spot and defi spot instruments available on covered exchanges.
BigQuery
-
₁ Data is aggregated once a time period closes. This means you need to wait for the current period to end before accessing the latest dataset.
For instance, if it's currently 18:07, you'll need to wait until 19:00 for that hour's data to become available.
For instance, if it's currently 18:07, you'll need to wait until 19:00 for that hour's data to become available.
Please note, if your request spans multiple hours, data will be returned up to the hour of request, excluding any activity that has occurred in the minutes that have passed since the last full hour. The same principle applies to requests spanning multiple days.
REST API
Yes, since inception
No
1d
The asset code "HYPE" has been assigned to Hyperliquid. Supreme Finance has been re-assigned to use the asset code "HYPE2"
We're excited to announce that our Blockchain Monitoring solution is now accessible through REST API. Wallet Data allows you to:
Access complete transaction histories across all supported blockchains
View real-time wallet balances
Track historical balance changes for the source of wealth checks
Query detailed transaction data
Whether you need to monitor a single wallet or multiple addresses, our API delivers the data in a standardized format for seamless integration into your applications. Get started by exploring the documentation below.
We've launched two new reference APIs to help you quickly find our coverage:
This endpoint retrieves a complete list of our published Reference Rates. Our rules-based and independent rates aim to increase pricing transparency by providing a reliable and accurate benchmark.
This endpoint retrieves a complete list of the defi protocols supported by Kaiko data. This can help you identify which exchanges are defi when working with our Market Data.
As demand for complex data in smart contracts increases, we’re really pleased to introduce our new on-chain delivery channel. The new capability brings our trusted market data directly to the blockchain for the first time, providing reliable digital asset insights to power any on-chain contract.
To demonstrate its power, we’ve deployed Kaiko Cross Prices on-chain with free hourly price updates.
Read our to try it for yourself.
Custom portfolio valuation - build completely customizable single-asset or multi-asset price feeds for NAV calculations
Value at risk calculation - Calculate value at risk, computed by a proprietary and thoroughly backtested methodology
We also offer fast, reliable, and secure connections through GPNs and terminals. Those we cover include:
BT Radianz
Connexus
Bloomberg
B-PIPE
For more information, contact [email protected].
An introduction to Kaiko and our products.
Kaiko is the global independent leader in digital assets market data, analytics, indices, and monitoring for institutional investors, financial services firms, and regulators.
Kaiko provides the foundational data infrastructure bridging traditional finance and on-chain capital markets through regulatory-compliant and auditable data. For over 10 years, we've delivered the trusted, transparent, and actionable financial data that institutions need to navigate both centralized and decentralized crypto markets.
We provide data solutions across four main pillars:
Market data feeds for front and mid-office operations, business intelligence, and risk management.
Proprietary data analytics solutions for risk analysis, fair value pricing for marking, and derivatives listings.
Market-level and blockchain solutions for surveillance, AML/CFT compliance, and research.
Kaiko Indices offers institutional-grade benchmarks and indices, setting the standard for reliability and transparency in the digital asset market. As a regulated Benchmark Administrator under the EU BMR framework and compliant with IOSCO principles, we empower exchanges, asset managers, and financial institutions with trusted data solutions that support robust settlement and risk management practices.
Depending on the solution, you can consume our data by Rest API, streaming service, or via cloud service providers. Have a look at our to see which solution are available by which channel, as well as specific information on the data's granularity, historical availability.
Being able to react quickly to major hacks or market events before most others can help market participants execute trades and orders more effectively.
Take the Bybit hack as an example: a security breach occurred, but the market was slow to react. It wasn’t until hours later, when Bybit’s CEO made an official announcement, that a full market response took place. However, some participants spotted the early signs and acted before the news became public. Their trading activity left a visible footprint in trading data, creating a window of opportunity for others to recognize these early warning signs and react accordingly to capture the alpha. By doing so, they position themselves ahead of the broader market, rather than reacting after the widespread panic set in.
To secure the best trading conditions, market participants must monitor data in real-time and act quickly. Reacting early reduces the impact of their trades, helping them stay ahead before market depth deteriorates and a large-scale sell-off takes hold.
By leveraging via Kaiko Stream, participants gain access to real-time, tick-level trade data the moment transactions occur. This allows them to identify unusual market movements—such as an unexplained sell-off followed by a sharp recovery—and react swiftly to minimize losses and seize opportunities before the broader market.
Track the volume of any asset trading on a centralized or decentralized exchange. Quickly identify the top trending tokens and spot instances where volumes differ from market expectations.
With the Market Metrics , you can use the following parameters to source the specific information you're looking for:
curl -X GET "https://us.market-api.kaiko.io/v2/data/order_book_snapshots.v1/exchanges/cbse/spot/btc-usd/ob_aggregations/slippage?slippage=100000&interval=1h" -H "accept: application/json" -H "X-Api-Key: YOUR_API_KEY"curl -X GET "https://us.market-api.kaiko.io/v2/data/analytics.v2/asset_metrics?asset=btc&start_time=2022-11-05T00:00:00.000Z&end_time=2022-11-28T00:00:00.000Z&interval=1d&sources=true" -H "accept: application/json" -H "X-Api-Key: YOUR_API_KEY"IRESS
REST API
Stream
Cloud Delivery
On-Chain
Total Value Locked is part of our Market Explorer packages.
aave, abracadabra-money, acala, across, aerodrome, agora, alongside, angle, ankr, anzen, aperture, apeswap, apollo, apollox, archblock, astar, avantprotocol, axelarnetwork, balancer, bancor, beethovenx, benqi-lsd, bifrostio, bitgo, blackhole, blackrock, blockchain-capital, bmx, bnsol, botto, bufferfinance, camelot, capapp, cbeth, centrifuge, circle, coinshift, compound, comtech, curve, dolomite, dopex, drift-protocol, dydx, eigenlayer, elixir-protocol, ethena, etherex, etherfi, euler, fathom, fd121limited, fidelity, franklintempleton, frax-finance, fraxlend, fraxstablecoin, friend-tech, gemini, globaldollarnetwork, gmx, hamiltonlane, hegic, holdstation, honeypop, hydradx, impossible-finance, index-cooperative, instadapp, inversefinance, ipor-protocol, jito, jpycoin, jupiter, kamino, katana, kyberswap, layerzero, level-finance, lido-finance, lighter, liquid-collective, liquity, listadao, loopring, lybra, lyra, makerdao, mamo, mantra, maple-finance, marinade, matrixdock, maverick, merkle-trade, metamask, metavault-trade, meteora, midas, monerium, moonwell, morpho, mummy-finance, mux, notional-finance, okutrade, ondo, openedendigital, opyn, orca, originprotocol, pancakeswap, pangolin, paxos, paypal, pendle, perpetual-protocol, pharaoh, pika-protocol, polymarket, premia, primenumbers, prisma, quickswap, radiant-capital, raft, ramses, raydium, reflexer, republicnote, reserve, ribbon-finance, ringsprotocol, ripplelabs, rocket-pool, sanctum, seamless-protocol, securitize, shadowexchange, shoebill-finance, silo, societegenerale, solidlizard, solv-protocol, sonne, spark, spiko, stader, stafi, stakestone, stakewise, superstate, sushiswap, swell, symbiotic, synapse, syncswap, synfutures, tether, thena, theo, thetanuts, thruster, tokemak, tokenlon, tornado-cash, toucan-protocol, tradable, trader-joe, uniswap, usual, vaneck, velodrome, venus, verse, vertex-protocol, vesta-finance, vnx, wisdomtree, worldlibertyfinancial, xdc, zerolend, zkswap, zksync-era-bridge, zyberswap
Yes
End of day and intraday pricing
All cefi spot and defi spot instruments available on covered exchanges.
Value at risk calculation
• REST API
DEXs: Since Genesis CEXs: Since 2010
Yes
Intraday updates of daily VaR
All cefi spot and defi spot instruments available on covered exchanges.
Custom portfolio valuation
• REST API
DEXs: Since Genesis CEXs: Since 2010
To subscribe to real-time trade data for a specific asset, configure your connection to Kaiko Stream as below. In this example, we'll monitor ETH spot trades on all exchanges covered by Kaiko. This data will show every single trade involving ETH. To subscribe to just one venue, see example 2.
from __future__ import print_function
import logging
import os
import grpc
from google.protobuf.json_format import MessageToJson
from google.protobuf import duration_pb2
Once configured, your received messages will look like this, containing the trade amount, the price at which it was executed, if the trade was a sell or a buy of the asset, and the exchange involved.
exchange
huob
start_time
2024-04-01T00:00:00.000Z
end_time
2024-04-11T00:00:00.000Z
interval
1d
page_size
100
sort
asc
Here's an example of an HTTP string request using the values above:
When you receive your response, search for the following fields to find the data you need:
timestamp
asset_code
total_volume_usd
Single asset reference rates
• Stream
BigQuery
Since Genesis
Event-level (sub transaction)
-
-
-
-
Exchange provided metrics - risk information such as greeks and IV in real-time.
IV calculation - Calculate volatility on a minute-by-minute basis from options market prices as smiles or surfaces.
Token-level liquidation volumes - The volumes of liquidations for derivatives contracts for a given asset, expressed in USD value.
Crypto asset reference data, including identifiers, supply metrics, and derivative specifications.
Assets, exchanges, instruments, and associated codes - Reference data including FIGI codes
Derivatives pricing information - The mark price, index price, and price (last traded price) of a derivative.
Derivatives contract information - details of the contracts, including base asset, quote asset, contract size, contract size unit, expiry, strike price, and underlying index.
Kaiko's Supply and Market Cap covers circulating supply metrics for crypto assets through normalized API endpoints.
Total Supply - The current total number of tokens that were emitted. Includes locked tokens.
Circulating Supply - The current number of tokens that are free to circulate. This excludes locked tokens, lost tokens, burnt tokens.
Market Capitalization - The circulating_supply * price
*Historical data availability aligns to the date of an asset's deployment e.g. if an asset becomes available in January 2026, historical data will be available from this date.
State price - For when there isn’t enough liquidity to produce a . Especially useful for DeFi-only assets, state price derives a price by analyzing the real-time state of liquidity pools for the selected asset, inspecting the pools’ reserves, balances, and recent flow to infer a-price consistent with current market conditions.
from __future__ import print_function
import logging
import os
import grpc
from google.protobuf.json_format import MessageToJson
from google.protobuf import duration_pb2
from kaikosdk import sdk_pb2_grpc
from kaikosdk.core import instrument_criteria_pb2, assets_pb2
from kaikosdk.stream.aggregates_ohlcv_v1 import request_pb2 as pb_ohlcv
from kaikosdk.stream.aggregates_vwap_v1 import request_pb2 as pb_vwap
from kaikosdk.stream.market_update_v1 import request_pb2 as pb_market_update
from kaikosdk.stream.market_update_v1 import commodity_pb2 as pb_commodity
from kaikosdk.stream.trades_v1 import request_pb2 as pb_trades
def market_update_request(channel: grpc.Channel):
try:
with channel:
stub = sdk_pb2_grpc.StreamMarketUpdateServiceV1Stub(channel)
responses = stub.Subscribe(pb_market_update.StreamMarketUpdateRequestV1(
# start of parameter configuration #
instrument_criteria = instrument_criteria_pb2.InstrumentCriteria(
exchange = "binc",
instrument_class = "spot",
code = "eth-*"
),
# end of parameter configuration #
commodities=[pb_commodity.SMUC_TRADE]
))
for response in responses:
print("Received message %s" % (MessageToJson(response, including_default_value_fields = True)))
# print("Received message %s" % list(map(lambda o: o.string_value, response.data.values)))
except grpc.RpcError as e:
print(e.details(), e.code())
def run():
credentials = grpc.ssl_channel_credentials(root_certificates=None)
call_credentials = grpc.access_token_call_credentials(os.environ['KAIKO_API_KEY'])
composite_credentials = grpc.composite_channel_credentials(credentials, call_credentials)
channel = grpc.secure_channel('gateway-v0-grpc.kaiko.ovh', composite_credentials)
market_update_request(channel)
if __name__ == '__main__':
logging.basicConfig()
run()Received message {
"commodity": "SMUC_TRADE",
"amount": 0.1846,
"class": "spot",
"code": "eth-usdc",
"exchange": "binc",
"sequenceId": "cuuuc51nce0cg8o1ltk0",
"id": "80983213",
"price": 2400.87,
"tsExchange": {
"value": "2025-02-25T15:47:32.016Z"
},
"tsCollection": {
"value": "2025-02-25T15:47:32.171124934Z"
},
"tsEvent": "2025-02-25T15:47:32.340833187Z",
"updateType": "TRADE_BUY",
"additionalProperties": {}
}Yes
1m, 1h, 4h, 1d
All traded instruments.
• REST API
Since July 2020
Yes
1m, 1h, 4h, 1d
All traded instruments.
• AWS, Azure, Google Cloud Platform
Since July 2020
No
1m, 1h, 4h, 1d
All traded instruments.
IV Calculation
• REST API
Since April 2021
Yes
1m
Deribit: BTC, ETH, SOL, MATIC, XRP
OKX: BTC, ETH
Token-level liquidation volumes
Since Jan 8th 2025
Yes
1h
All traded instruments.
Exchange-provided metrics
• Stream
No
Derivatives pricing information
• Stream
72 hours on replay
Yes
Tick-level
• REST API
Since July 2020
No
1m - 1d
• AWS, Azure, Google Cloud Platform
Since July 2020
No
1m, 1h, 4h, 1d
Derivatives contract information
• REST API
Since July 2020
No
1m - 1d
Assets, exchanges, instruments, and associated codes
• REST API
n/a
n/a
n/a
All bids and asks
• Stream
State price
Stream
No
Yes
1s non-configurable
-
REST API
24 hours only
Yes
1s non-configurable
Aerodrome
Basic, Slipstream
Base
Balancer
v1
Ethereum
Balancer
v2
Arbitrum, Avalanche, Base, Ethereum, Polygon
Camelot
v3
Arbitrum
Only the largest pools contributing 95% of volume over last 7 days.
Total coverage: 105 assets.
Full list:
72 hours available by replay
Yes
Updates every 5 seconds
3 daily fixings/closes in NY, LDN and SG time zones
• REST API
Since inception
No
For historical data only. Includes all publications
Indices
• Stream
Benchmarks - Single asset reference rates
72 hours available by replay
Yes
Updates every 5 seconds
3 daily fixings/closes in NY, LDN and SG time zones
REST API
(CSV on demand)
Since mid-September 2025 for available assets*
Yes
Supply
5 min increments for raw data.
Aggregated supply
5-minute to 30-day intervals, aggregated from "supply" data.
aave, aero, aster, bch, bgb, bnb, bonk, btc, cake, crv, dai, doge, ena, ens, ethfi, fdusd, fet, fil, floki, flr, grt, gt, imx, jup, kas, ldo, leo, link, ltc, mnt, myx, nexo, okb, ondo, op, paxg, pendle, pepe, pump, pyusd, ray, render, shib, sky, spx, trump, uni, usd1, usdc, usde, usdt, virtual, wif, wld, wlfi, xaut, xrp
Market depth (snapshot) - The number of orders at each price level either side of the mid price of an order book. The higher the order volume, the deeper and more liquid the market is. Shown as a point-in-time view generated every 30 seconds.
Market depth (aggregation) - The number of orders at each price level either side of the mid price of an order book. The higher the order volume, the deeper and more liquid the market is. Shown as an aggregation of all 30-second snapshots from the period requested.
Price slippage (snapshot) - The difference between the expected price for a trade and the executed price. High slippage can be a sign of low liquidity on the exchange. Shown as a point-in-time view generated every 30 seconds.
Price slippage (aggregation) - The difference between the expected price for a trade and the executed price. High slippage can be a sign of low liquidity on the exchange. Shown as an aggregation of all 30-second snapshots from the period requested.
Bid-ask spread (aggregation) - The difference between the best bid and the best ask on an instrument’s order book is an indicator of liquidity.
Raw order book snapshot - The raw data on which our Level 2 Aggregations such as market depth , bid/ask spread, and price slippage are built. Details a point-in-time view of the bids and asks on an exchange's order book to 10% depth. Used to build your own custom level 2 aggregations. The snapshot is produced every 30 seconds.
Tokens in a liquidity pool - The total total value locked (TVL) in a liquidity pool, as well as the unit of tokens available. A large number suggests the pool can handle large trades while maintaining low slippage.
Tokens in a liquidity pool (uniswap only) - The total total value locked (TVL) in a uniswap liquidity pool.
Interest rates, borrowed and deposited amounts - Block-by-block supply and times series for supply and borrow interest rates.
All trades - The most granular level of trading data, and contains every single trade that occurs on centralized and decentralized exchanges.
Best bids and asks (top of book) - shows the best bid and best asks on order book, provided in real-time.
Borrows, repayments, liquidations, and withdrawals - All events on a decentralized lending protocol.
Derivative liquidation events - All derivative liquidation events for a given instrument on an exchange, including all the details available for the event like price and position (long or short), and unique trade ID.
aleth, ampl, andybsc, anon, apu, ausd, bold, bome, bonksol, br, bsol, busd, cbada, cbbtc, cbdoge, cbeth, cbltc, cbxrp, crvusd, cusd, cusdo, deusd, ebtc, ethx, eul, eura, eurc, ezeth, frax, frxeth, frxusd, fwog, fxs, gho, grail, hait, hsol, hubsol, inf, jupsol, khype, klima, kta, kudai, lisusd, lobtc, lseth, lst, lusd, lvlusd, mag7ssi, meth, michi, miggles, mim, mkr, moobifi, musd, myx, oeth, ohm, ousdt, pufeth, pumpbtc, pyusd, rai, reth, rseth, rsweth, savax, solvbtc, srm, susd, susde, susds, sweth, tbtc, thbill, ueth, unbtc, unibtc, usd0, usd0plus, usd1, usdai, usdav, usde, usdf, usdg, usdhl, usdl, usdplus, usds, usdt0, usdtb, usdx, usdz, usol, usr, vsol, wampl, wbtc, weeth, wif, wsteth, wsthype, zbtcNo
At least one snapshot per minute.
All cefi spot instruments available on covered exchanges.
Raw order book snapshot
• AWS, Azure, Google Cloud Platform
Varies per exchange. Data from 2015.
No
At least one snapshot per minute. New CSV once day.
All cefi spot and derivative instruments available on covered exchanges.
• BigQuery, Snowflake
Varies per exchange. Data from 2015.
No
At least one snapshot per minute. Data refreshes once a day.
All cefi spot and derivative instruments available on covered exchanges.
Tokens in a liquidity pool
• REST API
Since genesis
Yes
Block-by-block
All defi spot instruments available on covered exchanges.
Interest rates, borrowed and deposited amounts
• REST API
Since genesis
Yes
Tick-level
All defi spot instruments available on covered exchanges.
Market depth Bid ask spread Price slippage
-
• REST API
1-month rolling
Yes
Tick-level
All cefi spot instruments available on covered exchanges.
• REST API
Since 2010
Yes
Tick-level
All cefi spot instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since 2010
New CSV once a day
Tick-level
All cefi spot instruments available on covered exchanges.
• Snowflake, BigQuery
Since 2010
Data refreshes once a day
Also available in near real-time
Tick-level
All cefi spot instruments available on covered exchanges.
Best bids and asks
• Stream
72 hours on replay
Yes
Tick-level
All cefi spot instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since December 2022
New CSV once a day
Tick-level
All cefi spot instruments available on covered exchanges.
Borrows, repayments, liquidations, and withdrawals
• REST API
Since genesis
Yes
Tick-level
All L&B instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since genesis
New CSV once a day
Tick-Level
All L&B instruments available on covered exchanges.
Derivative liquidation events
• REST API
Since Jan 8th 2025
Yes
Tick-level
All cefi derivative instruments available on covered exchanges.
All trades
• Stream
72 hours on replay
72 hours on replay
Yes
Tick-level
All cefi spot and derivative instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since August 2023
New CSV once a day
Tick-level
All cefi spot instruments available on covered exchanges.
Mints and burns
• REST API
Since genesis
Yes
Tick-level
All defi spot instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since genesis
New CSV once a day
Tick-level
All defi spot instruments available on covered exchanges.
-
Curve
v1, v2
Arbitrum, Avalanche, Base, Ethereum, Polygon, Optimism
Etherex
v3
Linea
Hyperswap
v3
HyperEVM
Meteora
AMM
Solana
Orca
Solana
Pancakeswap
v3
BSC, Ethereum, Linea
Raydium
AMM, CLLM
Solana
Uniswap
v2
Ethereum
Uniswap
v3
Arbitrum, Avalanche, Base, BSC, Bob, Celo, Ethereum, Polygon, Optimism
OHLCV - The open, high, low, and close prices for a given period, alongside the volume traded.
VWAP - The average price of an asset over a specific time period, weighted by the volume of trades. VWAP can be used to gauge market sentiment and momentum shifts. VWAP formula: ∑(Price * Volume) / ∑Volume.
Trade count - The total number of trades from a given period.
Direct price - Calculates a price for high-liquidity pairs using real-life trades from DeFi and CeFi exchanges.
Synthetic price - Suitable when there's insufficient real-life trades to calculate a direct price. Calculates prices by routing through intermediary assets with higher liquidity (e.g., ETH → BTC → JPY instead of ETH → JPY)
Principal market price - Calculates a price using by determining a principal market for a trading pair and aggregating the real-life trades from that market.
Level 1 & Level 2 Data
• Level 1 Aggregations
Trade count
OHLCV
VWAP
Stream, REST API, AWS, Azure, Google Cloud Platform, Snowflake, BigQuery
2023-12-12
Mapping update: Changes implemented for the following Instruments due to Ronin And Romanian Fiat Currencies having an identical ticker.
Romanian Leu: ron → ronle .
ron is now referring to Ronin.
2023-12-11
Added CEX and DEX Coverage sections.
2023-12-04
Exchange Metrics - Retrieve off-chain and on-chain metrics that help performing exchange analysis.
2023-11-23
Added documentation for Lending and Borrowing Rates & Liquidity CSV.
Renamed product DEX Liquidity Events into Mints and Burns.
Renamed product DEX Liquidity Snapshots into Token Reserves.
2023-11-16
Added documentation for Wallet Data CSV files on Bitcoin.
2023-11-13
Mapping update: Changes implemented for the following Instruments due to Merit Circle Migration from MC to BEAN Ticker.
BEAM: beam → beamprivacy . Name Changed from BEAM to BEAM (Privacy).
beam is now referring to BEAM (Merit Circle).
2023-11-10
Mapping updates:
Asset FLOKIINU has been deprecated as it was a duplicate of existing FLOKI. All instruments are now referencing the asset code FLOKI
MBOX-USD (MOBOX) instruments on KuCoin & MEXC which were previously mapped as fiat USD (United States Dollar) have been corrected to USDT (Tether). The new instrument code for these is MBOX-USDT
Binance LUNA-BUSD & LUNA2-BUSD perpetual future contract codes are now mapped separately. No ongoing data is present for LUNA-BUSD
2023-10-26 - Data Quality Update. We identified and resolved an issue that caused duplication in our MEXC trades data. As of 2023-10-26, all new MEXC trades data will be free from such duplication. Please note that due to MEXC's unique data structure, we are unable to retroactively correct the impacted historical data. We recommend users to consider this when using any MEXC trade data prior to 2023-10-26.
2023-10-26
Added 'live' parameter for all on-chain products.
2023-09-22
Added documentation for Wallet Data CSV files on Ethereum.
Added field and parameter blockchain for Liquidity Events and Liquidity Snapshots.
Added documentation for Blockchain Reference Data.
2023-09-18
Reference Data behavior Update - The "trade_end_timestamp" field will only be populated after 7 consecutive days of inactivity. Previously, this field would be populated after 1 day of inactivity.
2023-07-26
Mapping update: Change implemented to the code used for DMarket. Code changed to accomodate the actively trading Dream Machine Token.
DMarket: DMT → DMK
Dream Machine Token: - → DMT
2023-06-08
Mapping update: Changes implemented for BitMEX Perpetual Futures contracts. Instrument codes are no longer using "base_asset" - "quote_asset" convention for API codes. To differentiate between different Perpetual Future contract types, these should now be queried using the codes assigned by BitMEX
E.g. BTC-USD → XBTUSD
Added documentation for Robust Pair Price and Cross Price v2.
2023-06-06
Added the Australian Exchange, Independent Reserve's case of taker_side_sell and pulled off the Google Doc page of order book data while updating the contents
2023-05-31
Added documentation for CSV files of the following products: Order Book Snapshots, Derivatives Metrics, OHLCV candles, VWAP, Count-OHLCV-VWAP
2023-05-17
Mapping update: Changes implemented for the following Instruments
Toncoin: toncoin → ton
OKX: LUNA/BTC → OKX: LUNA2/BTC
2023-05-03
Added documentation for Top of Book CSV files
2023-04-24
Added documentation for Lending & Borrowing Rates and Liquidity
2023-04-11
Mapping update: Changes implemented for the following Instruments
METIS Dao:
Gemini: MTS/USD → Gemini: METIS/USD
Huobi: MTS/USDT → Huobi: METIS/USDT
2023-04-06
Mapping update: Changes implemented for the following Instruments
Polytrade: OKEX TRADE/USDT → OKEX POLYTRADE/USDT
METIS Dao:
OKEX MTS/USDT → OKEX METIS/USDT
COINBASE MTS/USDT → COINBASE METIS/USDT
GoMining Token: BITTREX GMT/USDT → BITTREX GOMININGTOKEN/USDT
2023-04-05
Implied Volatility Surface - Retrieve calibrated and interpolated implied volatilities from options market prices
2023-04-04
Updated the list of Tick-Level Order Book CSV files.
Upbit
Huobi Derivatives Market
Crypto Facilities
Bithumb
Binance US
2023-03-30
Asset Metrics - Retrieve off-chain and on-chain metrics that help performing asset analysis.
2023-03-29
Mapping update: Changes implemented for the following Assets
Republic Protcol: REPUP → REN
Everest: ID → EVERID
ID is now mapped to Space ID
PrimeDAO: PRIME → PRIMEDAO
PRIME is now mapped to Prime Echelon
Lition: LIT → LITION
LIT is now mapped to Litentry
AXL is now mapped to Axelar
2023-03-27
Mapping update: Changes implemented for the following Assets
Facebook : FB → FACEBOOK
FB is now mapped to Fenerbahce
Orbitcoin : ORB → ORBITCOIN
ORB is now mapped to Orbcity
2023-03-23
Mapping update: Changes implemented for the following Assets
Arbit : ARB → ARBIT
ARB is now mapped to Arbitrum
SoloCoin : SOLO → SOLOC
SOLO is now mapped to Sologenic
2023-02-21
Mapping update: Changes implemented for the following Assets
OHM : OHM → OHMV1
OHM is now mapped to OHM V2
2023-02-06
OKX can now be included in Implied Volatility computations
2023-02-02
Cross Price - Extrapolation can be set to avoid missing values for low liquidity pairs
2023-01-26
Derivative Metrics (Price) - end_time became exclusive
Derivative Metrics (Risk) - vega added to the REST API responses
2023-01-16
Binance Options have been added to Derivative Metrics, Trade, and Order Book data
2023-01-12
CSV Files - Tick By Tick Order Book added to the doc
2022-06-03
Mapping update: Changes implemented for the following Assets
Polkadot : PDOT → DOT
Uniswap : UNISWAP → UNI
FTX Token : FTXT → FTT
LEO Token : LEOT → LEO
MCDEX : MCDEX → MCB
Mercurial : MERC → MER
Oxygen : OXYG → OXY
Merit Circle : MRC → MC
Mines of Dalarnia : DARA → DAR
Cybermiles : CYMI → CMT
FairGame : FAIRGAME → FAIR
Origin Sport : ORSP → ORS
2022-05-18
Mapping Update: FTXUSD deprecation
All USD quoted spot instruments trading on FTX (International) are mapped to have fiat USD (United States Dollar) as 'quote_asset'
2022-04-29
Derivatives API update: Derivatives API endpoint split into 3 endpoints, which are reference, risk, and price
2022-02-17
Mapping update
Bittrex SUSHI/BTC corrected from BTC/SUSHI
2022-02-15
Mapping update
Pax Dollar (asset) updated to use code USDP & USDP stablecoin: Unit Protocol (asset) updated to use code UUSDP
2022-01-06
Mapping update
SubGame (asset) code updated to use code SGBM & Songbird (asset) updated to use code SGB
2021-12-28
Mapping update
BitDAO (asset) code updated to use code BIT
2021-12-24
Quote Asset correction for FTX perpetual-future instruments
2021-12-20
Cross Price (Spot Exchange Rate) endpoint updated to support non-fiat currencies as 'quote_asset'
2021-12-10
Mapping update
Stox (asset) code changed from STX to STOX & Blockstack (asset) code changed from BSTX to STX
2021-12-08
Mapping update
Quote Asset correction for Bitfinex Tether quoted instruments
• Level 1 Tick-Level
All trades
Stream, REST API, AWS, Azure, Google Cloud Platform, Snowflake, BigQuery, Private Networks
• Level 1 Tick-Level
Best bids/asks (top of book)
Stream, AWS, Azure, Google Cloud Platform
• Level 2 Aggregations
Market depth, bid-ask-spread
Price slippage
Tokens in a liquidity pool
Interest rates, borrowed and deposited amounts)
REST API
• Level 2 Aggregations
Raw order book snapshot
AWS, Azure, Google Cloud Platform, Snowflake, BigQuery
• Level 2 Tick-Level
All bids and asks
Stream, AWS, Azure, Google Cloud Platform
• Level 2 Tick-Level
Mints and burns
REST API, AWS, Azure, Google Cloud Platform
Reference Data
• Free tier
Assets, exchanges, instruments, and associated codes
REST API
• Advanced tier
Derivatives pricing information
Stream, REST API
• Advanced tier
Derivatives contract information
REST API
• Premium tier
Market capitalization and circulating supply
REST API
Kaiko Fair Market Value
• Standard subscription
-
Stream, REST API
• Oanda FX add-on
-
REST API
Kaiko Best Execution
• Standard subscription
-
Stream
Kaiko Derivatives Risk Indicators
• Basic tier
Exchange-provided metrics
REST API, AWS, Azure, Google Cloud Platform
• Advanced tier
IV calculation Token-level liquidation volumes
REST API
Kaiko Portfolio & Risk Management
• Standard subscription
Custom portfolio valuation
Value at risk calculation
REST API
Kaiko Blockchain Monitoring
• Standard subscription
-
AWS, Azure, Google Cloud Platform, BigQuery
Kaiko Market Explorer
• Standard subscription
-
REST API, BigQuery
Kaiko Benchmarks
• Single-asset
-
Stream, REST API
• Multi-asset
-
Stream
Yes
1s
All cefi spot, defi spot, and cefi derivative instruments available on covered exchanges.
• Rest API
Since 2010
Yes
1s - 1d
All cefi spot, defi spot, and cefi derivative instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since 2010
New CSV once a day
1s - 1d
All cefi spot instruments available on covered exchanges.
• Snowflake, BigQuery
Since 2010
Data refreshes once a day
Also available in near real-time
1s - 1d
All cefi spot instruments available on covered exchanges.
VWAP
• Stream
72 hours on replay
Yes
Monthly-level
1s - 1d
Yearly-level
1h, 4h, and 1d
All cefi spot, defi spot, and cefi derivative instruments available on covered exchanges.
• Rest API
Since 2010
Yes
Monthly-level
1s - 1d
Yearly-level
1h, 4h, and 1d
All cefi spot, defi spot, and cefi derivative instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since 2010
New CSV once a day
Monthly-level
1s - 1d
Yearly-level
1h, 4h, and 1d
All cefi spot, defi spot, and cefi derivative instruments available on covered exchanges.
• Snowflake, BigQuery
Since 2010
Data refreshes once a day
Also available in near real-time
Monthly-level
1s - 1d
Yearly-level
1h, 4h, and 1d
All cefi spot, defi spot, and cefi derivative instruments available on covered exchanges.
Trade count
• REST API
Since 2010
Yes
1s - 1d
All cefi spot, defi spot, and cefi derivative instruments available on covered exchanges.
• AWS, Azure, Google Cloud Platform
Since 2010
New CSV once a day
1s - 1d
All cefi spot instruments available on covered exchanges.
• Snowflake, BigQuery
Since 2010
Data refreshes once a day
Also available in near real-time
1s - 1d
All cefi spot instruments available on covered exchanges.
OHLCV
• Stream
72 hours on replay
Stream
No
Yes
Publication window: 1s, 5s, 10s, 15s, 30s, 1m Computation window: 1s, 5s, 10s, 15s, 30s, 1m, 5m
All cefi spot and defi spot instruments available on covered exchanges.
REST API
DEXs: Since genesis
CEXs: Since 2010
Yes (15 minute lag on DEXs)
Time periods between 1-second and 1-day
All cefi spot and defi spot instruments available on covered exchanges.
Synthetic price
Stream
No
Yes
Publication window: 1s, 5s, 10s, 15s, 30s, 1m Computation window: 1s, 5s, 10s, 15s, 30s, 1m, 5m
All cefi spot and defi spot instruments available on covered exchanges.
REST API
DEXs: Since genesis
CEXs: Since 2010
Yes (15 minute lag on DEXs)
Time periods between 1-second and 1-day
All cefi spot and defi spot instruments available on covered exchanges.
Principal market price
Since July 2025
Yes
Single point in time only
Top 20 ranked exchanges from , filtered by those offering USD spot pairs.
All USD spot pairs on covered exchanges.
-
Direct price
We've made significant improvements to Kaiko Derivatives Risk Indicators. Users can now configure their IV using one of three calculation methods:
Deltas
Strikes
Forward log moneyness
We've also made several enhancements, allowing finer granularity in your computations.
Kaiko Derivatives Risk Indicators helps you manage risk in the options market with confidence, calculating the potential volatility of any crypto asset with user-provided criteria. It's made specifically for crypto, backed by our trusted market data. Contact us if you'd like to learn more about it.
We've brought our stream documentation into our new Developer Hub. Take a look here - you'll see we've added specific code examples for each Kaiko data solution and significantly improved discoverability. As always, we welcome your feedback, so please let our operations team know if you have any thoughts.
As a reminder, Kaiko Stream is the fastest and easiest way to consume Kaiko Data. Once connected to a stream, you'll get constant updates, providing true real-time data. Key benefits:
✔ Real-time updates delivered instantly with no need to call an API each time
✔ Data on multiple exchanges or instruments simultaneously in one stream
✔ gRPC technology for the best data delivery and uptime
✔ Customizable calculations, frequencies, and channels


Tracing blockchain transactions and wallets is critical in the aftermath of a hack, enabling investigators to follow stolen funds, uncover illicit activity, and improve transparency. Kaiko Blockchain Monitoring provides direct, UI-free access to on-chain data, ensuring full control over data extraction and analysis. Unlike proprietary interfaces that can be restrictive, this approach allows for flexible, scalable investigations tailored to evolving threats.
This guide demonstrates how to:
Trace fund movements across Ethereum wallets
Aggregate and analyze on-chain flows
Conduct scalable investigations without the constraints of a predefined UI
To see the balances and transactions for a single Ethereum wallet, use this request example.
To automatically trace the destination of funds, it's wise to use a custom Python script that:
Queries multiple wallets in a batch request
Automatically requests information on subesquent "hops" or flows
Consolidates into a final list of destinations addresses
This script dynamically traces fund flows across multiple paths, quickly generating a csv with all wallets associated with the hack up to 4 hops. You can re-run the script any time to get an instantly up-to-date picture of the stolen funds and any new associated wallets. You can also add extra steps to trace across as many hops as required.
Level 4
90055.16267862360
0x00214cb533e66d062f420125b99fc60b6b3069a0
Level 3
239743.47125701400
0x00214cb533e66d062f420125b99fc60b6b3069a0
Level 4
239743.47125701400
0x0026b786684690772d87a448f9ff909669c83649
Level 4
152745.4588658880
0x002b8edf90443fca65241075709db049187b9603
Level 4
327137.64441197500
0x002fd753417a7348fdd84b4be390e399515fc488
Level 4
264196.3332642850
0x000010036c0190e009a000d0fc3541100a07380a
Level 4
165439929.37011100
0x000949aef11d7b124a3c333e737af450fc70682a
Level 4
528853.1734133920
0x0014462b38e67e6c1f5e0385fbbd298abf182722
Level 4
686812.705417298
curl --compressed -H "Accept: application/json" -H "X-Api-Key: <client-api-key>" \
"https://eu.market-api.kaiko.io/v2/data/wallet.v1/audit?blockchain=ethereum"import pandas as pd
import requests
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor
import time
list_wallets = ['0xf977814e90da44bfa03b6295a0616a897441acec','0xbe0eb53f46cd790cd13851d5eff43d12404d33e8']
start_time = '2025-02-27T00:00:00.000Z'
blockchain = 'ethereum'
# Headers for the API request
headers_dict = {
'Accept': 'application/json',
'X-Api-Key': 'YOUR_API_KEY'
}
# API URL for fetching Kaiko product Blockchain Monitoring
URL = 'https://us.market-api.kaiko.io/v2/data/wallet.v1/audit'
def get_data(url, headers, params=None, retries=5, delay=1):
for attempt in range(retries):
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status() # Raise an exception for HTTP errors
return response.json()
except requests.exceptions.RequestException as e:
print(f"Attempt {attempt + 1} failed: {e}")
if attempt < retries - 1:
time.sleep(delay)
else:
raise
def get_all_events_for_address(address, start_time, blockchain):
data = pd.DataFrame()
params_dict = {
'blockchain': blockchain,
'user_address': address.lower(),
'start_time': start_time
}
res = get_data(URL, headers_dict, params_dict)
try:
data = pd.concat([data, pd.DataFrame(res['data'])], ignore_index=True)
except Exception as e:
print(e)
while 'next_url' in res.keys():
if res['next_url'] == None:
break
try:
res = get_data(res['next_url'], headers_dict)
data = pd.concat([data, pd.DataFrame(res['data'])], ignore_index=True)
except KeyboardInterrupt:
print("Exit")
break
except Exception as e:
print(e)
continue
return data
def get_all_events_for_addresses(addresses, start_time):
with ThreadPoolExecutor(max_workers=20) as executor:
results = list(tqdm(executor.map(lambda addr: get_all_events_for_address(addr, start_time, blockchain), addresses), total=len(addresses)))
return pd.concat(results, ignore_index=True)
data = get_all_events_for_addresses(addresses=list_wallets, start_time=start_time, blockchain=blockchain)
import pandas as pd
import requests
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor
import time
# Headers for the API request
KAIKO_HEADERS_DICT = {
'Accept': 'application/json',
'X-Api-Key': 'YOUR_API_KEY'
}
def get_data(url, headers, params=None, retries=10, delay=2):
"""
Fetches data from the given URL with retry logic.
Parameters:
url (str): The URL to fetch data from.
headers (dict): The headers for the request.
params (dict): The parameters for the request.
retries (int): The number of retry attempts.
delay (int): The delay between retry attempts in seconds.
Returns:
dict: The JSON response from the API.
"""
for attempt in range(retries):
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status() # Raise an exception for HTTP errors
return response.json()
except requests.exceptions.RequestException:
if attempt < retries - 1:
time.sleep(delay)
else:
print('max retries exceeded')
raise
def get_all_events_for_address(address, start_time='2024-01-01T00:00:00.000Z'):
"""
Fetches all events for a given address starting from a specified time.
Parameters:
address (str): The user address to fetch events for.
start_time (str): The start time for fetching events in ISO 8601 format.
Returns:
pd.DataFrame: A DataFrame containing all events for the given address.
"""
URL = 'https://us.market-api.kaiko.io/v2/data/wallet.v1/audit'
data = pd.DataFrame()
params_dict = {
'blockchain': 'ethereum',
'user_address': address.lower(),
'start_time': start_time,
'page_size':400
}
res = get_data(URL, KAIKO_HEADERS_DICT, params_dict)
try:
data = pd.concat([data, pd.DataFrame(res['data'])], ignore_index=True)
except Exception as e:
print(e)
count = 0
while 'next_url' in res.keys():
count+=1
if res['next_url'] == None:
break
try:
res = get_data(res['next_url'], KAIKO_HEADERS_DICT)
data = pd.concat([data, pd.DataFrame(res['data'])], ignore_index=True)
if (count > 100):
print(address, count)
break
except KeyboardInterrupt:
print("Exit")
break
except Exception as e:
print(e)
continue
return data
def get_all_events_for_addresses(addresses, start_time='2024-01-01T00:00:00.000Z'):
"""
Fetches all events for multiple addresses starting from a specified time using multithreading.
Parameters:
addresses (list): A list of user addresses to fetch events for.
start_time (str): The start time for fetching events in ISO 8601 format.
Returns:
pd.DataFrame: A DataFrame containing all events for the given addresses.
"""
with ThreadPoolExecutor(max_workers=20) as executor:
results = list(tqdm(executor.map(lambda addr: get_all_events_for_address(addr, start_time), addresses), total=len(addresses)))
return pd.concat(results, ignore_index=True)
def get_all_events_for_addresses_with_time(addresses_and_time):
"""
Fetches all events for multiple addresses with different start times using multithreading.
Parameters:
addresses_and_time (list of tuples): A list of tuples where each tuple contains an address and a start time.
example:
addresses_and_time = [["0x47666fab8bd0ac7003bce3f5c3585383f09486e2", '2025-01-01T04:00:00.000Z'],
["0xaf620e6d32b1c67f3396ef5d2f7d7642dc2e6ce9", '2021-02-21T01:00:00.000Z']]
Returns:
pd.DataFrame: A DataFrame containing all events for the given addresses and start times.
"""
with ThreadPoolExecutor(max_workers=20) as executor:
results = list(tqdm(executor.map(lambda addr: get_all_events_for_address(addr[0], addr[1]), addresses_and_time), total=len(addresses_and_time)))
return pd.concat(results, ignore_index=True)
def get_all_pools():
URL = 'https://reference-data-api.kaiko.io/v1/pools'
data = pd.DataFrame()
params_dict = {
'blockchain': 'ethereum'}
res = get_data(URL, KAIKO_HEADERS_DICT, params_dict)
try:
data = pd.concat([data, pd.DataFrame(res['data'])], ignore_index=True)
except Exception as e:
print(e)
return data['address'].tolist()
def get_receiver_addresses_filtered_with_time(events, filter_out):
"""
Filters and returns a list of receiver addresses with their earliest transaction timestamps,
excluding specified addresses and keeping only those with a total amount_usd > 100.
Parameters:
events (pd.DataFrame): DataFrame containing transaction events.
filter_out (set): A set of addresses to be excluded from the results.
Returns:
list: A list of tuples where each tuple contains a receiver address and its earliest transaction timestamp.
"""
outgoing_events = events[events["direction"] == "out"]
amount_sums = outgoing_events.groupby('receiver_address')['amount_usd'].sum()
valid_addresses = amount_sums[amount_sums > 10].index
receiver_addresses_list_with_time = outgoing_events[outgoing_events['receiver_address'].isin(valid_addresses)][["receiver_address", "timestamp"]]
receiver_addresses_list_with_time['timestamp'] = pd.to_datetime(receiver_addresses_list_with_time['timestamp'], unit='ns').dt.strftime('%Y-%m-%dT%H:%M:%S.%fZ')
receiver_addresses_list_with_time = receiver_addresses_list_with_time.groupby('receiver_address')['timestamp'].min().reset_index().values.tolist()
receiver_addresses_list_with_time = [addr for addr in receiver_addresses_list_with_time if addr[0] not in filter_out]
return receiver_addresses_list_with_time
# ----------------------------
# Addresses to be removed from the results
addresses_to_remove = [
"0x0000000000000000000000000000000000000000", # null address
'', # empty address
"0x47666fab8bd0ac7003bce3f5c3585383f09486e2", # exploiter
"0xf89d7b9c864f589bbf53a82105107622b35eaa40", # bybit hot wallet
"0x1f9090aae28b8a3dceadf281b0f12828e676c326", # block builder
"0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5", # block builder
"0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97", # block builder
"0x388c818ca8b9251b393131c08a736a67ccb19297", # Lido execution builder
"0x7e2a2fa2a064f693f0a55c5639476d913ff12d05", # mev block builder
"0x6be457e04092b28865e0cba84e3b2cfa0f871e67", # mev block builder
"0x3bee5122e2a2fbe11287aafb0cb918e22abb5436", # mev block builder
"0xdadb0d80178819f2319190d340ce9a924f783711", # block builder
"0xe688b84b23f322a994a53dbf8e15fa82cdb71127", # block fee recipient
"0xd11d7d2cb0aff72a61df37fd016ee1bd9f180633", # mev block builder
"0x4675c7e5baafbffbca748158becba61ef3b0a263", # mev block builder
"0x7adc0e867ebc337e2d20c44db181c067fa08637b", # block builder
"0x98ed2d46a27afeead62a5ea39d022a33ea4d25c1", # ?
"0x00000000219ab540356cbb839cbe05303d7705fa", # Beacon chain deposit contract
"0x0000000000bbf5c5fd284e657f01bd000933c96d", # Paraswap delta v2
"0x6a000f20005980200259b80c5102003040001068", # Paraswap augustus v6.2
"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad", # Uniswap universal router
"0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae", # li.fi diamond (router)
"0x74de5d4fcbf63e00296fd95d33236b9794016631", # metamask swap
"0x7d0ccaa3fac1e5a943c5168b6ced828691b46b36", # OKX DEX router
"0x9008d19f58aabd9ed0d60971565aa8510560ab41", # Cow protocol settlement
"0xd37bbe5744d730a1d98d8dc97c42f0ca46ad7146", # THORCHAIN router
]
# Get all pools on Ethereum in Kaiko's reference data (to be filtered out because they're not receivers from the exploiter)
all_pools = get_all_pools()
addresses_to_remove = addresses_to_remove + all_pools
# Level 1: Get all events from the exploiter
exploiter_address = "0x47666fab8bd0ac7003bce3f5c3585383f09486e2"
hack_time = '2025-02-21T14:00:00.000Z'
exploiter_events = get_all_events_for_address(exploiter_address, start_time=hack_time)
# Level 2: Get all events for all addresses that received funds from the exploiter
receiver_addresses_list_with_time = get_receiver_addresses_filtered_with_time(exploiter_events, addresses_to_remove)
receiver_addresses_2_events = get_all_events_for_addresses_with_time(receiver_addresses_list_with_time)
# Level 3: Get all events for all addresses that received funds from addresses that received funds from the exploiter
receiver_addresses_3_list_with_time = get_receiver_addresses_filtered_with_time(receiver_addresses_2_events, addresses_to_remove)
receiver_addresses_3_events = get_all_events_for_addresses_with_time(receiver_addresses_3_list_with_time)
# Level 4: Get all events for all addresses that received funds from addresses that received funds from the addresses that received funds from the exploiter
receiver_addresses_4_list_with_time = get_receiver_addresses_filtered_with_time(receiver_addresses_3_events, addresses_to_remove)
receiver_addresses_4_events = get_all_events_for_addresses_with_time(receiver_addresses_4_list_with_time)
# ----------------------------
# Concat all events dataframe and specify each "level" it is.
df1 = exploiter_events.copy()
df2 = receiver_addresses_2_events.copy()
df3 = receiver_addresses_3_events.copy()
df4 = receiver_addresses_4_events.copy()
# Add the 'Layer' column
df1["level"] = "Level 1"
df2["level"] = "Level 2"
df3["level"] = "Level 3"
df4["level"] = "Level 4"
# Concatenate the DataFrames
all_transfers = pd.concat([df1, df2, df3, df4], ignore_index=True)
all_transfers.to_csv("all_exploiters_and_receivers_transfers.csv", index=False)
list_addresses = all_transfers[all_transfers["direction"] == "out"].groupby(['user_address', 'level'])['amount_usd'].sum()
list_addresses.to_csv("list_addresses.csv", index=True)
```0x001c0cf0aba3614e650d591ef222ccb0f8e3a0ee