Get options flow trades
GET/v1/flow

Get options flow trades

Returns recent options flow trade prints (large trades, filtered by premium). Limit defaults to 50 (max 500); minPremium defaults to 10000. Default sort order is premium descending; pass sort=time for timestamp descending. A market-wide query (without symbol) spanning more than 3 weekday trading sessions returns 400 out_of_range (FlowMaxMarketWideSessions = 3); split wide queries across multiple requests or narrow with symbols. Database query timeouts return 503 query_timeout with a Retry-After header.

Endpoint Usage & Plan Rules

Plan Access
Included in Basic
Active subscription
Rate Limit
One request per call; no daily quota
Result Clamping
Clamped by Plan
Clamped to plan max_rows

Parameters

Optional Parameters

NameTypeLocationDescription
symbolstringqueryUnderlying equity ticker symbol (alias: ticker).
symbolsstringqueryComma-separated list of symbols (alias: tickers, max 20). Exceeding 20 returns 400 invalid_parameter.
sentimentstringqueryFilter by derived trade sentiment ('bullish', 'bearish', or 'neutral'). Neutral includes prints with no sentiment tags.
sidestringqueryFilter by execution fill side relative to prevailing bid/ask ('ask', 'bid', or 'mid').
typestringqueryFilter by option contract type ('call' or 'put', alias: optionType).
executionTypestringqueryFilter by trade routing structure ('sweep', 'block', or 'split', alias: execution).
minPremiumnumberqueryMinimum trade premium in dollars (defaults to $10,000 for large prints; keeps per-symbol queries fast; explicit values below 10000 remain supported).
limitintegerqueryNumber of flow records to return (1 to 500, default 50; values > 500 are clamped to 500 and plan max_rows).
sortstringquerySort order of returned trade prints ('premium' for premium descending, 'time' for executedAt descending; defaults to 'premium').
fromstringqueryWindow start date in YYYY-MM-DD format (alias: fromDate). Older than 7 days returns 400 out_of_range. Clamped to plan history_days. When omitted, the window starts at `to` (a `to` alone is one session; a `to` past the newest session means the newest session) or, with neither, the newest session.
tostringqueryWindow end date in YYYY-MM-DD format (alias: toDate). When omitted: with symbol(s), the newest session; market-wide (no symbols), the `from` session, so a `from` alone is one session; with neither `from` nor `to`, the newest session.

Request Examples

curl -s -H "Authorization: Bearer $WSO_API_KEY" \
  "https://api.wheelstrategyoptions.com/v1/flow?symbol=AAPL&limit=50"

Try it

GET/v1/flow
Included in Basic

Requests run against the live API with your key and count against its rate limits. The key is sent only to this site. Sign in to get a key

Add your API key to send.
Response

Send a request to see the live response, its status, timing, and rate-limit headers.

Response Attributes (200 OK)

FieldTypeNullableDescription
asOfstringNoFeed timestamp of the newest trade in the entire feed (flow.go:219-230).
retentionDaysintegerNoFlow retention horizon in days (fixed at 7).
fromDatestringNoWindow start date in YYYY-MM-DD format.
toDatestringNoWindow end date in YYYY-MM-DD format.
countintegerNoTotal matches in the window before limit, capped at 10,000.
countCappedbooleanNoTrue when the total matches in the window reached 10,000.
printsobject[]NoList of executed flow prints.

Response Example

json
{
  "asOf": "2026-10-09T19:34:09.078Z",
  "retentionDays": 7,
  "fromDate": "2026-10-09",
  "toDate": "2026-10-09",
  "count": 10000,
  "countCapped": true,
  "prints": [
    {
      "executedAt": "2026-10-09T18:01:18.053Z",
      "ticker": "AAPL",
      "optionSymbol": "",
      "optionType": "put",
      "strike": 330,
      "expiration": "2026-11-27",
      "dte": 49,
      "side": "ask",
      "sentiment": "bearish",
      "executionType": "split",
      "premium": 5158800,
      "size": 5732,
      "price": 9,
      "underlyingPrice": 335.39,
      "otmPct": 1.607084289931125,
      "volume": 9988,
      "openInterest": 16,
      "opening": true,
      "delta": -0.3894177072387585,
      "impliedVolatility": 25.31,
      "isETFOrIndex": false
    },
    {
      "executedAt": "2026-10-09T17:51:55.467Z",
      "ticker": "AAPL",
      "optionSymbol": "",
      "optionType": "call",
      "strike": 350,
      "expiration": "2026-11-20",
      "dte": 42,
      "side": "unknown",
      "sentiment": "neutral",
      "executionType": "block",
      "premium": 2968875,
      "size": 5075,
      "price": 5.85,
      "underlyingPrice": 334.945,
      "otmPct": 4.494767797698129,
      "volume": 6381,
      "openInterest": 17591,
      "opening": false,
      "delta": 0.3332500957498555,
      "impliedVolatility": 24.47,
      "isETFOrIndex": false
    },
    {
      "executedAt": "2026-10-09T15:13:17.145Z",
      "ticker": "AAPL",
      "optionSymbol": "",
      "optionType": "call",
      "strike": 125,
      "expiration": "2029-01-19",
      "dte": 833,
      "side": "ask",
      "sentiment": "bullish",
      "executionType": "split",
      "premium": 1665150,
      "size": 75,
      "price": 222.02,
      "underlyingPrice": 334.24,
      "otmPct": -62.601723312589755,
      "volume": 99,
      "openInterest": 48,
      "opening": true,
      "delta": 0.97882120744085,
      "impliedVolatility": 42.25,
      "isETFOrIndex": false
    }
  ]
}

Error Responses

StatusDescription
400Bad Request. The request body, query parameters, or path values violated validation constraints.
401Unauthorized. Missing, malformed, or invalid API key credential.
403Forbidden. Rejection reasons: `subscription_required`, `subscription_inactive`, `trial_ended`, `plan_upgrade_required` (with `required_plan`), `wrong_credential_type`, `origin_forbidden` (origin authentication failed).
404Not Found. Requested resource, ticker symbol, or option contract does not exist.
405Method Not Allowed. Returned with an `Allow` header when an unsupported HTTP method is used. Error code: `method_not_allowed`. (HEAD is served on all GET routes and counts against the rate limit like GET.)
429Too Many Requests. Rejection reasons: `rate_limited` (per-minute limit), `too_many_concurrent_requests` (in-flight cap), `too_many_auth_failures`.
500Internal Server Error. Unhandled internal server or database error.
503Service Unavailable. Backing database, cache, or external provider connection unavailable.
Get 2D gamma exposure heatmap matrixGet 1-minute net flow bars and summary