yield.options
Every place on Sui to earn yield: lending, pools, liquid staking and native staking, with realized APY and a risk readout.
Details
- Endpoint
- GET /v1/yield/options
- Credits
- 2
- Rate class
- Light. Counts against your light requests per second.
One row per yield source on Sui mainnet with deposits of $100k or more. APY is realized: what the option actually paid over the last 7 and 30 days, read from on-chain state and events; the protocol's advertised rate sits next to it with the gap, and token rewards are counted apart. Every row has a deterministic risk tier from 1 (lowest) to 5 with its reasons, each backed by evidence links: exit liquidity (idle cash, price impact for $1k, $10k and $100k), contract facts (age, who can upgrade it, pause powers, oracles), the largest depositor after merging linked wallets, and 30 day deposit history. Rebuilt every 10 minutes. Percent values are percents (6.1 means 6.1%).
Parameters
| Name | Type | Description |
|---|---|---|
| asset | string | Only options that take this coin: a symbol (USDC, SUI) or a coin type. USDC and SUI mean the native coins. |
| kind | string | Only this kind.One of "lending", "lp", "liquid_staking", "staking", "vault". |
| protocol | string | Only this protocol, by id or name (navi, suilend, scallop, cetus...). |
| max_tier | integer | Only options at this risk tier or lower.From 1 to 5. |
| min_tvl | number | Only options with at least this many USD deposited.At least 0. |
| min_apy | number | Only options whose realized APY plus rewards is at least this percent. |
| sort | string | tvl (default), apy (realized), tier (lowest risk first) or exit (cheapest to unwind first).One of "tvl", "apy", "tier", "exit". |
| limit | integer | Rows to return, default 50.From 1 to 500. |
Request
Send your key in the x-api-key header, or leave it out to use the keyless tier.
curl "https://api.tide.ad/v1/yield/options?asset=USDC&max_tier=2&sort=apy&limit=5" \
-H "x-api-key: YOUR_API_KEY"const res = await fetch("https://api.tide.ad/v1/yield/options?asset=USDC&max_tier=2&sort=apy&limit=5", {
headers: {
"x-api-key": process.env.TIDE_API_KEY!,
},
});
const data = await res.json();Response
{
"count": 15,
"rows": [
{
"id": "lp:cetus:0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105",
"kind": "lp",
"name": "USDC/SUI 0.25% pool on Cetus",
"protocol": {
"id": "cetus",
"name": "Cetus",
"url": "https://www.cetus.zone"
},
"assets": [
{
"type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
"symbol": "USDC"
},
{
"type": "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
"symbol": "SUI"
}
],
"object": "0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105",
"package": "0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",
"tvlUsd": 2881018,
"apy": {
"realized7d": 61.39,
"realized30d": 76.54,
"advertised": null,
"advertisedSource": null,
"incentiveApy": null,
"incentiveShare": null,
"gap": null,
"volatility30d": 30.04,
"method": "Swap fees paid in this pool (decoded from each swap) minus the venue's protocol cut, over the pool's reserves now, as a simple yearly rate (fees do not compound until you claim and add them back)."
},
"daily": [
{
"day": "2026-10-07",
"apy": 69.15
},
{
"day": "2026-10-08",
"apy": 283.69
}
],
"appUrl": "https://app.cetus.zone/liquidity/deposit/?poolAddress=0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105",
"steps": [
"Open Cetus at app.cetus.zone and find the USDC/SUI pool.",
"Add liquidity with both coins (about half USDC, half SUI by value) and pick a price range; a full range earns less but never goes out of range."
],
"notes": [
"Concentrated liquidity: a position earns only while the price is inside its range, so your yield can be higher or zero.",
"The pool holds two coins whose prices move apart; a move in USDC/SUI changes what you get back (impermanent loss)."
],
"risk": {
"tier": 2,
"reasons": [
"Price exposure: the pool holds USDC and SUI, which do not track each other, and the fee rate does not count the loss when their prices move apart"
],
"exit": {
"withdrawableUsd": 2881018,
"utilization": null,
"window": "Instant: remove liquidity any time",
"illiquid": false,
"evidence": [
{
"label": "Pool object",
"url": "https://tide.ad/object/0xb8d7d9e66a60c239e7a60110efcf8de6c705580ed924d0dde141f4a0e2c90105"
}
],
"impact": [
{
"usd": 1000,
"pct": 0
}
]
},
"contract": {
"package": "0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",
"publishedAt": "2023-05-03T15:41:42.540Z",
"ageDays": 1281,
"upgradeable": true,
"upgradeCap": {
"kind": "multisig",
"holder": "0xdbfd0b17fa804c98f51d552b050fb7f850b85db96fa2a0d79e50119525814a47",
"policy": "compatible",
"sentence": "Upgradable by a multisig (5 of 6 keys)."
},
"versions": 15,
"lastUpgradeAt": "2026-09-18T01:41:31.196Z",
"upgrades30d": 0,
"adminFunctions": [
"config::AdminCap"
],
"pauseFunctions": [],
"oracles": [],
"evidence": [
{
"label": "Package on tide (latest version)",
"url": "https://tide.ad/package/0x260693ec785a6e6c9d81d58c7d2ff72f1288ae0fa6a9725abe05a6478b11f084"
}
]
},
"concentration": {
"topShare": null,
"top5Share": null,
"holders": null,
"topIsCluster": false,
"top": null,
"coveredShare": null,
"evidence": []
},
"history": {
"tvl30dAgoUsd": null,
"tvlChange30dPct": null,
"largestOutflowUsd": null,
"largestOutflowDay": null,
"incidents": [],
"evidence": []
}
},
"asOf": "2026-11-05T13:37:11.435Z"
},
{
"id": "lp:magma:0xe672f3fe0c6c0bee46db41d2fd00916596a2d2384e001d4e1d4a89f98799d94a",
"kind": "lp",
"name": "USDC/MAGMA 0.01% pool on Magma",
"protocol": {
"id": "magma",
"name": "Magma",
"url": "https://magmafinance.io"
},
"assets": [
{
"type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
"symbol": "USDC"
},
{
"type": "0x9f854b3ad20f8161ec0886f15f4a1752bf75d22261556f14cc8d3a1c5d50e529::magma::MAGMA",
"symbol": "MAGMA"
}
],
"object": "0xe672f3fe0c6c0bee46db41d2fd00916596a2d2384e001d4e1d4a89f98799d94a",
"package": "0x4a35d3dfef55ed3631b7158544c6322a23bc434fe4fca1234cb680ce0505f82d",
"tvlUsd": 1878122,
"apy": {
"realized7d": 23.76,
"realized30d": 16.24,
"advertised": null,
"advertisedSource": null,
"incentiveApy": null,
"incentiveShare": null,
"gap": null,
"volatility30d": 11.4,
"method": "Swap fees paid in this pool (decoded from each swap), over the pool's reserves now, as a simple yearly rate (fees do not compound until you claim and add them back)."
},
"daily": [
{
"day": "2026-10-07",
"apy": 6.28
},
{
"day": "2026-10-08",
"apy": 5.36
}
],
"appUrl": "https://app.magmafinance.io",
"steps": [
"Open Magma at app.magmafinance.io and find the USDC/MAGMA pool.",
"Add liquidity with both coins (about half USDC, half MAGMA by value) and pick a price range; a full range earns less but never goes out of range."
],
"notes": [
"The venue's protocol share of fees is not read, so this is the pool's gross fee yield.",
"Magma LPs who stake in the gauge earn Magma token emissions instead of these fees, which go to voters. Emissions are not counted here."
],
"risk": {
"tier": 2,
"reasons": [
"Price exposure: the pool holds USDC and MAGMA, which do not track each other, and the fee rate does not count the loss when their prices move apart"
],
"exit": {
"withdrawableUsd": 1878122,
"utilization": null,
"window": "Instant: remove liquidity any time",
"illiquid": false,
"evidence": [
{
"label": "Pool object",
"url": "https://tide.ad/object/0xe672f3fe0c6c0bee46db41d2fd00916596a2d2384e001d4e1d4a89f98799d94a"
}
],
"impact": [
{
"usd": 1000,
"pct": 0.16
}
]
},
"contract": {
"package": "0x4a35d3dfef55ed3631b7158544c6322a23bc434fe4fca1234cb680ce0505f82d",
"publishedAt": "2025-02-04T13:23:42.194Z",
"ageDays": 639,
"upgradeable": true,
"upgradeCap": {
"kind": "multisig",
"holder": "0x8d1c424a29f5080bb7623406801536c18f0abde456cebfb207b902ac2d417f6e",
"policy": "compatible",
"sentence": "Upgradable by a multisig."
},
"versions": 5,
"lastUpgradeAt": "2026-05-29T00:58:39.219Z",
"upgrades30d": 0,
"adminFunctions": [
"config::AdminCap"
],
"pauseFunctions": [],
"oracles": [],
"evidence": [
{
"label": "Package on tide (latest version)",
"url": "https://tide.ad/package/0x0acd1d187950450ae3e625375f8067a7802e99a05b6e655e1fec124a0e3c891e"
}
]
},
"concentration": {
"topShare": null,
"top5Share": null,
"holders": null,
"topIsCluster": false,
"top": null,
"coveredShare": null,
"evidence": []
},
"history": {
"tvl30dAgoUsd": null,
"tvlChange30dPct": null,
"largestOutflowUsd": null,
"largestOutflowDay": null,
"incidents": [],
"evidence": []
}
},
"asOf": "2026-11-05T13:37:11.435Z"
}
],
"coverage": [
{
"source": "suilend",
"rows": 22,
"ok": true
},
{
"source": "navi",
"rows": 19,
"ok": true
}
],
"builtAt": "2026-11-05T13:37:11.435Z",
"asOf": {
"checkpoint": 341930046,
"timestamp": "2026-11-05T13:37:11.435Z",
"lagMs": null
}
}Long lists are cut to a few items here.