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
type
enum<string> 
required
Allowed value:
CREATE_ORDER
order
object (CreateOrder) 
required
instrument_code
string 
required
The id of the market to create the order on. Use the /instruments endpoint to get the ids of ACTIVE markets to trade on
type
enum<string> 
required
The type of order you wish to create
Allowed value:
LIMIT
side
enum<string> 
required
BUY or SELL
Allowed values:
BUYSELL
amount
string 
required
The amount of currency for this order
price
string 
required
The price at which the order is set to execute
client_id
string <uuid>
optional
Unique client identifier for the order. It is your responsibility for the uniqueness of the client_id, if you create multiple orders with the same client_id, any subsequent operation performed using this client_id will only apply to the latest
time_in_force
enum<string> 
optional
Defines the duration and conditions under which an order is considered valid in the market. Defaults to GOOD_TILL_CANCELLED
Allowed values:
GOOD_TILL_CANCELLEDIMMEDIATE_OR_CANCELLEDFILL_OR_KILLPOST_ONLY
reserve_price
string 
optional
Used for MOVE orders and is the max we can move to

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
type
enum<string> 
required
Allowed value:
MOVE_ORDER
order_id
string <uuid>
optional
Required if client_id not provided. The order_id of the order to move.
client_id
string <uuid>
optional
Required if order_id not provided. The client_id of the order to move.
instrument_code
string 
required
The instrument code of the order to move
price
string 
required
The price to move the order to.

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
channel_name
enum<string> 
required
Allowed value:
TRADING
type
enum<string> 
deprecated
This field is deprecated and will be removed soon, please use the event and status fields.
Allowed value:
DONE
event
enum<string> 
required
Allowed value:
ORDER
status
enum<string> 
required
Allowed value:
MOVED
instrument_code
string 
required
The instrument code of the order that has been moved.
client_id
string 
required
The order_id of the order that has been moved.
order_id
string 
required
The client_id of the order that has been moved.
order_book_sequence
integer 
required
The order book sequence number.
side
string 
required
BUY or SELL
price
string 
required
The new price of the moved order.
amount
string 
required
The amount for the order.
remaining
string 
required
The remaining amount of the order in the order book.
bals
array[object (TradingBalance) {2}] 
required
Available balances for the currencies concerned with this market.
c
string 
required
Currency code of the balance
a
string 
required
Amount of the balance
lckd_bals
array[object (TradingBalance) {2}] 
required
Locked balances for the currencies concerned with this market.
c
string 
required
Currency code of the balance
a
string 
required
Amount of the balance
time
number 
required
Nanosecond timestamp the move order was accepted.

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
error
enum<string> 
required
The reason the request was rejected
Allowed values:
PRICE_PRECISION_FIELD_ERRORAMOUNT_PRECISION_FIELD_ERRORCLIENT_ID_ERRORORDER_ID_ERRORTIME_IN_FORCE_ERRORORDER_TYPE_NOT_SUPPORTED_ERRORPAIR_ERRORUNSUPPORTED_COMMANDINVALID_FORMATPRICE_FORMAT_ERRORQUANTITY_FORMAT_ERRORMAX_OPEN_ORDERS_EXCEEDEDORDER_NOT_FOUNDMAX_ORDER_SIZE_EXCEEDEDMIN_NOTIONAL_ERRORTYPE_FIELD_NOT_FIRSTMIN_PRICE_EXCEEDED_ERRORMAX_PRICE_EXCEEDED_ERRORSUSPENDED_PAIRPRICE_OUT_OF_COLLAR_ERRORMAX_ORDER_VOLUME_ERRORMAX_ORDER_VALUE_ERRORONLY_POST_ONLY_ALLOWED_ERROR
payload
object 
required
The payload sent which resulted in the error.
Previous
Order Fully Filled
Next
Balance Adjustment
Built with