Skip to main content

DefiLlama Python SDK

Official Python SDK for the DefiLlama API. Access DeFi protocol data including TVL, prices, yields, volumes, fees, bridges, and more.

Installation

pip install defillama-sdk
uv pip install defillama-sdk

Quick Start

from defillama_sdk import DefiLlama

# Free tier
client = DefiLlama()

# Pro tier (required for premium endpoints)
pro_client = DefiLlama({"api_key": "your-api-key"})

# Get all protocols
protocols = client.tvl.getProtocols()

# Get current token prices
prices = client.prices.getCurrentPrices(
    [
        "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "coingecko:bitcoin",
    ]
)

Configuration

config = {
    "api_key": "your-api-key",
    "timeout": 30000,
}

client = DefiLlama(config)

Modules

  • TVL
  • Prices
  • Stablecoins
  • Yields (Pro)
  • Volumes
  • Fees
  • Emissions (Pro)
  • Bridges (Pro)
  • Ecosystem (Pro)
  • ETFs (Pro)
  • DAT (Pro)
  • Account (Pro)

🔐 = Requires Pro API key


TVL

Total Value Locked data for protocols and chains.

getProtocols

Get all protocols with current TVL.

protocols = client.tvl.getProtocols()

getProtocol

Get detailed protocol information including historical TVL.

aave = client.tvl.getProtocol("aave")

getTvl

Get only current TVL for a protocol.

tvl = client.tvl.getTvl("uniswap")

getChains

Get current TVL for all chains.

chains = client.tvl.getChains()

getHistoricalChainTvl

Get historical TVL data.

all_history = client.tvl.getHistoricalChainTvl()
eth_history = client.tvl.getHistoricalChainTvl("Ethereum")

getTokenProtocols 🔐

Get protocols holding a specific token.

holders = pro_client.tvl.getTokenProtocols("ETH")

getInflows 🔐

Get token inflows/outflows between timestamps.

inflows = pro_client.tvl.getInflows(
    "lido",
    1704067200,
    1704153600,
    "ETH,USDC",
)

getChainAssets 🔐

Get asset breakdown for all chains.

assets = pro_client.tvl.getChainAssets()

Prices

Token price data and historical charts.

getCurrentPrices

prices = client.prices.getCurrentPrices(
    [
        "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "coingecko:bitcoin",
        "solana:So11111111111111111111111111111111111111112",
    ]
)

getHistoricalPrices

prices = client.prices.getHistoricalPrices(
    1704067200,
    ["ethereum:0xdac17f958d2ee523a2206206994597c13d831ec7"],
)

getBatchHistoricalPrices

prices = client.prices.getBatchHistoricalPrices(
    {
        "ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": [
            1704067200,
            1704153600,
            1704240000,
        ]
    }
)

getChart

chart = client.prices.getChart(
    ["coingecko:ethereum"],
    {"start": 1704067200, "period": "1d", "span": 30},
)

getPercentageChange

change = client.prices.getPercentageChange(
    ["coingecko:bitcoin"],
    {"period": "24h"},
)

getFirstPrices

first = client.prices.getFirstPrices(
    ["ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"]
)

getBlockAtTimestamp

block = client.prices.getBlockAtTimestamp("ethereum", 1704067200)

Stablecoins

Stablecoin market cap and dominance data.

getStablecoins

stables = client.stablecoins.getStablecoins(True)

getAllCharts

charts = client.stablecoins.getAllCharts()

getChartsByChain

eth_charts = client.stablecoins.getChartsByChain("Ethereum")

getStablecoin

usdt = client.stablecoins.getStablecoin("1")

getChains

chains = client.stablecoins.getChains()

getPrices

prices = client.stablecoins.getPrices()

getDominance 🔐

dominance = pro_client.stablecoins.getDominance("ethereum", 1)

Yields 🔐

Yield farming, lending, staking, and perpetual funding rates.

getPools

pools = pro_client.yields.getPools()

getPoolsOld

pools = pro_client.yields.getPoolsOld()

getPoolChart

chart = pro_client.yields.getPoolChart("pool-uuid-here")

getBorrowPools

borrow_pools = pro_client.yields.getBorrowPools()

getLendBorrowChart

chart = pro_client.yields.getLendBorrowChart("pool-uuid-here")

getPerps

perps = pro_client.yields.getPerps()

getLsdRates

lsd_rates = pro_client.yields.getLsdRates()

Volumes

DEX, options, and derivatives trading volume data.

getDexOverview

overview = client.volumes.getDexOverview()
overview = client.volumes.getDexOverview(
    {"excludeTotalDataChart": True, "dataType": "dailyVolume"}
)

getDexOverviewByChain

eth_volume = client.volumes.getDexOverviewByChain("Ethereum")

getDexSummary

uniswap = client.volumes.getDexSummary("uniswap")

getOptionsOverview

options = client.volumes.getOptionsOverview()

getOptionsOverviewByChain

eth_options = client.volumes.getOptionsOverviewByChain("Ethereum")

getOptionsSummary

derive = client.volumes.getOptionsSummary("derive")

getDerivativesOverview 🔐

derivatives = pro_client.volumes.getDerivativesOverview()

getDerivativesSummary 🔐

gmx = pro_client.volumes.getDerivativesSummary("gmx")

getDexMetrics 🔐

Get summary of DEX metrics with protocol list (no charts).

metrics = pro_client.volumes.getDexMetrics()

# With data type
metrics = pro_client.volumes.getDexMetrics({"dataType": "dailyVolume"})

getDexMetricsByProtocol 🔐

Get DEX metrics for a specific protocol.

uniswap = pro_client.volumes.getDexMetricsByProtocol("uniswap")

getDerivativesMetrics 🔐

Get summary of derivatives metrics with protocol list (no charts).

metrics = pro_client.volumes.getDerivativesMetrics()

getDerivativesMetricsByProtocol 🔐

Get derivatives metrics for a specific protocol.

hyperliquid = pro_client.volumes.getDerivativesMetricsByProtocol("hyperliquid")

getOptionsMetrics 🔐

Get summary of options metrics with protocol list (no charts).

metrics = pro_client.volumes.getOptionsMetrics()

getOptionsMetricsByProtocol 🔐

Get options metrics for a specific protocol.

hegic = pro_client.volumes.getOptionsMetricsByProtocol("hegic")

Fees

Protocol fees and revenue data.

Fee Data Types

from defillama_sdk import FeeDataType

FeeDataType.DAILY_FEES
FeeDataType.DAILY_REVENUE
FeeDataType.DAILY_HOLDERS_REVENUE
FeeDataType.DAILY_SUPPLY_SIDE_REVENUE
FeeDataType.DAILY_BRIBES_REVENUE
FeeDataType.DAILY_TOKEN_TAXES
FeeDataType.DAILY_APP_FEES
FeeDataType.DAILY_APP_REVENUE

getOverview

fees = client.fees.getOverview()
revenue = client.fees.getOverview({"dataType": FeeDataType.DAILY_REVENUE})

getOverviewByChain

eth_fees = client.fees.getOverviewByChain("Ethereum")

getSummary

uniswap_fees = client.fees.getSummary("uniswap")

getChart 🔐

chart = pro_client.fees.getChart()
eth_chart = pro_client.fees.getChartByChain("Ethereum")
protocol_chart = pro_client.fees.getChartByProtocol("aave")

getChartByProtocolChainBreakdown 🔐

breakdown = pro_client.fees.getChartByProtocolChainBreakdown("aave")

getChartByProtocolVersionBreakdown 🔐

breakdown = pro_client.fees.getChartByProtocolVersionBreakdown("uniswap")

getChartByChainProtocolBreakdown 🔐

breakdown = pro_client.fees.getChartByChainProtocolBreakdown("Ethereum")

getChartChainBreakdown 🔐

breakdown = pro_client.fees.getChartChainBreakdown()

getMetrics 🔐

metrics = pro_client.fees.getMetrics()
chain_metrics = pro_client.fees.getMetricsByChain("Ethereum")
protocol_metrics = pro_client.fees.getMetricsByProtocol("aave")

Emissions 🔐

Token unlock schedules and vesting data.

getAll

emissions = pro_client.emissions.getAll()

getByProtocol

arbitrum = pro_client.emissions.getByProtocol("arbitrum")

Bridges 🔐

Cross-chain bridge volume and transaction data.

getAll

bridges = pro_client.bridges.getAll()
bridges = pro_client.bridges.getAll({"includeChains": True})

getById

bridge = pro_client.bridges.getById(1)

getVolumeByChain

volume = pro_client.bridges.getVolumeByChain("Ethereum")

getDayStats

stats = pro_client.bridges.getDayStats(1704067200, "Ethereum")

getTransactions

txs = pro_client.bridges.getTransactions(
    1,
    {
        "limit": 100,
        "startTimestamp": 1704067200,
        "endTimestamp": 1704153600,
        "sourceChain": "Ethereum",
        "address": "0x...",
    },
)

Ecosystem 🔐

Ecosystem-level data.

getCategories

categories = pro_client.ecosystem.getCategories()

getForks

forks = pro_client.ecosystem.getForks()

getOracles

oracles = pro_client.ecosystem.getOracles()

getEntities

entities = pro_client.ecosystem.getEntities()

getTreasuries

treasuries = pro_client.ecosystem.getTreasuries()

getHacks

hacks = pro_client.ecosystem.getHacks()

getRaises

raises = pro_client.ecosystem.getRaises()

ETFs 🔐

Bitcoin and Ethereum ETF data.

getOverview

btc_etfs = pro_client.etfs.getOverview()

getOverviewEth

eth_etfs = pro_client.etfs.getOverviewEth()

getHistory

history = pro_client.etfs.getHistory()

getHistoryEth

history_eth = pro_client.etfs.getHistoryEth()

getFdvPerformance

perf = pro_client.etfs.getFdvPerformance("30")

DAT 🔐

Digital Asset Treasury data and institutional holdings.

getInstitutions

data = pro_client.dat.getInstitutions()

getInstitution

mstr = pro_client.dat.getInstitution("MSTR")

Account 🔐

API usage management.

getUsage

usage = pro_client.account.getUsage()

Error Handling

from defillama_sdk import ApiKeyRequiredError, RateLimitError, NotFoundError, ApiError

try:
    data = pro_client.yields.getPools()
except ApiKeyRequiredError:
    print("Pro API key required for this endpoint")
except RateLimitError as exc:
    print(f"Rate limited. Retry after {exc.retry_after} seconds")
except NotFoundError:
    print("Resource not found")
except ApiError as exc:
    print(f"API error: {exc.status_code}")

Type Exports

All types are available from defillama_sdk.types, and are re-exported at the top level:

from defillama_sdk import Protocol, CoinPricesResponse, Stablecoin, YieldPool

Constants

from defillama_sdk import AdapterType, FeeDataType, VolumeDataType

AdapterType.DEXS
VolumeDataType.DAILY_VOLUME
FeeDataType.DAILY_FEES

Requirements

  • Python >= 3.9

License

MIT

Metadata

Release files for defillama-sdk 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for defillama-sdk 0.1.4
File Size Uploaded
defillama_sdk-0.1.4.tar.gz 23.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for defillama-sdk 0.1.4
File Interpreter ABI Platform
defillama_sdk-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 53.3 kB

Release files / defillama_sdk-0.1.4.tar.gz

Download URL defillama_sdk-0.1.4.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
0c723da4ec5e7250404e17e9f522296404121b0230d4c55d72f563c34ffa51e4
BLAKE2b-256 checksum
How to use checksums
4b8877450b82d1e1ddee45ac1e9553f2a6f15d56c6bebb38a5767557f5d421a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / defillama_sdk-0.1.4-py3-none-any.whl

Download URL defillama_sdk-0.1.4-py3-none-any.whl
Size 30.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d919f2f3c23bb0a3cc3671df22238d3658f5876bf46bb72ae9fb19b997f8ce6
BLAKE2b-256 checksum
How to use checksums
4f8e6b4e2522f237080745aaed6ae34f1cd5a538c60cc5e538d2ef3208fd00a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page