v1

latestOpenAPI 3.0.32026-07-2613529376.3 KB
Collateral Trading

Create collateral OCO order

The endpoint creates a collateral OCO (one-cancels-the-other) order using collateral balance. An OCO order combines a limit order (take-profit leg) and a stop-limit order (stop-loss leg) into a single conditional group. When one leg executes, the system cancels the other automatically.

<Warning> Rate limit: 10000 requests/10 sec. </Warning> <Accordion title="Error Codes"> - `30` - default validation error code. Also returned when `reduceOnly=true` is combined with `stopLoss` or `takeProfit` - `31` - market validation failed - `32` - amount validation failed - `33` - price validation failed - `36` - clientOrderId validation failed - `10` - insufficient balance to place the order - `111` - resulting position would exceed the market maximum - `112` - pending orders value would exceed the allowed maximum - `113` - position side cannot be changed while open positions or orders exist - `114` - hedge mode position side does not match (sent `BOTH` or omitted `positionSide` in hedge mode, or sent `LONG`/`SHORT` in one-way mode) - `115` - order would open a position in the opposite direction (one-way mode) - `116` - reduce-only validation failed (no position exists or order side matches position direction) </Accordion>
post/api/v4/order/collateral/oco

Request body

marketstring required

Available margin market. Example: BTC_USDT

side'buy' | 'sell' required

Order direction. Use buy to open or increase a long position and sell to open or increase a short position.

amountstring required

Amount of stock currency for both legs of the OCO order. Minimum and step values are market-dependent — query the market info endpoint for constraints.

pricestring required

Limit order price in money currency for the take-profit leg.

activation_pricestring required

Trigger price in money currency for the stop-loss leg. The stop-limit order activates when the market price reaches the specified value.

stop_limit_pricestring required

Execution price in money currency for the stop-loss leg. After activation, the stop-loss leg places a limit order at the specified price.

clientOrderIdstring

Custom client order identifier. Uniqueness is enforced only among the account's open (pending) orders on the same market — once a previous order is filled or canceled, the same identifier can be reused, including on the same market. Contains only letters, numbers, dashes, dots, or underscores.

reduceOnlyboolean

When true, both legs of the OCO order can only reduce or close an existing position — neither leg can increase the position or open a new one. If the order amount exceeds the current position size, the system reduces the order to match — the response returns the adjusted amount. The API returns error code 116 if no open position exists or the order side matches the position direction. See reduce-only.

positionSide'LONG' | 'SHORT' | 'BOTH'

Position direction. Optional at the request layer but functionally required when hedge mode is enabled. See positionSide. Both legs of the OCO inherit the value.

  • One-way mode (default account mode): the field is ignored. Orders always use BOTH, and the response returns positionSide: "BOTH" on each leg whether the field is sent or omitted.
  • Hedge mode: the field MUST be LONG or SHORT. Sending BOTH, omitting the field, or sending a value that does not match the account's mode causes the trade service to reject the order with error code 114 (Hedge mode position side does not match).
stp'no' | 'cb' | 'cn' | 'co'

Self-trade prevention mode. The value applies to both legs of the OCO order. Allowed values: no (self-trades allowed), cb (cancel both the new and the existing order), cn (cancel the new order, keep the existing), co (cancel the existing order, place the new one). Default: no.

Legacy values cancel_both, cancel_new, cancel_old are deprecated: the API accepts the legacy values with identical behavior until a deprecation deadline is announced, then rejects the legacy values. Responses always return the abbreviated form, regardless of which variant the request used.

See Self-Trade Prevention.

requeststring required
nonceinteger required

Example request

{
  "market": "BTC_USDT",
  "side": "buy",
  "amount": "0.001",
  "price": "40000",
  "activation_price": "41000",
  "stop_limit_price": "42000",
  "clientOrderId": "order1987111",
  "positionSide": "LONG",
  "stp": "no",
  "request": "{{request}}",
  "nonce": 1594297865000
}

Response

Successful response - OCO order created

idinteger

OCO order identifier

reduceOnlyboolean

Reduce-only flag

Example response

{
  "id": 117703764513,
  "stop_loss": {
    "orderId": 117703764514,
    "market": "BTC_USDT",
    "side": "buy",
    "type": "stop limit",
    "timestamp": 1594605801.49815,
    "dealMoney": "0",
    "dealStock": "0",
    "amount": "2.241379",
    "takerFee": "0.001",
    "makerFee": "0.001",
    "left": "2.241379",
    "dealFee": "0",
    "mtime": 1662478154.941582,
    "price": "19928.79",
    "activation_price": "29928.79",
    "activation_condition": "gte",
    "status": "FILLED",
    "stp": "no",
    "positionSide": "LONG"
  },
  "take_profit": {
    "orderId": 117703764515,
    "market": "BTC_USDT",
    "side": "buy",
    "type": "limit",
    "timestamp": 1662478154.941582,
    "dealMoney": "0",
    "dealStock": "0",
    "amount": "0.635709",
    "takerFee": "0.001",
    "makerFee": "0.001",
    "left": "0.635709",
    "dealFee": "0",
    "mtime": 1662478154.941582,
    "price": "9928.79",
    "status": "FILLED",
    "stp": "no",
    "positionSide": "LONG"
  }
}