DeFiStream Python Client

Official Python client for the DeFiStream API.

Getting an API Key

To use the DeFiStream API, you need to sign up for an account at defistream.dev to obtain your API key.

Installation

pip install defistream

This includes pandas and pyarrow by default for DataFrame support.

With polars support (in addition to pandas):

pip install defistream[polars]

Quick Start

from defistream import DeFiStream

# Initialize client (reads DEFISTREAM_API_KEY from environment if not provided)
client = DeFiStream()

# Or with explicit API key
client = DeFiStream(api_key="dsk_your_api_key")

# Query ERC20 transfers using builder pattern
df = (
    client.evm.erc20.transfers("USDT")
    .network("ETH")
    .block_range(21000000, 21010000)
    .as_df()
)

print(df.head())

Features

  • Builder pattern: Fluent query API with chainable methods
  • Aggregate queries: Bucket events into time or block intervals with summary statistics
  • Type-safe: Full type hints and Pydantic models
  • Multiple formats: DataFrame (pandas/polars), CSV, Parquet, JSON
  • Async support: Native async/await with AsyncDeFiStream
  • All protocols: EVM (ERC20, AAVE, Uniswap, Lido, Native), Tron (TRC20, Native), Bitcoin, Exchanges (Binance, Hyperliquid)

Supported Protocols

EVM Chains:

ProtocolEvents
ERC20transfers
Native Tokentransfers
AAVE V3deposits, withdrawals, borrows, repays, flashloans, liquidations
Uniswap V3swaps, deposits, withdrawals, collects
Lidodeposits, withdrawal_requests, withdrawals_claimed, l2_deposits, l2_withdrawal_requests

Other Chains:

ChainProtocolEvents
TronTRC20transfers
TronNative (TRX)transfers
BitcoinNative (BTC)transfers

Exchanges:

ExchangeData Types
Binancetrades, ohlcv, book_depth, open_interest, funding_rate, long_short_ratios
Hyperliquidtrades, ohlcv, fills, positions, funding

Configuration

Environment Variables

export DEFISTREAM_API_KEY=dsk_your_api_key
export DEFISTREAM_BASE_URL=https://api.defistream.dev/v1  # optional
from defistream import DeFiStream

# API key from environment
client = DeFiStream()

# Or explicit
client = DeFiStream(api_key="dsk_...", base_url="https://api.defistream.dev/v1")

Timeout and Retries

client = DeFiStream(
    api_key="dsk_...",
    timeout=60.0,  # seconds
    max_retries=3
)

Context Manager

Both sync and async clients support context managers to automatically close connections:

# Sync
with DeFiStream() as client:
    df = (
        client.evm.erc20.transfers("USDT")
        .network("ETH")
        .block_range(21000000, 21010000)
        .as_df()
    )

List Available Protocols

client = DeFiStream()
protocols = client.protocols()
print(protocols)  # ['evm/native', 'evm/erc20', 'evm/aave_v3', 'evm/uniswap_v3', 'evm/lido', 'tron/trc20', 'tron/native', 'btc/native']