defillama-api — Claude Code skill for DeFi data
Query DeFiLlama for protocol TVL, token prices, DEX volumes and fees. Useful for comparing protocols or checking token prices over time.
npx skills add agiprolabs/claude-trading-skills --skill defillama-api -a claude-codeWhat defillama-api does
This skill covers DeFiLlama API requests for protocol and chain data, including current and historical TVL, token prices, DEX volumes, fees and stablecoin supply. Token price lookups use the chain:address format. The examples also show batched price requests and protocol TVL comparisons.
The code samples use Python and httpx. Most covered endpoints are free and need no authentication; the stated free-tier limit is about 500 requests per 5 minutes. Yield data requires Pro, so the free API does not cover that use case.
What it helps with
- compare TVL across protocols
- fetch prices for tokens on different chains
- look up a token price at a past timestamp
- summarize a chain’s TVL, DEX volume and fees
- check stablecoin supply data
Example prompts for the agent
- Compare TVL for
raydiumanduniswapusing DeFiLlama. - Fetch current prices for these tokens using their
chain:addressidentifiers. - Build a Solana snapshot with TVL, DEX volume and fees.
How to install defillama-api
1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill defillama-api -a claude-code2Manually: put the files in place
~/.claude/skills/defillama-api/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/defillama-api/
1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill defillama-api -a codex2Manually: put the files in place
.agents/skills/defillama-api/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill defillama-api -a cursor2Manually: put the files in place
.cursor/skills/defillama-api/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install agiprolabs/claude-trading-skills defillama-api2Manually: put the files in place
.github/skills/defillama-api/SKILL.md1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill defillama-api -a gemini-cli2Platform CLI
gemini skills install https://github.com/agiprolabs/claude-trading-skills --path skills/defillama-apiManually: put the files in place
.devin/skills/defillama-api/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill defillama-api -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about defillama-api
How do I install defillama-api in Claude Code?
Run npx skills add agiprolabs/claude-trading-skills --skill defillama-api -a claude-code. The skill file is at ~/.claude/skills/defillama-api/SKILL.md.
What does defillama-api do?
It guides requests to DeFiLlama for TVL, token prices, DEX activity, fees, stablecoins and bridge listings. Its examples cover both current and historical data.
Do DeFiLlama API requests need an API key?
Most endpoints covered by the skill are free and require no authentication. Yield and pool data requires Pro.
Source text
SKILL.md · MIT
---
name: defillama-api
description: Free DeFi analytics across all chains — TVL, token prices, DEX volumes, fees/revenue, stablecoins, and bridges
---
# DeFiLlama API — DeFi Macro Analytics
DeFiLlama is the largest DeFi TVL aggregator. Its API is **free with no authentication** for most endpoints — covering TVL, token prices, DEX volumes, fees/revenue, stablecoins, and bridges across all chains.
## Quick Start
```python
import httpx
# No auth required for free endpoints
BASE = "https://api.llama.fi"
COINS = "https://coins.llama.fi"
# Current TVL for a protocol
tvl = httpx.get(f"{BASE}/tvl/raydium").json()
print(f"Raydium TVL: ${tvl:,.0f}")
# Token prices (multi-chain)
resp = httpx.get(f"{COINS}/prices/current/solana:So11111111111111111111111111111111111111112")
sol_price = resp.json()["coins"]["solana:So11111111111111111111111111111111111111112"]["price"]
```
## Base URLs
| Service | Base URL | Auth |
|---------|----------|------|
| TVL / Protocols | `https://api.llama.fi` | Free |
| Coin Prices | `https://coins.llama.fi` | Free |
| Stablecoins | `https://stablecoins.llama.fi` | Free |
| Yields | `https://yields.llama.fi` | Pro ($300/mo) |
| Bridges | `https://bridges.llama.fi` | Free (list) / Pro (detail) |
| Pro API | `https://pro-api.llama.fi/{KEY}/api/...` | Pro key in URL path |
**Rate limits**: ~500 requests per 5 minutes (free). Pro: 1,000 req/min, 1M calls/mo.
## TVL & Protocol Data
```python
# List all protocols with TVL
GET /protocols
# Returns: [{name, slug, tvl, chainTvls, change_1h, change_1d, change_7d, category, chains, ...}]
# Detailed protocol data with historical TVL
GET /protocol/{slug}
# Returns: Full object with tvl[], tokensInUsd{}, currentChainTvls{}, ...
# Simple current TVL number
GET /tvl/{slug}
# Returns: plain number (e.g., 150977324562.40)
# TVL for all chains
GET /v2/chains
# Returns: [{name, tvl, tokenSymbol, chainId, gecko_id}]
# Historical chain TVL
GET /v2/historicalChainTvl/{chain}
# chain: "Ethereum", "Solana", "Arbitrum", etc.
# Returns: [{date, tvl}] — date is unix timestamp (seconds)
```
## Token Prices
Coin identifiers use `{chain}:{address}` format:
- `solana:So11111111111111111111111111111111111111112` (SOL)
- `ethereum:0xdac17f958d2ee523a2206206994597c13d831ec7` (USDT)
- `coingecko:bitcoin` (non-chain lookups)
```python
# Current prices (batch)
GET /prices/current/{coins}
# coins: comma-separated identifiers
# Optional: searchWidth (default 4h)
# Returns: {coins: {id: {price, decimals, symbol, timestamp, confidence}}}
# Historical price at timestamp
GET /prices/historical/{timestamp}/{coins}
# timestamp: unix seconds
# Price chart
GET /chart/{coins}?period=1d&span=30
# period: 1d, 4h, 1h
# Returns: {coins: {id: {prices: [{timestamp, price}]}}}
# Price change percentage
GET /percentage/{coins}
# First recorded price
GET /prices/first/{coins}
# Block number at timestamp
GET /block/{chain}/{timestamp}
```
### Batch Historical Prices
```python
# POST for multiple timestamps per coin
POST /batchHistorical
Body: {"coins": {"solana:So11...": [1709251200, 1709337600]}}
```
## DEX Volumes
```python
# All DEXes aggregated
GET /overview/dexs
# Optional: excludeTotalDataChart=true, dataType=dailyVolume
# Chain-specific
GET /overview/dexs/{chain}
# chain: "Solana", "Ethereum", etc.
# Specific DEX
GET /summary/dexs/{protocol}
# Returns: {total24h, total7d, total30d, totalAllTime, totalDataChart, ...}
```
## Fees & Revenue
```python
# All protocols
GET /overview/fees
# Optional: dataType=dailyFees|dailyRevenue|dailyUserFees
# Chain-specific
GET /overview/fees/{chain}
# Specific protocol
GET /summary/fees/{protocol}
# Returns: {total24h, total7d, methodology{}, totalDataChart[], ...}
```
## Stablecoins
```python
# All stablecoins with supply data
GET https://stablecoins.llama.fi/stablecoins
# Returns: [{name, symbol, pegType, circulating, chainCirculating, price}]
# Historical market cap
GET https://stablecoins.llama.fi/stablecoincharts/all
# Chain-specific stablecoin data
GET https://stablecoins.llama.fi/stablecoincharts/{chain}
# Stablecoin prices (deviation tracking)
GET https://stablecoins.llama.fi/stablecoinprices
```
## Bridges
```python
# List all bridges
GET https://bridges.llama.fi/bridges
# Optional: includeChains=true
# Returns: {bridges: [{name, volume stats, chains, ...}]}
```
## Common Patterns
### Protocol TVL Comparison
```python
def compare_protocol_tvl(slugs: list[str]) -> list[dict]:
"""Compare TVL across protocols."""
results = []
for slug in slugs:
resp = httpx.get(f"https://api.llama.fi/tvl/{slug}", timeout=15.0)
if resp.status_code == 200:
results.append({"protocol": slug, "tvl": resp.json()})
return sorted(results, key=lambda x: x["tvl"], reverse=True)
```
### Multi-Token Price Lookup
```python
def get_solana_prices(mints: list[str]) -> dict[str, float]:
"""Get USD prices for Solana tokens via DeFiLlama."""
coins = ",".join(f"solana:{m}" for m in mints)
resp = httpx.get(f"https://coins.llama.fi/prices/current/{coins}")
data = resp.json().get("coins", {})
return {
mint: data[f"solana:{mint}"]["price"]
for mint in mints
if f"solana:{mint}" in data
}
```
### Solana DeFi Overview
```python
def solana_defi_snapshot() -> dict:
"""Get a snapshot of Solana DeFi activity."""
chain_tvl = httpx.get("https://api.llama.fi/v2/chains").json()
sol_tvl = next((c["tvl"] for c in chain_tvl if c["name"] == "Solana"), 0)
dex_vol = httpx.get("https://api.llama.fi/overview/dexs/Solana").json()
fees = httpx.get("https://api.llama.fi/overview/fees/Solana").json()
return {
"tvl": sol_tvl,
"dex_volume_24h": dex_vol.get("total24h", 0),
"fees_24h": fees.get("total24h", 0),
}
```
### Historical Price Analysis
```python
def price_at_date(coin: str, date_str: str) -> float:
"""Get token price at a specific date.
Args:
coin: DeFiLlama coin ID (e.g., 'solana:So11...')
date_str: Date string 'YYYY-MM-DD'
"""
from datetime import datetime, timezone
dt = datetime.strptime(date_str, "%Y-%m-%d").replace(tzinfo=timezone.utc)
ts = int(dt.timestamp())
resp = httpx.get(f"https://coins.llama.fi/prices/historical/{ts}/{coin}")
data = resp.json().get("coins", {})
return data.get(coin, {}).get("price", 0)
```
## Free vs Pro Endpoints
| Category | Free | Pro ($300/mo) |
|----------|------|---------------|
| TVL / Protocols | Yes | Yes |
| Coin Prices | Yes | Yes |
| DEX Volumes (overview) | Yes | Yes |
| Fees/Revenue (overview) | Yes | Yes |
| Stablecoins | Yes | Yes |
| Bridges (list) | Yes | Yes |
| Yields / Pools | No | Yes |
| Bridge detail | No | Yes |
| Derivatives | No | Yes |
| Emissions/Unlocks | No | Yes |
| Treasuries | No | Yes |
| Hacks database | No | Yes |
## When to Use DeFiLlama vs Alternatives
| Need | Use |
|------|-----|
| Protocol TVL comparison | **DeFiLlama** |
| Multi-chain token prices | **DeFiLlama** (free batch) |
| Historical prices at specific timestamps | **DeFiLlama** |
| DeFi macro analysis | **DeFiLlama** |
| Solana token OHLCV | Birdeye or SolanaTracker |
| Real-time token data | DexScreener or Birdeye |
| Wallet PnL | SolanaTracker |
| On-chain transaction data | Helius |
## Files
### References
- `references/endpoints.md` — Complete endpoint listing with parameters and response schemas
- `references/coin_identifiers.md` — Chain prefixes, address formats, and batch lookup patterns
- `references/error_handling.md` — Rate limits, error codes, retry strategies, large response handling
### Scripts
- `scripts/defi_snapshot.py` — Solana DeFi overview: TVL, volumes, fees, top protocols
- `scripts/price_lookup.py` — Multi-token price lookup with historical comparison
© agiprolabs · MIT · agiprolabs/claude-trading-skills