Skip to content

REST API

Read-only HTTP access to prices, markets, positions, trade history, portfolio analytics and leaderboards. No authentication required.

For placing trades, see Onchain Integration or Gasless Trading.

Base URL

https://service.leverup.xyz

One-Click Trading is a separate service — see Gasless Trading.

Conventions

Chain parameter. Most endpoints take an optional chain selector defaulting to MONAD. The parameter name is inconsistent across endpoints — some use block_chain, others blockchain, and request bodies use blockChain. Each endpoint below documents the form it accepts. You can omit it in all cases.

Numbers are strings. Amounts, prices and quantities are returned as decimal strings to preserve precision. Units follow the onchain conventions — see Precision & Units.

Addresses. Accepted in either case; returned lowercase.

Timestamps. Either Unix seconds (integer) or ISO-8601 with offset, depending on the field.

Pagination

Paginated endpoints take page (0-based) and size, and return:

json
{
  "content": [],
  "pageNumber": 0,
  "pageSize": 20,
  "totalPages": 5,
  "totalElements": 92
}

Position and order endpoints cap size at 100.

Endpoint index

Oracle & prices

MethodPath
POST/v1/oracle/price/updates/by-positionOracle payload for a transaction
POST/v1/oracle/price/pairs/latestLatest prices
GET/v1/oracle/price/pair-24h-agoPrice 24h ago
GET/v1/oracle/price/pair-hours-agoPrice N hours ago

Pairs & volume

MethodPath
GET/v1/pairsList markets
GET/v1/pairs/{pairBase}/volumeVolume over a window
GET/v1/pairs/{pairBase}/cumulative-volumeAll-time volume
GET/v1/trading-volumes/usersPer-user daily volume
GET/v1/trading-volumes/sum-by-dateProtocol volume for a range
GET/v1/trading-volumes/sum-allAll-time protocol volume

Positions

MethodPath
GET/v1/user/{address}/open-positionsOpen positions
GET/v1/user/{address}/positionsAll positions incl. closed

History & portfolio

MethodPath
GET/v1/user/{address}/trade/historyTrade history
GET/v1/portfolio/{address}/trade_overviewPnL summary
GET/v1/portfolio/{address}/pnl_chart_dataPnL time series
GET/v1/portfolio/{address}/portfolio_dataPortfolio breakdown

Leaderboard & stats

MethodPath
GET/v1/leaderboardGlobal leaderboard
GET/v1/leaderboard/team/{code}Team leaderboard
GET/v1/leaderboard/my-rankOne trader's rank
GET/v1/leaderboard/{address}/trading-statsStats for a time range
GET/v1/slvmon/apysLVMON APY
GET/v1/slvmon/{address}/portfoliosLVMON position

Competitions & teams

MethodPath
GET/v1/trading-competitionList competitions
GET/v1/trading-competition/{id}/leaderboardCompetition leaderboard
POST/v1/trading-competition/joinJoin with an invite code
GET/v1/genesis-airdrop/…Genesis airdrop teams

Errors

Standard HTTP status codes. 400 for invalid parameters, 404 for unknown resources, 5xx for server errors. Error bodies are Spring-style JSON:

json
{
  "timestamp": "2026-07-27T10:00:00.000+00:00",
  "status": 400,
  "error": "Bad Request",
  "message": "pair_base should not be empty",
  "path": "/v1/oracle/price/pair-24h-ago"
}

Caching and rate limits

Several endpoints are cached server-side — pair listings for about a minute, volume for five minutes, portfolio aggregates for 30 seconds. Polling faster than that returns identical data.

There is no published per-key rate limit, but the service is shared. Cache on your side, poll no more than once per second per endpoint, and prefer the onchain read functions for tight loops.

Trading perpetuals involves risk. Nothing here is financial advice.