One Trading API
REST APIWebSocket API
REST APIWebSocket API
  1. Trading
  • Introduction
  • Authenticate
  • Subscribe
  • Ping / Pong
  • Trading
    • Introduction
    • Dead Man Switch (Auto Cancellation)
    • Create Order
    • Cancel All Orders
    • Cancel Order by Client ID
    • Cancel Order by Order ID
    • Margin Update
    • Settlement
    • Funding Payment
    • Order Booked
    • Order Rejected
    • Order Closed
    • Trade Executed
    • Order Fully Filled
    • Move Order
    • Balance Adjustment
  • Orderbook
    • Introduction
    • Orderbook Snapshot
    • Orderbook Update
  • Price Ticks
    • Introduction
    • Price Tick
  • Book Ticker
    • Introduction
    • Book Tick
  1. Trading

Move Order

You must be authenticated and subscribed to the TRADING channel in order to send trading messages.
The MOVE_ORDER message allows you to reposition an existing limit order within the order book without requiring a full cancel and replace sequence. This offers efficiency and reduces the risk of missing market opportunities. Key advantages include requiring only a single network packet compared to a cancel/replace.
Note
You can currently only adjust the price in a MOVE order, not the amount.

Key Considerations#

Risk Management#

To prevent unintended price movements, the optional reserve_price parameter sets the maximum price the order can be moved to. If the requested price exceeds this limit, the move will fail with a MATCHING_MOVE_FAILED_PRICE_OVER_RISK_LIMIT error. Specifying reserve_price will lock in that amount.

Identification#

Orders can be moved using either the order_id (system-generated unique identifier) or the client_id (user-defined identifier).

Futures markets#

The reserve_price parameter is redundant and has no effect when moving orders for perpetual instruments.

Create Order Request with reserve price#

{
  "type": "CREATE_ORDER",
  "order": {
    "instrument_code": "BTC_EUR",
    "type": "LIMIT",
    "side": "BUY",
    "amount": "0.01",
    "price": "85000",
    "time_in_force": "GOOD_TILL_CANCELLED",
    "reserve_price": "90000" // this is optional for move orders & max we can move to
  }
}
CreateOrderRequest

Move order by order id request#

{
  "type": "MOVE_ORDER",
  "order": {
    "order_id": "ac233037-7483-409e-942f-8f4bb38f373c",
    "instrument_code": "BTC_EUR",
    "price": "85100"
  }
}

Move order by client id request#

{
  "type": "MOVE_ORDER",
  "order": {
    "client_id": "1daf8283-48c4-437b-90d7-7510bda55643",
    "instrument_code": "BTC_EUR",
    "price": "85100"
  }
}
MoveOrderRequest

Move order response#

Success#

{
    "channel_name": "TRADING",
    "type": "DONE",
    "event": "ORDER",
    "status": "MOVED",
    "instrument_code": "SOL_EUR",
    "client_id": "436afcec-7d88-4e8d-ac45-3439e3aed490",
    "order_id": "a9ed7098-4f53-455a-9dc9-70444e8950a1",
    "order_book_sequence": 71089343164,
    "side": "BUY",
    "price": "49",
    "amount": "1",
    "remaining": "1",
    "bals": [
        {
            "c": "SOL",
            "a": "10000000"
        },
        {
            "c": "EUR",
            "a": "1009950"
        }
    ],
    "lckd_bals": [
        {
            "c": "SOL",
            "a": "0"
        },
        {
            "c": "EUR",
            "a": "100"
        }
    ],
    "time": 1743892870022076533
}
MoveOrderSuccessResponse

Error#

Move orders are validated in the same way a Create Order request is, so errors will be the same format.
{
    "error": "MIN_PRICE_EXCEEDED_ERROR",
    "payload": {
        "type": "MOVE_ORDER",
        "order": {
            "order_id": "a9ed7098-4f53-455a-9dc9-70444e8950a1",
            "instrument_code": "SOL_EUR"
        }
    }
}
OrderErrorResponse

Previous
Order Fully Filled
Next
Balance Adjustment
Built with