---
title: "Api Issuer Panel"
method: GET
path: "/api/issuer-panel"
---

# Api Issuer Panel

`GET /api/issuer-panel`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/issuer-panel`
- Auth: none declared

Per-issuer Tier-3 panel payload. Returns 404 while ISSUER_PANELS_LIVE is dark (the
default). When live: an anon request (no ol_session) gets the teaser subset; an authed
request gets all rows. An honest-empty result (an issuer no Tier-3 extractor covers /
no clean rows) returns 404 so the FE panel self-hides exactly like a dark flag.

`ticker` is mandatory -- a blank one is a 400, never an all-issuers read. That mirrors
D2 at the transport boundary: there is no shape of this request that returns more than
one issuer's rows.

## Query parameters

- `ticker` string

## Response `200`

Successful Response

- IssuerPanelResponse: `GET /api/issuer-panel` — the per-issuer Tier-3 panel payload. REQUIRED fields are the honesty scaffolding plus BOTH lists the panel dereferences (`metrics` and `absences`, each [] on an honest-empty issuer, never null). `cross_issuer_comparable` is REQUIRED and is always False: a consumer that concatenates two issuers' `metrics` arrays is doing the one thing this store's controls exist to prevent, and the payload says so in a field rather than only in prose a client will not read. `partial` + `total_metrics` drive the anon teaser; an authed user gets partial=False and every row.
  - `ticker` string, required: Upper-cased ticker the panel requested.
  - `metrics` IssuerPanelRow[], required: Company-reported values ([] = honest-empty).
    - `metric` string, required: Canonical metric key (e.g. 'arr', 'nrr', 'paid_memberships').
    - `label` string, required: Beginner-legible display label.
    - `display` string, required: Pre-formatted value + unit, rendered verbatim.
    - `scope` string, required: Always 'consolidated' — a segment figure never occupies the headline.
    - `value` number, nullable: Raw numeric value.
    - `unit` string, nullable: Stored unit token (e.g. 'usd_millions', 'million_users').
    - `segment_name` string, nullable: Product/segment the figure is specific to, or null.
    - `basis` string, nullable: Disambiguating basis token, or null.
    - `badge` string, nullable: Plain-text segment/basis/non-GAAP badge, or null.
    - `is_non_gaap` boolean, nullable: True for a company-defined non-GAAP row.
    - `metric_label_raw` string, nullable: The label as the filing prints it.
    - `definition_text` string, nullable: The issuer's OWN verbatim definition, or null.
    - `metric_availability` string, nullable: reported | deck_only | discontinued_YYYY | 6k_fpi.
    - `period` string, nullable: Fiscal period, e.g. '2026-Q2'.
    - `as_of` string, nullable: Filing date the value was read from.
    - `source_url` string, nullable: SEC exhibit URL (public).
  - `absences` IssuerPanelAbsence[], required: Metrics the issuer does not value ([] = none).
    - `metric` string, required: Canonical metric key the issuer does not value.
    - `label` string, required: Beginner-legible display label.
    - `metric_availability` string, nullable: deck_only | discontinued_YYYY | 6k_fpi.
    - `reason` string, nullable: Plain-English 'why the number is not here'.
    - `definition_text` string, nullable: The issuer's OWN verbatim definition, or null.
    - `definition_ref` string, nullable: Exhibit + anchor the definition was read from.
    - `period` string, nullable: Fiscal period the absence was recorded for.
    - `as_of` string, nullable: Filing date the row was read from.
    - `source_url` string, nullable: SEC exhibit URL (public).
  - `provenance` string, required: OL-derived-from-SEC provenance stamp.
  - `caveat` string, required: B9 not-re-audited + per-issuer-only caveat; rendered verbatim.
  - `comparability` string, required: Always 'per_issuer_only' (the v194 CHECK-constrained class).
  - `cross_issuer_comparable` boolean, required: Always False. Never chart or rank these across issuers.
  - `partial` boolean, required: True when an anon teaser subset was returned.
  - `total_metrics` integer, required: Total available rows (for the 'see all N' prompt).
  - `available` boolean, required: False when no clean row exists for this issuer.
  - `industry` string, nullable: Panel TAG ('enterprise_saas', ...) — a tag, not a peer group.
  - `industry_label` string, nullable: Reader-facing name for the panel tag.
  - `period` string, nullable: Headline fiscal period.
  - `as_of` string, nullable: Headline filing as-of date.
  - `methodology_url` string, nullable: /methodology/<slug> 'how we read this'.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
