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

# Trade Types

> Narrow on trade_type to work with the Trade discriminated union.

Trade endpoints (`markets.getTrades`, `trader.getTraderTrades`) return a single discriminated union covering every on-chain event type the API surfaces. The discriminant field is `trade_type`.

```typescript theme={null}
import type { Trade, TradeEventType } from "@structbuild/sdk";

const { data: trades } = await client.markets.getTrades({
  condition_ids: "0xabc...",
});

for (const trade of trades) {
  switch (trade.trade_type) {
    case "OrderFilled":
    case "OrdersMatched":
      console.log(trade.price, trade.usd_amount, trade.shares_amount);
      break;
    case "Redemption":
      console.log(trade.winning_outcome_index, trade.position_details);
      break;
    case "Merge":
    case "Split":
      console.log(trade.usd_amount, trade.position_details);
      break;
    case "Resolution":
      console.log(trade.condition_id, trade.settled_price);
      break;
  }
}
```

## Convenience unions

The SDK exports a few sub-unions for common filtering patterns:

| Type             | Covers                                                                                                                                                                                                           |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Trade`          | Every possible trade event (parent union).                                                                                                                                                                       |
| `MarketTrade`    | Actual on-chain trades: `OrderFilled`, `OrdersMatched`, `Redemption`, `Merge`, `Split`, `PositionsConverted`, `Cancelled`, `RegisterToken`, `MakerRebate`, `Reward`, `Yield`.                                    |
| `OracleEvent`    | Protocol lifecycle events: `Initialization`, `Proposal`, `Dispute`, `Settled`, `Resolution`, `ConditionResolution`, `Reset`, `Flag`, `Unflag`, `Pause`, `Unpause`, `ManualResolution`, `NegRiskOutcomeReported`. |
| `TradeEventType` | String literal union of every `trade_type` value (useful for autocomplete and filter building).                                                                                                                  |

```typescript theme={null}
import type { MarketTrade, OracleEvent } from "@structbuild/sdk";

function isMarketTrade(trade: Trade): trade is MarketTrade {
  return trade.trade_type !== "Initialization"
    && trade.trade_type !== "Proposal"
    && trade.trade_type !== "Resolution";
}
```

## Individual variants

Each `trade_type` also ships as its own exported schema, which is handy when you want a precise param type without switching:

```typescript theme={null}
import type {
  OrderFilledTrade,
  RedemptionTrade,
  MergeTrade,
  SplitTrade,
  CancelledTrade,
  PositionsConvertedTrade,
  RegisterTokenTrade,
  MakerRebate,
  Reward,
  Yield,
} from "@structbuild/sdk";

function priceOf(trade: OrderFilledTrade): number {
  return trade.price;
}
```

Oracle lifecycle events are exported under `*Event` names: `QuestionInitializedEvent`, `AssertionMadeEvent`, `AssertionDisputedEvent`, `AssertionSettledEvent`, `QuestionResolvedEvent`, `ConditionResolutionEvent`, `QuestionResetEvent`, `QuestionFlaggedEvent`, `QuestionUnflaggedEvent`, `QuestionPausedEvent`, `QuestionUnpausedEvent`, `QuestionEmergencyResolvedEvent`, and `NegRiskOutcomeReportedEvent`.

## Filtering server-side

Most trade endpoints accept a `trade_types` query parameter. Pass a comma-separated list to avoid filtering client-side:

```typescript theme={null}
const { data: fills } = await client.markets.getTrades({
  condition_ids: "0xabc...",
  trade_types: "OrderFilled,OrdersMatched",
});
```

The same filter is available on the `polymarket_trades` websocket room. See [WebSockets](/sdk/websockets).
