Flow Alerts
Flow alerts are rule based aggregations on the full tape of option trades.
While there are quite a few different rules and alerts the most used one is the repeated hit family: RepeatedHits, RepeatedHitsAscendingFill, RepeatedHitsDescendingFill
Each of those represent an alert when there have been multiple transactions on the same option contract within a few milliseconds. This can be mean that a single order is being matched across multiple other orders and creating multiple transactions. It can also just mean that there are multiple buyers/sellers at the same time.
Trades usually use the repeated hits with other data points to form a picture on whether there is some urgency in entering/exiting a position in a contract/ticker.
The full current options tape including trades that do not form a RepeatedHits alert can be accessed through the Option Trades endpoint. The difference between the 3 repeated hits alerts are:
- DescendingFill: Each transaction that comes after another in chronological order has either the same fill price as or a lower fill price than the previous transaction. The last transaction must be lower than the first transaction.
- AscendingFill: The opposite of DescendingFill. The fill prices increase instead of decreasing.
- RepeatedHits (neither ascending nor descending): When it does not fit into one of the first two categories.
To express ascending and descending in a mathmatical notion. Let p₁, p₂, …, pₙ be the fill prices of n transactions ordered chronologically:
- DescendingFill: pᵢ ≥ pᵢ₊₁ for all i ∈ [1, n−1], and pₙ < p₁.
- AscendingFill: pᵢ ≤ pᵢ₊₁ for all i ∈ [1, n−1], and pₙ > p₁.
For the individual flow alert rules and how the aggregation is based on you can checkout out https://unusualwhales.com/option-flow-alerts/rules.
For any given flow alert you can take a look at the individual trades that are making up the alert by taking the alert’s id and use https://api.unusualwhales.com/docs/operations/PublicApi.OptionTradeController.flow_alert to retrieve the individual transactions.
For real time streaming of flow alerts, subscribe to the flow-alerts websocket channel, see https://api.unusualwhales.com/docs/websocket/flow-alerts.
The 14-day lookback limit on the custom alerts endpoint (/api/alerts) does not apply to this endpoint.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
A comma separated list of tickers. To exclude certain tickers prefix the first ticker with a -.
"AAPL,INTC"
Convenience preset for "unusual" flow, matching the live options flow default criteria: volume>OI, size>OI, all-opening, OTM, single-leg, DTE≤60, ask-side≥50%, premium≥$10k, size≥5, issue types ADR/Common Stock/ETF. Applied as defaults, so any of those filters you pass explicitly (e.g. min_ask_perc=0.9, max_dte=40) overrides the preset.
The minimum premium on that alert. Min: 0.
x >= 012500.5
The maximum premium on that alert. Min: 0.
x >= 012500.5
The minimum size on that alert. Size is defined as the sum of the sizes of all transactions that make up the alert. Min: 0.
x >= 0125
The maximum size on that alert. Min: 0.
x >= 0125
The minimum volume on that alert's contract at the time of the alert. Min: 0.
x >= 0125
The maximum volume on that alert's contract at the time of the alert. Min: 0.
x >= 0125
The minimum open interest on that alert's contract at the time of the alert. Min: 0.
x >= 0125
The maximum open interest on that alert's contract at the time of the alert. Min: 0.
x >= 0125
Boolean flag whether all transactions are opening transactions based on OI, Size & Volume. Since Flow Alerts with rule_name values of RepeatedHits, RepeatedHitsAscendingFill, and RepeatedHitsDescendingFill are composed of many individual transactions, it is extremely unlikely that the all_opening value will be true, so if you are interested in these Flow Alerts you should not set this query param to true.
true
Boolean flag whether a transaction is from the floor.
true
Boolean flag whether a transaction is a intermarket sweep.
true
Boolean flag whether a transaction is a call.
true
Boolean flag whether a transaction is a put.
true
Boolean flag whether a transaction is ask side.
true
Boolean flag whether a transaction is bid side.
true
An array of 1 or more rule name.
FloorTradeSmallCap, FloorTradeMidCap, RepeatedHits, RepeatedHitsAscendingFill, RepeatedHitsDescendingFill, FloorTradeLargeCap, OtmEarningsFloor, LowHistoricVolumeFloor, SweepsFollowedByFloor The minimum OTM diff of a contract. Given a strike price of 120 and an underlying price of 98 the diff for a call option would equal to: (120 - 98) / 98 = 0.2245
The diff for a put option would equal to: -1 * (120 - 98) / 98 = -0.2245.
0.53
The minimum OTM diff of a contract. Given a strike price of 120 and an underlying price of 98 the diff for a call option would equal to: (120 - 98) / 98 = 0.2245
The diff for a put option would equal to: -1 * (120 - 98) / 98 = -0.2245.
0.53
The minimum ratio of contract volume to contract open interest. If the open interest of a contract is zero, then this ratio is evaluated as if the open interest of the contract was one (to avoid divide by zero errors). For example, if you set this ratio to 10, then a contract with zero open interest and 7 volume will NOT be included in your results.
x >= 00.32
The maximum ratio of contract volume to contract open interest. If the open interest of a contract is zero, then this ratio is evaluated as if the open interest of the contract was one (to avoid divide by zero errors). For example, if you set this ratio to 50, then a contract with zero open interest and 75 volume will NOT be included in your results.
x >= 01.58
Only include contracts which are currently out of the money.
true
An array of 1 or more issue types.
A singular issue type.
Common Stock, ETF, Index, ADR The minimum days to expiry. Min: 0.
x >= 01
The maximum days to expiry. Min: 0.
x >= 03
The minimum ask percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.25
The maximum ask percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.75
The minimum bid percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.25
The maximum bid percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.75
The minimum bull percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.5
The maximum bull percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.9
The minimum bear percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.5
The maximum bear percentage. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.9
The minimum skew. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.3
The maximum skew. Decimal proxy for percentage (0 to 1). Min: 0. Max: 1.
0 <= x <= 10.7
The minimum price of the underlying asset. Min: 0.
x >= 010.5
The maximum price of the underlying asset. Min: 0.
x >= 0500.75
The minimum IV change. Unbounded decimal proxy for percentage (e.g., 0.01 for minimum +1% change).
0.01
The maximum IV change. Unbounded decimal proxy for percentage (e.g., 0.05 for maximum +5% change).
0.05
The minimum size to volume ratio. Min: 0.
x >= 01.5
The maximum size to volume ratio. Min: 0.
x >= 010
The minimum spread. Min: 0.
x >= 00.05
The maximum spread. Min: 0.
x >= 05
The minimum marketcap. Min: 0.
x >= 01000000
The maximum marketcap. Min: 0.
x >= 0250000000
Boolean flag whether the transaction is a multi-leg transaction.
true
Only include alerts where the size is greater than the open interest.
true
Only include alerts where the volume is greater than the open interest.
true
Minimum value of (contract_expiry_date - underlying_next_earnings_date) in days. Negative = contract expires BEFORE earnings; zero = same day; positive = AFTER earnings. Use together with max_days_between_expiry_and_earnings to target a window around the next earnings announcement. Examples: to exclude contracts that expire after the next earnings, set max_days_between_expiry_and_earnings=-1. To target contracts that expire the same week as (and after) earnings, set min_days_between_expiry_and_earnings=1&max_days_between_expiry_and_earnings=6. Contracts whose underlying has no known next earnings date are excluded whenever this filter is used.
1
Maximum value of (contract_expiry_date - underlying_next_earnings_date) in days. Negative = contract expires BEFORE earnings; zero = same day; positive = AFTER earnings. Use together with min_days_between_expiry_and_earnings to target a window around the next earnings announcement. Examples: to exclude contracts that expire after the next earnings, set max_days_between_expiry_and_earnings=-1. To target contracts that expire the same week as (and after) earnings, set min_days_between_expiry_and_earnings=1&max_days_between_expiry_and_earnings=6. Contracts whose underlying has no known next earnings date are excluded whenever this filter is used.
6
The unix time in milliseconds or seconds at which no older results will be returned. Can be used with older_than to paginate by time. Also accepts an ISO date or RFC 3339 datetime (example: 2024-01-25).
"1_715_083_417"
The unix time in milliseconds or seconds at which no newer results will be returned. Can be used with newer_than to paginate by time. Also accepts an ISO date or RFC 3339 datetime (example: 2024-01-25).
"1_715_083_417"
How many items to return. Default: 100. Max: 200. Min: 1.
1 <= x <= 20010
Response
Representation of a flow alert.
The name of the alert rule.
"RepeatedHits"
false
A UTC timestamp.
"2023-12-12T16:35:52.168Z"
Size weighted delta of all transactions that make up the flow alert. Null when unavailable.
The contract expiry date in ISO format.
"2023-12-22T00:00:00.000Z"
The amount of expiries belonging to the trade. This is only greater than 1 if it is a multileg trade.
2
Size weighted gamma of all transactions that make up the flow alert. Null when unavailable.
false
Whether the trade is a multileg trade.
false
Whether the trade is a singleleg trade.
true
Whether the trade is a sweep.
true
The issue type of the ticker.
Common Stock, ETF, Index, ADR "Common Stock"
Size weighted implied volatility of all transactions that make up the flow alert. Null when unavailable.
The option symbol of the contract.
You can use the following regex to extract underlying ticker, option type, expiry & strike:
^(?<symbol>[\w]*)(?<expiry>(\d{2})(\d{2})(\d{2}))(?<type>[PC])(?<strike>\d{8})$
Keep in mind that the strike needs to be multiplied by 1,000.
Size weighted rho of all transactions that make up the flow alert. Null when unavailable.
The contract strike.
"375"
Size weighted theoretical option price of all transactions that make up the flow alert. Null when unavailable.
Size weighted theta of all transactions that make up the flow alert. Null when unavailable.
The contract type.
call, put "call"
Size weighted vega of all transactions that make up the flow alert. Null when unavailable.
