Architecture Overview
The Earn Data API is a data aggregation layer that sits between protocol data and your application. It handles:- Ingestion. Fetching vault data from multiple data sources across supported protocols.
- Normalization. Transforming protocol-specific formats into a unified
NormalizedVaultschema. - Capability Resolution. Determining which vaults support deposits and withdrawals via Composer.
- Serving. Exposing the normalized data through a REST API with filtering, sorting, and pagination.
Data Freshness
The Earn Data API runs a background sync pipeline that keeps vault data current:| Data | Refresh Frequency |
|---|---|
| Vault metadata, APY, and TVL | Every 15 minutes |
| Transactional capabilities (deposit/withdraw support) | Every 2 minutes |
The NormalizedVault Schema
Every vault in the Earn API follows the same schema, regardless of which protocol or data provider it comes from. This is the core data structure:Key Fields
| Field | Type | Description |
|---|---|---|
address | string | Vault contract address |
network | string | Network name (e.g., "base", "ethereum") |
chainId | number | EVM chain ID |
slug | string | Unique vault identifier across providers |
protocol | object | Protocol metadata (name, logo, URL) |
underlyingTokens | array | Tokens the vault accepts for deposit (with optional weight for multi-asset vaults) |
lpTokens | array | Tokens representing the vault position. Typically empty; use the vault’s address field as toToken for Composer deposits. |
rewardTokens | array? | Additional reward tokens (e.g., governance tokens). Optional, may be absent. |
analytics.apy | object | Current APY breakdown: base (nullable), reward (nullable), total |
analytics.apy1d / apy7d / apy30d | number | null | Rolling average APY over 1 day, 7 days, and 30 days. Nullable, may be null for new vaults. |
analytics.tvl | object | Total value locked. usd is always present; native is optional. |
isTransactional | boolean | Whether deposits are available via Composer |
isRedeemable | boolean | Whether withdrawals are available via Composer |
depositPacks / redeemPacks | array | Composer zap-pack entries describing available deposit/redeem methods |
description | string? | Vault description. Optional, may be absent. |
caps | object? | Deposit caps (totalCap, maxCap). Optional, may be absent. |
timeLock | number? | Lock period in seconds (0 = no lock). Optional, may be absent. |
kyc | boolean? | Whether the vault requires KYC. Optional, may be absent. |
Transactional Capabilities
TheisTransactional and isRedeemable flags are derived from Composer’s zap-pack data, not from the vault itself. This tells you whether the LI.FI infrastructure can execute deposits and withdrawals for this vault:
isTransactional: truemeans you can use Composer’s quote endpoint with this vault’s contract address astoTokento deposit.isRedeemable: truemeans you can use Composer with this vault’s contract address asfromTokento withdraw.
isTransactional is false.
Supported Protocols and Chains
The Earn Data API aggregates vaults from 20+ protocols across 20 chains. Use the discovery endpoints to see what is currently indexed:GET /v1/earn/chains— returns all chains with at least one active vaultGET /v1/earn/protocols— returns all protocols with at least one active vault
Next Steps
Quickstart
Make your first Earn API calls in under 5 minutes
API Integration Guide
Full endpoint reference with all parameters and response shapes

