---
title: "Get Spread Surface"
method: GET
path: "/api/market/spreads/surface"
tags: ["Market Data", "Beta"]
---

# Get Spread Surface

`GET /api/market/spreads/surface`

## 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/market/spreads/surface`
- Auth: HTTP bearer

The current quoted-spread surface against this symbol's own history.

Answers, for one side of the book: is the market unusually wide right
now, where across the strike surface is the deterioration, and — the
question a width cannot answer — is an unusual share of the chain
carrying no market at all.

Puts and calls are never blended. The question the view exists for is
whether the PUTS specifically have gone wide, and that is only answerable
against a side that has not.

**Beta** — contract may change.

## Query parameters

- `symbol` string: Underlying symbol
- `option_type` string: C (calls) or P (puts)
- `dte_max` integer: Cumulative DTE universe: 0, 1, 7 or 30
- `moneyness_band_pct` number: Half-width of the strike band: 2, 5 or 10
- `history_days` integer

## Response `200`

Successful Response

- SpreadSurfaceResponse
  - `symbol` string, required
  - `option_type` string, required
  - `spot_price` number, required
  - `timestamp` string, date-time, required
  - `session_date` string, date, required
  - `dte_max` integer, required
  - `dte_scope` string, required
  - `moneyness_band_pct` number, required
  - `basis` string
  - `disclosure` string
  - `baseline` SurfaceBaseline, required: Exactly what the comparison was made against. Rendered, not buried.
    - `sessions` integer, required
    - `earliest_date` string, date, nullable
    - `latest_date` string, date, nullable
    - `time_matched` boolean, required
    - `time_bucket_label` string, required
    - `fell_back_to_last_bucket` boolean
    - `min_sessions` integer, required
  - `summary` SurfaceSummary, required
    - `current_pct` number, nullable
    - `normal_pct` number, nullable
    - `vs_normal` number, nullable
    - `percentile` number, nullable
    - `two_sided_pct` number, nullable
    - `two_sided_normal_pct` number, nullable
    - `two_sided_percentile` number, nullable
    - `contract_count` integer
    - `sessions` integer
  - `curve` SurfacePoint[], required
    - `money_bucket` string, required
    - `label` string, required
    - `moneyness_low_pct` number, required
    - `moneyness_high_pct` number, required
    - `center_pct` number, required
    - `current_pct` number, nullable
    - `historical_median_pct` number, nullable
    - `historical_p25_pct` number, nullable
    - `historical_p75_pct` number, nullable
    - `percentile` number, nullable
    - `vs_normal` number, nullable
    - `contract_count` integer
    - `two_sided_pct` number, nullable
    - `sessions` integer
  - `by_dte` DteRank[], required
    - `dte_scope` string, required
    - `label` string, required
    - `percentile` number, nullable
    - `current_pct` number, nullable
    - `historical_median_pct` number, nullable
    - `sessions` integer
    - `insufficient_history` boolean

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