Get API key
Historical prices

Get prices at a timestamp

gethttps://pyth.dourolabs.app/v1/{channel}/price

An API key or short-lived access token, in an Authorization: Bearer <token> header.

Returns prices for the requested feeds at an exact timestamp, without signed payloads.

Specify the timestamp in Unix microseconds. For fixed-rate channels, the timestamp must align with the channel interval. If no update matches, the endpoint returns an empty array.

For on-chain verification: Get signed prices at a timestamp →

getv1/{channel}/price
curl "https://pyth.dourolabs.app/v1/real_time/price?ids=1&ids=2&timestamp=1758830400000000" \
  -H "Authorization: Bearer $PYTH_API_KEY"
Response
[
  {
    "channel": 1,
    "channel_name": "real_time",
    "price_feed_id": 1,
    "publish_time": 1684137600000000,
    "best_ask_price": 101,
    "best_bid_price": 99,
    "confidence": 100,
    "ema_confidence": 100,
    "ema_price": 100,
    "exponent": -8,
    "feed_update_timestamp": 1684137600000000,
    "funding_rate": 100,
    "funding_rate_interval": null,
    "funding_timestamp": 1684137600000000,
    "market_session": "regular",
    "price": 100,
    "publisher_count": 1
  }
]

Path parameters

Replace the placeholders in the URL path with these values.

channelRequired

The channel that determines the update frequency.

Query parameters

Add these parameters to the URL query string.

idsinteger[]Required

IDs of the price feeds to retrieve.

timestampstringRequired

The exact timestamp to retrieve, in Unix microseconds.

split_adjustedbooleanOptional

Scale prices published before a stock split into post-split terms. Defaults to false.

Response

200 · application/json

Returns a JSON array. Each item contains the following fields.

channelinteger

Numeric ID of the update channel.

channel_name

Name of the update channel.

  • real_time
  • fixed_rate@50ms
  • fixed_rate@200ms
  • fixed_rate@1000ms
price_feed_idinteger

Numeric ID of the price feed.

publish_timeinteger

Publication timestamp of the update, in Unix microseconds.

best_ask_priceinteger | null

Best ask price, before applying exponent.

best_bid_priceinteger | null

Best bid price, before applying exponent.

confidenceinteger | null

Confidence interval of the price, before applying exponent.

ema_confidenceinteger | null

Exponential moving average of the confidence interval, before applying exponent.

ema_priceinteger | null

Exponential moving average of the price, before applying exponent.

exponentinteger | null

Power of ten that scales the decimal fields: decimal value = mantissa * 10^exponent.

feed_update_timestampinteger | null

Feed update timestamp, in Unix microseconds.

funding_rateinteger | null

Perpetual futures funding rate, before applying exponent.

funding_rate_intervalinteger | null

Time between funding rate updates, in microseconds.

funding_timestampinteger | null

Timestamp of the latest funding rate, in Unix microseconds.

market_sessionstring | null

Market session of the feed update.

  • regular
  • preMarket
  • postMarket
  • overNight
  • closed
priceinteger | null

Price, before applying exponent. On funding-rate feeds, the funding price.

publisher_countinteger | null

Number of publishers contributing to the update.

Errors

Status codes returned when a request fails.

400
A requested price feed is not ready, or is unavailable on this channel.
401
Authentication is missing.
403
The credentials do not grant access to a requested price feed.
404
A requested price feed does not exist, or is not visible to these credentials.
429
The request rate limit for this API key was exceeded.