# Multi-Leg Option Trades `GET` `https://api.unusualwhales.com/api/option-trades/multi-leg` A live feed of detected multi-leg option strategies — vertical spreads, iron condors, butterflies, calendars, diagonals and more — reconstructed from their individual legs, newest first. Each row summarizes the strategy (fill/net price, net bid/ask, net premium, net greeks, strikes, DTE range, breakevens, max profit/loss) across all legs. Use the per-strategy `id` with the `legs` endpoint to fetch the individual contracts. Decimal values are returned as strings. Defaults to the current trading day when no time bounds are given. Queries are limited to a 24-hour range. If both bounds span more than 24 hours, `newer_than` is clamped to 24 hours before `older_than`. ## Authentication ``` Authorization: Bearer YOUR_API_KEY ``` ## Query Parameters | Name | Type | Required | Description | |------|------|----------|-------------| | `limit` | integer | No | Rows per page (default 50, max 500). | | `offset` | integer | No | Rows to skip for pagination (max 500). | | `ticker_symbol` | string | No | Restrict to a single underlying ticker. | | `newer_than` | string | No | Only strategies executed at/after this UTC timestamp (ISO-8601). Defaults to last market open. The query range is limited to 24 hours. | | `older_than` | string | No | Only strategies executed at/before this UTC timestamp (ISO-8601). The query range is limited to 24 hours. | | `strategy` | array[string] | No | Filter by detected strategy name(s). Repeatable array param (e.g. `strategy[]=iron_condor&strategy[]=call_vertical_spread`). | | `exclude_other` | boolean | No | Exclude strategies classified as `other` (unrecognized structures). | | `direction` | array[string] | No | Filter by direction (long/short). Repeatable array param. | | `net_side` | array[string] | No | Filter by the strategy's net aggressor side (bid/ask/mid). Repeatable array param. | | `min_size` | integer | No | Minimum total contracts across legs. | | `max_size` | integer | No | Maximum total contracts across legs. | | `min_premium` | string | No | Minimum net premium (supports abs()). | | `max_premium` | string | No | Maximum net premium (supports abs()). | | `min_dte` | integer | No | Minimum days-to-expiry. | | `max_dte` | integer | No | Maximum days-to-expiry. | | `min_leg_count` | integer | No | Minimum number of legs. | | `max_leg_count` | integer | No | Maximum number of legs. | | `all_otm` | boolean | No | Only strategies where every leg is out-of-the-money. | | `issue_types` | array[string] | No | Filter by underlying issue type(s), e.g. Common Stock, ETF. Repeatable array param. | | `sectors` | array[string] | No | Filter by underlying sector(s). Repeatable array param. | ## Response (200) | Field | Type | Description | |-------|------|-------------| | `all_opening_legs` | boolean | Every leg is opening (not closing). | | `all_otm` | boolean | Every leg is out-of-the-money. | | `bid_ask_spread` | string | Aggregate bid/ask spread. | | `breakevens` | array[string] | Breakeven price(s) at expiry. | | `code` | string | Internal classification code. | | `diff_expirations` | boolean | Legs span more than one expiry. | | `diff_strikes` | boolean | Legs span more than one strike. | | `diff_types` | boolean | Legs mix calls and puts. | | `direction` | string | Strategy direction, e.g. long/short. | | `executed_at` | string | UTC timestamp of the strategy execution. | | `id` | string | Unique strategy id (UUID). | | `ivs` | array[string] | Implied volatility per leg. | | `leg_count` | integer | Number of distinct legs. | | `max_dte` | integer | Maximum days-to-expiry across legs. | | `max_loss` | string | Max theoretical loss (null if unbounded). | | `max_profit` | string | Max theoretical profit (null if unbounded). | | `max_strike` | string | Highest leg strike. | | `min_dte` | integer | Minimum days-to-expiry across legs. | | `min_strike` | string | Lowest leg strike. | | `net_ask` | string | Net NBBO ask of the classified spread (buy legs at ask, sell legs at bid). | | `net_bid` | string | Net NBBO bid of the classified spread (buy legs at bid, sell legs at ask). | | `net_delta` | string | Net delta across legs. | | `net_premium` | string | Net premium (debit/credit). | | `net_price` | string | Fill / net execution price of the strategy (debit positive, credit negative). | | `net_side` | string | Net aggressor side of the whole strategy vs its net NBBO: bid, ask, or mid. | | `net_theta` | string | Net theta across legs. | | `size` | integer | Total contracts across all legs. | | `strategy` | string | Detected strategy name, e.g. vertical, iron_condor, calendar. | | `strikes` | array[string] | All leg strikes. | | `ticker` | string | Underlying ticker. | | `total_premium` | string | Gross premium across legs. | | `txns` | integer | Number of underlying transactions. | | `underlying_price` | string | Underlying price at execution. | | `uniq_exchanges` | array[string] | Distinct exchanges the legs printed on. | ## Example ### curl ```bash curl -X GET "https://api.unusualwhales.com/api/option-trades/multi-leg" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Accept: application/json" ``` ### Python ```python import http.client conn = http.client.HTTPSConnection("api.unusualwhales.com") headers = {"Authorization": "Bearer YOUR_API_KEY", "Accept": "application/json"} conn.request("GET", "/api/option-trades/multi-leg", headers=headers) response = conn.getresponse() print(response.read().decode("utf-8")) ``` ## Response Example ```json { "data": [ { "max_loss": "string", "max_profit": "string", "min_dte": 0, "net_delta": "string", "net_theta": "string" } ] } ```