Skip to main content

WS Trade

WS Trade Order​

Submit orders via private WebSocket connection.

Prerequisites​

A valid listenKey must be obtained and the private WebSocket connection must be established before sending trade requests.


Batch Orders​

Submit up to 5 orders in a single request.

Request Format​

{"action":"batch-orders","param":{"id":"1002","args":[{...},{...}]}}
FieldRequiredTypeDescription
actionYesstringFixed as "batch-orders"
paramYesobjectBatch order parameters
param.idYesstringClient request ID, used to match the response
param.argsYesarrayOrder arguments array, 1 to 5 objects

args[N] Object Fields​

Field NameRequiredTypeDescription
instIdYesstringInstrument ID, e.g. "BTC-USDT-SWAP", "BTC-USDT"
tdModeYesstringTrade mode: cash, cross, isolated
ccyNostringMargin currency
sideYesstringOrder side: buy, sell
posSideNostringPosition side: long, short. Required for SWAP
mrgPositionNostringMargin position: merge, split. Required for SWAP
closePosIdNostringPosition ID for split-margin close
ordTypeYesstringOrder type: market, limit, post_only, ioc
szYesstringOrder quantity
pxNostringOrder price. Required for limit, post_only
tgtCcyNostringMarket order quantity type: base_ccy, quote_ccy. Spot only
tpTriggerPxNostringTake profit trigger price. Spot only
slTriggerPxNostringStop loss trigger price. Spot only

Request Example​

{
"action": "batch-orders",
"param": {
"id": "1002",
"args": [
{
"instId": "BTC-USDT-SWAP",
"tdMode": "cross",
"side": "buy",
"ordType": "limit",
"sz": "1",
"px": "65000",
"posSide": "long",
"mrgPosition": "merge"
},
{
"instId": "ETH-USDT-SWAP",
"tdMode": "cross",
"side": "sell",
"ordType": "market",
"sz": "2",
"posSide": "short",
"mrgPosition": "merge"
}
]
}
}

Response Format​

{"id":"1002","action":"batch-orders","code":"0","msg":"","data":[{"ordId":"1000587866646229","sCode":"0","sMsg":""},{"ordId":"","sCode":"50012","sMsg":"order failed: InsufficientMoney"}]}

Response Parameters​

Field NameTypeDescription
idstringClient request ID, matching the request
actionstringFixed as "batch-orders"
codestringResult code, "0" means all items processed
msgstringResult message
dataarrayPer-order results, in the same order as args
data[].ordIdstringOrder ID, empty on failure
data[].sCodestringPer-item result code, "0" means success
data[].sMsgstringPer-item result message

Error Codes​

CodeDescription
0Success
50002Internal error
50003Data validation failed
50005Invalid parameter
50006Missing parameter
50008Invalid configuration
50011Unsupported
50012Operation failed
50018Invalid request

Batch Order Error Handling​

ScenarioCodeMessage
All orders placed0
param is not valid JSON50018Invalid request json
args empty or > 550005args length must be between 1 and 5
Single item: invalid arg50003Invalid arg (per-item sCode)
Single item: missing posSide/mrgPosition50006posSide/mrgPosition is required (per-item sCode)
Single item: invalid instId50005invalid instId (per-item sCode)
Single item: unsupported50011unsupported (per-item sCode)
Single item: backend failure50012Order failed (per-item sCode)

Notes​

  • Order status updates will be pushed via the existing PushOrder notification (action=PushOrder, table=Order)
  • Trade results will be pushed via the existing PushTrade notification (action=PushTrade, table=Trade)
  • This feature does not add new push channels