==== Order Routing ====
The WebSocket API provides real-time order routing, allowing clients to submit, revise, and pull orders. [[developers:websocket#message_structure_overview|All order-related operations are sent within a **ClientMessage** envelope and responses are received within a **ServerMessage** envelope.]]
This section covers:
* Submitting Orders
* Revising Orders
* Pulling Orders
* Handling Order Updates
A **C# helper tool** is available to assist developers in constructing order messages. **[Repository Placeholder - Add Link]**
=== Submitting an Order ===
To submit an order, clients must send an **OrderSubmit** message. This includes key details such as the **account ID, market ID, order type, price, and volume**.
Example **OrderSubmit** message:
message ClientMessage {
oneof payload {
OrderSubmit order_submit = X;
}
}
message OrderSubmit {
string user_id = 1;
string account_id = 2;
string market_id = 3;
repeated Order orders = 4;
message Order {
BuySell buy_sell = 1;
PriceType price_type = 2;
TimeType time_type = 3;
int32 volume = 4;
optional Price limit_price = 5;
}
}
The **OrderSubmit** message allows submitting multiple orders at once, each with its own **BuySell**, **PriceType**, and **TimeType**.
=== Revising an Order ===
To revise an existing order, clients must send an **OrderRevise** message. This allows modifying key parameters such as **price, volume, and time type**, but the market and buy/sell direction cannot be changed.
Example **OrderRevise** message:
message ClientMessage {
oneof payload {
OrderRevise order_revise = X;
}
}
message OrderRevise {
string order_id = 1;
optional Price new_limit_price = 2;
optional int32 new_volume = 3;
optional TimeType new_time_type = 4;
}
Only fields that need to be changed should be included.
=== Pulling (Cancelling) an Order ===
To cancel an order, clients must send an **OrderPull** message with the **order ID**.
Example **OrderPull** message:
message ClientMessage {
oneof payload {
OrderPull order_pull = X;
}
}
message OrderPull {
string order_id = 1;
}
Once an order is successfully canceled, an **OrderUpdate** message will be sent in the **ServerMessage**.
=== Handling Order Updates ===
All order state changes, including new orders, fills, revisions, and cancellations, are communicated via the **OrderUpdate** message.
Example **OrderUpdate** message:
message ServerMessage {
oneof payload {
OrderUpdate order_update = X;
}
}
message OrderUpdate {
string order_id = 1;
OrderStatus status = 2;
optional Price filled_price = 3;
optional int32 filled_volume = 4;
}
Developers should listen for **OrderUpdate** messages to track order execution status.
This structure ensures a **consistent, efficient**, and **real-time** approach to order routing.