Skip to main content

Documentation Index

Fetch the complete documentation index at: https://anypay-docs-sdk-0-15-0-updates.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Every lend and deposit action needs a marketId.

React hooks

Use useEarnMarkets, useEarnProviders, and useEarnBalances inside a React tree wrapped with TrailsProvider:
import { useEarnMarkets, useEarnProviders, useEarnBalances } from '0xtrails'

function MarketPicker({ walletAddress }: { walletAddress: `0x${string}` }) {
  const { data: providers } = useEarnProviders()

  const { data: markets, total, isLoading } = useEarnMarkets({
    chain: 'base',
    type: 'lending',         // "lending" | "vault"
    provider: 'aave',        // optional
    search: 'usdc',          // optional free-text
    sortBy: 'rewardRateDesc',
    limit: 20,
    offset: 0,
  })

  const { data: balances } = useEarnBalances({
    walletAddress,
    chain: 'base',
  })

  // markets[i].id → pass to lend / deposit
  // balances[i].yieldId → match against market.id
}

useEarnMarkets filters

FieldTypeDescription
chainChainIdentifierChain name or ID
type"lending" | "vault" | …Market category
providerProviderIdRestrict to one protocol
searchstringFree-text search over market names
sortBySortBye.g. "rewardRateDesc"
limitnumberPage size
offsetnumberPage offset
Each EarnMarket exposes id, rewardRate, statistics.tvlUsd, metadata.*, providerId, and more. Use these hooks in browser apps to discover supported markets, providers, and the user’s existing earn positions before building an action list.

useEarnBalances

Fetch a wallet’s earn balances for one chain:
const { data: balances, errors, isLoading } = useEarnBalances({
  walletAddress: '0x9ec762D784B653E168d93eA3078B023d8958dBc6',
  chain: 'polygon',
})
Fetch balances across multiple chains in a single backend request:
const { data: balances } = useEarnBalances({
  walletAddress,
  chains: ['polygon', 'ethereum', 'base'],
})
Restrict the lookup to one market:
const { data: balances } = useEarnBalances({
  walletAddress,
  chain: 'polygon',
  marketId: 'polygon-usdc-aave-v3-lending',
})
FieldTypeDescription
walletAddressstringWallet whose earn positions should be fetched
chainChainIdentifierSingle chain name, ID, or viem chain object
chainsChainIdentifier[]Multiple chains; mutually exclusive with chain
marketIdstringOptional market ID to filter one position
argumentsobjectOptional market-specific balance arguments
enabledbooleanSet false to disable the query

End-to-end example

Wire a market picker into a typed action:
import {
  useQuote,
  useEarnMarkets,
  lend,
} from '0xtrails'

function LendWithMarketPicker() {
  const { data: markets } = useEarnMarkets({
    chain: 'base',
    type: 'lending',
    search: 'USDC',
    sortBy: 'rewardRateDesc',
    limit: 5,
  })

  const market = markets... // Choose your market

  const { send } = useQuote({
    from: { chain: 'arbitrum', token: 'USDC' },
    to:   { chain: 'base',     token: 'USDC', amount: '100' },
    actions: market
      ? [lend({ marketId: market.id, amount: "100" })]
      : [],
  })

  return (
    <button disabled={!send} onClick={() => send?.()}>
      Lend on {market?.metadata.name ?? '…'}
    </button>
  )
}