7. WebSocket API

Đặt/sửa/hủy lệnh thuần qua WebSocket — trạng thái, quyền, và khác biệt so với WebSocket thông thường.

WebSocket API khác gì so với WebSocket thông thường ở mục 6?

WebSocket (mục 6) là kênh chỉ nhận dữ liệu (push-only). WebSocket API cho phép gửi lệnh (đặt/sửa/hủy lệnh thường, đặt/hủy hàng loạt lệnh, lệnh điều kiện FCO, và truy vấn tài khoản) trực tiếp qua WebSocket, không cần gọi REST — độ trễ thấp hơn nhiều vì không tốn chi phí handshake HTTP cho mỗi lệnh.

WebSocket API được phát hành từ phiên bản nào?

WebSocket API được phát hành chính thức từ phiên bản v3.3.2 (20/10/2026), bao gồm cả Batch Order qua WebSocket (order.batchNew, order.batchCancel). Chi tiết xem tại Lịch sử phiên bản.

Batch Order là gì và khác gì so với gọi order.place nhiều lần?

Batch Order cho phép đặt hoặc hủy tối đa 50 lệnh trong một lần gọi — qua REST (POST/DELETE /api/v3/trading/order/batch) hoặc WebSocket API (order.batchNew, order.batchCancel). Toàn bộ batch được kiểm tra hợp lệ trước khi xử lý (có lỗi ở bất kỳ lệnh nào thì cả batch bị từ chối), có chống gửi lại (batchRequestTime nằm trong cửa sổ 30 giây) và chống trùng theo batchRequestId (gửi lại cùng batchRequestId trong ngày sẽ bị từ chối). REST trả kết quả từng lệnh ngay trong response; WebSocket API chỉ trả một ack với các lệnh ở trạng thái PD, kết quả thật được gửi qua kênh order.{accountNo}.

Vì sao gọi order.place qua WebSocket API nhận được phản hồi ngay nhưng lại chưa phải kết quả khớp lệnh?

order.place/order.amend/order.cancel (và order.batchNew/order.batchCancel) phản hồi ngay (orderStatus: "PD") để xác nhận hệ thống đã nhận yêu cầu hợp lệ — đây chưa phải kết quả khớp lệnh thật. Kết quả thật (khớp/bị từ chối/đã hủy) được gửi tiếp qua kênh thông báo order.{accountNo}, nên bạn bắt buộc phải subscribe kênh này để biết lệnh có thành công hay không.

Scope/quyền của WebSocket API có dùng chung với REST Trading API không?

Không — WebSocket API yêu cầu scope riêng với prefix tradingws:*:*, hoàn toàn tách biệt với scope trading:*:* của REST Trading API. API Key chỉ có scope REST sẽ bị từ chối khi kết nối WebSocket API; cần yêu cầu cấp thêm quyền riêng.