WebSocket API

subscribe/unsubscribe

Đăng ký/hủy đăng ký nhận thông báo order/portfolio trên cùng kết nối — bắt buộc để nhận trạng thái lệnh thật sau khi order.place/order.amend/order.cancel đã phản hồi PD (xem mục "Đặt/sửa/hủy lệnh: xác nhận nhanh, kết quả đến sau" ở đầu tài liệu). Message này không cần chữ ký và không mang id.

API này chỉ hỗ trợ channel TRADING, gồm 2 loại topic:

  • order.{accountNo} — thông báo khớp lệnh, khớp một phần.
  • portfolio.{accountNo} — thông báo thay đổi tài sản/danh mục, chỉ áp dụng cho tài khoản phái sinh (đuôi 8).

Cấu trúc dữ liệu thông báo giống với channel TRADING của FastConnect WebSocket API (dữ liệu thị trường) — xem chi tiết field tại Sub/Unsub Trading Data.

Lưu ý: mỗi topic phải chỉ định accountNo cụ thể — không hỗ trợ wildcard *, và tài khoản đó phải thuộc quyền sở hữu của API Key đang dùng (không thể đăng ký nhận dữ liệu của tài khoản khách hàng khác).

Subscribe sample:

{ "method": "SUBSCRIBE", "channel": "TRADING", "topics": ["order.0901351", "portfolio.1231996"] }

Ack:

{ "method": "SUBSCRIBE", "channel": "TRADING", "status": "ok", "message": "Subscribed to 2 topic(s)" }

Nếu status: "error", message mô tả lý do (topic sai cú pháp, thiếu quyền, hoặc tài khoản không thuộc quyền sở hữu).

Ví dụ thông báo (order.{accountNo}):

{ "channel": "TRADING", "topic": "order.0901351", "data": { "eventType": "orderEvent", "clientRequestId": "req-0001", "orderId": "ORD123456", "orderStatus": "FF", "...": "..." } }

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

bodyobjectrequired

Message client gửi để subscribe/unsubscribe hoặc ping/pong kiểm tra kết nối. Không có trường `id`.

methodstringrequired

Hành động của request. Không phân biệt hoa thường.

channelstringoptional

Kênh dữ liệu cần đăng ký. Chỉ `TRADING` được hỗ trợ cho SUBSCRIBE/UNSUBSCRIBE (bỏ qua với PING_PONG/PING_ONLY).

topicsarrayoptional

Danh sách topic cần đăng ký/hủy đăng ký, cú pháp `{type}.{accountNo}` với `type` ∈ `order, portfolio`. Wildcard `*` cho accountNo **không được hỗ trợ** (khác với FastConnect WebSocket API) — mỗi topic phải chỉ định chính xác một `accountNo` thuộc quyền sở hữu của API Key. Rỗng khi UNSUBSCRIBE nghĩa là hủy toàn bộ topic đang subscribe.

topics[]stringrequired

Response Body

application/json

Sample Request

wscat -c wss://api.ssi.com.vn/ws/v3/trading -x '{
  "method": "SUBSCRIBE",
  "channel": "TRADING",
  "topics": [
    "order.0901351",
    "portfolio.1231996"
  ]
}'

Sample Response

{
  "method": "SUBSCRIBE",
  "channel": "TRADING",
  "status": "ok",
  "message": "Subscribed to 2 topic(s)"
}