One yield farm
The farm at one LP contract address, in the row shape the screener serves. 404 when the address is not a farm this API indexes on that chain — which is not the same as a farm with nothing staked, and is why watching one pool does not mean paging the screener.
Path Parameters
chain slug (ton) or numeric chain id (950000)
1 <= length <= 32the farm's LP contract address
1 <= length <= 128Header Parameters
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.
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/chains/string/farms/string"{ "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" ]}Yield farm screener GET
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.
Rank traders on one chain GET
Traders ranked over a rolling window, filtered on win rate, volume, holding time, capital tier and behaviour. `exclude_bots` removes market makers as well as bots: their edge is inventory and latency rather than directional skill, so ranking them beside discretionary traders compares two different games. Sorting on `win_rate` only ranks wallets with enough rated positions for the ratio to carry information. A wallet that clearly has winning trades but reports `win_rate` 0 has too small a rated sample — read `trade_win_rate` instead, and `rated_positions` for the sample size.