order.cancel
Hủy lệnh hiện có. Xác định lệnh cần hủy qua orderId HOẶC clientRequestId (bắt buộc truyền
đúng một trong hai). Cùng luồng ack nhanh PD như order.place. Yêu cầu chữ ký signature.
Scope bắt buộc: tradingws:order:delete.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Bắt buộc truyền đúng một trong hai trường `orderId`/`clientRequestId` để xác định lệnh cần hủy.
Định danh hủy lệnh do client tạo ra. Khi để trống, hệ thống tự sinh.
Định danh lệnh gốc do client tạo ra khi đặt lệnh. Dùng XOR với `orderId`.
Định danh lệnh gốc sinh bởi hệ thống SSI. Dùng XOR với `clientRequestId`.
Số tài khoản giao dịch.
Định danh thiết bị gửi yêu cầu hủy lệnh.
Thông tin trình duyệt/ứng dụng gửi yêu cầu.
Chữ ký RSA+SHA256 (base64). Bắt buộc.
Response Body
application/json
application/json
Sample Request
wscat -c wss://api.ssi.com.vn/ws/v3/trading -x '{
"id": "req-0003",
"method": "order.cancel",
"params": {
"orderId": "ORD123456",
"accountNo": "0901351",
"deviceId": "MAC-AABBCCDDEEFF"
},
"signature": "base64(RSA-SHA256(...))",
"timestamp": 1755000002000
}'Sample Response
{
"id": "req-0003",
"method": "order.cancel",
"status": 200,
"result": {
"clientRequestId": "req-0001",
"orderId": "ORD123456",
"orderStatus": "PD",
"clientCancelId": "req-0003"
},
"rateLimit": {
"limit": 50,
"remaining": 45,
"resetMs": 860
}
}order.amendWS
Sửa lệnh hiện có. Xác định lệnh cần sửa qua `orderId` HOẶC `clientRequestId` (bắt buộc truyền đúng một trong hai — truyền cả hai hoặc không truyền gì đều bị từ chối). Cùng luồng ack nhanh `PD` như `order.place`. Yêu cầu chữ ký `signature`. Scope bắt buộc: `tradingws:order:put`.
order.batchNewWS
Đặt nhiều lệnh mới trong một message (Batch Order). Mỗi lệnh trong `params.orders` có cấu trúc và quy tắc như `order.place`. **Quy tắc chung** - Tối đa **50 lệnh** mỗi batch. Các lệnh có thể thuộc nhiều tài khoản, nhưng tất cả tài khoản phải nằm trong danh sách tài khoản được cấp quyền cho API Key. - Validation theo cơ chế **all-or-nothing**: nếu bất kỳ lệnh nào không hợp lệ, toàn bộ batch bị từ chối và không có lệnh nào được gửi đi. - **Chống replay**: `batchRequestTime` (epoch milliseconds, UTC) phải lệch không quá **30 giây** so với thời gian máy chủ. - **Idempotency**: `batchRequestId` phải duy nhất theo từng API Key, từng loại thao tác (đặt/hủy) trong ngày; gửi lại cùng `batchRequestId` bị từ chối là request trùng lặp. - Chữ ký `signature` (RSA+SHA256) được tính trên **toàn bộ `params`**, tức cả `batchRequestId`, `batchRequestTime` và `orders`. **Phản hồi:** hệ thống trả về **một ack duy nhất** cho cả batch, trong đó mỗi lệnh có `orderStatus: "PD"` — đây chưa phải kết quả khớp lệnh. Kết quả thật của từng lệnh (khớp/bị từ chối/đã hủy) được gửi riêng qua kênh thông báo `order.{accountNo}` (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), nên client **bắt buộc phải đăng ký nhận thông báo** cho các tài khoản liên quan. Khác với REST, ack của WebSocket không chứa `orderId` và không phản ánh việc từng lệnh có bị từ chối ở bước xử lý nghiệp vụ hay không. Scope bắt buộc: `tradingws:order:post`.