---
title: "Api Industry Resort Kpis"
method: GET
path: "/api/industry/resort-kpis"
---

# Api Industry Resort Kpis

`GET /api/industry/resort-kpis`

## 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/industry/resort-kpis`
- Auth: none declared

The Resorts cross-issuer operating-KPI peer table (SF-KPI Phase 2). Returns 404 while the
flag is dark or no comparable rows exist. FREE / ungated (OWNER decision 2); anon gets the
teaser subset. Anti-pooling + NO-rank live in ssr_operating_kpis.build_peer_table. Reuses
AirlinePeerTableResponse.

## Query parameters

- `period` string
- `subtype` string

## Response `200`

Successful Response

- AirlinePeerTableResponse: `GET /api/industry/airline-kpis` — the airline cross-issuer peer table. REQUIRED = the honesty scaffolding + the row/column lists the panel dereferences. `partial` + `total_carriers` drive the anon teaser. `metrics`/`carriers` are [] on honest-empty.
  - `industry` string, required: KPI industry ('airline').
  - `metrics` PeerMetricColumn[], required: Metric columns ([] = honest-empty).
    - `metric` string, required: Canonical metric key.
    - `label` string, required: Beginner-legible column label.
    - `coverage` integer, required: Carriers reporting this metric on the canonical basis.
    - `coverage_total` integer, required: Total carriers in the table.
    - `glossary_slug` string, nullable: /glossary/<slug> for the metric.
    - `better` 'high' | 'low', nullable: 'high' | 'low' = ranked in that direction; null = not ranked.
    - `note` string, nullable: One plain-English line on what the metric measures (<= 110 chars).
    - `positive_only` boolean, nullable: True when a value <= 0 is never ranked on this row (registry property).
  - `carriers` PeerCarrierRow[], required: Carrier rows, no rank ([] = honest-empty).
    - `ticker` string, required: Carrier ticker (rows sort alphabetically, never by value).
    - `cells` PeerCarrierCell[], required: One cell per metric column, in column order.
      - `metric` string, required: The column this cell belongs to.
      - `display` string, required: Pre-formatted value; '' = an honest coverage gap.
      - `badge` string, nullable: Basis/non-GAAP badge, or null.
      - `value` number, nullable: The number `display` formats, in `unit` (None on a gap) -- rank by this, never by parsing `display` (K2).
      - `unit` string, nullable: Unit of `value` (e.g. 'pct', 'cents_per_asm'); rank a row only when its populated cells share one unit.
      - `period` string, nullable: Fiscal period the value was read from.
      - `as_of` string, nullable: Filing date the value was read from.
      - `rank_excluded` string, nullable: Reader-facing reason this cell is shown but never ranked (a single-segment figure); absent on every company-wide cell.
    - `period` string, nullable: The carrier's filing quarter (honest 'as of' when the cohort spans quarters).
    - `name` string, nullable: Full SEC-registered company name (#287); None when unresolved — the FE renders ticker-only.
    - `context` object, nullable: Sized-context block: per-column {value, display} + price_date (#315).
  - `available` boolean, required: False when no comparable rows exist.
  - `partial` boolean, required: True when an anon teaser subset was returned.
  - `total_carriers` integer, required: Total carriers (for the 'see all N' prompt).
  - `period_spread` string[], required: Distinct periods across carriers (honesty).
  - `provenance` string, required: OL-derived-from-SEC provenance stamp.
  - `caveat` string, required: B9 not-re-audited + anti-pooling honesty caveat.
  - `methodology_url` string, nullable: /methodology/<slug> 'how we read this'.
  - `context_columns` object[], nullable: Ordered context-column roster [{key, label}] (#315).
  - `context_caption` string, nullable: Provenance caption for the context columns (#315).
  - `partition` string, nullable: Selected partition lane (e.g. 'residential').
  - `partition_label` string, nullable: Selected partition's display label.
  - `partition_options` PeerPartitionOption[], nullable: Available partition lanes for the FE selector (partition-scoped only).
    - `value` string, required: Partition key (e.g. 'residential').
    - `label` string, required: Beginner-legible partition label (e.g. 'Residential').
    - `coverage_total` integer, required: Total issuers in that partition's table.
  - `period_options` string[], nullable: Reporting periods with data, newest first (#289 FE period switcher).
  - `period_selected` string, nullable: The period this table is pinned to; None = newest-per-issuer default.
  - `growth` PeerGrowthTable
    - `title` string, required: Table heading ('Growth rates').
    - `metrics` PeerMetricColumn[], required: Growth metric columns.
      - `metric` string, required: Canonical metric key.
      - `label` string, required: Beginner-legible column label.
      - `coverage` integer, required: Carriers reporting this metric on the canonical basis.
      - `coverage_total` integer, required: Total carriers in the table.
      - `glossary_slug` string, nullable: /glossary/<slug> for the metric.
      - `better` 'high' | 'low', nullable: 'high' | 'low' = ranked in that direction; null = not ranked.
      - `note` string, nullable: One plain-English line on what the metric measures (<= 110 chars).
      - `positive_only` boolean, nullable: True when a value <= 0 is never ranked on this row (registry property).
    - `carriers` PeerCarrierRow[], required: Issuer rows, no rank.
      - `ticker` string, required: Carrier ticker (rows sort alphabetically, never by value).
      - `cells` PeerCarrierCell[], required: One cell per metric column, in column order.
        - `metric` string, required: The column this cell belongs to.
        - `display` string, required: Pre-formatted value; '' = an honest coverage gap.
        - `badge` string, nullable: Basis/non-GAAP badge, or null.
        - `value` number, nullable: The number `display` formats, in `unit` (None on a gap) -- rank by this, never by parsing `display` (K2).
        - `unit` string, nullable: Unit of `value` (e.g. 'pct', 'cents_per_asm'); rank a row only when its populated cells share one unit.
        - `period` string, nullable: Fiscal period the value was read from.
        - `as_of` string, nullable: Filing date the value was read from.
        - `rank_excluded` string, nullable: Reader-facing reason this cell is shown but never ranked (a single-segment figure); absent on every company-wide cell.
      - `period` string, nullable: The carrier's filing quarter (honest 'as of' when the cohort spans quarters).
      - `name` string, nullable: Full SEC-registered company name (#287); None when unresolved — the FE renders ticker-only.
      - `context` object, nullable: Sized-context block: per-column {value, display} + price_date (#315).
    - `caveat` string, required: B9 not-re-audited caveat + the change-is-not-a-level sentence.
    - `partial` boolean, required: True when an anon teaser subset was returned.
    - `total_carriers` integer, required: Total issuers in this table.
    - `period_spread` string[], required: Distinct periods across issuers (honesty).
    - `truncated` boolean, required: True when a read hit the helper's row cap.
    - `value_kinds` string[], required: The stored value_kinds this table pins (e.g. ['delta']).
  - `headline_metric` string, nullable: The headline metric every surface leads with (levels or growth).
  - `withheld_metric_count` integer, nullable: Anonymous teaser only: metrics withheld from this payload (the n in '{n} more metrics and quarterly history'). Absent for a signed-in caller.

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