---
title: "Benchmark surface + BenchmarkContext"
method: GET
path: "/data/benchmark/{id}"
tags: ["Funds Data Plane"]
---

# Benchmark surface + BenchmarkContext

`GET /data/benchmark/{id}`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/data/benchmark/{id}`
- Auth: one of:
  - HTTP bearer
  - none

A benchmark's canonical PortfolioSurface snapshot (Funds_DAG `benchmark_surfaces_zarr` — `source_kind=benchmark`): the `BenchmarkContext` (the immutable definition — methodology, rebalance schedule, observation semantics, `benchmark_kind`, proxy/components) plus the latest constituent weight vector (top-N). `id` accepts a `bw_bench_id` (e.g. `BW-BENCH-SPY`) or an alias (e.g. `SPY`, `70/30`). v1 catalog: SPY (index_proxy ← IVV's holdings), EQ70-30 (blend: 70% IWB + 30% IWM). `report_date` (the surface's latest teo) and `availability_date` are surfaced distinctly + as headers `X-Data-As-Of` / `X-Data-Availability`. See docs/architecture/CANONICAL_INTELLIGENCE_OBJECTS.md §9.

## Path parameters

- `id` string, required

## Query parameters

- `top` integer

## Response `200`

Benchmark surface snapshot + context.

- object
  - `benchmark_context_id` string
  - `name` string
  - `benchmark_kind` 'index_proxy' | 'blend' | 'peer_cohort' | 'constructed_hedge'
  - `source_kind` 'benchmark'
  - `teo_frequency` string
  - `report_date` string, date
  - `availability_date` string, date, nullable
  - `benchmark_context` object, nullable: The full serialized BenchmarkContext (methodology, rebalance_schedule, aliases, proxy/components, …).
  - `n_constituents` integer
  - `top_constituents` object[]
    - `bw_sym_id` string
    - `weight` number

## Other responses

- `404`: Benchmark not found (unknown id/alias or missing surface).

---

[API](https://skmtc.dev/riskmodels/apis/riskmodels-api.md) · [All operations](https://skmtc.dev/riskmodels/apis/riskmodels-api/llms.txt) · [OpenAPI document](https://skmtc.dev/riskmodels/apis/riskmodels-api/revisions/1a034cad408a?raw)
