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.