Perpetuals: market data

Public endpoints for perp contract specs, book, tape, candles, mark and index prices, funding and venue aggregates.

All endpoints on this page are public — no key, no signature. Perpetuals are USDC-margined, non-expiring, and cover crypto, US equities, ETFs and commodities under one symbol grammar (<BASE>-USDC).

What is listed

curl -s https://api-mainnet.1024ex.com/api/v1/system/info
curl -s https://api-mainnet.1024ex.com/api/v1/perp/markets

GET /api/v1/system/info returns the flat list of tradable perp symbols; GET /api/v1/perp/markets returns the same set with per-market metadata.

Contract specs

curl -s https://api-mainnet.1024ex.com/api/v1/perp/markets/BTC-USDC
{
  "market": "BTC-USDC",
  "baseAsset": "BTC",
  "quoteAsset": "USDC",
  "status": "active",
  "tickSize": "0.010000000000000000",
  "stepSize": "0.000010000000000000",
  "minOrderSize": "0.00001",
  "maxOrderSize": "58.01341",
  "maxLeverage": 100,
  "marketMaxLeverage": 100,
  "sessionDegraded": false,
  "maxOrderNotionalE6": 5000000000000,
  "capReason": null,
  "fundingInterval": 28800000
}
FieldMeaning
tickSize / stepSizeprice and size increments; orders off-grid are rejected, not rounded
minOrderSize / maxOrderSizeper-order size bounds in base units
maxOrderNotionalE6per-order notional ceiling in micro-USDC (5000000000000 = $5,000,000)
maxLeveragethe ceiling currently applied, after any risk-driven reduction
marketMaxLeveragethe market's structural ceiling
capReasonnon-null when maxLeverage < marketMaxLeverage, naming why
sessionDegradedtrue when the underlying's price session is degraded (equities outside RTH, oracle gaps)
fundingIntervalms between funding settlements — 28800000 is 8 hours

Read maxLeverage, not marketMaxLeverage, before sizing: the gap between them is where TRADE_LEVERAGE_INVALID (13012) comes from.

Book, tape, candles

curl -s "https://api-mainnet.1024ex.com/api/v1/perp/markets/BTC-USDC/orderbook?depth=20"
curl -s "https://api-mainnet.1024ex.com/api/v1/perp/markets/BTC-USDC/trades"
curl -s "https://api-mainnet.1024ex.com/api/v1/perp/markets/BTC-USDC/klines?interval=1h&limit=500"

The book is [price, size] pairs, best-first:

{
  "market": "BTC-USDC",
  "bids": [["86167.19", "0.003393"], ["86157.2", "0.003277"]],
  "asks": [["86204.51", "0.003335"], ["86211.05", "0.003219"]],
  "timestamp": 1790095097073
}

depth is 1–100 (default 20). Klines take interval ∈ 1m 5m 15m 1h 4h 1d (default 1h) and limit 1–1000 (default 500).

One behaviour to know about candles: for markets with fewer than 100 trades in the last 24 h, the exchange falls back to external reference data (Coinbase / Binance / Yahoo) rather than serving a nearly-empty internal series. Liquid markets always serve the internal series. Either way the shape is identical — but do not treat low-volume candles as evidence of on-venue volume.

Prices

EndpointReturns
GET /perp/markets/{market}/ticker24 h summary: last, mark, index, bid/ask, OI, funding rate, next funding time
GET /perp/markets/{market}/mark-pricemark price — the number margin and liquidation are computed against
GET /perp/markets/{market}/index-priceindex with its component feeds
GET /perp/markets/{market}/open-interestopen interest

Mark, not last, is what the risk engine uses. A position's PnL, its maintenance margin and its liquidation price all move with mark; the last trade is cosmetic.

Funding

Funding settles every fundingInterval (8 h on crypto). The canonical pair is:

curl -s "https://api-mainnet.1024ex.com/api/v1/perp/markets/BTC-USDC/funding-rate"
curl -s "https://api-mainnet.1024ex.com/api/v1/perp/markets/BTC-USDC/funding-history?limit=50"

Several aliases exist for the same data because integrations kept guessing at paths — /perp/funding-rate?market=, /perp/funding-rate/{market}, /perp/markets/{market}/funding, and the list forms /perp/funding-rates, /perp/funding. They are 1:1 with the canonical handlers, with one difference worth knowing:

  • the single-market endpoint returns the live predicted rate (source: "live"),
  • the list endpoints return the latest settled rate per market (source: "settled").

If you are comparing markets for a carry screen, use the list form and accept that it lags the prediction; if you are deciding whether to hold through the next settlement, use the single-market form. Funding rates flip sign at minute granularity — do not cache a rate for a whole interval and trade off it.

Venue-wide numbers

EndpointReturns
GET /api/v1/analytics/tickersevery market's ticker in one call
GET /api/v1/analytics/markets/summaryper-market volume / OI / funding summary
GET /api/v1/analytics/open-interest (+ /history)OI now and over time
GET /api/v1/analytics/volume, /fees, /tvl (+ /history)protocol aggregates
GET /api/v1/analytics/liquidations, /liquidations/recentliquidation flow
GET /api/v1/analytics/insurance-fundinsurance fund balance
GET /api/v1/perp/adl/eventsrecent auto-deleveraging events

Prefer analytics/tickers over looping GET /ticker across 100+ markets — it is one request against your read budget instead of a hundred.

Staying current

Polling market data burns the 50 req/s read budget fast. The same data streams over perp.ticker, perp.orderbook, perp.trades, perp.kline and perp.funding — see WebSocket.


Did this page help you?