---
title: "Per-symbol EOD unusual-flow history"
method: GET
path: "/options-flow/history/{symbol}"
tags: ["Derived Analytics"]
---

# Per-symbol EOD unusual-flow history

`GET /options-flow/history/{symbol}`

## Request

- Base URL: `https://optionsbell.com/api/v1`
- URL: `https://optionsbell.com/api/v1/options-flow/history/{symbol}`
- Auth: API key in header `X-API-Key`

End-of-day series of a symbol's unusual options flow (aggregated from
contracts that passed the unusual filter - not the full tape): daily
call/put contract counts, volume, open interest, premium, C/P ratios,
average IV, average Vol/OI, net delta and the consecutive-day streak.
Newest first. An unknown symbol is not an error: 200 with `count: 0`.

## Path parameters

- `symbol` string, required

## Query parameters

- `date_from` string, date
- `date_to` string, date
- `limit` integer

## Response `200`

Daily flow rows

- object
  - `symbol` string, required
  - `date` string, date, nullable, required: Newest day returned.
  - `date_from` string, date, nullable, required
  - `date_to` string, date, nullable, required
  - `count` integer, required
  - `data` DailyFlowRow[], required
    - `date` string, date
    - `stock_price` string, nullable: Numeric string.
    - `call_contracts` integer
    - `put_contracts` integer
    - `call_volume` string: Numeric string.
    - `put_volume` string: Numeric string.
    - `total_volume` string: Numeric string.
    - `call_open_interest` string: Numeric string.
    - `put_open_interest` string: Numeric string.
    - `total_oi` string: Numeric string.
    - `call_total_premium` string: Numeric string. USD.
    - `put_total_premium` string: Numeric string. USD.
    - `call_put_volume_ratio` string, nullable: Numeric string.
    - `call_put_oi_ratio` string, nullable: Numeric string.
    - `call_avg_iv` string: Numeric string. Percent.
    - `put_avg_iv` string: Numeric string. Percent.
    - `call_avg_vol_oi` string: Numeric string.
    - `put_avg_vol_oi` string: Numeric string.
    - `net_delta` string: Numeric string.
    - `avg_days_to_expiry` string, nullable: Numeric string.
    - `consecutive_days` integer

## Other responses

- `400`: Invalid input: `INVALID_SYMBOL`, `INVALID_DATE`, `INVALID_DATE_RANGE`, `INVALID_PARAM`.
- `401`: Missing or invalid API key: `MISSING_API_KEY`, `INVALID_API_KEY_FORMAT`, `INVALID_API_KEY`. No rate-limit headers.
- `403`: Key is valid but has no usable subscription: `NO_ACTIVE_SUBSCRIPTION` (no Personal plan on the key) or `SUBSCRIPTION_INACTIVE` (past due, paused, expired, or canceled past its period end). No rate-limit headers.
- `429`: Rate limit exceeded: `RATE_LIMIT_MINUTE` (60/min) or `RATE_LIMIT_DAY` (4,000/day). Carries both rate-limit header sets and `Retry-After` (seconds until the exhausted window opens again). Rejected requests count against the minute window, so back off instead of retrying immediately.
- `500`: Unexpected server error: `INTERNAL_ERROR`. The body and the X-Request-Id header carry the request id.
- `503`: Authentication backend unreachable: `AUTH_UNAVAILABLE`. Retry later. No rate-limit headers.

---

[API](https://skmtc.dev/optionsbell/apis/optionsbell-options-flow-api.md) · [All operations](https://skmtc.dev/optionsbell/apis/optionsbell-options-flow-api/llms.txt) · [OpenAPI document](https://skmtc.dev/optionsbell/apis/optionsbell-options-flow-api/revisions/42db9bcaa61f?raw)
