---
title: "FRED series observations - US CPI inflation, GDP, unemployment rate, federal funds rate, Treasury yields, M2 money supply, ~800k more"
method: GET
path: "/api/v1/fred/series/{series_id}"
tags: ["Central Banks & Monetary"]
---

# FRED series observations - US CPI inflation, GDP, unemployment rate, federal funds rate, Treasury yields, M2 money supply, ~800k more

`GET /api/v1/fred/series/{series_id}`

Generic Federal Reserve Economic Data (FRED) series proxy. Pass any FRED series_id and receive observations plus metadata. Examples: CPIAUCSL (US CPI inflation), GDP (US GDP), UNRATE (US unemployment rate), DFF (federal funds effective rate), DGS10 (10-year Treasury yield), M2SL (M2 money supply). Covers the full FRED catalog (~800k macroeconomic time series from the St. Louis Fed).

## Path parameters

- `series_id` string, required — FRED series identifier in upper-snake-case. Common examples: CPIAUCSL (US Consumer Price Index, all urban consumers, all items), GDP (US Gross Domestic Product), UNRATE (US unemployment rate), DFF (federal funds rate, effective, daily), DGS10 (10-year Treasury constant maturity rate), M2SL (M2 money supply, seasonally adjusted).

## Query parameters

- `observation_start` string, nullable — ISO date YYYY-MM-DD lower bound (inclusive). Defaults to FRED earliest.
- `observation_end` string, nullable — ISO date YYYY-MM-DD upper bound (inclusive). Defaults to today.
- `limit` integer — Max observations to return. FRED's hard cap is 100000; we cap at 1000 here for RAM safety and predictable response sizes.
- `sort_order` string — 'desc' returns the most recent observations first (default); 'asc' the oldest.
- `frequency` string, nullable — FRED server-side frequency aggregation (DOWN-sample only, e.g. monthly->quarterly): d, w, bw, m, q, sa, a plus period-ending variants (wef/weth/wew/wetu/wem/wesu/wesa, bwew/bwem). Cannot up-sample. Pair with aggregation_method; defaults to the series' native frequency when omitted.
- `aggregation_method` string, nullable — How observations collapse when 'frequency' down-samples: avg (default), sum, eop (end of period). No effect unless 'frequency' is also supplied.
- `units` string, nullable — FRED value transform applied UPSTREAM: lin (level, default), chg (change), ch1 (change from year ago), pch (percent change), pc1 (percent change from year ago), pca (compounded annual rate of change), cch (continuously compounded change), cca (continuously compounded annual rate), log (natural log). Percent transforms return percent NUMBERS (pch=3.2 means 3.2 percent, not 0.032); the 'units' metadata field keeps the series' original units, so the applied transform is echoed under 'transform'.

## Response `200`

Single FRED economic series by series_id with observations and lightweight metadata (title, units, frequency, last_updated). operation_id auto-generated as `fred_series_series_id` by main._clean_operation_id (project convention).

- EnvelopeFredSeriesSeriesIdData
  - `data` FredSeriesSeriesIdData, required
    - `series_id` string, nullable
    - `title` string, nullable
    - `units` string, nullable
    - `units_short` string, nullable
    - `frequency` string, nullable
    - `seasonal_adjustment` string, nullable
    - `last_updated` string, nullable
    - `observation_start` string, nullable
    - `observation_end` string, nullable
    - `count` union
      - integer
      - number
    - `observations` Field60Item[], nullable
      - `date` string, nullable
      - `value` union
        - integer
        - number
    - `license` License
      - `status` string, nullable
      - `originator` unknown
      - `originator_withheld` boolean, nullable
      - `copyright` string, nullable
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/revisions/914af3d38c7c/schema)
