Tool Quick Reference
| Question | Tool | Key Params |
|---|---|---|
| Total DeFi TVL, global volumes | defillama:get_market_totals |
metrics (tvl_base, volume_dexs_1d, etc.) |
| Protocol TVL, fees, revenue | defillama:get_protocol_metrics |
protocol, metrics |
| Chain TVL, gas fees, REV | defillama:get_chain_metrics |
chain, metrics |
| Token price, mcap, ATH | defillama:get_token_prices |
token |
| Category rankings | defillama:get_category_metrics |
category |
| Pool APY, lending rates | defillama:get_yield_pools |
token, chain, category |
| Stablecoin supply | defillama:get_stablecoin_supply |
stablecoin, chain |
| ETF inflows/outflows | defillama:get_etf_flows |
token (bitcoin/ethereum) |
| Bridge volume | defillama:get_bridge_flows |
bridge, chain |
| CEX volume | defillama:get_cex_volumes |
cex |
| Open interest | defillama:get_open_interest |
protocol, chain |
| Hacks/exploits | defillama:get_events |
event_type: "hacks" |
| Fundraising | defillama:get_events |
event_type: "raises" |
| Protocol events | defillama:get_events |
event_type: "protocol_events" |
| Protocol treasury | defillama:get_treasury |
treasury |
| Institutional holdings | defillama:get_dat_holdings |
institution, token |
| Token unlocks | defillama:get_token_unlocks |
token, query_type (chart, window, day, window_all, ratio, market_window) |
| Token TVL in protocols | defillama:get_token_tvl |
token, protocol |
| Oracle coverage | defillama:get_oracle_metrics |
oracle |
| User activity | defillama:get_user_activity |
protocol, chain |
| Income statement | defillama:get_income_statement |
protocol |
| Protocol metadata, URLs, audit | defillama:get_protocol_info |
protocol, category, tag, has_token, chain |
| Chain metadata, type, L2 parent | defillama:get_chain_info |
chain, chain_type |
| List valid categories | defillama:list_categories |
type (protocol, token, chain) |
| Unknown entity slug | defillama:resolve_entity |
name |
Entity Conventions
- Protocols: lowercase-hyphenated slugs (
aave,uniswap,compound-v3) - Chains: lowercase (
ethereum,solana,arbitrum) - Tokens:
coingecko:prefix (coingecko:ethereum,coingecko:bitcoin,coingecko:usd-coin) - CEX: slug includes suffix (
binance-cex,coinbase-cex,htx,gate-io) - Categories: Title case (
Lending,DEX,Derivatives)
Protocol vs Sub-Protocol
Many protocols have multiple versions. The database tracks both:
- Parent protocol (e.g.,
aave) — used inget_protocol_metrics, aggregates all versions - Sub-protocol (e.g.,
aave-v3) — individual versions, used in sub_protocol views
resolve_entity returns both slug (sub-protocol) and parent_protocol. Use parent_protocol for get_protocol_metrics. Use slug when you need a specific version.
Example: resolve_entity({name: "compound"}) returns:
- slug: compound-v2, parent_protocol: compound
- slug: compound-v3, parent_protocol: compound
→ Use
protocol: "compound"in get_protocol_metrics for the aggregate.
Array Support
All entity params accept single values or arrays for comparison:
protocol: "aave"orprotocol: ["aave", "lido", "compound"]chain: "ethereum"orchain: ["ethereum", "solana"]token: "coingecko:ethereum"ortoken: ["coingecko:ethereum", "coingecko:bitcoin"]
Entity Resolution
Try tools directly for well-known entities — works 80%+ of the time. Use defillama:resolve_entity only when:
- Unsure of exact slug
- Tool returns 0 rows
- Need to disambiguate (e.g., "compound" → compound-v2, compound-v3)
- Need to find the parent_protocol slug
Period Parameter
All tools accept period (NOT time_range):
current(default) -- latest snapshot7d,30d,90d,180d,365d-- rolling windows
For custom date ranges, use start_date and end_date (YYYY-MM-DD format) instead of period. If start_date is set without end_date, it defaults to today.
Critical Conventions
Stock vs Flow
Different aggregation rules -- getting this wrong produces nonsensical results:
- Stock (point-in-time snapshots):
tvl,price,mcap-- NEVER sum across dates - Flow (cumulative over period):
fees_1d,revenue_1d,volume-- CAN sum across dates
Percentage Formatting
Two different conventions in the data:
*_pct_changecolumns = decimals (e.g., -0.13 = -13%, 0.35 = +35%). Multiply by 100 for display.apycolumns = already percentages (e.g., 2.32 = 2.32%). Do NOT multiply by 100.
TVL Components
Components are mutually exclusive -- never double-add:
tvl_base= default TVL (excludes liquid staking and double-counted)tvl_ls_only= liquid staking portion not in tvl_basetvl_dc_only= double-counted portion not in tvl_basetvl_ls_and_dc= both LS and DC- Total with LS+DC =
tvl_base + tvl_ls_only + tvl_dc_only + tvl_ls_and_dc
Fee and Revenue
fees= gross payments by usersrevenue= protocol's cut (fees - payments to LPs/stakers)holder_revenue= buybacks + dividends to token holders- Chain-level:
chain_fees(gas),chain_revenue,chain_mev,app_fees(protocol fees on chain),app_revenue
Metric Name Patterns
Protocol metrics follow these patterns:
- TVL:
tvl_base,tvl_staking,tvl_borrowed,tvl_pool2,tvl_treasury,tvl_vesting - Flows (with suffixes
_1d/_7d/_30d/_90d/_180d/_365d/_ytd/_alltime/_annualised):fees,revenue,holder_revenue,incentive - Volume (same suffixes):
volume_dexs,volume_aggregators,volume_derivatives,volume_aggr_derivatives,volume_options - Market:
price,mcap,fdv,fdv_outstanding,token_volume,ps_ratio,pf_ratio - pct_change variants only available on
_currentviews
Chain metrics use chain_fees, chain_revenue, chain_mev, app_fees, app_revenue instead of fees, revenue.
Daily views only have the _1d suffix for flows/volumes.
Important Gotchas
- Category column:
get_protocol_metricshas NO category column. Useget_category_metricsfor category-level data. - FDV: Never sort by FDV -- unreliable
total_supplydata produces junk rankings. Sort bymcapinstead. - Valuation:
ps_ratio= mcap / annualised revenue.pf_ratio= mcap / annualised fees. Lower = potentially undervalued. - Metric validation: Protocol/chain/category metrics are validated against actual DB columns. Invalid metrics return a suggestion for the closest match.
- NULL values: NULL means data unavailable, NOT $0. Do not report NULL as zero.
- Params accept string or array:
protocol: "aave"orprotocol: ["aave", "lido"]. Param names are singular (protocolnotprotocols). - sort_by format: String like
"tvl_base desc"or"fees_1d desc".
Examples
Example 1:
User: "What is Aave's TVL?"
Tool call: defillama:get_protocol_metrics(protocol: "aave", metrics: ["tvl_base"])
Example 2:
User: "Top 5 chains by fees"
Tool call: defillama:get_chain_metrics(sort_by: "chain_fees_1d desc", limit: 5)
Example 3:
User: "ETH price history over 90 days"
Tool call: defillama:get_token_prices(token: "coingecko:ethereum", period: "90d")
Example 4: User: "Compare ETH price and Ethereum chain TVL" Tool calls in parallel:
defillama:get_token_prices(token: "coingecko:ethereum")defillama:get_chain_metrics(chain: "ethereum")
Example 5:
User: "Biggest DeFi hacks this year"
Tool call: defillama:get_events(event_type: "hacks", sort_by: "amount desc", limit: 10, period: "365d")
Example 6:
User: "Aave TVL from Jan to Mar 2025"
Tool call: defillama:get_protocol_metrics(protocol: "aave", metrics: ["tvl_base"], start_date: "2025-01-01", end_date: "2025-03-31")
Error Recovery
- 0 rows returned -> call
defillama:resolve_entity(name: "...")-> retry with the correct slug - Wrong data -> verify you're using the right tool (protocol vs chain vs category)
- Ambiguous entity -> call
resolve_entityto see all matching slugs, then pick the right one