Lukka Pricing API
The Pricing API from Lukka — 13 operation(s) for pricing.
The Pricing API from Lukka — 13 operation(s) for pricing.
openapi: 3.2.0
info:
title: Lukka & Market Data Pricing API
version: 1.0.0
description: 'Institutional crypto pricing, valuation and market data: Lukka Prime fair-market-value prices, reference rates, index prices, MVWAP, OHLCV candles, market capitalisation, order-book liquidity and snapshots, spot and derivative trades, staking rates, funding rates and prediction-market history.'
contact:
name: Lukka Support
url: https://lukka.tech/support/
x-origin:
- format: postman
version: 2.1.0
url: https://apidocs.lukka.tech/
servers:
- url: https://data-pricing-api.lukka.tech
description: Lukka production (data-pricing-api.lukka.tech)
security:
- bearerAuth: []
tags:
- name: Pricing
paths:
/v1/pricing/sources/details/{productType}:
get:
operationId: availableSourcesByProduct
summary: Available Sources by Product
tags:
- Pricing
description: "Description: Gets all configured sources for the client based on a defined product type. An array of sources available, based on API key permissions and inputted product type will be returned by this endpoint.\n\n URL should follow the below format:\n\n https://data-pricing-api.lukka.tech/v1/pricing/sources/details/{productType} \n\n Available Product types include: prices, variances, mvwaps, trades, candles, market-caps, indices, quotes, order-book-liquidity-spot, order-book-liquidity-derivative"
parameters:
- name: productType
in: path
required: true
schema:
type: string
description: productType path parameter
responses:
'200':
description: Available Sources by Product
/v1/pricing/sources/details/{productType}/{sourceId}:
get:
operationId: getSourceDetailsByProduct
summary: Get Source Details by Product
tags:
- Pricing
description: "Description: Get the details for the given product type and specified pricing/market data source ID. Each source object will contain an array of pairs and additional metadata that it supports.\n\n This endpoint will only return the instruments for a given source ID that are permissioned for that specific Client API KEY\n\n URL should follow the below format:\n\n https://data-pricing-api.lukka.tech/v1/pricing/sources/details/ {productType}/{sourceID}\n\n Available Product types include: prices, variances, mvwaps, trades, candles, market-caps, indices, quotes, order-book-liquidity-spot, order-book-liquidity-derivative"
parameters:
- name: productType
in: path
required: true
schema:
type: string
description: productType path parameter
- name: sourceId
in: path
required: true
schema:
type: string
description: sourceId path parameter
responses:
'200':
description: Get Source Details by Product
content:
application/json:
example:
sourceId: 4002
sourceName: Coinbase
pairs:
- pairCode: XBT-USD
firstDate: '2022-07-03T00:00:59Z'
baseAsset: XBT
counterAsset: USD
baseAssetLukkaId: LA6EV2NKQ95
counterAssetLukkaId: LA3YM6GRUJ4
baseAssetName: Bitcoin
counterAssetName: US Dollar
baseAssetWhitepaperCode: BTC
baseAssetCommonStreetCode: BTC
counterAssetCommonStreetCode: USD
instrumentType: SPOT
status: ACTIVE
/v1/pricing/sources/details/{productType}/{sourceId}/derivatives:
get:
operationId: getDerivativeSourceDetailsPaginated
summary: Get Derivative Source Details (Paginated)
tags:
- Pricing
description: "Description: Get the details for the given product type and specified pricing/market data source ID. Each source object will contain an array of pairs and additional metadata.\n\n This endpoint will only return the instruments for a given source ID that are permissioned for that specific Client API KEY\n\n URL should follow the below format:\n\n https://data-pricing-api.lukka.tech/v1/pricing/sources/details/ {productType}/{sourceID}/derivatives\n\n Response is paginated via a nextPageUrl cursor. Available Product types are the same as the other /sources/details/* endpoints."
parameters:
- name: productType
in: path
required: true
schema:
type: string
description: productType path parameter
- name: sourceId
in: path
required: true
schema:
type: string
description: sourceId path parameter
responses:
'200':
description: Get Derivative Source Details (Paginated)
/v1/pricing/sources/2000/prices:
get:
operationId: getLatestPrices
summary: Get Latest Prices
tags:
- Pricing
description: "Description: Get the price as of the given timestamp from the given pair codes. If pairCodes is left blank, then all pairCodes will be listed for given sourceID.\n\n Keep in mind of the 2048 character limit in a GET request. The pairCodes query parameters should only be used to get a small sub-set of prices. Otherwise use default, which is ALL pairs.\n\n This endpoint is typically used to retrieve Lukka Prime (source 1000, 2000, 3000) or Exchange-level (source 4001–4999) prices."
parameters:
- name: pairCodes
in: query
required: false
schema:
type: string
example: XBT-USD,ETH-USD
- name: lookback
in: query
required: false
schema:
type: string
example: '172800000'
responses:
'200':
description: Get Latest Prices
content:
application/json:
example:
- pairCode: XBT-USD
price: '79126.46'
ts: '2026-04-22T15:35:00Z'
- pairCode: ETH-USD
price: '2399.01'
ts: '2026-04-22T15:35:00Z'
/v1/pricing/sources/{sourceId}/prices/pairs/{pairCode}:
get:
operationId: getHistoricalPrices
summary: Get Historical Prices
tags:
- Pricing
description: "Description: Get the price history for a single pair.\n\n If the response exceeds the maximum number of records that can be returned in a single payload, then a nextPageUrl field will be returned at the end of the response. The nextPageUrl is used to paginate the response and can be called to request the next batch of records prior to what was returned. nextPageUrl will continue to be included in the response until all of the requested records have been returned.\n\n This endpoint is typically used to retrieve Lukka Prime (source 1000, 2000, 3000) or Exchange-level (source 4001–4999) prices."
parameters:
- name: sourceId
in: path
required: true
schema:
type: string
description: sourceId path parameter
- name: pairCode
in: path
required: true
schema:
type: string
description: pairCode path parameter
- name: from
in: query
required: false
schema:
type: string
example: '2026-04-20T12:00:00Z'
- name: to
in: query
required: false
schema:
type: string
example: '2026-04-20T13:00:00Z'
responses:
'200':
description: Get Historical Prices
content:
application/json:
example:
pairCode: XBT-USD
firstDate: '2026-04-20T12:00:00Z'
lastDate: '2026-04-20T12:09:00Z'
nextPageUrl: /v1/pricing/sources/2000/prices/pairs/XBT-USD?from=2026-04-20T12%3A10%3A00Z&to=2026-04-20T13%3A00%3A00Z&limit=10
pricesCount: 10
prices:
- ts: '2026-04-20T12:00:00Z'
price: '75220.66'
- ts: '2026-04-20T12:01:00Z'
price: '75186.78'
- ts: '2026-04-20T12:02:00Z'
price: '75137.49'
- ts: '2026-04-20T12:03:00Z'
price: '75151.02'
- ts: '2026-04-20T12:04:00Z'
price: '75132.49'
- ts: '2026-04-20T12:05:00Z'
price: '75227.41'
- ts: '2026-04-20T12:06:00Z'
price: '75291.91'
- ts: '2026-04-20T12:07:00Z'
price: '75311.03'
- ts: '2026-04-20T12:08:00Z'
price: '75335.02'
- ts: '2026-04-20T12:09:00Z'
price: '75320.39'
/v1/pricing/sources/{sourceId}/prices/pairs/{pairCode}/variances:
get:
operationId: getPriceVariancesByPair
summary: Get Price Variances by Pair
tags:
- Pricing
description: "Description: Get the price history for a single pair along with its market variances. For each exchange, daily volume, daily trade counts, hourly volume, and hourly trade counts are provided. Lukka Prime takes all these parameters into consideration when choosing a principal exchange for the minute's price.\n\n Exchanges under market variances are sorted in a descending order by its hourly volume .\n\n If the response exceeds the maximum number of records that can be returned in a single payload, then a nextPageUrl field will be returned at the end of the response."
parameters:
- name: sourceId
in: path
required: true
schema:
type: string
description: sourceId path parameter
- name: pairCode
in: path
required: true
schema:
type: string
description: pairCode path parameter
- name: from
in: query
required: false
schema:
type: string
example: '2026-04-20T12:00:00Z'
- name: to
in: query
required: false
schema:
type: string
example: '2026-04-20T12:10:00Z'
- name: limit
in: query
required: false
schema:
type: string
example: '3'
responses:
'200':
description: Get Price Variances by Pair
/v1/pricing/sources/5005/mvwaps:
get:
operationId: getLatestMVWAPs
summary: Get Latest MVWAPs
tags:
- Pricing
description: 'Description: Get the latest Moving Volume Weighted Average Price (MVWAP) as of the given timestamp from the given pair codes. If pairCodes is left blank, then all pairCodes will be listed for the given sourceID. Example uses source 5005 (15s/1s MVWAP).'
parameters:
- name: pairCodes
in: query
required: false
schema:
type: string
example: XBT-USD,ETH-USD
responses:
'200':
description: Get Latest MVWAPs
content:
application/json:
example:
- pairCode: ETH-USD
mvwap60min: '2410.769550194882'
ts: '2026-04-22T15:39:27Z'
- pairCode: XBT-USD
mvwap60min: '79304.33066181457'
ts: '2026-04-22T15:39:27Z'
/v1/pricing/sources/{sourceId}/mvwaps/pairs/{pairCode}:
get:
operationId: getHistoricalMVWAPByPair
summary: Get Historical MVWAP by Pair
tags:
- Pricing
description: "Description: Get the MVWAP history for a single pair.\n\n If the response exceeds the maximum number of records that can be returned in a single payload, then a nextPageUrl field will be returned at the end of the response. The nextPageUrl is used to paginate the response and can be called to request the next batch of records prior to what was returned."
parameters:
- name: sourceId
in: path
required: true
schema:
type: string
description: sourceId path parameter
- name: pairCode
in: path
required: true
schema:
type: string
description: pairCode path parameter
- name: from
in: query
required: false
schema:
type: string
example: '2026-04-20T12:00:00Z'
- name: to
in: query
required: false
schema:
type: string
example: '2026-04-20T12:10:00Z'
- name: limit
in: query
required: false
schema:
type: string
example: '5'
responses:
'200':
description: Get Historical MVWAP by Pair
content:
application/json:
example:
pairCode: XBT-USD
firstDate: '2026-04-20T12:01:00Z'
lastDate: '2026-04-20T12:05:00Z'
nextPageUrl: /v1/pricing/sources/5005/mvwaps/pairs/XBT-USD?from=2026-04-20T12%3A06%3A00Z&to=2026-04-20T12%3A10%3A00Z&limit=5
mvwaps:
- ts: '2026-04-20T12:01:00Z'
mvwap60min: '75177.94675145515'
- ts: '2026-04-20T12:02:00Z'
mvwap60min: '75146.26034069767'
- ts: '2026-04-20T12:03:00Z'
mvwap60min: '75144.55591463677'
- ts: '2026-04-20T12:04:00Z'
mvwap60min: '75121.14617724055'
- ts: '2026-04-20T12:05:00Z'
mvwap60min: '75213.56715791079'
/v1/pricing/sources/vwaps/{pairCode}:
get:
operationId: getMultiSourceVWAPByPair
summary: Get Multi-Source VWAP by Pair
tags:
- Pricing
description: "Description: Get the 60 minute Volume Weighted Average Price (VWAP) for a given pair code and given Source Exchanges. The VWAP output price for any given timestamp is the volume-weighted price of all executed trades in the previous 60 minutes from the inputted list of Market Data Source IDs that support the requested Pair Code.\n\n Max date range is 7 days. periodicityCalculation and interval are both in milliseconds.\n\n If the response exceeds the maximum number of records that can be returned in a single payload, then a nextPageUrl field will be returned at the end of the response."
parameters:
- name: pairCode
in: path
required: true
schema:
type: string
description: pairCode path parameter
- name: sourceIds
in: query
required: false
schema:
type: string
example: 4002,4005
- name: from
in: query
required: false
schema:
type: string
example: '2026-04-20T12:00:00Z'
- name: to
in: query
required: false
schema:
type: string
example: '2026-04-20T13:00:00Z'
- name: interval
in: query
required: false
schema:
type: string
example: '60000'
responses:
'200':
description: Get Multi-Source VWAP by Pair
content:
application/json:
example:
pairCode: XBT-USD
sourceIds:
- 4005
interval: 60000
nextPageUrl: /v1/pricing/sources/vwaps/XBT-USD?sourceIds=4002%2C4005&from=2026-04-20T12%3A10%3A00Z&to=2026-04-20T13%3A00%3A00Z&interval=60000&limit=10
vwaps:
- ts: '2026-04-20T12:00:00Z'
vwap: '75261.5824265915004405'
- ts: '2026-04-20T12:01:00Z'
vwap: '75238.3213660661282716'
- ts: '2026-04-20T12:02:00Z'
vwap: '75238.3213660661282716'
- ts: '2026-04-20T12:03:00Z'
vwap: '75238.3213660661282716'
- ts: '2026-04-20T12:04:00Z'
vwap: '75238.3213660661282716'
- ts: '2026-04-20T12:05:00Z'
vwap: '75238.3213660661282716'
- ts: '2026-04-20T12:06:00Z'
vwap: '75238.3213660661282716'
- ts: '2026-04-20T12:07:00Z'
vwap: '75238.3213660661282716'
- ts: '2026-04-20T12:08:00Z'
vwap: '75239.4090866061676381'
- ts: '2026-04-20T12:09:00Z'
vwap: '75239.4090866061676381'
/v1/pricing/sources/5001/prices:
get:
operationId: getLatestReferenceRate
summary: Get Latest Reference Rate
tags:
- Pricing
description: "Description: Get the latest Lukka Reference Rate as of the given timestamp for the given pair codes. If pairCodes is left blank, then all pairCodes will be listed for the given sourceID. Example uses source 5001.\n\n Keep in mind the 2048 character limit in a GET request. The pairCodes query parameter should only be used to get a small sub-set of prices. Otherwise use default, which is ALL pairs."
parameters:
- name: pairCodes
in: query
required: false
schema:
type: string
example: XBT-USD,ETH-USD
responses:
'200':
description: Get Latest Reference Rate
content:
application/json:
example:
- ts: '2026-04-22T15:00:00Z'
pairCode: ETH-USD
price: '2409.734887766603'
- ts: '2026-04-22T15:00:00Z'
pairCode: XBT-USD
price: '78927.50762860353'
/v1/pricing/sources/5001/prices/pairs/{pairCode}:
get:
operationId: getHistoricalReferenceRateByPair
summary: Get Historical Reference Rate by Pair
tags:
- Pricing
description: "Description: Get the Lukka Reference Rate history for a single pair.\n\n If the response exceeds the maximum number of records that can be returned in a single payload, then a nextPageUrl field will be returned at the end of the response. The nextPageUrl is used to paginate the response and can be called to request the next batch of records prior to what was returned.\n\n interval must be 3600000 (1h) or 86400000 (1d)."
parameters:
- name: pairCode
in: path
required: true
schema:
type: string
description: pairCode path parameter
- name: from
in: query
required: false
schema:
type: string
example: '2026-04-20T00:00:00Z'
- name: to
in: query
required: false
schema:
type: string
example: '2026-04-20T03:00:00Z'
- name: interval
in: query
required: false
schema:
type: string
example: '3600000'
responses:
'200':
description: Get Historical Reference Rate by Pair
content:
application/json:
example:
pairCode: XBT-USD
firstDate: '2026-04-20T00:00:00Z'
lastDate: '2026-04-20T02:00:00Z'
nextPageUrl: /v1/pricing/sources/5001/prices/pairs/XBT-USD?from=2026-04-20T03%3A00%3A00Z&to=2026-04-20T03%3A00%3A00Z&interval=3600000&limit=3
pricesCount: 3
prices:
- ts: '2026-04-20T00:00:00Z'
pairCode: XBT-USD
price: '73922.79679093281'
- ts: '2026-04-20T01:00:00Z'
pairCode: XBT-USD
price: '74200.48992173481'
- ts: '2026-04-20T02:00:00Z'
pairCode: XBT-USD
price: '74485.24994657465'
/v1/pricing/sources/{sourceId}/indices:
get:
operationId: getLatestIndexPrices
summary: Get Latest Index Prices
tags:
- Pricing
description: "Description: Get the price as of the given timestamp from the given pair codes. If pairCodes is left blank, then all pairCodes will be listed for given sourceID.\n\n Keep in mind of the 2048 character limit in a GET request. The pairCodes query parameters should only be used to get a small sub-set of prices. Otherwise use default, which is ALL pairs.\n\n sourceId must match the 6xxx (indices) range. Default lookback is 5400000 ms (90 min)."
parameters:
- name: sourceId
in: path
required: true
schema:
type: string
description: sourceId path parameter
responses:
'200':
description: Get Latest Index Prices
content:
application/json:
example:
data:
- businessTime: '2026-04-22T15:39:31Z'
constituents:
- instrument: XRP
weight: 0.0554125751556742
quantity: 4269825.123121
value: 6221492.617187838
instrumentId: b70858e5-6396-4acc-9b8b-2227078b53b6
businessTime: 1776872370000
type: TRADE
- instrument: USD
weight: 0.0005897919027744
quantity: 65607.55
value: 65607.55
instrumentId: ''
businessTime: 0
type: TRADE
- instrument: SOLN
weight: 0.0302071041984093
quantity: 38500.08144854
value: 3406608.295370725
instrumentId: 5d2cb639-6f9e-4453-af2d-647b378fc9db
businessTime: 1776872370000
type: TRADE
- instrument: ETH
weight: 0.1264437363753679
quantity: 5949.05234849
value: 14342312.826203719
instrumentId: 10037d90-5d90-493b-b011-7716bb9bf290
businessTime: 1776872370000
type: TRADE
- instrument: XLM
weight: 0.0028874100040171
quantity: 1783532.82900998
value: 323809.89982396894
instrumentId: 9f7bebb0-0467-4207-bd02-9fbb928f39c4
businessTime: 1776872370000
type: TRADE
- instrument: LINK
weight: 0.0035887292167665
quantity: 41988.12244401
value: 398886.9363895392
instrumentId: df8e972b-3803-4854-acbb-3f98838a8dfe
businessTime: 1776872370000
type: TRADE
- instrument: XBT
weight: 0.7747994781014437
quantity: 1111.3906164
value: 88148329.4569846
instrumentId: 043ee4a3-a84e-4821-a2dd-590b03dcadb3
businessTime: 1776872370000
type: TRADE
- instrument: ADA
weight: 0.0060711750455469
quantity: 2655720.48373976
value: 679065.5098328806
instrumentId: fe14b4e4-aabc-4487-b657-d35218cdeefd
businessTime: 1776872370000
type: TRADE
distributionId: '6147'
divisor: '5690000.0'
id: 7da7376e-3e02-4520-8e2e-e9c31ceea32f
indexId: '147'
name: Hashdex Nasdaq Crypto Index ETF Intraday Indicative Value
symbol: NCIQ.IV
value: '19.962410033707076'
valueUnit: USD
/v1/pricing/sources/{sourceId}/indices/historical:
get:
operationId: getHistoricalIndexPrices
summary: Get Historical Index Prices
tags:
- Pricing
description: "Description: Get the price history for a single pair.\n\n If the response exceeds the maximum number of records that can be returned in a single payload, then a nextPageUrl field will be returned at the end of the response. The nextPageUrl is used to paginate the response and can be called to request the next batch of records prior to what was returned.\n\n sourceId must match the 6xxx (indices) range."
parameters:
- name: sourceId
in: path
required: true
schema:
type: string
description: sourceId path parameter
- name: from
in: query
required: false
schema:
type: string
example: '2026-04-20T12:00:00Z'
- name: to
in: query
required: false
schema:
type: string
example: '2026-04-20T13:00:00Z'
responses:
'200':
description: Get Historical Index Prices
components:
securitySchemes:
oktaClientCredentials:
type: oauth2
description: Lukka issues JWT access tokens from its Okta authorization servers using the OAuth 2.0 client_credentials grant. Encode the Lukka-issued client id and secret as HTTP Basic credentials on the token request; the returned access_token is then sent as a Bearer token on every data API call.
flows:
clientCredentials:
tokenUrl: https://sso.lukka.tech/oauth2/aus1imo2fqcx5Ik4Q0h8/v1/token
scopes:
pricing: Access to Lukka Pricing & Valuation and Market Data endpoints
interclient_access: Cross-client access scope advertised by the Lukka Okta authorization servers
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: JWT access token obtained from the Lukka Okta token endpoint.