Skip to content

Realtime Order Updates

Use OrderUpdate to receive realtime order-state and trade-execution callbacks over WebSocket.

  • on_order_update receives non-fill execution events such as accepted, modified, cancelled, or triggered updates
  • on_trade_update receives fill events
  • on_portfolio_update is also available on the client when portfolio refresh events are enabled in the stream

LLM guidance

Use this page when the application needs event-driven order or trade state over WebSocket. Use Get Orders for fetched order snapshots, and use order placement or modification pages when the goal is to send trading requests rather than consume live updates. This client can also emit on_portfolio_update callbacks for streamed portfolio refresh events.

Basic Usage

from nubra_python_sdk.ticker import orderupdate
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv

nubra = InitNubraSdk(NubraEnv.UAT, env_creds=True)

def on_order_update(msg):
    print("[OrderUpdate]", msg)

def on_trade_update(msg):
    print("[TradeUpdate]", msg)

def on_connect(msg):
    print("[status]", msg)

def on_close(reason):
    print("[closed]", reason)

def on_error(err):
    print("[error]", err)

socket = orderupdate.OrderUpdate(
    client=nubra,
    on_order_update=on_order_update,
    on_trade_update=on_trade_update,
    on_connect=on_connect,
    on_close=on_close,
    on_error=on_error,
)

socket.connect("V2")
socket.keep_running()

Running In A Background Thread

import threading

def run_socket():
    socket.connect("V2")
    socket.keep_running()

thread = threading.Thread(target=run_socket, daemon=True)
thread.start()

Callback Contract

Callback Payload Meaning
on_connect(msg) str connection confirmation message
on_close(reason) str close reason
on_error(err) str socket or callback error
on_order_update(msg) ExecutionInfoWrapper non-fill order or basket execution update
on_trade_update(msg) ExecutionInfoWrapper fill update

How The Stream Is Classified

In V2, the SDK routes updates based on trade_qty:

  • if trade_qty is present, the event goes to on_trade_update
  • if trade_qty is absent, the event goes to on_order_update

For non-flexi orders, the SDK checks msg.order_params.trade_qty. For flexi basket events, the SDK checks the basket-level nested order params inside basket_params.order_params.

Response Contract

Field Type Meaning
order_id int order identifier when the update is order-specific
basket_id int basket identifier for flexi basket updates
response_type str event type such as accepted, triggered, or filled
delivery_type str delivery type such as CNC or intraday
execution_type str execution mode such as regular, stoploss, or flexi
side str buy or sell side
price_type str price style such as limit
qty int requested quantity in the update
execution_status str execution state such as open, triggered, or filled
last_mdified_time int last update timestamp from the SDK field name
creation_time int creation timestamp
display_name str display name of the instrument or basket context
order_params OrderParam nested order-level execution data
basket_params BasktParams nested basket-level execution data for flexi updates
ltp int latest traded price field when present
update_msg str exchange or backend update message
exchange str exchange field when present
is_sor bool smart order routing flag when present
tag str order or basket tag
request_type str request type such as new, modify, or cancel

Response Meaning

Important nested order fields include:

Field Meaning
order_params.ref_id instrument reference ID
order_params.order_price requested order price
order_params.avg_fill_price average fill price when filled
order_params.filled_qty filled quantity
order_params.trade_qty trade quantity used by the SDK to identify fill events
order_params.trade_price trade price when a fill occurs
order_params.exchange_order_id exchange-assigned order ID
order_params.validity_type validity style such as day or IOC
order_params.lot_size lot size when available
order_params.option_type option type for derivative contracts
order_params.strike_price strike price for option contracts
order_params.algo_params.trigger_price stoploss trigger price when applicable

Example Event Patterns

Order Update

Use on_order_update for non-fill state transitions such as:

  • order accepted
  • order modified
  • order cancelled
  • order triggered

Trade Update

Use on_trade_update for fill events where execution details are available through:

  • order_params.trade_qty
  • order_params.trade_price
  • order_params.avg_fill_price
  • order_params.filled_qty

Important Rules

Important Rules

  • This is a realtime streaming feed, not a snapshot API.
  • Call socket.connect("V2") to use the documented V2 callback shape on this page.
  • The SDK field name is currently last_mdified_time, not last_modified.
  • Price fields such as order_price, trade_price, avg_fill_price, and ltp are typically returned in exchange-native integer units such as paise for NSE instruments.
  • Keep the process alive with keep_running() or your own long-lived thread or event-management flow.
  • Use Get Orders when you need a fetched snapshot of current order state instead of a live stream.
  1. Get Orders
  2. Place Order
  3. Modify Order
  4. Cancel Order
NEO Assistant