Yield farm screener

GET
/farms

MasterChef-family staking pools keyed by (chain, address, pid), with total value locked, the reward token and both the yearly and daily APR decomposition. Every row carries the verification status of the farm contract, so an unverified pool is never read as a confirmed yield, and updated_at is the indexer's own observation time — treat a stale value as stale data, not as a fresh zero.

The farm indexer serves one chain per query, so naming several chains fans out one query per chain and merges the results here. A merged page is globally ordered by sort when it is set and grouped chain by chain in the order given when it is not; cursor round-trips as usual, but a merged page carries no prev_cursor because the indexer cannot page backwards from a position it never handed out. A single chain is unaffected in every respect.

Query Parameters

chains*array<>

comma-separated chain slugs or ids; at most 8, one upstream query each

Items1 <= items <= 8
q?string

farm ticker substring

Lengthlength <= 128
factories?array<>

comma-separated factory addresses; only farms deployed by these

Itemsitems <= 32
sort?string

sort key

Default"tvl"

Value in

  • "tvl"
  • "apr"
  • "updated_at"
order?string

sort direction

Default"desc"

Value in

  • "asc"
  • "desc"
limit?integer

page size; plans above startup may raise the ceiling

Formatint32
Range1 <= value <= 100
Default10
cursor?string

opaque cursor from next_cursor

Lengthlength <= 512

Header Parameters

Accept-Payment?string

payment methods the client can use, comma-separated, case-insensitive. With x402 in the list, a spent keyless budget answers 402 with the x402 challenge instead of 429.

PAYMENT-SIGNATURE?string

base64 x402 v2 payment payload for this request. A paid request skips the keyless budget and is settled only when it answers 2xx. The v1 header X-PAYMENT is accepted too.

Response Body

application/json

application/problem+json

application/problem+json

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X GET "https://example.com/farms?chains=hyperliquid"
{  "items": [    {      "network": {        "slug": "hyperliquid",        "chain_id": 0      },      "address": "string",      "pid": 0,      "ticker": "string",      "tvl": "string",      "reward_token": {        "address": "string",        "name": "string",        "symbol": "string",        "chain_id": 0      },      "apr_year": {        "base_apr": "string",        "lp_reward_apr": "string"      },      "apr_daily": {        "base_apr": "string",        "lp_reward_apr": "string"      },      "factory": {        "address": "string",        "name": "string"      },      "updated_at": "string",      "status": "unverified",      "lifecycle_state": "string",      "data_quality_flags": [        "string"      ]    }  ],  "next_cursor": "string",  "prev_cursor": "string"}