Get API key

History API

Historical price data, OHLC candlesticks, and TradingView integration

Base URL

https://pyth.dourolabs.app/v1

All {channel} path segments refer to a price channel (e.g. real_time, fixed_rate@200ms).

The /{channel}/... endpoints conform to the TradingView UDF specification, allowing you to connect TradingView charting UIs directly to this API.

Endpoints

MethodPathAuthDescription
GET/liveNoHealth check
GET/symbolsNoList available symbols
GET/{channel}/priceYesPrice at a specific timestamp
GET/{channel}/price/rangeYesPaginated prices over a time window
GET/{channel}/historyYesOHLC candlestick data
GET/{channel}/searchNoSearch symbols
GET/{channel}/symbolsNoResolve a single symbol
GET/{channel}/configNoTradingView configuration
GET/publisher_updatesYesRaw publisher updates

GET /symbols

List all available price feed symbols, optionally filtered.

Query Parameters

ParameterTypeRequiredDescription
querystringNoText filter for symbol names
asset_typestringNoFilter by asset type: crypto, fx, equity, metal, rates, nav, commodity, funding-rate

GET /{channel}/price

Returns price data at a specific historical timestamp.

Query Parameters

ParameterTypeRequiredDescriptionExample
idsnumber[]YesPrice feed IDs1,2
timestampnumberYesUnix timestamp in microseconds1704067200000000
split_adjustedbooleanNoScale prices computed before a stock split into post-split terms (default: false). See Split-adjusted pricestrue

GET /{channel}/price/range

Returns paginated price data for a set of feeds over a bounded time window.

Query Parameters

ParameterTypeRequiredDescriptionExample
idsnumber[]YesPrice feed IDs (max 100)1,2
start_timestampnumberYesWindow start, Unix timestamp in microseconds, inclusive1704067200000000
end_timestampnumberYesWindow end, Unix timestamp in microseconds, inclusive; the window may not exceed 60 seconds1704067260000000
limitnumberNoMax results per page, 1–1000 (default: 100)500
afterstringNoOpaque pagination cursor from a previous response's next field
split_adjustedbooleanNoScale prices computed before a stock split into post-split terms (default: false). See Split-adjusted pricestrue

Response Schema

FieldTypeDescription
dataobject[]Price objects, one per feed and timestamp
nextstringOpaque cursor, present only when another page exists

Each data entry has the same shape as the GET /{channel}/price response: channel, channel_name, price_feed_id, price, publish_time, best_bid_price, best_ask_price, publisher_count, exponent, confidence, funding_rate, funding_timestamp, funding_rate_interval, market_session, ema_price, ema_confidence, feed_update_timestamp.

To fetch the next page, pass next verbatim as the after parameter of the following request; stop when next is absent. Cursors are opaque and must not be constructed by hand.

Errors

StatusCause
400Invalid parameters, window longer than 60 seconds, or feed not ready/unavailable on the channel
401Missing bearer token
403Token not entitled to a requested feed
404Unknown feed ID

GET /{channel}/history

Returns OHLC candlestick data in TradingView format.

Query Parameters

ParameterTypeRequiredDescriptionExample
symbolstringYesTrading pair symbol (case-insensitive)Crypto.BTC/USD
fromnumberYesStart timestamp (Unix seconds)1704067200
tonumberYesEnd timestamp (Unix seconds)1704153600
resolutionstringYesCandle resolution (see below)60
split_adjustedbooleanNoScale prices computed before a stock split into post-split terms (default: false). See Split-adjusted pricestrue

Available Resolutions

ResolutionDescription
11 minute
22 minutes
55 minutes
1515 minutes
3030 minutes
601 hour
1202 hours
2404 hours
3606 hours
72012 hours
D1 day
W1 week
M1 month

Response Schema

FieldTypeDescription
sstringStatus: ok or error
tnumber[]Unix timestamps (seconds)
onumber[]Open prices
hnumber[]High prices
lnumber[]Low prices
cnumber[]Close prices
vnumber[]Volumes (if available)

Arrays are aligned by index — t[0], o[0], h[0], l[0], c[0] represent the same candle.

GET /{channel}/search

Search for symbols by name and type.

Query Parameters

ParameterTypeRequiredDescription
querystringYesSearch text
typestringYesAsset type filter
exchangestringYesExchange name (default: "PYTH")
limitnumberYesMax results (default: 15)

GET /{channel}/symbols

Resolve a single symbol to its full configuration.

Query Parameters

ParameterTypeRequiredDescription
symbolstringYesSymbol name (case-insensitive)

GET /{channel}/config

Returns TradingView-compatible configuration including supported resolutions and data capabilities.

GET /publisher_updates

Returns raw publisher price updates. Requires authentication.

Query Parameters

ParameterTypeRequiredDescription
price_feed_idnumber[]NoFilter by price feed IDs
min_timestampstringNoISO 8601 start time (default: 7 days ago)
max_timestampstringNoISO 8601 end time
sortstringYes"Ascending" or "Descending"
limitnumberNoMax results, 1–10000 (default: 15)

Authentication

GET /{channel}/price, GET /{channel}/price/range, and GET /{channel}/history require API-key authentication. Pass your Pro API key as a bearer token:

curl -H "Authorization: Bearer $PRO_API_KEY" \
  "https://pyth.dourolabs.app/v1/fixed_rate@200ms/price?ids=1&timestamp=1704067200000000"

Do not embed your Pro API key in frontend or browser applications. The key must stay server-side. Route requests through your own backend, which injects the Authorization header before forwarding to this API.

For browser/frontend apps that cannot hold a secret, see Frontend Authentication.

See Acquire an API Key to obtain a key.

Split-adjusted prices

A stock split changes an equity's share price without changing its value. For example, Netflix (Equity.US.NFLX/USD, feed ID 1304) traded near 1,100beforeitsten−for−onespliton2025−11−17andnear1,100 before its ten-for-one split on 2025-11-17 and near 110 after it.

GET /{channel}/price, GET /{channel}/price/range, and GET /{channel}/history accept an optional split_adjusted query parameter. It defaults to false, which returns prices as published. Set it to true to scale every price computed before a split into post-split terms, so that prices on both sides of the split are comparable:

curl -H "Authorization: Bearer $PRO_API_KEY" \
  "https://pyth.dourolabs.app/v1/fixed_rate@200ms/history?symbol=Equity.US.NFLX/USD&resolution=D&from=1762992000&to=1763596800&split_adjusted=true"

With split_adjusted=true, the 2025-11-13 daily candle opens at 115.75. With the default, it opens at 1157.5.

The adjustment uses the confirmed and applied splits and reverse splits from Corporate Actions. A split takes effect at the start of the feed's pre-market session on its ex-date, or at the start of the regular session if the feed has no pre-market session. The parameter has no effect on feeds whose asset has no splits.

A price counts as computed before a split if its feed_update_timestamp, or its publish_time when feed_update_timestamp is absent, is before the split. A fixed-rate update published after a split can repeat a price computed before it, and that price is adjusted.

The price, best_bid_price, best_ask_price, confidence, ema_price, and ema_confidence fields are adjusted, as are the OHLC values from GET /{channel}/history. The exponent is unchanged.

Each response from these endpoints carries a Pyth-Split-Version header. It identifies the splits of the requested feeds that the adjustment used. It is 0 when split_adjusted is false or when no requested feed has a confirmed and applied split. The value depends on which feeds you request, so compare it only between requests for the same feeds. For such requests, the same non-zero value means the same splits were applied. If the value changes, a new split was applied and prices from earlier requests are no longer on the same scale: fetch them again.

OpenAPI Schema

The full OpenAPI specification is available at: