---
title: "US recession dates (NBER Business Cycle Dating Committee)"
method: GET
path: "/api/v1/research/nber/recession-dates"
tags: ["Research"]
---

# US recession dates (NBER Business Cycle Dating Committee)

`GET /api/v1/research/nber/recession-dates`

Canonical US business cycle peaks and troughs as dated by the National Bureau of Economic Research (NBER) Business Cycle Dating Committee. Returns 35 cycles spanning December 1854 through the April 2020 trough. Each record includes the peak and trough months (YYYY-MM), the same dates as full ISO 8601 UTC timestamps (day 1 of the month), and the recession duration in months. Sourced from the static JSON file at `data.nber.org/data/cycles/business_cycle_dates.json`. No new recession has been declared by the BCDC since the April 2020 trough, so this dataset changes only when the committee announces a new peak or trough. `limit` returns only the N most recent cycles; without it all 35 are returned, oldest first.

## Query parameters

- `limit` integer, nullable — Return only the N most recent business cycles. The full dataset holds 35 cycles; omitting the parameter returns all of them. Order stays oldest-first either way.

## Response `200`

List of NBER-dated US business cycles, oldest first, with peak, trough, and duration in months. With `limit`, the N most recent cycles in the same oldest-first order.

- EnvelopeNberRecessionDatesPayload
  - `data` NberRecessionDatesPayload, required — Canonical US business cycle peaks and troughs from the NBER Business Cycle Dating Committee.
    - `source_url` string, required — Upstream NBER URL used to produce this response.
    - `count` integer, required — Number of business cycles returned in this response. 35 without `limit`; equal to `limit` when the parameter narrows the list.
    - `recessions` NberRecession[], required — Ordered list of US business cycles (oldest first) as dated by the NBER Business Cycle Dating Committee. The full dataset is 35 cycles from December 1854 through the April 2020 trough; with `limit` only the N most recent are returned, same order.
      - `peak` string, nullable — Calendar month of the business cycle peak (YYYY-MM). Null for the first entry, which records only the December 1854 trough without a corresponding peak.
      - `trough` string, nullable — Calendar month of the business cycle trough (YYYY-MM).
      - `peak_date` string, nullable — First day of the peak month as a full ISO 8601 UTC timestamp. Null when `peak` is null.
      - `trough_date` string, nullable — First day of the trough month as a full ISO 8601 UTC timestamp.
      - `duration_months` integer, nullable — Number of months from peak to trough (recession length). Null when `peak` is null or the cycle is open.
  - `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.
- `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/versions/4e2740743eb4/schema)
