Skip to main content

List vaults – Earn API

Updated on
Jul 31, 2026

Overview​

Every approved vault with the seven windowed APYs, TVL, liquidity and capacity from the latest snapshot. For a capital-aware allocation preview, use GET /v1/vaults/rankings.

Endpoint​

GET https://earn-api.quicknode.dev/functions/v1/api/v1/vaults

Authorization​

Include the published apikey header. This read request is public and does not require a SIWE signature.

Parameters​

ParameterLocationTypeRequiredDescription
chainsquerystringNoCSV of chain ids. Defaults to all enabled chains.
windowqueryintegerNoMinutes for the headline `apy`, snapped to the nearest precomputed column. Defaults to 5. The seven windowed APYs are always returned in `windows`.
minTvlquerynumber (decimal)NoMinimum vault TVL in decimal dollars. Defaults to 0.
minLiquidityquerynumber (decimal)NoMinimum withdrawable liquidity in decimal dollars. Defaults to 0.
includeCoveredquerybooleanNoOpt in to OpenCover covered fee-wrapper rows (`covered: true`). Defaults to false. When omitted or false, the response contains plain vaults only.

Example request​

curl --request GET \
--url 'https://earn-api.quicknode.dev/functions/v1/api/v1/vaults?chains=1&window=5&minTvl=0&minLiquidity=0&includeCovered=false' \
--header 'Accept: application/json' \
--header 'apikey: <EARN_PUBLIC_API_KEY>'

Response​

FieldTypeRequiredDescription
modestring (browse)YesIdentifies the response as an unranked vault browse list.
windowintegerYesThe applied headline-APY window (minutes) after snapping.
vaultsarray<object>YesApproved vaults that match the supplied filters.
vaults[].chainIdintegerYesNumeric identifier of the chain where the vault is deployed.
vaults[].vaultAddressstringYesLowercase address of the ERC-4626 vault share token.
vaults[].namestring | nullYesHuman-readable name of the vault.
vaults[].apynumber (decimal) | nullYesHeadline APY percentage for the applied `window`, rounded to two decimal places. Returns null when there is insufficient history.
vaults[].windowsobjectYesAPY percentages for the seven precomputed lookback windows. A null value means there is insufficient history for that window.
vaults[].windows.m5number (decimal) | nullYesAPY percentage over the five-minute lookback window.
vaults[].windows.m10number (decimal) | nullYesAPY percentage over the ten-minute lookback window.
vaults[].windows.m30number (decimal) | nullYesAPY percentage over the 30-minute lookback window.
vaults[].windows.h1number (decimal) | nullYesAPY percentage over the one-hour lookback window.
vaults[].windows.h2number (decimal) | nullYesAPY percentage over the two-hour lookback window.
vaults[].windows.h4number (decimal) | nullYesAPY percentage over the four-hour lookback window.
vaults[].windows.h6number (decimal) | nullYesAPY percentage over the six-hour lookback window.
vaults[].tvlUsdinteger | nullYesVault TVL in whole US dollars, rounded to the nearest dollar.
vaults[].availableLiquidityUsdinteger | nullYesWithdrawable liquidity in whole US dollars, rounded to the nearest dollar.
vaults[].maxDepositUsdinteger | nullYesDeposit capacity in whole US dollars. Null means the vault is uncapped.
vaults[].atCapacitybooleanYesTrue when the vault has no remaining deposit capacity.
vaults[].latestAtstring (date-time)YesISO 8601 timestamp of the latest vault snapshot.
vaults[].coveredbooleanNoPresent and true only for an OpenCover covered fee wrapper. Omitted for plain vaults.

Example response​

The response includes every matching vault. This example shows one exact vault entry from the response:

{
"mode": "browse",
"window": 5,
"vaults": [
{
"chainId": 1,
"vaultAddress": "0x8e56cb6bc1a8961ed9062b99045d3299b27cdb4d",
"name": "Avantgarde USDC Dynamic",
"apy": 3.67,
"windows": {
"m5": 3.67,
"m10": 3.66,
"m30": 3.63,
"h1": 3.63,
"h2": 3.64,
"h4": 3.63,
"h6": 3.62
},
"tvlUsd": 105169,
"availableLiquidityUsd": 63085,
"maxDepositUsd": null,
"atCapacity": false,
"latestAt": "2026-07-31T12:55:33.542+00:00"
}
]
}

HTTP responses​

StatusDescription
200The browse vault list.
400One or more query parameters are malformed or outside their accepted range.
429Rate limit exceeded. `Retry-After` (seconds) tells you when to retry. Reads, feedback, and push writes are keyed per IP; create/update/delete are keyed per wallet+IP; deposit/withdraw/claim calldata is keyed per strategy+IP.
500Vault data is temporarily unavailable.
OpenAPI source

This page is based on operation listVaults in the Earn OpenAPI 3.1 specification.