{
  "schema_version": 1,
  "title": "VolRoc Observable Prediction Capital (OPC) — dataset schema",
  "methodology": "https://volroc.ai/api/public/opc/methodology",
  "objects": {
    "event": {
      "url": "https://volroc.ai/api/public/opc/events/world-cup-2026-winner",
      "fields": {
        "event_id": "string — canonical event identity",
        "event_name": "string",
        "snapshot_time": "string (RFC3339 UTC) — the as-of; reading is meaningless without it",
        "venue": "string — 'kalshi'",
        "opc_gross_locked_usd": "integer USD — sum oi_contracts x $1",
        "methodology_version": "string",
        "counting_method": "string",
        "cross_venue_status": "string — 'blocked_pending_normalization'",
        "left_censored": "boolean — applies to OI_peak/lifecycle, not the snapshot",
        "confidence": "string",
        "overround_yes_price_sum": "number — sum of yes_price across teams",
        "coverage": "object {teams_with_data, teams_total}",
        "caveats": "array<string>"
      }
    },
    "teams": {
      "url": "https://volroc.ai/api/public/opc/events/world-cup-2026-winner/teams",
      "row_fields": {
        "ticker": "string|null — Kalshi market ticker",
        "team_name": "string",
        "yes_price": "number|null — raw Kalshi YES price",
        "oi_contracts": "integer — open interest (the source of truth)",
        "opc_usd": "integer USD — oi_contracts x $1",
        "opc_share": "number — opc_usd / total",
        "price_implied_share": "number|null — yes_price / overround sum",
        "capital_probability_divergence": "number|null — opc_share - price_implied_share",
        "methodology_version": "string",
        "confidence": "string"
      }
    },
    "observation": {
      "url": "https://volroc.ai/api/public/opc/events/world-cup-2026-winner/history/<date>",
      "description": "A single immutable, write-once daily OPC observation leaf. One per dated freeze. Discoverable via the rollup's observations[].self; the per-date leaves are not individually advertised in the index.",
      "fields": {
        "object": "string — 'opc_observation'",
        "event_id": "string",
        "date": "string (YYYY-MM-DD) — the dated freeze this leaf is computed from",
        "snapshot_time": "string (RFC3339 UTC) — the freeze's immutable as-of",
        "computed_at": "string (RFC3339 UTC) — when this leaf was generated; much later than snapshot_time for a backfilled leaf",
        "methodology_version": "string",
        "venue": "string — 'kalshi'",
        "cross_venue": "string — 'blocked_pending_normalization'",
        "opc_gross_locked_usd": "integer USD — floor(sum of raw per-team OI)",
        "coverage": "integer — teams carrying observable Kalshi OI that date",
        "opc_reconciliation": "object {sum_of_team_opc_usd, truncation_residual_usd, note}",
        "source_uri": "string — the s3:// dated freeze this leaf cites",
        "sha256": "string — sha256 of the cited freeze bytes (tamper-evidence)",
        "self": "string — this leaf's own path"
      }
    },
    "history": {
      "url": "https://volroc.ai/api/public/opc/events/world-cup-2026-winner/history",
      "description": "Derived rollup over all observation leaves. Recomputable from observations[]; holds no fact not reproducible from the leaves.",
      "fields": {
        "object": "string — 'opc_history'",
        "event_id": "string",
        "methodology_version": "string — current series version",
        "methodology_versions": "array<object {version, from, to}> — version date ranges",
        "status": "string — 'active' until the market resolves, then 'resolved'",
        "venue": "string",
        "cross_venue": "string",
        "history_start": "string (YYYY-MM-DD) — earliest observation date",
        "as_of": "string (YYYY-MM-DD) — latest observation date",
        "generated_at": "string (RFC3339 UTC) — when this rollup was rebuilt",
        "current_opc_usd": "integer USD — last observation's OPC",
        "peak_opc_usd": "integer USD — max OPC over the series",
        "peak_date": "string (YYYY-MM-DD)",
        "largest_daily_increase_usd": "integer|null — ADJACENT-day only (see methodology)",
        "largest_daily_increase_date": "string|null",
        "largest_daily_decrease_usd": "integer|null — adjacent-day only",
        "largest_daily_decrease_date": "string|null",
        "largest_change_spanning_gap_usd": "integer|null — a move across a gap, labeled separately; never a 'daily' change",
        "largest_change_spanning_gap_date": "string|null",
        "observation_count": "integer — equals len(observations)",
        "gaps": "array<object {date, reason}> — missing days; never interpolated",
        "observations": "array — per-date summaries, each with a self href to its leaf"
      }
    }
  },
  "principles": [
    "Facts are archived; interpretations are surface-derived.",
    "A missing value is null with a reason, never zero and never fabricated.",
    "Venues are never blended; Kalshi is in contracts, Polymarket in USD.",
    "Totals are derivable from the per-team facts so an agent can recompute and audit them."
  ],
  "attribution": "Cite as \"VolRoc\" with a link to https://volroc.ai."
}
