---
title: "Api V2 Gex Weather Get"
method: GET
path: "/api/v2/gex/weather"
tags: ["GEX (v2)"]
---

# Api V2 Gex Weather Get

`GET /api/v2/gex/weather`

## Request

- Base URL: `https://api.zerogex.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.zerogex.io/api/v2/gex/weather`
- Auth: HTTP bearer

The combined current-state read: Gamma Weather.

Consolidates what is already on the Hedging Flow page into one sentence:
whether estimated hedging pressure is persistently buying or selling,
whether near-price dealer gamma is building or thinning, which side the
book leans, and how much room is left before the gamma regime itself
changes.

Two precedence rules, both of which the spec left open:

* the **cushion is a modifier, not a state**. "Thin and closing" answers a
  different question from "stable bid", so they compose rather than
  compete;
* **stability decides the state, lean colors it.** They disagree often and
  the panel exists to say whether a condition can persist, which is what
  stability speaks to.

Nothing is stored. The state is derived on read from components that are,
so retuning a threshold reclassifies the whole archive rather than leaving
old sessions labelled by a rule that is no longer live.

Reads the two materialised series and classifies their latest COMMON bar,
so the pressure and the structure in one sentence always describe the same
five minutes. Returns 404 for an unknown symbol, and 409 when neither
series has a bar yet for the resolved session.

## Query parameters

- `symbol` string, required
- `session` 'current' | 'prior'
- `date` string, nullable: An explicit ET trading day, YYYY-MM-DD. Overrides `session`, and is passed straight through to the two series this reads, so a dated weather read classifies that session's last common bar. 409 when neither series has a bar for the day.

## Response `200`

Successful Response

- EnvelopeGammaWeatherResponse
  - `data` GammaWeatherResponse, required: One combined current-state read from the pieces already on the page. A market-health classification. Not a directional signal, an entry or exit, or a recommendation, and it inherits the estimated-not-observed caveat from the hedging flow it reads. ``components`` is returned alongside the verdict deliberately: a panel that shows only a conclusion cannot be checked against the charts sitting directly underneath it.
    - `symbol` string, required
    - `session` string, required
    - `bar_start` string, nullable
    - `state` string, required
    - `label` string, required
    - `sentence` string, required
    - `pressure` string, required
    - `structure` string, required
    - `gamma_trend` string, required
    - `lean_side` string, nullable
    - `cushion` string, required
    - `persistence` string
    - `pressure_reversing_bars` integer
    - `age_bars` integer
    - `age_minutes` number, nullable
    - `age` string, nullable
    - `persistence_label` string
    - `age_label` string, nullable
    - `pending_state` string, nullable
    - `pending_label` string, nullable
    - `pending_bars` integer
    - `lights` object, nullable
    - `confirm_bars` integer
    - `cushion_summary` string, nullable
    - `components` object
    - `basis` string, required
    - `disclosure` string, required
  - `freshness` Freshness, required: The v2 freshness envelope. Present on every ``/api/v2/*`` response.
    - `evaluated_at` string, date-time, required: When the API evaluated this response (server wall clock, UTC). Endpoint-health signal: advances on every request even when the underlying data is unchanged.
    - `generated_at` string, date-time, required: When the served data was computed. Equals the snapshot stamp for cycle-backed endpoints, or evaluated_at for endpoints computed on demand for this request.
    - `source_timestamp` string, date-time, nullable: Timestamp of the upstream market observation the payload derives from. This is what freshness_status is measured against. Null when the endpoint has no upstream feed or returned no rows.
    - `latest_event_at` string, date-time, nullable: Newest event timestamp present in the payload (last bar, last trade, last scored row). Best-effort on very large responses, which are sampled rather than fully walked.
    - `age_seconds` number, nullable: evaluated_at - source_timestamp, in seconds. Null when source_timestamp is null.
    - `market_session_status` string, required: pre-market | regular | after-hours | closed (US/Eastern).
    - `expected_update_cadence` string, nullable: ISO-8601 duration for how often this endpoint's data is expected to change right now, e.g. PT60S. Null means no updates are expected (weekend, holiday, or a feed that only runs during the session).
    - `expected_update_cadence_seconds` number, nullable: expected_update_cadence as a number of seconds.
    - `cadence_profile` string, required: Identifier of the cadence class this endpoint belongs to, e.g. analytics_cycle. Stable across releases; the seconds behind it may be retuned.
    - `stale_after` string, date-time, nullable: Instant after which this payload should be treated as stale. Null whenever expected_update_cadence is null.
    - `freshness_status` 'fresh' | 'aging' | 'stale' | 'session_closed' | 'static' | 'unknown', required: The rolled-up freshness verdict for one response. ``fresh`` ``source_timestamp`` is within one expected update cadence. ``aging`` Past one cadence but not yet past ``stale_after`` — the grace band that absorbs normal cycle jitter. Not an error; a client that polls faster than the cadence sees this routinely. ``stale`` Past ``stale_after`` while updates *were* expected. This is the actionable state: the feed behind this endpoint is late. ``session_closed`` A feed-backed endpoint whose feed is not due to produce anything right now (weekend, holiday, or a feed that only runs during the session). The payload is the last good value — deliberately NOT reported as ``stale``, because an overnight consumer polling a closed market is not observing a fault and should not page on it. ``static`` The endpoint is not feed-backed at all: completed history, or a result computed from the caller's own inputs. Age here carries no health meaning and never becomes a fault. ``unknown`` No source timestamp could be resolved from the payload (e.g. a pure calculator, an admin endpoint, or an empty result set). A consumer should fall back to ``evaluated_at`` for endpoint health and make no claim about data age.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zerogex/apis/zerogex-api.md) · [All operations](https://skmtc.dev/zerogex/apis/zerogex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zerogex/apis/zerogex-api/revisions/753b26bf0592?raw)
