The option chain for an active stock-market underlying, including ETFs: the listed expiration dates, the full calls-and-puts chain for one expiration (strike, greeks, implied volatility, open interest and the latest snapshot price), and a single contract by its OCC symbol. `snapshotDate` attributes each contract's snapshot figures to a trading session; null means the provider returned figures without a session timestamp, not that the other fields are empty. `bidPrice`/`askPrice` are 15-minute delayed and populated only when your plan entitles quotes (`quotesAvailable` is then `true`); they are otherwise `null`. The row's `delayed` flag describes those quote fields alone, so it is false when no quote is returned and says nothing about `snapshotDate`. Implied volatility and greeks are decimal fractions (`0.4351` = 43.51 % IV, delta 0.5123); prices are US dollars. Class shares use a dash (`BRK-B`); the dot form (`BRK.B`) is also accepted.

The path names the exact listed underlying. A request for `GOOG` does not return the `GOOGL` chain, and `BRK-A` does not fall through to `BRK-B`. The market-data reference feed resolves that identity authoritatively: an unknown, inactive or delisted ticker returns `404`, while a known active listing with no contracts returns its own successful no-options result.

Only an empty active-contract reference result proves that a known listing has no listed options. A confirmed expiration can instead return an empty snapshot while keeping its expiration, which means no snapshot rows were available for that date. If options data is not enabled, times out, or the provider request fails, these endpoints return the standard `503` error envelope with code `service_unavailable`; an operational failure is never returned as an empty no-options response.

## /v1/stocks/{ticker}/options/expirations

The listed expiration dates for an underlying, ascending, each with the number of active contracts. Use one as the `expiration` for the chain. `truncated: true` means the provider's reference-page safety bound was reached, so later expirations or counts may be incomplete.

**Parameters:** `{ticker}` (path — e.g. `NVDA`).

```bash
curl "https://api.equibles.com/v1/stocks/NVDA/options/expirations" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/options/expirations",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
```

```javascript
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/options/expirations", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
```

```json
{
  "ticker": "NVDA",
  "companyName": "Nvidia Corp",
  "truncated": false,
  "expirations": [
    { "expirationDate": "2026-07-24", "contractCount": 168 },
    { "expirationDate": "2026-08-21", "contractCount": 208 },
    { "expirationDate": "2026-09-18", "contractCount": 154 },
    { "expirationDate": "2026-12-18", "contractCount": 494 },
    { "expirationDate": "2027-01-15", "contractCount": 154 }
  ]
}
```

## /v1/stocks/{ticker}/options/chain

The calls-and-puts chain for one expiration: strike, contract type, the latest daily bar, implied volatility, open interest and greeks (delta, gamma, theta, vega). Defaults to the nearest upcoming expiration; narrow with `minStrike`/`maxStrike` and `type`. The service first resolves the expiration from active contract identities, then fetches only that expiration's snapshot. `truncated: true` means the returned rows were capped or the provider's snapshot-page safety bound was reached. A known listing with no active contracts returns `200` with `expiration: null` and an empty `contracts` array. If the expiration is confirmed but its current snapshot is empty, the response keeps that expiration and returns an empty array; it does not claim that the underlying has no options.

**Parameters:** `{ticker}` (path — e.g. `NVDA`); `expiration` (`yyyy-MM-dd`, default nearest upcoming); `minStrike` / `maxStrike`; `type` (`call` / `put`, default both); `limit` (default 250, max 500).

```bash
curl "https://api.equibles.com/v1/stocks/NVDA/options/chain?expiration=2026-09-18&minStrike=205&maxStrike=205" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/options/chain",
    params={"expiration": "2026-09-18", "minStrike": 205, "maxStrike": 205},
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
```

```javascript
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/options/chain?expiration=2026-09-18&minStrike=205&maxStrike=205", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
```

```json
{
  "ticker": "NVDA",
  "companyName": "Nvidia Corp",
  "expiration": "2026-09-18",
  "quotesAvailable": false,
  "returned": 2,
  "total": 2,
  "truncated": false,
  "contracts": [
    {
      "occTicker": "O:NVDA260918C00205000",
      "contractType": "Call",
      "exerciseStyle": "American",
      "strikePrice": 205.0,
      "expirationDate": "2026-09-18",
      "sharesPerContract": 100,
      "snapshotDate": "2026-07-24",
      "dayOpen": 15.93, "dayHigh": 16.5, "dayLow": 14.91, "dayClose": 15.25,
      "dayVolume": 57, "dayVwap": 15.347,
      "impliedVolatility": 0.4351335900771632,
      "openInterest": 18423,
      "delta": 0.5683372597248743, "gamma": 0.011284461699521109,
      "theta": -0.13519764301048143, "vega": 0.31752483349676425,
      "bidPrice": null, "askPrice": null, "delayed": false
    },
    {
      "occTicker": "O:NVDA260918P00205000",
      "contractType": "Put",
      "exerciseStyle": "American",
      "strikePrice": 205.0,
      "expirationDate": "2026-09-18",
      "sharesPerContract": 100,
      "snapshotDate": "2026-07-24",
      "dayOpen": 12.25, "dayHigh": 13.0, "dayLow": 11.95, "dayClose": 12.78,
      "dayVolume": 73, "dayVwap": 12.3871,
      "impliedVolatility": 0.442685573470891,
      "openInterest": 10877,
      "delta": -0.4347310481362263, "gamma": 0.011229565589700827,
      "theta": -0.11929909961179762, "vega": 0.31768236407262235,
      "bidPrice": null, "askPrice": null, "delayed": false
    }
  ]
}
```

## /v1/stocks/{ticker}/options/contract

A single option contract by its OCC symbol: the latest daily bar, implied volatility, open interest, greeks, and bid/ask when your plan entitles quotes. The contract is fetched live from the provider; an unknown or expired symbol returns `404`.

**Parameters:** `{ticker}` (path — e.g. `NVDA`); `symbol` (query — the OCC option symbol, e.g. `O:NVDA260918C00210000`).

```bash
curl "https://api.equibles.com/v1/stocks/NVDA/options/contract?symbol=O:NVDA260918C00210000" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/options/contract",
    params={"symbol": "O:NVDA260918C00210000"},
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
```

```javascript
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/options/contract?symbol=O:NVDA260918C00210000", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
```

```json
{
  "ticker": "NVDA",
  "quotesAvailable": false,
  "contract": {
    "occTicker": "O:NVDA260918C00210000",
    "contractType": "Call",
    "exerciseStyle": "American",
    "strikePrice": 210.0,
    "expirationDate": "2026-09-18",
    "sharesPerContract": 100,
    "snapshotDate": "2026-07-24",
    "dayOpen": 13.35, "dayHigh": 13.9, "dayLow": 12.35, "dayClose": 12.8,
    "dayVolume": 285, "dayVwap": 13.1329,
    "impliedVolatility": 0.43065701036767545,
    "openInterest": 59701,
    "delta": 0.5123947745154717, "gamma": 0.011527232307739228,
    "theta": -0.13440416336922348, "vega": 0.32284346275567993,
    "bidPrice": null, "askPrice": null, "delayed": false
  }
}
```