---
title: "Snapshot panel drill-down (artifact PNG/JSON)"
method: GET
path: "/snapshot/{entity_kind}/{id}/panels/{slug}"
tags: ["Risk Metrics"]
---

# Snapshot panel drill-down (artifact PNG/JSON)

`GET /snapshot/{entity_kind}/{id}/panels/{slug}`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/snapshot/{entity_kind}/{id}/panels/{slug}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://riskmodels.app/oauth/authorize`, token URL `https://riskmodels.app/api/oauth/token`, scopes: `mcp:read`)

Addressable panel from the Artifact Registry (O.6). Product alias onto render-svc `POST /artifacts/render`. Stock panels: `l3_explained_risk_hbar`, `hedge_notionals_hbar`, `hedge_depth_retained`, `watchlist_er_stacked` (pass `tickers=CRM,MSFT,NVDA`), and `_full` (composed DD page from GCS). Institutional DD figure units (`dd_peer_dna`, more to follow) are batch pre-rendered for a hot ticker cohort — same pixels as the institutional letter page; outside the cohort the route returns 501 with a pointer to `_full` and a request path (email service@riskmodels.app to have a ticker added). See BWMACRO `docs/architecture/SNAPSHOT_CANONICAL_PROCESS_ADR.md`.
**Billing:** `portfolio-risk-snapshot` ($1.25; cache hits may be $0).

## Path parameters

- `entity_kind` 'stock' | 'fund' | 'filer_13f' | 'client_portfolio' | 'cohort', required
- `id` string, required
- `slug` string, required

## Query parameters

- `format` 'png' | 'json' | 'svg' | 'pdf'
- `version` string
- `as_of` string
- `tickers` string

## Response `200`

Panel PNG/SVG bytes or JSON contract.

- object

## Other responses

- `401`: Unauthorized.
- `404`: Unknown panel or missing DD asset.
- `501`: render-svc not configured or panel not live-renderable.

---

[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)
