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.

Share this doc