Perp Data

Get candles

GET/perp/candlesPublic

Get the candles (OHLC) of a perpetual market at the range resolution, 1 minute by default. Paginated, newest first. An unknown market, or one you have no access to, fails with NOT_FOUND.

Query Parameters

from?string

Start date, unix epoch 0 by default

Formatdate-time
Default"1970-01-01T00:00:00.000Z"
to?string

End date, default to current time

Formatdate-time
Default"2026-11-02T11:07:07.069Z"
limit?integer

Number of entries to return, default to 1000

Range1 <= value <= 1000
Default1000
cursor?

Cursor for pagination: the nextCursor of the previous page, passed as cursor[value]

range?string

Resolution of the OHLCs

Default"1m"
Value in"1m""3m""5m""10m""15m""30m""45m""1h""2h""3h""4h""1d""1w""1month""3months"
instrument*string

Instrument of the market

Value in"inverse_perp""quanto_perp"
pair*string

Pair of the market

Response Body

OK

application/json
  1. response
instrument*string

Instrument of the market

Value in"inverse_perp""quanto_perp"
pair*string

Pair of the market

data*array<>
nextCursor*|

Cursor to use for fetching the next page of results: the last candle's time. Pass it back as the cursor parameter of the next request. Returns null when there are no more results.

import { createHttpClient } from '@ln-markets/sdk/rest/v3'

const client = createHttpClient()

const result = await client.perp.getCandles({
  from: '1970-01-01T00:00:00.000Z',
  to: '2026-11-02T11:07:06.159Z',
  limit: 500,
  range: '1m',
  instrument: 'inverse_perp',
  pair: 'btc_usd'
})
{
  "instrument": "inverse_perp",
  "pair": "btc_usd",
  "data": [
    {
      "time": "2023-05-23T09:52:57.863Z",
      "open": 43250.5,
      "high": 43500,
      "low": 43100,
      "close": 43400,
      "volume": 1250000
    }
  ],
  "nextCursor": {
    "value": "2024-01-15T10:30:00.000Z"
  }
}