Skip to content

Pairs & Volume

Base URL: https://service.leverup.xyz

List pairs

The authoritative list of tradable markets, including pairBase addresses. Use this instead of hardcoding addresses — markets are listed and delisted over time.

http
GET /v1/pairs
ParameterDefaultNotes
block_chainMONAD
is_ready_to_displaytrueSet false to include markets not yet surfaced in the UI
symbolFilter by symbol, e.g. BTC
tagsFilter by tag, repeatable
volume_time_rangeONE_DAYWindow for the volume fields: ONE_DAY, SEVEN_DAY, THIRTY_DAY, ALL
page0
size20

Response

json
{
  "content": [
    {
      "base": "0xcf5a6076cfa32686c0df13abada2b40dec133f1d",
      "pairName": "BTC/USD",
      "symbol": "BTC",
      "pairType": "CRYPTO",
      "icon": "https://…",
      "isDegenPair": false,
      "tags": ["majors"],
      "listAt": "2025-11-01T00:00:00Z",
      "nextOpen": null,
      "nextClose": null,
      "schedule": null,
      "priceDisplayDecimals": 2,
      "status": "AVAILABLE",
      "minHoldingSeconds": 0,
      "holdingTimeThresholdSizeUSD": "0",
      "pythPriceFeedId": "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
      "pythProPriceFeedId": null,
      "pythSymbol": "Crypto.BTC/USD",
      "volume": "1234567.89",
      "volumeUSD": "1234567.89"
    }
  ],
  "pageNumber": 0,
  "pageSize": 20,
  "totalPages": 2,
  "totalElements": 24
}
FieldNotes
baseThe pairBase you pass to every contract call
pairTypeCRYPTO, STOCKS, FOREX, INDICES, COMMODITIES
statusAVAILABLE, REDUCE_ONLY, CLOSE
nextOpen / nextCloseNon-null for markets with trading hours
minHoldingSecondsMinimum time before a position can be closed
priceDisplayDecimalsDisplay hint only — prices are still 1e18
pythPriceFeedIdThe underlying feed. Not needed for the standard flow; use the oracle endpoint.
volume / volumeUSDOver volume_time_range

Check status before trading

REDUCE_ONLY allows closes but not opens. CLOSE disables the market. Non-crypto markets are also closed outside their trading hours — opening then reverts with MarketClosed.

ts
async function getPairs() {
  const res = await fetch(`${API}/v1/pairs?size=100`)
  const { content } = await res.json()

  return new Map(content.map((p: any) => [p.symbol, p]))
}

const pairs = await getPairs()
const btc = pairs.get('BTC')

if (btc.status !== 'AVAILABLE') throw new Error(`BTC is ${btc.status}`)

Pair volume

http
GET /v1/pairs/{pairBase}/volume
ParameterDefaultNotes
rangeONE_DAYONE_DAY, SEVEN_DAY, THIRTY_DAY, ALL
block_chainMONAD
json
{
  "pairBase": "0xcf5a…",
  "volume": "1234567.89",
  "volumeUSD": "1234567.89",
  "period": "ONE_DAY"
}

Cached for five minutes.

Cumulative volume

http
GET /v1/pairs/{pairBase}/cumulative-volume

Same response shape with period: "ALL". Equivalent to /volume?range=ALL.

User volumes

Daily trading volume per user over a date range.

http
GET /v1/trading-volumes/users?startTime=2026-07-01T00:00:00Z&endTime=2026-07-27T23:59:59Z
ParameterRequiredNotes
startTimeyesISO-8601 with offset
endTimeyesISO-8601 with offset
chainsnoComma-separated, defaults to MONAD
json
[
  {
    "userAddress": "0x…",
    "tradeDate": "2026-07-26",
    "dailyVolume": "125430.55",
    "openCount": 12,
    "closeCount": 11,
    "openVolume": "64000.00",
    "closeVolume": "61430.55"
  }
]

Returns one row per user per day. Not paginated — keep ranges bounded.

Protocol volume

http
GET /v1/trading-volumes/sum-by-date?startTime=…&endTime=…
GET /v1/trading-volumes/sum-all
json
{ "vol": "98765432.10", "usdVol": "98765432.10" }

sum-all takes only the optional chains parameter.

Trading perpetuals involves risk. Nothing here is financial advice.