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