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.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: ERC20, AAVE, Uniswap, Lido, Native tokens
Supported Protocols
| Protocol | Events |
|---|---|
| ERC20 | transfers |
| Native Token | transfers |
| AAVE V3 | deposits, withdrawals, borrows, repays, flashloans, liquidations |
| Uniswap V3 | swaps, deposits, withdrawals, collects |
| Lido | deposits, withdrawal_requests, withdrawals_claimed, l2_deposits, l2_withdrawal_requests |
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.erc20.transfers("USDT")
.network("ETH")
.block_range(21000000, 21010000)
.as_df()
) List Available Protocols
client = DeFiStream()
protocols = client.protocols()
print(protocols) # ['native_token', 'erc20', 'aave_v3', 'uniswap_v3', 'lido']