> ## Documentation Index
> Fetch the complete documentation index at: https://api.unusualwhales.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> API requests use the base URL https://api.unusualwhales.com and require a bearer token in the `Authorization` header (`Authorization: Bearer <API_KEY>`). Create and manage API tokens at https://unusualwhales.com/dashboard/api.
> For live market data inside an AI tool, use the Unusual Whales MCP server at https://unusualwhales.com/public-api/mcp.
> Instructions for agents using Unusual Whales tools: https://unusualwhales.com/skill.md

# MultiLegSpread

> A detected multi leg options spread and its classification.

Message
fields**44**
topic[multi-leg-spreads](/docs/kafka/topics/multi-leg-spreads.md)

**Proto definition**

```protobuf schema.proto theme={null}
message MultiLegSpread {
  string id = 1;
  int32 ticker_id = 2;
  string ticker = 3;
  string code = 4;
  Strategy strategy = 5;
  Direction direction = 6;
  OptionTradeSide net_side = 7;
  int64 executed_at = 8;
  int32 size = 9;
  int32 leg_count = 10;
  int32 txns = 11;
  string net_price = 12;
  string net_delta = 13;
  string net_theta = 14;
  string total_premium = 15;
  string underlying_price = 16;
  int32 min_dte = 17;
  int32 max_dte = 18;
  string min_strike = 19;
  string max_strike = 20;
  bool all_otm = 21;
  bool diff_strikes = 22;
  bool diff_expirations = 23;
  bool diff_types = 24;
  repeated int32 option_chain_ids = 25;
  repeated string trade_ids = 26;
  repeated MultiLegSpreadLeg legs = 27;
  bool all_opening_legs = 28;
  string bid_ask_spread = 29;
  repeated string uniq_exchanges = 30;
  repeated string strikes = 31;
  string max_profit = 32;
  string max_loss = 33;
  repeated string breakevens = 34;
  string avg_iv = 35;
  repeated string ivs = 36;
  string net_premium = 37;
  string net_bid = 38;
  string net_ask = 39;
  int32 ratios = 40;
  string net_vega = 41;
  string net_gamma = 42;
  string gross_vega = 43;
  string gross_gamma = 44;
}
```

## Fields

The number on the right of each row is the protobuf field number.

id
string
1

Unique id of the spread.

ticker\_id
int32
2

The underlying ticker's id.

ticker
string
3

The underlying ticker symbol.

code
string
4

The trade code shared by the legs.

strategy
[Strategy](/docs/kafka/types/Strategy.md)
5

The classified strategy.

direction
[Direction](/docs/kafka/types/Direction.md)
6

Whether the position is long or short.

net\_side
[OptionTradeSide](/docs/kafka/types/OptionTradeSide.md)
7

Whether the spread was a net debit (ask) or a net credit (bid).

executed\_at
int64
8

When the spread executed.

size
int32
9

The size of the spread.

leg\_count
int32
10

How many legs the spread has.

txns
int32
11

How many separately executed transactions make up this spread.

net\_price
string
12

Net price paid (positive) or received (negative) for the spread.

net\_delta
string
13

The spread's net delta exposure.

net\_theta
string
14

The spread's net theta exposure.

total\_premium
string
15

Total premium across all legs.

underlying\_price
string
16

The underlying price when the spread executed.

min\_dte
int32
17

Shortest days to expiration among the legs.

max\_dte
int32
18

Longest days to expiration among the legs.

min\_strike
string
19

The lowest leg strike.

max\_strike
string
20

The highest leg strike.

all\_otm
bool
21

Whether every leg is out of the money.

diff\_strikes
bool
22

Whether the legs use different strikes.

diff\_expirations
bool
23

Whether the legs use different expirations.

diff\_types
bool
24

Whether the legs mix calls and puts.

option\_chain\_ids
int32
repeated
25

The option chain ids of the legs.

trade\_ids
string
repeated
26

The individual trades that make up the spread.

legs
[MultiLegSpreadLeg](/docs/kafka/types/MultiLegSpreadLeg.md)
repeated
27

The legs of the spread.

all\_opening\_legs
bool
28

Whether every leg opened new positions.

bid\_ask\_spread
string
29

The net quoted bid ask width of the spread, empty when a leg has no quote.

uniq\_exchanges
string
repeated
30

The distinct exchanges the legs traded on.

strikes
string
repeated
31

The distinct leg strikes.

max\_profit
string
32

Max profit at expiration; empty when unbounded or multi expiration.

max\_loss
string
33

Max loss at expiration; empty when unbounded or multi expiration.

breakevens
string
repeated
34

Underlying prices where the expiry payoff crosses zero. Ascending empty when multi expiration.

avg\_iv
string
35

Size weighted average implied volatility across the fills.

ivs
string
repeated
36

Size weighted implied volatility per distinct strike, arranged like strikes; empty entry when unknown.

net\_premium
string
37

Net premium paid (positive) or received (negative) across all legs. Empty when direction is unknown.

net\_bid
string
38

Net NBBO bid of the classified spread (buy legs at bid, sell legs at ask). Empty when direction is unknown or a leg has no quote.

net\_ask
string
39

Net NBBO ask of the classified spread (buy legs at ask, sell legs at bid). Empty when direction is unknown or a leg has no quote.

ratios
int32
40

Reduced leg-size ratio with one digit per distinct strike in ascending strike order. For example, 10:20:10 is encoded as 121. Zero when a reduced component exceeds one digit.

net\_vega
string
41

Signed position vega in dollars (sum of ±leg vega × contracts × 100). Empty when a leg's side is unknown.

net\_gamma
string
42

Signed position gamma in dollars (sum of ±leg gamma × contracts × 100). Empty when a leg's side is unknown.

gross\_vega
string
43

Sum of |leg vega| × contracts × 100 across every leg, whichever way the legs are signed.

gross\_gamma
string
44

Sum of |leg gamma| × contracts × 100 across every leg, whichever way the legs are signed.
