Developer Hub

Frequently Asked Questions

Common questions about integrating and using Pyth Pro

This page answers frequently asked questions about Pyth Pro (formerly known as Lazer). If you have questions that are not answered here, feel free to add a question to our developer forum.

Connection & Subscription

Q. Is the feed ordering preserved when subscribing to multiple price feeds?

Yes. The payload preserves the ordering of the feed IDs in your subscription request. If you subscribe with feed IDs in the order [3, 2, 1], the update data will maintain that order. Feed ordering is maintained even when data is omitted by a market session filter. You can verify this in the Pyth Pro Playground.

Q. How many price feed IDs can I subscribe to per stream?

There is no hard cap, but for optimal performance we recommend splitting large subscriptions across multiple connections. The number of connections is limited by your specific usage agreement. If you need to subscribe to many feeds, contact support for guidance on high-volume subscriptions. For more on rate limits, see Rate Limits.

Q. What is the "client too slow" error?

This error occurs when the client cannot process incoming messages fast enough. Common causes:

  • Processing delays in your message handler
  • Network latency issues

To resolve:

  • Optimize your message processing code to handle the incoming messages faster
  • Ensure adequate network bandwidth

Q. Which WebSocket endpoints should I connect to for redundancy?

Redundancy required

It is critical to connect to multiple endpoints in parallel to maintain a reliable connection and avoid downtimes. Individual endpoints can briefly go offline due to upgrades and network disruptions. The official SDK handles connecting redundantly to all available endpoints and deduplicating messages for you.

Connect to all three endpoints:

  • wss://pyth-lazer-0.dourolabs.app/v1/stream
  • wss://pyth-lazer-1.dourolabs.app/v1/stream
  • wss://pyth-lazer-2.dourolabs.app/v1/stream

See Subscribe to Prices for full setup details.

Data Format & Payloads

Q. How do equities work outside of market hours (24/5)?

Pyth Pro can be configured to behave as needed for your use case via market session filtering. You can control which market sessions you receive data for so that out-of-hours behavior matches your application—see the sessions property under Property Specifications in the Payload Reference. Pyth Pro does not keep pushing stale prices when markets are closed, because those prices become invalid—unlike Pyth Core, which may still send the latest data when the market is closed. For out-of-hours equities, you will receive prices during extended trading sessions but not during closed market periods. See Market Hours for detailed schedules.

Q. Is it mandatory to call verifyUpdate to get the payload when using Pyth Pro on-chain?

No. You can trim the payload off-chain and extract the data (from byte 71 onwards) without calling verifyUpdate. See the verify function in the contract or the Rust SDK protocol module.

We strongly discourage using the data on-chain without signature verification, as it poses security risks. If you are using the data on-chain without signature verification, you are responsible for verifying the data yourself.

Market Hours & Schedules

Q. How does Pyth Pro handle daylight saving time?

Schedules handle daylight saving transitions automatically. The schedule string uses IANA timezone names, which include daylight saving information. The time values (e.g., 1700) are local to the timezone. When the timezone enters or leaves daylight saving time, the local time does not change—only the offset from UTC. This is handled automatically by timezone-aware client libraries such as the Python client market schedule module.

Q. What are the market hours for Gold (XAU) and Silver (XAG)?

Pyth follows CME futures market hours for precious metals, since the spot price is derived from futures. According to CME Globex:

  • Trading hours: Sunday 6:00 p.m. ET through Friday 5:00 p.m. ET
  • Daily break: 60-minute break each day at 5:00 p.m. ET (17:00-18:00)

For full schedules by asset class, see Market Hours.

Moreover, one can fetch market hours from the Symbols API of the History Service.

On-Chain Integration

Q. Where can I find Pyth Pro (Lazer) contract deployments?

Contract addresses for Pyth Pro on **Solana, Fogo, and EVM networks (including Base, Ethereal, Polynomial, Soneium, and testnets) **are listed on the Contract Addresses page. Check that page for the current deployment address for your chain.

Historical Data

Q. How do I access historical price data for Pyth Pro?

Use the History API for OHLC candlestick data and TradingView-style integration. Base URL:

https://history.pyth-lazer.dourolabs.app/v1/

For OHLC history, use GET /{channel}/history. Example for BTC/USD in the last year with the fixed_rate@200ms channel:

https://history.pyth-lazer.dourolabs.app/v1/fixed_rate@200ms/history?symbol=Crypto.BTC/USD&from=<start_timestamp>&to=<end_timestamp>&resolution=1D

See the History API for full endpoint details, query parameters, and resolutions.

Q. How do I fetch the latest price via HTTP?

Use the REST API. Base URL:

https://pyth-lazer.dourolabs.app
  • Latest price: POST /v1/latest_price — returns the most recent price data for the requested feeds.
  • Price at a timestamp: POST /v1/price — returns price data at a specific historical timestamp (request body includes a timestamp field).

See the REST API for request/response schemas and examples.

Access Tokens & Permissions

Q. How are access tokens permissioned for different asset classes?

Each access token is permissioned for a specific set of:

  • Asset types (e.g., crypto, equity, fx, metals, rates)
  • Minimum channel (e.g., fixed_rate@200ms, real_time)
  • Optional specific feed IDs

One customer might have access to all asset types; another might be restricted to crypto only. Contact your account manager to adjust permissions.

Q. Why am I getting HTTP 403 or "not entitled" errors?

Common causes:

  1. Wrong endpoint: Ensure you are using the correct WebSocket or REST endpoint for your token.
  2. Asset class restriction: Your access token may not be entitled to the requested feed types.
  3. Expired token: Demo tokens expire; request a production token for long-term use.

Troubleshooting

Q. Why am I getting stale prices (2+ seconds old)?

Do not use Pyth Core methods such as getPriceFeedsUpdateData with Pyth Pro. Instead:

  1. Connect directly to the Pyth Pro WebSocket endpoints (see Subscribe to Prices).
  2. Subscribe to the feeds you need.
  3. Process the streaming data directly.

Pyth Pro provides sub-second latency when connected correctly. For on-chain integration, follow the Integrate as Consumer guide.

Q. I'm seeing latency spikes in production. What should I check?

Latency spikes can occur due to:

  1. Single connection: Connect to all three WebSocket endpoints for redundancy.
  2. Router issues: Occasionally the routing layer may experience delays.
  3. Network path: Check your network latency to our endpoints.

For high availability:

  • Maintain connections to pyth-lazer-0, pyth-lazer-1, and pyth-lazer-2
  • Implement automatic reconnection logic
  • Monitor connection health and fail over to other endpoints if needed

Infrastructure

Q. What are the Pyth Pro data center locations?

Pyth Pro infrastructure is deployed across multiple data centers for low latency and redundancy, including multiple facilities in the Tokyo region. Additional regions are available. Contact support for details relevant to your latency requirements.

Q. What is the precision of Pyth Pro timestamps?

Pyth Pro has a 1 ms update frequency, but timestamp precision may not be accurate to that level. Even with very precise server time, consumers typically do not have matching precision and would not benefit from it. For latency comparison, relative time matters more than precise timestamps: an observer compares the latency of price streams as received with their local receive time, not the source timestamp.

Additional Resources

On this page