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. The current unrealized PnL endpoint returns decimal USD strings with no integer scale; other fields generally 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}/unrealized-pnlCurrent unrealized PnL
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.

Current unrealized PnL is an exception: its successful responses use Cache-Control: no-store. Respect this header rather than caching the valuation.

There is no published per-key rate limit, but the service is shared. Cache only where permitted, 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.