Skip to main content
POST
/
rpc
/
Trails
/
YieldGetMarkets
YieldGetMarkets returns Yield markets with optional filters.
curl --request POST \
  --url https://api.example.com/rpc/Trails/YieldGetMarkets \
  --header 'Content-Type: application/json' \
  --data '
{
  "provider": "<string>",
  "chainId": "<string>",
  "type": "<string>",
  "search": "<string>",
  "sort": "<string>",
  "limit": 123,
  "offset": 123
}
'
{
  "items": [
    {
      "id": "<string>",
      "network": "<string>",
      "inputTokens": [
        {
          "symbol": "<string>",
          "name": "<string>",
          "decimals": 123,
          "network": "<string>",
          "address": "<string>",
          "logoURI": "<string>",
          "isPoints": true,
          "coinGeckoId": "<string>"
        }
      ],
      "token": {
        "symbol": "<string>",
        "name": "<string>",
        "decimals": 123,
        "network": "<string>",
        "address": "<string>",
        "logoURI": "<string>",
        "isPoints": true,
        "coinGeckoId": "<string>"
      },
      "tokens": [
        {
          "symbol": "<string>",
          "name": "<string>",
          "decimals": 123,
          "network": "<string>",
          "address": "<string>",
          "logoURI": "<string>",
          "isPoints": true,
          "coinGeckoId": "<string>"
        }
      ],
      "rewardRate": {
        "total": 123,
        "rateType": "<string>",
        "components": [
          {
            "rate": 123,
            "rateType": "<string>",
            "token": {
              "symbol": "<string>",
              "name": "<string>",
              "decimals": 123,
              "network": "<string>",
              "address": "<string>",
              "logoURI": "<string>",
              "isPoints": true,
              "coinGeckoId": "<string>"
            },
            "yieldSource": "<string>",
            "description": "<string>"
          }
        ]
      },
      "status": {
        "enter": true,
        "exit": true
      },
      "metadata": {
        "name": "<string>",
        "logoURI": "<string>",
        "description": "<string>",
        "documentation": "<string>",
        "underMaintenance": true,
        "deprecated": true,
        "supportedStandards": [
          "<string>"
        ]
      },
      "mechanics": {
        "type": "<string>",
        "rewardSchedule": "<string>",
        "rewardClaiming": "<string>",
        "gasFeeToken": {
          "symbol": "<string>",
          "name": "<string>",
          "decimals": 123,
          "network": "<string>",
          "address": "<string>",
          "logoURI": "<string>",
          "isPoints": true,
          "coinGeckoId": "<string>"
        },
        "requiresValidatorSelection": true,
        "lockupPeriod": {
          "seconds": 123
        },
        "cooldownPeriod": {
          "seconds": 123
        },
        "warmupPeriod": {
          "seconds": 123
        },
        "fee": {
          "deposit": "<string>",
          "withdrawal": "<string>",
          "management": "<string>",
          "performance": "<string>"
        },
        "entryLimits": {
          "minimum": "<string>",
          "maximum": "<string>"
        },
        "requirements": {
          "kycRequired": true,
          "kycUrl": "<string>"
        },
        "supportsLedgerWalletApi": true,
        "extraTransactionFormatsSupported": [
          "<string>"
        ],
        "arguments": {
          "enter": {
            "fields": [
              {
                "name": "<string>",
                "type": "<string>",
                "label": "<string>",
                "description": "<string>",
                "required": true,
                "options": [
                  "<string>"
                ],
                "optionsRef": "<string>",
                "default": {},
                "placeholder": "<string>",
                "minimum": "<string>",
                "maximum": "<string>",
                "isArray": true
              }
            ],
            "notes": "<string>"
          },
          "exit": {
            "fields": [
              {
                "name": "<string>",
                "type": "<string>",
                "label": "<string>",
                "description": "<string>",
                "required": true,
                "options": [
                  "<string>"
                ],
                "optionsRef": "<string>",
                "default": {},
                "placeholder": "<string>",
                "minimum": "<string>",
                "maximum": "<string>",
                "isArray": true
              }
            ],
            "notes": "<string>"
          },
          "manage": {},
          "balance": {
            "fields": [
              {
                "name": "<string>",
                "type": "<string>",
                "label": "<string>",
                "description": "<string>",
                "required": true,
                "options": [
                  "<string>"
                ],
                "optionsRef": "<string>",
                "default": {},
                "placeholder": "<string>",
                "minimum": "<string>",
                "maximum": "<string>",
                "isArray": true
              }
            ],
            "notes": "<string>"
          }
        },
        "possibleFeeTakingMechanisms": {
          "depositFee": true,
          "managementFee": true,
          "performanceFee": true,
          "validatorRebates": true
        }
      },
      "providerId": "<string>",
      "supportsBeneficiary": true,
      "chainId": "<string>",
      "outputToken": {
        "symbol": "<string>",
        "name": "<string>",
        "decimals": 123,
        "network": "<string>",
        "address": "<string>",
        "logoURI": "<string>",
        "isPoints": true,
        "coinGeckoId": "<string>"
      },
      "statistics": {
        "tvlUsd": "<string>",
        "tvl": "<string>",
        "tvlRaw": "<string>",
        "uniqueUsers": 123,
        "averagePositionSizeUsd": "<string>",
        "averagePositionSize": "<string>"
      },
      "risk": {
        "ratings": [
          {
            "rating": "<string>",
            "source": "<string>"
          }
        ]
      },
      "curator": {
        "name": {},
        "description": {},
        "logoURI": {}
      },
      "tags": [
        "<string>"
      ],
      "state": {
        "pricePerShareState": {
          "price": 123,
          "shareToken": {
            "symbol": "<string>",
            "name": "<string>",
            "decimals": 123,
            "network": "<string>",
            "address": "<string>",
            "logoURI": "<string>",
            "isPoints": true,
            "coinGeckoId": "<string>"
          },
          "quoteToken": {
            "symbol": "<string>",
            "name": "<string>",
            "decimals": 123,
            "network": "<string>",
            "address": "<string>",
            "logoURI": "<string>",
            "isPoints": true,
            "coinGeckoId": "<string>"
          }
        },
        "concentratedLiquidityPoolState": {
          "baseApr": 123,
          "price": 123,
          "tickSpacing": 123,
          "minTick": 123,
          "maxTick": 123,
          "feeTier": 123,
          "baseToken": {
            "symbol": "<string>",
            "name": "<string>",
            "decimals": 123,
            "network": "<string>",
            "address": "<string>",
            "logoURI": "<string>",
            "isPoints": true,
            "coinGeckoId": "<string>"
          },
          "quoteToken": {
            "symbol": "<string>",
            "name": "<string>",
            "decimals": 123,
            "network": "<string>",
            "address": "<string>",
            "logoURI": "<string>",
            "isPoints": true,
            "coinGeckoId": "<string>"
          },
          "volume24hUsd": 123,
          "fee24hUsd": 123,
          "tvlUsd": 123
        },
        "capacityState": {
          "current": "<string>",
          "max": "<string>",
          "remaining": "<string>"
        },
        "liquidityState": {
          "liquidity": {},
          "utilization": {}
        },
        "allocations": [
          {
            "address": "<string>",
            "network": "<string>",
            "name": "<string>",
            "allocation": "<string>",
            "weight": 123,
            "targetWeight": 123,
            "yieldId": "<string>",
            "providerId": "<string>",
            "allocationUsd": "<string>",
            "rewardRate": {
              "total": 123,
              "rateType": "<string>"
            },
            "tvl": "<string>",
            "tvlUsd": "<string>",
            "maxCapacity": "<string>",
            "remainingCapacity": "<string>"
          }
        ]
      }
    }
  ],
  "total": 123,
  "offset": 123,
  "limit": 123
}

Overview

YieldGetMarkets returns DeFi markets available for deposit through Trails, including lending markets (Aave, Morpho) and yield vaults (Yearn, ERC-4626). Use this to power market selection UIs or discover marketId values for composable actions. The SDK’s useEarnMarkets hook wraps this endpoint with typed filters and caching — prefer it in React apps.

Request Parameters

All fields are optional.
FieldTypeDescription
providerstringFilter by protocol (e.g. "aave", "morpho", "yearn")
chainIdstringFilter by chain ID (e.g. "8453" for Base)
typestringMarket category: "lending" or "vault"
searchstringFree-text search over market names and tokens
sortstringSort order (e.g. "rewardRateDesc")
limitnumberNumber of results to return
offsetnumberPagination offset

Response

Returns payload containing an array of market objects. Each market includes:
FieldDescription
idUnique market ID — pass this to lend() or deposit() composable actions
providerIdProtocol identifier (e.g. "aave", "morpho")
rewardRateCurrent APY as a decimal (e.g. 0.045 = 4.5%)
statistics.tvlUsdTotal value locked in USD
metadata.nameHuman-readable market name
metadata.tokenUnderlying token info (symbol, address, decimals)

Examples

List all markets on Base

const response = await fetch('https://trails-api.sequence.app/rpc/Trails/YieldGetMarkets', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Access-Key': 'YOUR_ACCESS_KEY',
  },
  body: JSON.stringify({
    chainId: '8453',
    limit: 20,
    offset: 0,
  }),
})

const { payload } = await response.json()
const markets = JSON.parse(payload)

markets.forEach(market => {
  console.log(`${market.id}: ${(market.rewardRate * 100).toFixed(2)}% APY`)
})

Filter lending markets by protocol

const response = await fetch('https://trails-api.sequence.app/rpc/Trails/YieldGetMarkets', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Access-Key': 'YOUR_ACCESS_KEY',
  },
  body: JSON.stringify({
    provider: 'aave',
    type: 'lending',
    sort: 'rewardRateDesc',
  }),
})

const { payload } = await response.json()
const markets = JSON.parse(payload)

Search for USDC markets

const response = await fetch('https://trails-api.sequence.app/rpc/Trails/YieldGetMarkets', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Access-Key': 'YOUR_ACCESS_KEY',
  },
  body: JSON.stringify({
    search: 'usdc',
    sort: 'rewardRateDesc',
    limit: 10,
  }),
})

SDK alternative

In React, use the typed useEarnMarkets hook instead of calling this endpoint directly:
import { useEarnMarkets } from '0xtrails'

const { data: markets, isLoading } = useEarnMarkets({
  chain: 'base',
  type: 'lending',
  provider: 'aave',
  search: 'usdc',
  sortBy: 'rewardRateDesc',
  limit: 20,
})

// markets[i].id → pass to lend() or deposit() actions

See also

Body

application/json
provider
string
chainId
string
type
string
sort
string
limit
number
offset
number

Response

OK

items
object[]
required

[]YieldMarket

total
number
required
offset
number
required
limit
number
required