Skip to content

docs(developer-hub): add Symbology & Reference Data page#3820

Open
aditya520 wants to merge 4 commits into
mainfrom
feat/symbology-reference-docs
Open

docs(developer-hub): add Symbology & Reference Data page#3820
aditya520 wants to merge 4 commits into
mainfrom
feat/symbology-reference-docs

Conversation

@aditya520

@aditya520 aditya520 commented Jun 18, 2026

Copy link
Copy Markdown
Member

What

Adds a Symbology & Reference Data docs page for Pyth Pro documenting the symbol metadata served by /v1/symbols, requested in #market-data (Yaser, P0).

New page: content/docs/price-feeds/pro/symbology-reference.mdx

  • Full /v1/symbols field reference, grouped: identity & naming, classification, pricing & quality, scheduling, futures & derivatives.
  • A Callout disambiguating schedule vs market_session_schedule vs market_sessions.
  • The Futures & derivatives section covers expiration_time and corporate_actions.

Nav + cross-links:

  • Renamed the Symbols List API nav entry to Symbology and Reference Data API in pro/meta.json and added the new page under Resources.
  • Cross-linked from futures-terminology.mdx, price-feed-ids.mdx, and api/rest.mdx.

Deferred to a follow-up

  • chain_id / expiration_pattern / availability_pattern were dropped from this PR. They are not yet in the public /v1/symbols response (verified 0/3341 on 2026-06-23; backend exposure is Tejas's P0). The page now documents only fields present in the live API. The futures pattern fields, along with their Futures metadata section (month-code legend + worked E-mini S&P example), will be re-added once the backend exposes them.
  • "Referenced in the interactive docs" → the OpenAPI field descriptions at pyth-lazer-0.dourolabs.app/docs are a separate spec/backend change.

Verification

Dev server renders the page (200). The Futures & derivatives table now shows only expiration_time and corporate_actions; the renamed and new nav entries are present. meta.json is valid JSON.

🤖 Generated with Claude Code

Document the Pyth Pro symbol metadata served by /v1/symbols, including a
full field reference (identity, classification, pricing/quality,
scheduling) and a dedicated futures section for the new chain_id,
expiration_pattern, and availability_pattern fields.

Also rename the "Symbols List API" nav entry to "Symbology and Reference
Data API" and cross-link the new page from futures-terminology,
price-feed-ids, and the REST API reference.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
component-library Ready Ready Preview, Comment Jun 23, 2026 7:55pm
developer-hub Ready Ready Preview, Comment Jun 23, 2026 7:55pm
5 Skipped Deployments
Project Deployment Actions Updated (UTC)
api-reference Skipped Skipped Jun 23, 2026 7:55pm
entropy-explorer Skipped Skipped Jun 23, 2026 7:55pm
insights Skipped Skipped Jun 23, 2026 7:55pm
proposals Skipped Skipped Jun 23, 2026 7:55pm
staking Skipped Skipped Jun 23, 2026 7:55pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

🤖 llms.txt Content Review

Analyzed documentation changes — no updates to curated content required.

Products reviewed: llms-price-feeds-pro.txt, llms-price-feeds.txt

Note: Product files contain curated content. Deep dive page URLs in each file link to individual .mdx pages for full detail.

Files analyzed
apps/developer-hub/content/docs/price-feeds/pro/api/rest.mdx
apps/developer-hub/content/docs/price-feeds/pro/futures-terminology.mdx
apps/developer-hub/content/docs/price-feeds/pro/price-feed-ids.mdx
apps/developer-hub/content/docs/price-feeds/pro/symbology-reference.mdx

…ology page

chain_id, expiration_pattern, and availability_pattern are not yet in the
public /v1/symbols response (verified 0/3341 on 2026-06-23). Remove their
table rows and the Futures metadata section (incl. month-code table and
worked example) until the backend exposes them. The page now documents only
fields present in the live API; the Futures & derivatives table keeps
expiration_time and corporate_actions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel vercel Bot temporarily deployed to Preview – api-reference June 23, 2026 17:31 Inactive
@vercel vercel Bot temporarily deployed to Preview – insights June 23, 2026 17:31 Inactive
@vercel vercel Bot temporarily deployed to Preview – proposals June 23, 2026 17:31 Inactive
@vercel vercel Bot temporarily deployed to Preview – staking June 23, 2026 17:31 Inactive
@vercel vercel Bot temporarily deployed to Preview – entropy-explorer June 23, 2026 17:31 Inactive
@aditya520 aditya520 marked this pull request as ready for review June 23, 2026 17:39

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

Open in Devin Review

| ---------------- | --------- | -------------------------------------------------------------------------------------------------------------------- |
| `exponent` | `i16` | Decimal exponent: `actual_price = mantissa × 10^exponent`. Same meaning as in the price payload. |
| `min_publishers` | `u16` | Minimum number of publishers required for the feed to produce a price. |
| `min_channel` | `string` | Lowest-latency channel the feed supports: `real_time`, `fixed_rate@50ms`, or `fixed_rate@200ms`. You must subscribe at or above this channel. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 min_channel possible values list omits fixed_rate@1ms

The new documentation states min_channel can be one of real_time, fixed_rate@50ms, or fixed_rate@200ms, but the codebase explicitly handles fixed_rate@1ms as a valid min_channel value returned by the API. At src/components/PriceFeedIdsProTable/index.tsx:25-26, a normalizeChannelId function maps fixed_rate@1ms to real_time for display, which means fixed_rate@1ms is a value the API can return. The documentation should either list fixed_rate@1ms as a possible value, or note that it is treated as equivalent to real_time.

Suggested change
| `min_channel` | `string` | Lowest-latency channel the feed supports: `real_time`, `fixed_rate@50ms`, or `fixed_rate@200ms`. You must subscribe at or above this channel. |
| `min_channel` | `string` | Lowest-latency channel the feed supports: `real_time`, `fixed_rate@1ms`, `fixed_rate@50ms`, or `fixed_rate@200ms`. You must subscribe at or above this channel. |
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

| ---------------- | --------- | -------------------------------------------------------------------------------------------------------------------- |
| `exponent` | `i16` | Decimal exponent: `actual_price = mantissa × 10^exponent`. Same meaning as in the price payload. |
| `min_publishers` | `u16` | Minimum number of publishers required for the feed to produce a price. |
| `min_channel` | `string` | Lowest-latency channel the feed supports: `real_time`, `fixed_rate@50ms`, or `fixed_rate@200ms`. You must subscribe at or above this channel. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 Channel list in rest.mdx includes fixed_rate@1ms but CHANNELS array in UI component does not

The channel field in rest.mdx:30 lists 5 values including fixed_rate@1ms, but the CHANNELS array in PriceFeedIdsProTable/index.tsx:18-23 only has 4 entries (no fixed_rate@1ms). The normalizeChannelId function at src/components/PriceFeedIdsProTable/index.tsx:25-26 bridges this gap by mapping fixed_rate@1msreal_time. This pre-existing inconsistency (not introduced by this PR) means fixed_rate@1ms is a valid subscription channel but may be treated as equivalent to real_time in display/reference contexts. The new symbology-reference page inherits this ambiguity in its min_channel description.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 239f1f093c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

| `name` | `string` | Short symbol name, e.g. `BTCUSD`. For futures this includes the month/year code, e.g. `EMH6`. |
| `symbol` | `string` | Fully-qualified Pyth symbol, e.g. `Crypto.BTC/USD` or `Equity.US.EMH6/USD`. Encodes asset class, optional region, root, and quote currency. |
| `description` | `string` | Human-readable description, e.g. `BITCOIN / US DOLLAR`. |
| `hermes_id` | `string` | Hex feed ID used by Pyth Core / Hermes for the same underlying, where one exists. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Mark hermes_id as nullable

For feeds that do not have a Pyth Core/Hermes counterpart, this field is null rather than always a string: the MCP client for the same /v1/symbols response validates it as z.string().nullable() in apps/mcp/src/clients/types.ts:15, and the fixtures include hermes_id: null. Since this page is the field reference and adjacent optional fields are explicitly marked nullable, consumers following it can reject valid catalog rows; please document hermes_id as nullable when absent.

Useful? React with 👍 / 👎.

| ---------------- | --------- | -------------------------------------------------------------------------------------------------------------------- |
| `exponent` | `i16` | Decimal exponent: `actual_price = mantissa × 10^exponent`. Same meaning as in the price payload. |
| `min_publishers` | `u16` | Minimum number of publishers required for the feed to produce a price. |
| `min_channel` | `string` | Lowest-latency channel the feed supports: `real_time`, `fixed_rate@50ms`, or `fixed_rate@200ms`. You must subscribe at or above this channel. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include fixed_rate@1000ms as a minimum channel

When a feed is only available at the 1s tier, min_channel can be fixed_rate@1000ms: the Developer Hub price-feed table includes that tier in CHANNELS and has a dedicated legend entry for it in apps/developer-hub/src/components/PriceFeedIdsProTable/index.tsx:18-22,93-94. Omitting it from this exhaustive field reference tells integrators that a valid catalog value is invalid, so the list should include fixed_rate@1000ms as well.

Useful? React with 👍 / 👎.

hermes_id is null for feeds without a Pyth Core/Hermes counterpart (401 of
3341 feeds, ~12%, in the live /v1/symbols response). Document it as `string?`
with an explicit null note, matching the nasdaq_symbol/cmc_id convention on
the same page. Addresses Codex review feedback on PR #3820.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel vercel Bot temporarily deployed to Preview – insights June 23, 2026 19:53 Inactive
@vercel vercel Bot temporarily deployed to Preview – staking June 23, 2026 19:53 Inactive
@vercel vercel Bot temporarily deployed to Preview – proposals June 23, 2026 19:53 Inactive
@vercel vercel Bot temporarily deployed to Preview – entropy-explorer June 23, 2026 19:53 Inactive
@vercel vercel Bot temporarily deployed to Preview – api-reference June 23, 2026 19:53 Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant