goldprice.dev
Pricing
Docs
Start here
OverviewQuickstartAPI ReferenceMCP server
Reference
Methodology
Status
goldprice.dev

Gold pricing for developers. Every source visible in the response (live oracle, continuous spot reference, futures settlement, tokenized gold via CoinMarketCap). Published methodology.

Product

PricingDocsMCP serverNewsRSSStatus

Legal

MethodologyTermsPrivacySubprocessorsAttribution

Company

vs goldapi.iovs metals-apiContactGitHub Issues
Pre-launch · MVP early May 2026
© 2026 Nusantara Ventures LLC
Start here
OverviewQuickstartAPI ReferenceMarket DistributionMCP Server
Reference
Methodology
Platform
PricingTermsPrivacy
Docs / Market distribution

Market probability distribution

Five numbers beat one. Aggregate the yes-prices from Polymarket and Kalshi for one commodity at one expiry, fit a monotone curve through the implied probabilities, and return p10, p25, p50, p75, p90 plus the confidence tier, contributing venues, and a CME futures overlay. Direct-from-price math, no volume weighting, no blended median.

PRO TIERCOMMERCIAL USE · PROMCP TOOL PARITYISR 5 MIN

Live endpoint

GET/v1/prediction-market-view/{asset}Bearer · Pro+

Returns the aggregated market-implied distribution for one commodity at one expiry. Asset is one of XAU, XAG, HG. Expiry is an ISO YYYY-MM-DD string. Tier is enforced at the request layer; sub-Pro callers get a 403 plan_gated with an upgrade URL. See it rendered live at /data/gold.

Path parameters

assetstringREQUIRED
One of XAU (gold), XAG (silver), HG (copper).

Query parameters

expirydateREQUIRED
ISO YYYY-MM-DD. Must match a Polymarket or Kalshi market expiry we have ingested; unknown dates return 404 no_eligible_markets.

Response codes

200 OK400 invalid_asset400 invalid_expiry403 plan_gated404 no_eligible_markets429 rate_limited

404 reason taxonomy

all_touchreason
Every market for that tuple is a touch-probability contract. Touch markets are segregated from the distribution and land on their own endpoint (post-launch).
yes_price_clamped_outreason
Every market had a yes-price below 0.05 or above 0.95. Entropy-clamp dropped them as noise; no usable CDF points remained.
no_markets_ingestedreason
Neither scraper has ingested a market for this asset + expiry tuple yet. Try an adjacent expiry date.

Request

curl -H "Authorization: Bearer ga_live_..." \
  "https://api.goldprice.dev/v1/prediction-market-view/XAU?expiry=2026-06-27"

Response schema

// 200 OK
{
  "asset": "XAU" | "XAG" | "HG",
  "expiry": string,              // "YYYY-MM-DD"
  "percentiles": {
    "p10": string, "p25": string, "p50": string,
    "p75": string, "p90": string
  },
  "futures_overlay_usd": string | null,  // CME settlement anchor
  "markets_used_count": number,          // non-binary, post-clamp
  "total_volume_usd": string,            // lifetime traded $
  "total_liquidity_usd": string,         // upstream-reported depth $
  "confidence": "high" | "medium" | "low",
  "thin_liquidity": boolean,
  "venues": string[],                    // ["polymarket", "kalshi"]
  "computed_at": string,                 // ISO-8601 UTC
  "meta": {
    "method": string,
    "excluded_touch_count": number,
    "excluded_clamp_count": number,
    "extrapolated_percentiles": string[],
    "methodology_url": string,
    "flags": string[]
  },
  "disclaimer": string | null
}

Confidence + thin-liquidity semantics

Confidence tier uses effective liquidity (volume_usd, falling back to open_interest × notional_value). This matches the thin_liquidity signal already shipped on /v1/prices so the stack stays internally consistent.

TierMarkets usedTotal effective liquidityPer-venue rule
LOW< 5any—
LOW≥ 5< $10K—
MEDIUM≥ 5≥ $10Ksingle venue, OR 2-venue with one under $10K
HIGH≥ 5≥ $10K≥ 2 venues, every venue ≥ $10K effective

Flags + meta fields

thin_liquidityboolean
True when any contributing venue sits under the per-venue $10K effective-liquidity threshold. Distinct from the confidence tier; use this field for gating sizing logic on your side.
meta.flags["any_actual_volume"]flag
Present when at least one contributing market reports non-zero traded volume (vs. OI-only fallback). Absent when every contributing market reports zero volume. This is a transparency signal, not a gate.
meta.excluded_touch_countnumber
How many touch-probability markets were filtered out before the CDF fit. Touch markets carry different information than threshold markets and land on a dedicated endpoint post-launch.
meta.excluded_clamp_countnumber
How many markets had yes_price outside [0.05, 0.95] and were dropped as noise. This is the entropy clamp adapted from the pancake reference implementation.
meta.extrapolated_percentilesstring[]
Which of {p10, p25, p50, p75, p90} required linear tail extrapolation past the outermost traded strike. Empty list means every percentile landed inside the observed support.
disclaimerstring | null
Present when the tuple triggers a data-quality concern worth naming (single-venue coverage, heavy extrapolation, OI-only fallback). Null when the response is clean on all tracked axes.

Three use cases

Polymarket arbitrage bot

Poll /v1/prediction-market-view/XAU at 5-min intervals. The response p50 gives you the aggregate market-consensus median; individual Polymarket binary yes-prices give you per-strike probabilities. When the binary prices disagree with the aggregated distribution by more than your threshold (say 3 vol points), price the delta, size the trade against markets_used_count and thin_liquidity, and track convergence on the next poll. Both are 5-min caches, so the MCP tool and the REST endpoint see the same numbers in the same window.

Research analyst

Watch the distribution over time to attribute macro events. A tightening of (p90 − p10) around an FOMC print means the market collapsed uncertainty after the announcement; a widening suggests the print raised more questions than it answered. Combine with /v1/prices/history for price moves and the CME futures overlay for the carry-neutral reference.

Ops dashboard

Pull p10, p50, p90 every 5 minutes, annotate the chart with futures_overlay_usd, ship it to your risk board. One endpoint, one MCP tool for agent-driven alerts, zero infrastructure on your side. Sentry the confidence === "low" tier and the thin_liquidityflag so your board never displays a tuple the aggregate doesn't stand behind.

MCP tool

Every Pro+ customer gets get_prediction_market_view on the same tool bus as the rest of the MCP surface. Wire it into Claude Desktop, Cursor, Continue, or any MCP client:

// claude_desktop_config.json
{
  "mcpServers": {
    "goldprice": {
      "command": "npx",
      "args": ["-y", "@goldprice/mcp"],
      "env": { "GOLDPRICE_API_KEY": "ga_live_..." }
    }
  }
}

Tool signature (passed to the LLM as a tool schema):

get_prediction_market_view(asset: "XAU" | "XAG" | "HG", expiry: "YYYY-MM-DD")
  -> {
    asset, expiry, percentiles, futures_overlay_usd,
    markets_used_count, total_volume_usd, total_liquidity_usd,
    confidence, thin_liquidity, venues, computed_at, meta, disclaimer
  } | { error, reason?, message? }

See also

  • Methodology — the math in plain language (PAV, Fritsch-Carlson, linear tail extrapolation, confidence thresholds)
  • API reference — the other six endpoints
  • MCP server setup
  • Pricing — Pro tier + commercial use
On this page
Live endpointConfidence semanticsFlags + metaUse casesMCP toolSee also