---
title: "CPC climate outlooks at a location, from 6-10 day to seasonal."
method: GET
path: "/v1/outlooks/climate"
tags: ["Weather"]
---

# CPC climate outlooks at a location, from 6-10 day to seasonal.

`GET /v1/outlooks/climate`

## Request

- Base URL: `https://api.smarterweather.com`
- URL: `https://api.smarterweather.com/v1/outlooks/climate`
- Auth: HTTP bearer

Returns every Climate Prediction Center outlook covering a US
location: the 6-10 day, 8-14 day, week 3-4, monthly and seasonal
(three-month) temperature and precipitation outlooks. Each entry
gives the tercile CPC favors (`above`, `below`, `near`, or
`equal_chances`) and the probability bin it assigns to that
tercile (`probability_min`/`probability_max`, fractional, so
`0.4`/`0.5` is 40-50%). `equal_chances` means CPC favors no
tercile and carries no bin; it is not the same as `near`.

### Periods

Entries are ordered by period (`610`, `814`, `wk34`, `monthly`,
`seasonal`), then by `valid_start`, then temperature before
precipitation. Each entry has its own `valid_start` and
`valid_end`; (`period`, `variable`, `valid_start`) identifies an
entry.

- `seasonal` has up to 13 entries per variable, one per
  overlapping three-month lead (`lead` 1-13, lead 1 starting the
  month after issuance), labelled by `valid_label`
  (`NDJ 2026-2027`).
- `monthly` can appear twice per variable: this month, plus next
  month from CPC's mid-month seasonal release (third Thursday)
  until the month-end monthly update replaces it. The two differ
  in `valid_start` and `valid_label` (`Oct 2026`, `Nov 2026`);
  neither has a `lead`.

`variable` and `period` narrow the answer. At a covered location,
a period (or lead) with no outlook polygon is omitted, an answer
of "no outlook here", not equal chances.

### Narratives

`narratives` carries CPC's written discussion for each period in
the answer that has one, in this order:

- `PMDMRD` (`610`, `814`): unless more than 72 hours old.
- `PMD34D` (`wk34`): the latest week 3-4 discussion issued
  within a day of the week 3-4 outlook.
- `PMD30D` (`monthly`): one entry per month in the answer, with
  that month's `valid_label`. Each is the latest 30-day discussion
  issued in the month before (the mid-month or month-end
  release), so from the mid-month release until the month-end
  update this month and next each have their own.
- `PMD90D` (`seasonal`): the latest 90-day discussion issued in
  the month before the first season's start.

A discussion that doesn't match its period is left out rather
than shown against the wrong week or month. `periods` lists the answer's
periods each entry discusses, so a `period` filter returns only
that period's discussion. `narratives` is omitted when no
discussion applies.

`narrative` mirrors the `PMDMRD` entry of `narratives` and is
kept for existing clients; it is present only when a 6-10 or
8-14 day entry is. The text is sent once: the `PMDMRD` entry of
`narratives` omits `body`, which `narrative.body` carries for the
same issuance.

### Relation to /v1/outlooks

`GET /v1/outlooks?hazard=temperature|precipitation` returns the
6-10 day through monthly periods in the SPC-shaped
`OutlookDetail`, with a meaningless `day: 1` and an always-empty
`probabilities`. This endpoint is the period-based shape and the
only one that serves the seasonal outlooks.

### Caching

Successful responses are cacheable for 5 minutes, although CPC
issues these outlooks at most daily.

### Coverage

A point outside the 50 US states and DC returns `404`
`outside-coverage` with `next_steps`.

### Auth

Standard sw-api Bearer auth applies.

## Query parameters

- `lat` number, double, required
- `lon` number, double, required
- `variable` 'temperature' | 'precipitation'
- `period` '610' | '814' | 'wk34' | 'monthly' | 'seasonal'

## Response `200`

CPC climate outlooks at the location.

- ClimateOutlooks: The CPC climate outlooks at a location, as returned by `GET /v1/outlooks/climate`.
  - `periods` ClimateOutlook[], required: One entry per (`period`, `variable`, `valid_start`) that has an outlook polygon at the location: one per variable for `610`, `814` and `wk34`, up to two for `monthly` (this month and next), and one per lead for `seasonal`. Ordered by period (`610`, `814`, `wk34`, `monthly`, `seasonal`), then `valid_start`, then temperature before precipitation.
    - `product_id` string, required: Upstream product identifier.
    - `period` '610' | '814' | 'wk34' | 'monthly' | 'seasonal', required: `610` (6-10 day), `814` (8-14 day), `wk34` (week 3-4), `monthly` (a calendar month), or `seasonal` (a three-month season; see `lead`). `GET /v1/outlooks` returns only the first four, one entry each. `GET /v1/outlooks/climate` can return two `monthly` entries per variable: this month, plus next month from CPC's mid-month seasonal release until the month-end monthly update. Entries are unique by (`period`, `variable`, `valid_start`).
    - `lead` integer: The seasonal lead, for `period: seasonal` only. CPC issues 13 overlapping three-month outlooks; lead 1 starts the month after issuance and each later lead starts one month later.
    - `valid_label` string: CPC's name for the outlook window, for `monthly` and `seasonal` entries from `GET /v1/outlooks/climate`: a month (`Oct 2026`) or a three-month season of month initials (`NDJ 2026-2027`).
    - `variable` 'temperature' | 'precipitation', required
    - `category` 'above' | 'below' | 'near' | 'equal_chances', required: The favored tercile. `near` means near normal is favored; `equal_chances` means CPC favors no tercile.
    - `probability_min` number, double: Lower edge of the favored category's probability bin, fractional (`0.4` = 40%). Omitted for `equal_chances`.
    - `probability_max` number, double: Upper edge of the favored category's probability bin, fractional. Omitted for `equal_chances`.
    - `label` string: Human-readable category and bin.
    - `valid_start` string, date-time: Start of the outlook period.
    - `valid_end` string, date-time: End of the outlook period (exclusive).
    - `issued_at` string, date-time, required: When CPC issued the outlook.
  - `narrative` OutlookNarrative: The SPC forecaster's written discussion for an outlook day, as issued in the corresponding SWO text product.
    - `awips_id` string: AWIPS identifier of the source product — `SWODY1`, `SWODY2`, `SWODY3` for the single-day outlooks, `SWOD48` for days 4-8, `PMDMRD` for the CPC 6-10/8-14 day discussion.
    - `issued_at` string, date-time
    - `body` string: Full narrative text as written by the forecaster.
    - `summary` string: Short generated summary, when one is available.
  - `narratives` ClimateNarrative[]: CPC's discussion for each period in the answer that has one: `PMDMRD` (6-10/8-14 day), `PMD34D` (week 3-4), `PMD30D` (one per `monthly` month) and `PMD90D` (`seasonal`), in that order. Omitted when none applies. `narrative` mirrors the `PMDMRD` entry for compatibility and carries its `body`, which that entry omits.
    - `awips_id` string: `PMDMRD` (6-10/8-14 day), `PMD34D` (week 3-4; CPC publishes it on the web only, with no NWS identifier), `PMD30D` (30-day) or `PMD90D` (90-day).
    - `issued_at` string, date-time
    - `body` string: Full discussion text as written by the forecaster. Omitted for `PMDMRD`, whose text is in the response's `narrative.body`.
    - `summary` string: Short generated summary, when one is available.
    - `periods` string[], required: The periods in this answer the discussion covers: a subset of `610`/`814` for `PMDMRD`, `wk34`, `monthly` or `seasonal`.
    - `valid_label` string: For `PMD30D`, the `valid_label` of the monthly outlook it discusses (`Oct 2026`).

## Other responses

- `400`: Bad request.
- `404`: Resource not found: a location that cannot be resolved (unknown ZIP, unrecognised free-text location), no upstream data for the location, or a missing resource. On a route that checks coverage (its description says so), a location outside the 50 US states and DC returns type `https://smarterweather.com/errors/outside-coverage`; that and the location-not-found problem carry `next_steps` (`recommended = coverage`).
- `502`: Bad gateway. The service received an invalid response from an upstream data source. Transient; clients should retry with backoff.
- `504`: Gateway timeout. An upstream data source did not respond within the service's budget.

---

[API](https://skmtc.dev/smarterweather/apis/smarter-weather-api.md) · [All operations](https://skmtc.dev/smarterweather/apis/smarter-weather-api/llms.txt) · [OpenAPI document](https://skmtc.dev/smarterweather/apis/smarter-weather-api/revisions/520d55a696e4?raw)
