Skip to main content
This page documents the strongly-typed fields on the instrument that identify a gold or silver price market (product codes cpausp, “Gold Spot Price Contracts”, and cpagsp, “Silver Spot Price Contracts”). Do not parse the instrument symbol or slug — symbol formats are not part of the public contract and may change. Identify markets using the fields below. Every gold and silver market settles on Chainlink’s spot price data streams for XAU/USD and XAG/USD, not on a spot venue and not on an average. The Retail API exposes the same terms as the typed assetPriceTerms object; see Asset Price Market Fields. The markets mirror the crypto Up/Down windows described in Crypto Schema. The differences are: the price source (Chainlink spot streams, category FIN and subcategory COMMODITY instead of CRY), a single spot value at each boundary instead of a 60-second average, trading opens at the window start instead of about 90 seconds before, price_to_beat arrives about a minute after the open instead of a few seconds, a daily 1d window, trading hours with metals_next_window_start, and the metals_* field names.
Gold and silver Up/Down windows are listed in production from October 22, 2026, as announced in the changelog.

Section 1: Common Identifying Fields

The following fields appear on every gold and silver instrument. Together they identify the metal, the market type and the time window of a contract.

Field Reference

The instrument also carries display fields you can ignore for mapping: market_title, market_subtitle, event_sort_type, event_tags, instrument_rules, event_image and event_image_display_type (once the event has an image), and the CFTC reporting fields cftc_instrument_id, cftc_binary_option_strike_price_alias. Unlike crypto, gold and silver instruments carry no market_sort_order, market_color or market_dark_color. cftc_product_desc is in the table above because it names the product. Operational fields (requires_manual_settlement, manual_settlement_*, expected_settlement_side, settlement_*) can appear while the exchange is settling an instrument and must be ignored. Gold and silver instruments carry no crypto_* fields.

metals_market_type Enum

Treat an unknown value as a newer family: render the fields that are present and watch the changelog.

metals_horizon Enum

Series

event_series combines metal, family and cadence:

Event Attributes

event_attributes records the contract for the exchange’s DCM record: strike_value: "Up", strike_unit: "string", strike_description: "Direction", evaluation_type: "==", source agency Chainlink (https://data.chain.link). Each instrument resolves independently (EVENT_OUTCOME_INDEPENDENT). Settlement never depends on these fields; the metals_* metadata above and the rules text are authoritative.

Section 2: Market Families

All windows share the same contract attributes as crypto Up/Down: tick size 0.01, valid prices 0.01 to 0.99, minimum order 0.01 contract, payout $1.00 per contract, position accountability level 25,000 contracts, and a daily trade-day roll at 5:00 PM ET. Last trade is the settlement instant (interval_end); the instrument expires 30 minutes later, which leaves time for the exchange to resolve it. Source agency is Chainlink.

Up/Down

Will the price of gold (or silver) close the window at or above its open? The window trades without a price_to_beat for about its first minute. This is by design: the open value does not exist until Chainlink publishes it. Re-read the instrument after interval_start rather than assuming the value at listing.

Section 3: Identifying Markets

Use this table to identify a market from instrument metadata. Match on metals_market_type, then read the window from interval_start / interval_end. event_category = "FIN" and event_subcategory = "COMMODITY" can also match other commodity products. Use the clearing symbol or metals_market_type to select gold and silver.

Worked Example: 15-Minute Gold Window

A settled 15-minute gold window that opened at 14:30 UTC on October 21, 2026:
To interpret this contract:
  1. metals_market_type = "updown" → an up/down window; metals_horizon = "15m" → 15 minutes long.
  2. interval_start / interval_end → the window ran from 14:30:00 to 14:45:00 UTC (10:30 to 10:45 AM ET).
  3. price_to_beat = "4133.50" → the gold spot value at 14:30:00; metals_settlement_price = "4128.62" → the value at 14:45:00.
  4. Close < open, so the short side (No, “Down”) paid $1.00.
  5. metals_next_window_start equals interval_end → the next 15-minute window opened straight after this one.

Worked Example: Daily Silver Window

A daily silver window has this shape (values from the window that opened at the 6:15 PM ET evening open on Tuesday, October 20, 2026, before it settled):
To interpret this contract:
  1. metals_horizon = "1d" → a daily window.
  2. interval_start / interval_end → 22:15 UTC on October 20 to 21:00 UTC on October 21 (6:15 PM to 5:00 PM ET), 22 hours 45 minutes.
  3. price_to_beat = "57.989" → silver carries three decimals.
  4. metals_next_window_start = "1792620900" → the next daily opens at 22:15 UTC on October 21 (6:15 PM ET), after the daily break.

Best Practices

  • Never parse the symbol or slug to determine the metal, market type or window. Symbol formats are not part of the public contract.
  • Map on metals_market_type. Treat an unknown value as a newer family: render the terms that are present and watch the changelog.
  • Read windows from interval_start and interval_end, not from the instrument’s expiration date, which is 30 minutes after settlement.
  • Treat every price as a decimal string (price_to_beat, metals_settlement_price) and convert it yourself. Gold carries 2 decimals and silver 3; do not round silver to cents.
  • Expect price_to_beat about a minute after a window opens. Re-read the instrument after interval_start.
  • Use metals_next_window_start for closed periods. It tells you when the next window opens after the daily break, the weekend or a holiday.
  • Read fresh prices from the Retail API. POST /v1/refdata/instruments serves a cached copy of each instrument, so price_to_beat and metals_settlement_price can appear there up to an hour after they are stamped. The Retail market endpoints (assetPriceTerms.priceToBeat and assetPriceTerms.settlementPrice) update when the value is stamped, and GET /v1/instruments/{symbol}/settlement reads the final settlement from the exchange live. See Settlement API.
  • Follow each market’s own rules text (instrument_rules). It names the stream, the two instants and the rounding.