---
title: "Curated economic indicators (BLS CPI/unemployment/JOLTS + BEA GDP)"
method: GET
path: "/api/macro/economic-indicators"
tags: ["Macro"]
---

# Curated economic indicators (BLS CPI/unemployment/JOLTS + BEA GDP)

`GET /api/macro/economic-indicators`

## 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/macro/economic-indicators`
- Auth: none declared

Curated five-card economic snapshot from the K10 macro_series ingest
(task #47). Inflation (CPI YoY), core inflation, unemployment, job
openings, and real GDP growth — plus the GDP sub-components under a
progressive-disclosure expander. FREE public-domain government
statistics — deliberately ungated (sf_monetization_v3; matches the
ungated /api/macro/cot-positioning + /api/macro-events siblings).

CPI is stored as a raw index (1982-84=100); the panel DERIVES the
year-over-year rate in services.macro_panel and OMITS any series it
cannot compute (honest omission — never a raw index or a fabricated
rate). Degrades to {cards: [], count: 0} when PG is unavailable or the
table is empty (pre-first-ingest) — the FE panel then stays empty, never
a broken card.

## Response `200`

Successful Response

- MacroEconomicIndicatorsResponse: `GET /api/macro/economic-indicators` — curated five-card economic snapshot from the K10 `macro_series` ingest (BLS CPI/core/unemployment/ JOLTS + BEA real-GDP components; task #47, 2026-07-10). FREE public-domain government statistics, deliberately NO tier-gate (sf_monetization_v3; matches the ungated /api/macro/cot-positioning sibling). `cards` is ALWAYS a list (empty on the PG-down / pre-first-ingest degrade) so the FE `cards.forEach(...)` never NPEs; `count` mirrors len(cards). `gdp_components` is the progressive-disclosure set (may be empty). Uncomputable series are OMITTED (honest omission) — never a raw CPI index, never a fabricated rate. The error branch adds `error` and keeps cards=[].
  - `cards` MacroIndicatorCard[], required
    - `label` string, required: Card title, e.g. "Inflation (CPI)".
    - `display` string, required: Rendered value string, e.g. "+3.1%" / "8.0M openings".
    - `gloss` string, required: One plain-English line for a lifelong student.
    - `key` string, nullable: Stable card id, e.g. "cpi" / "gdp".
    - `value` number, nullable: Numeric value behind `display` (percent, or millions for JOLTS).
    - `unit` string, nullable: Unit of `value`, e.g. "%" / "M openings" / "% SAAR".
    - `period_label` string, nullable: Honest period, e.g. "as of Jun 2026" or "Q1 2026".
    - `learn_url` string, nullable: In-app LEARN deep-link for the concept, when one exists.
  - `count` integer, required
  - `gdp_components` MacroGdpComponent[], nullable
    - `label` string, required: Component name, e.g. "Consumer spending".
    - `display` string, required: Rendered percent string, e.g. "+2.1%".
    - `key` string, nullable: Stable component id, e.g. "PCE".
    - `value` number, nullable: Percent change (SAAR).
    - `period_label` string, nullable: Quarter label, e.g. "Q1 2026".
  - `as_of` string, nullable
  - `error` string, nullable

---

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