Get trade book (executed fills)

The trade book lists actual executions (fills), separate from the order book's order-level status. One order can produce multiple trades (a partial fill across several exchange matches).

trades = kite.trades()
for t in trades:
    print(t["order_id"], t["tradingsymbol"], t["quantity"], t["average_price"])

Per-trade fields:

{
  "trade_id": "1234567",
  "order_id": "230914000012345",
  "tradingsymbol": "INFY",
  "quantity": 6,               # this fill's quantity — may be less than order qty
  "average_price": 1476.85,
  "exchange_timestamp": "2026-09-13 09:16:04",
}

You can also fetch trades for one specific order:

trades_for_order = kite.order_trades(order_id="230914000012345")

Why this matters separately from the order book

If an order for 10 shares fills as 6 + 4 in two separate matches (common for less liquid stocks or large size against thin depth), the order book shows one row with filled_quantity: 10, but your actual average entry price is the size-weighted average of the two trades — which may differ slightly from what the order book's average_price reports if you need per-fill granularity for cost-basis or slippage accounting (chapter 86).

def compute_vwap_fill(trades: list[dict]) -> float:
    total_qty = sum(t["quantity"] for t in trades)
    total_value = sum(t["quantity"] * t["average_price"] for t in trades)
    return total_value / total_qty if total_qty else 0.0

Practical use

Use the trade book, not the order book, when computing realized slippage against your intended price — it's the ground truth of what actually executed and at what price.

Next: 020 — Handle API errors and rate limits