Trading
Place orders, modify price triggers, execute trades and manage positions across multiple trading instruments
Orders
Place SPOT order
POST /frontoffice/api/v3/orders
Summary
Use this method to create and submit a new order for SPOT markets.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
Order creation data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: spot.btc_usdt.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.timeInForce string
The time-in-force policy for the order, controlling its lifetime.
Possible values:
GtcIocFokGtdDayRetry— Market orders only
order.requestedAmount decimal string
The quantity of the base asset to buy or sell.
For Market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.cancellationDate string | nullable
For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
Required if timeInForce is set to Gtd; ignored for other time-in-force values.
order.comment string | nullable
A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed.
POST /frontoffice/api/v3/orders HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json
{
"order": {
"marketId": "spot.btc_usdt",
"side": "Buy",
"orderType": "Limit",
"timeInForce": "Gtc",
"requestedAmount": 0.02,
"requestedPrice": 115193.35,
"comment": "Strategy A"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The created order.
order.marketId string
The market identifier, same as in the request.
order.marketDisplayName string
The market ticker.
order.orderId string
The unique identifier of the order assigned by the system.
order.orderType string
The order type, same as in the request.
order.side string
The order side, same as in the request.
order.status string
The current order status.
Possible values:
StartedPendingWorkingCompletedCancelledExpiredRejected
order.source string
The source of the order.
Possible values:
Manual— the order was created manually via UI or API.
order.timeInForce string
The time-in-force policy, same as in the request.
order.commission decimal string
The fee charged for the execution of the order, expressed in the quote asset.
Right after the order is created commission is 0.
order.requestedAmount decimal string
The quantity of the base asset to buy or sell, same as in the request.
order.remainingAmount decimal string
The amount of the base asset that remains unfilled.
order.requestedPrice decimal string | nullable
The limit price for Limit orders, same as in the request; null for market orders.
order.executionPrice decimal string
The volume-weighted average price at which the order was executed.
order.createdAt string
The timestamp when the order was created, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.updatedAt string
The timestamp of the most recent update to the order, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.rejectDetails string
The reason and details for order rejection when status is Rejected. Currently unused and not populated.
order.cancellationDate string | nullable
The timestamp when the order was cancelled or expired, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ; null if not cancelled.
order.fillFactor decimal string
The ratio of the filled quantity to the originally requested quantity (filledAmount / requestedAmount).
{
"order": {
"marketId": "spot.btc_usdt",
"marketDisplayName": "SPOT BTC/USDT",
"orderId": "01K1ZTB4DB0S6Y2NH81S781BQX",
"orderType": "Limit",
"side": "Buy",
"status": "Pending",
"source": "Manual",
"timeInForce": "Gtc",
"commission": "0",
"requestedAmount": "0.02",
"remainingAmount": "0.02",
"requestedPrice": "115193.35",
"executionPrice": "0",
"createdAt": "2025-08-06T13:50:13.931Z",
"updatedAt": "2025-08-06T13:50:13.9325008Z",
"rejectDetails": "",
"cancellationDate": null,
"fillFactor": "0"
}
}Place CFD order
POST /frontoffice/api/cfd/v4/orders
Summary
Use this method to create and submit a new order for CFD markets.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
Order creation data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: cfd.eth_eur.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.timeInForce string
The time-in-force policy for the order, controlling its lifetime.
Possible values:
GtcIocFokGtdDayRetry— Market orders only
order.requestedLotAmount decimal string
The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.cancellationDate string | nullable
For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
Required if timeInForce is set to Gtd; ignored for other time-in-force values.
order.leverage integer
The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin).
order.stopLoss object
The Stop loss settings.
order.stopLoss.price decimal string
The Stop loss price.
order.stopLoss.isTrailing boolean
Indicates if the Stop loss is Trailing.
order.takeProfit object
The Take profit settings.
order.takeProfit.price decimal string
The take profit price.
order.comment string | nullable
A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed.
POST /frontoffice/api/cfd/v4/orders HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json
{
"order": {
"marketId": "cfd.eth_eur",
"side": "Sell",
"orderType": "Limit",
"timeInForce": "Gtd",
"requestedLotAmount": 1,
"requestedPrice": 3280,
"leverage": 75,
"cancellationDate": "2025-08-10T00:00:00Z",
"stopLoss": {
"price": 3320,
"isTrailing": false
},
"takeProfit": {
"price": 3200
},
"comment": "Strategy A"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The created order.
order.orderId string
The unique identifier of the order assigned by the system.
order.status string
The current order status.
Possible values:
StartedPendingWorkingCompletedCancelledExpiredRejected
{
"order": {
"orderId": "01K2253Q9X3VTJ68PNWY40JC6Q",
"status": "Pending"
}
}Place PF order
POST /frontoffice/api/perpetual/v4/orders
Summary
Use this method to create and submit a new order for Perpetual markets.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
Order creation data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: perp.eth_eur.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.timeInForce string
The time-in-force policy for the order, controlling its lifetime.
Possible values:
GtcIocFokGtdDayRetry— Market orders only
order.requestedLotAmount decimal string
The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.cancellationDate string | nullable
For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
Required if timeInForce is set to Gtd; ignored for other time-in-force values.
order.leverage integer
The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin).
order.stopLoss object
The Stop loss settings.
order.stopLoss.price decimal string
The Stop loss price.
order.stopLoss.isTrailing boolean
Indicates if the Stop loss is Trailing.
order.takeProfit object
The Take profit settings.
order.takeProfit.price decimal string
The take profit price.
order.comment string | nullable
A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed.
POST /frontoffice/api/perpetual/v4/orders HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json
{
"order": {
"marketId": "perp.eth_usdt",
"side": "Buy",
"orderType": "Market",
"timeInForce": "Ioc",
"requestedLotAmount": 10,
"leverage": 159,
"comment": "Strategy A"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The created order.
order.orderId string
The unique identifier of the order assigned by the system.
order.status string
The current order status.
Possible values:
StartedPendingWorkingCompletedCancelledExpiredRejected
{
"order": {
"orderId": "01K228VN55N7WFZRG70M24T9J1",
"status": "Working"
}
}Cancel order
DELETE /frontoffice/api/v3/orders/{orderId}
Summary
Use this method to cancel an active order placed on SPOT, CFD, or Perpetual markets.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
orderId required
The order identifier to cancel.
DELETE /frontoffice/api/v3/orders/01K2PF9XS29WN4JZRHMCTTQYJB HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Accept: */*Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The canceled order.
order.marketId string
The market identifier, same as in the request.
order.marketDisplayName string
The market ticker.
order.orderId string
The unique identifier of the order assigned by the system.
order.orderType string
The order type, same as in the request.
order.side string
The order side, same as in the request.
order.status string
The current order status.
Possible values:
StartedPendingWorkingCompletedCancelledExpiredRejected
order.source string
The source of the order.
Possible values:
ManualStopOrderFixApiSystem
order.timeInForce string
The time-in-force policy, same as in the request.
order.commission decimal string
The fee charged for the execution of the order, expressed in the quote asset.
order.requestedAmount decimal string
The quantity of the base asset to buy or sell, same as in the request.
order.remainingAmount decimal string
The amount of the base asset that remains unfilled.
order.requestedPrice decimal string | nullable
The limit price for Limit orders, same as in the request; null for market orders.
order.executionPrice decimal string
The volume-weighted average price at which the order was executed.
order.createdAt string
The timestamp when the order was created, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.updatedAt string
The timestamp of the most recent update to the order, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.rejectDetails string
The reason and details for order rejection when status is Rejected. Currently unused and not populated.
order.cancellationDate string | nullable
The timestamp when the order was cancelled or expired, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ; null if not cancelled.
order.fillFactor decimal string
The ratio of the filled quantity to the originally requested quantity (filledAmount / requestedAmount).
{
"order": {
"marketId": "spot.eth_usdt",
"marketDisplayName": "SPOT ETH/USDT",
"orderId": "01K2PF9XS29WN4JZRHMCTTQYJB",
"orderType": "Limit",
"side": "Buy",
"status": "Cancelled",
"source": "Manual",
"timeInForce": "Gtc",
"commission": "0",
"requestedAmount": "0.1",
"remainingAmount": "0.1",
"requestedPrice": "4450",
"executionPrice": "0",
"createdAt": "2025-08-15T08:59:51.97Z",
"updatedAt": "2025-08-15T09:00:06.2791048Z",
"rejectDetails": "",
"cancellationDate": null,
"fillFactor": "0"
}
}Modify order
PATCH /frontoffice/api/v3/orders/{orderId}
Summary
Use this method to modify a resting (not yet fully executed) order placed on SPOT, CFD, or
Perpetual markets. The order keeps its orderId, its creation timestamp, and its place in your
order history — nothing is cancelled and no new order is created.
The market, side, and order type cannot be changed. To change them, cancel the order and place a new one.
If the order is already fully filled, cancelled, expired, or currently executing, the modification is rejected and the order is left exactly as it was.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
orderId required
The order identifier to modify.
Body
order object required
The new values to apply to the order.
order.requestedPrice decimal string required
The new limit price.
order.requestedAmount decimal string required
The new quantity of the base asset to buy or sell. If the order is already partially filled, this is the order's total requested amount, not the remaining amount — it must not be lower than what has already executed.
order.timeInForce string required
The new time-in-force policy.
Possible values: Gtc, Gtd, Day.
order.cancellationDate string | nullable
The new expiration date, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ. Required when
timeInForce is Gtd; ignored otherwise.
order.leverage integer | nullable
The new leverage. CFD and Perpetual markets only, and only while the order has zero executed volume. Omit to leave the current value unchanged.
order.takeProfit object | nullable
The new Take Profit trigger. CFD and Perpetual markets only, and only while the order has zero executed volume. Omit to leave the current value unchanged.
order.takeProfit.price decimal string required
order.stopLoss object | nullable
The new Stop Loss trigger. CFD and Perpetual markets only, and only while the order has zero executed volume. Omit to leave the current value unchanged.
order.stopLoss.price decimal string required
order.stopLoss.isTrailing boolean required
order.comment string | nullable
The new comment.
PATCH /frontoffice/api/v3/orders/01K2PF9XS29WN4JZRHMCTTQYJB HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json{
"order": {
"requestedPrice": "4400",
"requestedAmount": "0.15",
"timeInForce": "Gtc"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The modified order, under its unchanged orderId.
order.marketId string
The market identifier, same as before the modification.
order.marketDisplayName string
The market ticker.
order.orderId string
The order identifier — unchanged by the modification.
order.orderType string
The order type — unchanged by the modification.
order.side string
The order side — unchanged by the modification.
order.status string
The current order status.
Possible values:
StartedPendingWorkingCompletedCancelledExpiredRejected
order.source string
The source of the order.
Possible values:
ManualStopOrderFixApiSystem
order.timeInForce string
The order's time-in-force policy, reflecting the new value.
order.commission decimal string
The fee charged for the execution of the order, expressed in the quote asset.
order.requestedAmount decimal string
The order's total requested amount, reflecting the new value.
order.remainingAmount decimal string
The amount of the base asset that remains unfilled.
order.requestedPrice decimal string | nullable
The limit price, reflecting the new value; null for market orders.
order.executionPrice decimal string
The volume-weighted average price at which the order was executed.
order.createdAt string
The original timestamp when the order was created — unchanged by the modification.
order.updatedAt string
The timestamp of this modification, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.rejectDetails string
The reason and details for order rejection when status is Rejected. Currently unused and not
populated.
order.cancellationDate string | nullable
The timestamp when the order was cancelled or expired; null if not cancelled.
order.fillFactor decimal string
The ratio of the filled quantity to the currently requested quantity
(filledAmount / requestedAmount).
{
"order": {
"marketId": "spot.eth_usdt",
"marketDisplayName": "SPOT ETH/USDT",
"orderId": "01K2PF9XS29WN4JZRHMCTTQYJB",
"orderType": "Limit",
"side": "Buy",
"status": "Pending",
"source": "Manual",
"timeInForce": "Gtc",
"commission": "0",
"requestedAmount": "0.15",
"remainingAmount": "0.15",
"requestedPrice": "4400",
"executionPrice": "0",
"createdAt": "2025-08-15T08:59:51.97Z",
"updatedAt": "2025-08-15T09:14:22.4471048Z",
"rejectDetails": "",
"cancellationDate": null,
"fillFactor": "0"
}
}Get SPOT order data
POST /frontoffice/api/v3/order-data
Summary
Use this method to retrieve and validate order data for SPOT market orders before placing.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
The order data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: spot.btc_usdt.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.requestedBaseAmount decimal string | nullable
The requested amount in base asset units.
order.requestedQuoteAmount decimal string | nullable
The requested amount in quote asset units.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
POST /frontoffice/api/v3/order-data HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=3.0
Accept: */*
{
"order": {
"marketId": "spot.eth_usdt",
"side": "Buy",
"orderType": "Limit",
"requestedBaseAmount": 0.2,
"requestedPrice": 4600
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
baseAmount decimal string
The calculated base asset amount for the order.
quoteAmount decimal string
The calculated quote asset amount for the order.
commissionAmount decimal string
The estimated commission amount to be charged.
total decimal string
The total quote asset amount, including the estimated commission.
{
"order": {
"baseAmount": "0.2",
"quoteAmount": "920",
"commissionAmount": "9.2",
"total": "929.2"
}
}Get CFD order data
POST /frontoffice/api/cfd/v4/order-data
Summary
Use this method to retrieve and validate order data for CFD market orders before placing.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
The order data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: spot.btc_usdt.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.leverage integer
The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin).
order.requestedLotAmount decimal string
The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.takeProfit.triggerType string · enum | nullable
The trigger calculation type for Take profit.
Possible values:
PriceRatePointsPnl
order.takeProfit.triggerSize decimal string | nullable
The trigger value in selected units.
order.stopLoss.triggerType string · enum | nullable
The trigger calculation type for Stop loss.
Possible values:
PriceRatePointsPnl
order.stopLoss.triggerSize decimal string | nullable
The trigger value in selected units.
order.stopLoss.isTrailing boolean | nullable
If true, enables the Trailing behavior for Stop loss.
POST /frontoffice/api/cfd/v4/order-data HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"order": {
"takeProfit": {
"triggerSize": 15000,
"triggerType": "points"
},
"stopLoss": {
"triggerSize": "4020",
"triggerType": "price",
"isTrailing": false
},
"marketId": "cfd.eth_eur",
"side": "Sell",
"orderType": "Market",
"leverage": 135,
"requestedLotAmount": 1
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
requiredMarginInRAT decimal string
The required margin amount, in conversion to RAT.
quoteAmount decimal string
The calculated quote asset amount for the order.
commissionAmountInRAT decimal string
The estimated commission amount to be charged, in conversion to RAT.
marginLevel decimal string | nullable
The resulting margin level.
takeProfit.price decimal string
The calculated Take profit price, based on trigger settings.
takeProfit.rate decimal string
The calculated Take profit rate.
takeProfit.points integer · int64
The calculated take profit offset, in points.
takeProfit.pnl decimal string
The projected PnL at Take profit.
stopLoss.price decimal string
The calculated Stop loss price, based on trigger settings.
stopLoss.rate decimal string
The calculated Stop loss rate.
stopLoss.points integer · int64
The calculated Stop loss offset, in points.
stopLoss.pnl decimal string
The projected PnL at Stop loss.
{
"order": {
"requiredMarginInRAT": "34.4613643",
"quoteAmount": "4004.345",
"commissionAmountInRAT": "0",
"marginLevel": "5.3015",
"takeProfit": {
"price": "3989.345",
"rate": "0.0037",
"points": 15000,
"pnl": "17.42713545"
},
"stopLoss": {
"price": "4020",
"rate": "-0.0039",
"points": -15655,
"pnl": "-18.18812036"
}
}
}Get PF order data
POST /frontoffice/api/perpetual/v4/order-data
Summary
Use this method to retrieve and validate order data for Perpetual market orders before placing.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
The order data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: spot.btc_usdt.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.leverage integer
The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin).
order.requestedLotAmount decimal string
The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.takeProfit.triggerType string · enum | nullable
The trigger calculation type for Take profit.
Possible values:
PriceRatePointsPnl
order.takeProfit.triggerSize decimal string | nullable
The trigger value in selected units.
order.stopLoss.triggerType string · enum | nullable
The trigger calculation type for Stop loss.
Possible values:
PriceRatePointsPnl
order.stopLoss.triggerSize decimal string | nullable
The trigger value in selected units.
order.stopLoss.isTrailing boolean | nullable
If true, enables Trailing behavior for Stop loss.
POST /frontoffice/api/perpetual/v4/order-data HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"order": {
"takeProfit": {
"triggerSize": "0.01",
"triggerType": "rate"
},
"stopLoss": {
"triggerSize": "-100",
"triggerType": "pnl",
"isTrailing": false
},
"marketId": "perp.btc_usdt",
"side": "Buy",
"orderType": "Limit",
"leverage": 100,
"requestedLotAmount": 0.5,
"requestedPrice": 118450
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
requiredMarginInRAT decimal string
The required margin amount, in conversion to RAT.
quoteAmount decimal string
The calculated quote asset amount for the order.
commissionAmountInRAT decimal string
The estimated commission amount to be charged, in conversion to RAT.
marginLevel decimal string | nullable
The resulting margin level.
takeProfit.price decimal string
The calculated Take profit price, based on trigger settings.
takeProfit.rate decimal string
The calculated Take profit rate.
takeProfit.points integer · int64
The calculated take profit offset, in points.
takeProfit.pnl decimal string
The projected PnL at Take profit.
stopLoss.price decimal string
The calculated Stop loss price, based on trigger settings.
stopLoss.rate decimal string
The calculated Stop loss rate.
stopLoss.points integer · int64
The calculated Stop loss offset, in points.
stopLoss.pnl decimal string
The projected PnL at Stop loss.
{
"order": {
"requiredMarginInRAT": "592.25",
"quoteAmount": "59225",
"commissionAmountInRAT": "0",
"marginLevel": "0.3582",
"takeProfit": {
"price": "119634.5",
"rate": "0.01",
"points": 11845,
"pnl": "592.25"
},
"stopLoss": {
"price": "118250",
"rate": "-0.0016",
"points": -2000,
"pnl": "-100"
}
}
}Stop orders
Stop orders are accepted while the market is closed according to its trading calendar. The market's own status must still be Open — a Paused or Halted market rejects Stop orders too.
At submission the platform validates the requested and activation price scales, the amount scale, the market minimum amount, and the time in force: a Stop Market order requires Ioc or Fok, a Stop Limit order requires an explicit value. The stop price is additionally checked against the best bid and ask only when a price is available — while the market is closed there may be no top of the book to compare against, in which case the check is skipped.
The accepted order is stored with the standard WaitingForActivation status — no new status value was introduced — and is evaluated against the first available price when the session opens; if the market gapped past the stop price, it triggers at the open. An order accepted while no price was available first has its internal pricing finalised from the next incoming price, so its activation can take one extra price update.
No balance or margin is reserved at submission. The margin check runs at trigger time, and an order that fails it is cancelled with a failure reason rather than dropped. Cancel Stop order also works while the market is closed. Market and Limit orders are still rejected during non-trading hours.
Place SPOT Stop order
POST /frontoffice/api/v3/stop-orders
Summary
Use this method to create and submit a new Stop order for SPOT markets.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
Order creation data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: spot.btc_usdt.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.timeInForce string
The time-in-force policy for the order, controlling its lifetime.
Possible values:
GtcIocFokGtdDay
order.requestedAmount decimal string
The quantity of the base asset to buy or sell.
For Market orders, this represents the total base amount to fill; the executed amount may be lower if liquidity is insufficient.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
activationPrice decimal string | nullable
The trigger price that activates the Stop order.
order.cancellationDate string | nullable
For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
Required if timeInForce is set to Gtd; ignored for other time-in-force values.
order.comment string | nullable
A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed.
POST /frontoffice/api/v3/stop-orders HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"order": {
"marketId": "spot.btc_usdt",
"side": "Buy",
"orderType": "Market",
"activationPrice": 128000,
"requestedAmount": 0.01,
"timeInForce": "Ioc",
"comment": "Strategy A"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The created order.
order.marketId string
The market identifier, same as in the request.
order.marketDisplayName string
The market ticker.
order.orderId string
The unique identifier of the order assigned by the system.
order.orderType string
The order type, same as in the request.
order.side string
The order side, same as in the request.
order.requestedPrice decimal string | nullable
The limit price for Limit orders, same as in the request; null for market orders.
activationPrice decimal string | nullable
The trigger price that activates the Stop order, same as in the request.
order.requestedAmount decimal string
The quantity of the base asset to buy or sell, same as in the request.
order.timeInForce string
The time-in-force policy, same as in the request.
order.status string
The current order status.
Possible values:
WaitingForActivationActivatedRejected
order.createdAt string
The timestamp when the order was created, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.updatedAt string
The timestamp of the most recent update to the order, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.cancellationDate string | nullable
The timestamp when the order was cancelled or expired, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ; null if not cancelled.
order.comment string | nullable
The text note attached to the order, up to 100 characters.
{
"order": {
"marketId": "spot.btc_usdt",
"marketDisplayName": "SPOT BTC/USDT",
"orderId": "01K2MNC3BVR5WRTBEE9YWAS91K",
"orderType": "Market",
"side": "Buy",
"requestedPrice": "0",
"activationPrice": "128000",
"requestedAmount": "0.01",
"timeInForce": "Ioc",
"status": "WaitingForActivation",
"createdAt": "2025-08-14T16:07:25.8193038Z",
"updatedAt": "2025-08-14T16:07:25.8193044Z",
"cancellationDate": null,
"comment": null
}
}Place CFD Stop order
POST /frontoffice/api/cfd/v4/stop-orders
Summary
Use this method to create and submit a new Stop order for CFD markets.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
Order creation data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: cfd.eth_eur.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.timeInForce string
The time-in-force policy for the order, controlling its lifetime.
Possible values:
GtcIocFokGtdDay
order.requestedLotAmount decimal string
The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.activationPrice decimal string | nullable
The trigger price that activates the Stop order.
order.cancellationDate string | nullable
For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
Required if timeInForce is set to Gtd; ignored for other time-in-force values.
order.leverage integer
The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin).
order.stopLoss object
The Stop loss settings.
order.stopLoss.price decimal string
The Stop loss price.
order.stopLoss.isTrailing boolean
Indicates if the Stop loss is Trailing.
order.takeProfit object
The Take profit settings.
order.takeProfit.price decimal string
The take profit price.
order.comment string | nullable
A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed.
POST /frontoffice/api/cfd/v4/stop-orders HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"order": {
"marketId": "cfd.eth_eur",
"side": "Sell",
"orderType": "Limit",
"activationPrice": 3200,
"requestedLotAmount": 0.5,
"timeInForce": "Gtd",
"leverage": 76,
"requestedPrice": 3500,
"cancellationDate": "2025-08-18T00:00:00Z",
"stopLoss": {
"price": "3900",
"isTrailing": false
},
"takeProfit": {
"price": "3100"
},
"comment": "Strategy A"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The created order.
order.orderId string
The unique identifier of the order assigned by the system.
order.status string
The current order status.
Possible values:
WaitingForActivationActivatedRejected
{
"order": {
"orderId": "01K2MNRWP2J1S8T9TKTCXWYY87",
"status": "WaitingForActivation"
}
}Place PF Stop order
POST /frontoffice/api/perpetual/v4/stop-orders
Summary
Use this method to create and submit a new Stop order for Perpetual markets.
Request
Header parameters
accountId required
The trading account identifier.
Body
order object
Order creation data.
order.marketId string
The market identifier, in the following format: {marketType}.{baseAssetId}_{quoteAssetId}, for example: cfd.eth_eur.
Must match one of the available markets returned by the Get markets endpoint.
order.side string
The order side, indicating the direction of the trade.
Possible values:
BuySell
order.orderType string
The order type.
Possible values:
MarketLimit
order.timeInForce string
The time-in-force policy for the order, controlling its lifetime.
Possible values:
GtcIocFokGtdDay
order.requestedLotAmount decimal string
The quantity of the base asset to buy or sell, in lots. Lot size is defined per market and determines the base asset quantity represented by one lot. Upon execution, this defines the opened position size in lots.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.activationPrice decimal string | nullable
The trigger price that activates the Stop order.
order.cancellationDate string | nullable
For GTD orders: The date and time when the order will be automatically canceled if not executed, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
Required if timeInForce is set to Gtd; ignored for other time-in-force values.
order.leverage integer
The leverage factor applied to the position. Leverage determines margin required to open and maintain the position (for example, with leverage 10, only 10% of the position's notional value is required as margin).
order.stopLoss object
The Stop loss settings.
order.stopLoss.price decimal string
The Stop loss price.
order.stopLoss.isTrailing boolean
Indicates if the Stop loss is Trailing.
order.takeProfit object
The Take profit settings.
order.takeProfit.price decimal string
The take profit price.
order.comment string | nullable
A text note to attach to the order, up to 100 characters. The comment is inherited by the resulting position and can't be edited after the order is placed.
POST /frontoffice/api/perpetual/v4/stop-orders HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"order": {
"marketId": "perp.btc_usdt",
"side": "Sell",
"orderType": "Market",
"activationPrice": 115000,
"requestedLotAmount": 1,
"timeInForce": "Fok",
"leverage": 22,
"stopLoss": {
"price": "118020",
"isTrailing": true
},
"takeProfit": {
"price": "113873"
},
"comment": "Strategy A"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The created order.
order.orderId string
The unique identifier of the order assigned by the system.
order.status string
The current order status.
Possible values:
WaitingForActivationActivatedRejected
{
"order": {
"orderId": "01K2MNM0S8B2R9DS7BWJ8PGYPR",
"status": "WaitingForActivation"
}
}Cancel Stop order
DELETE /frontoffice/api/v3/stop-orders/{orderId}
Summary
Use this method to cancel an active Stop order placed on SPOT, CFD, or Perpetual markets.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
orderId required
The Stop order identifier to cancel.
DELETE /frontoffice/api/v3/stop-orders/01K2MNGAWPMQJ7WGATFSCAS1G4 HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The canceled order.
order.marketId string
The market identifier, same as in the request.
order.marketDisplayName string
The market ticker.
order.orderId string
The unique identifier of the order assigned by the system.
order.orderType string
The order type, same as in the request.
order.side string
The order side, same as in the request.
order.requestedPrice decimal string | nullable
The limit price for Limit orders (the maximum price for a buy or minimum price for a sell).
Must be null or omitted for Market orders.
order.activationPrice decimal string | nullable
The trigger price that activates the Stop order.
order.requestedAmount decimal string
The quantity of the base asset to buy or sell, same as in the request.
order.timeInForce string
The time-in-force policy, same as in the request.
order.status string
The current order status.
Possible values:
WaitingForActivationActivatedRejected
order.createdAt string
The timestamp when the order was created, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.updatedAt string
The timestamp of the most recent update to the order, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.cancellationDate string | nullable
The timestamp when the order was cancelled or expired, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ; null if not cancelled.
{
"order": {
"marketId": "perp.btc_usdt",
"marketDisplayName": "Perpetual BTC/USDT",
"orderId": "01K2MNGAWPMQJ7WGATFSCAS1G4",
"orderType": "Limit",
"side": "Sell",
"requestedPrice": "115100",
"activationPrice": "115000",
"requestedAmount": "1",
"timeInForce": "Gtc",
"status": "Rejected",
"createdAt": "2025-08-14T16:09:44.5986099Z",
"updatedAt": "2025-08-14T16:09:44.5986103Z",
"cancellationDate": null
}
}Modify Stop order
PATCH /frontoffice/api/v3/stop-orders/{orderId}
Summary
Use this method to modify a Stop order placed on SPOT, CFD, or Perpetual markets, while it is
still waiting to be triggered. The order keeps its orderId — nothing is cancelled and no new
order is created.
The market, side, and order type cannot be changed. To change them, cancel the order and place a new one.
If the order has already triggered, been cancelled, or expired, the modification is rejected and the order is left exactly as it was.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
orderId required
The Stop order identifier to modify.
Body
order object required
The new values to apply to the order.
order.activationPrice decimal string required
The new trigger price that activates the Stop order.
order.requestedPrice decimal string required
The new limit price for a Stop-Limit order. Must be 0 for a Market order.
order.requestedAmount decimal string required
The new quantity of the base asset to buy or sell.
order.timeInForce string required
The new time-in-force policy.
order.cancellationDate string | nullable
The new expiration date, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ. Required when
timeInForce is Gtd; ignored otherwise.
order.leverage integer | nullable
The new leverage. CFD and Perpetual markets only. Omit to leave the current value unchanged.
order.takeProfit object | nullable
The new Take Profit trigger. CFD and Perpetual markets only. Omit to leave the current value unchanged.
order.takeProfit.price decimal string required
order.stopLoss object | nullable
The new Stop Loss trigger. CFD and Perpetual markets only. Omit to leave the current value unchanged.
order.stopLoss.price decimal string required
order.stopLoss.isTrailing boolean required
order.comment string | nullable
The new comment.
PATCH /frontoffice/api/v3/stop-orders/01K2MNGAWPMQJ7WGATFSCAS1G4 HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json{
"order": {
"activationPrice": "115200",
"requestedPrice": "0",
"requestedAmount": "1",
"timeInForce": "Gtc"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
order object
The modified order, under its unchanged orderId.
order.marketId string
The market identifier, same as before the modification.
order.marketDisplayName string
The market ticker.
order.orderId string
The order identifier — unchanged by the modification.
order.orderType string
The order type — unchanged by the modification.
order.side string
The order side — unchanged by the modification.
order.requestedPrice decimal string | nullable
The limit price, reflecting the new value.
order.activationPrice decimal string | nullable
The trigger price, reflecting the new value.
order.requestedAmount decimal string
The quantity of the base asset to buy or sell, reflecting the new value.
order.timeInForce string
The time-in-force policy, reflecting the new value.
order.status string
The current order status.
Possible values:
WaitingForActivationActivatedRejected
order.createdAt string
The original timestamp when the order was created — unchanged by the modification.
order.updatedAt string
The timestamp of this modification, in the following format: YYYY-MM-DDTHH:MM:SS.sssZ.
order.cancellationDate string | nullable
The timestamp when the order was cancelled or expired; null if not cancelled.
{
"order": {
"marketId": "perp.btc_usdt",
"marketDisplayName": "Perpetual BTC/USDT",
"orderId": "01K2MNGAWPMQJ7WGATFSCAS1G4",
"orderType": "Limit",
"side": "Sell",
"requestedPrice": "115300",
"activationPrice": "115200",
"requestedAmount": "1",
"timeInForce": "Gtc",
"status": "WaitingForActivation",
"createdAt": "2025-08-14T16:09:44.5986099Z",
"updatedAt": "2025-08-14T16:22:10.1123456Z",
"cancellationDate": null
}
}Positions
Close position
POST /frontoffice/api/v4/positions/{positionId}/close
Summary
Use this method to close a specific position entirely or partially.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
positionId required
The position identifier to close.
Body
closePositionLotAmount decimal string | nullable
The portion of the position to close, in lots.
POST /frontoffice/api/v4/positions/01K2PFXDP1FWCJSGTX4GJ6JHM0/close HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*Response
In case of success, an object will be returned.
Each object contains the following information:
positionId string
The position identifier.
{
"positionId": "01K2PFXDP1FWCJSGTX4GJ6JHM0"
}Bulk close positions
POST /frontoffice/api/v4/positions/bulk-close
Summary
Use this method to close multiple positions simultaneously based on different criteria such as all positions, positive PnL only, or negative PnL only.
Request
Header parameters
accountId required
The trading account identifier.
Body
mode string required
The bulk close mode.
Possible values:
AllPositions— close all positions.PositivePnl— close only positions with positive PnL.NegativePnl— close only positions with negative PnL.
POST /frontoffice/api/v4/positions/bulk-close HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"mode": "AllPositions"
}Response
In case of success, an object will be returned containing identifiers of closed positions.
{
"status": "accepted",
"positionIds": [
"01K228VNC2Q7E7K9W8GABWBZ5Z",
"01K22BZ2DCETJZKW6MK81N1T8Y",
"01K2CXF06A3A5SK2YFJT67CMZ5",
"01K2CXF2ZJ6MJYMEK663TBBY8K",
"01K2PFXDP1FWCJSGTX4GJ6JHM0"
]
}Get trigger data
POST /frontoffice/api/v4/positions/{positionId}/trigger-data
Summary
Use this method to retrieve Stop loss and Take profit settings for an open position.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
positionId required
The position identifier.
Body
stopLoss.triggerType string · enum | nullable
The trigger calculation type for Stop loss.
Possible values:
PriceRatePointsPnl
stopLoss.triggerSize decimal string | nullable
The trigger value in selected units.
stopLoss.isTrailing boolean | nullable
Indicates if Stop loss is Trailing.
takeProfit.triggerType string · enum | nullable
The trigger calculation type for Take profit.
Possible values:
PriceRatePointsPnl
order.takeProfit.triggerSize decimal string | nullable
The trigger value in selected units.
POST /frontoffice/api/v4/positions/01K2HYXA7N2G9NHTFEWYVM9SEQ/trigger-data HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"stopLoss": {
"triggerSize": "-0.01",
"triggerType": "rate",
"isTrailing": true
},
"takeProfit": {
"triggerSize": 2500,
"triggerType": "points"
}
}Response
In case of success, an object will be returned.
Each object contains the following information:
takeProfit.price decimal string
The calculated Take profit price, based on trigger settings.
takeProfit.rate decimal string
The calculated Take profit rate.
takeProfit.points integer · int64
The calculated take profit offset, in points.
takeProfit.pnl decimal string
The projected PnL at Take profit.
stopLoss.price decimal string
The calculated Stop loss price, based on trigger settings.
stopLoss.rate decimal string
The calculated Stop loss rate.
stopLoss.points integer · int64
The calculated Stop loss offset, in points.
stopLoss.pnl decimal string
The projected PnL at Stop loss.
{
"takeProfit": {
"price": "248.27",
"rate": "0.1119",
"points": 2500,
"pnl": "21.5"
},
"stopLoss": {
"price": "221.04",
"rate": "-0.01",
"points": -223,
"pnl": "-1.91"
}
}Submit triggers
PUT /frontoffice/api/v4/positions/{positionId}/triggers
Summary
Use this method to modify Stop loss and Take profit settings for an open position.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
positionId required
The position identifier.
Body
stopLoss.price decimal string
The Stop loss trigger price.
stopLoss.isTrailing boolean
If true, enables the Trailing behavior for Stop loss.
takeProfit.price decimal string
The Take profit trigger price.
PUT /frontoffice/api/v4/positions/01K2HYXA7N2G9NHTFEWYVM9SEQ/triggers HTTP/1.1
Host: {host}
Authorization: Bearer JWT
accountId: {accountId}
Content-Type: application/json; x-api-version=4.0
Accept: */*
{
"stopLoss": {
"price": "165.13",
"isTrailing": true
},
"takeProfit": {
"price": 250
}
}Response
In case of success, an object will be returned containing the identifier of the updated position.
{
"positionId": "01K2HYXA7N2G9NHTFEWYVM9SEQ"
}Commissions
Get account trading volume
GET /frontoffice/api/v3/commission/{dynamicCommissionGroupId}/account-trading-volume
Summary
Use this method to obtain a cumulative account trading volume used for calculating the commission tier.
Request
Header parameters
accountId required
The trading account identifier.
Path parameters
dynamicCommissionGroupId required
The dynamic commission group identifier.
Use Get market to obtain.
GET /frontoffice/api/v3/commission/{dynamicCommissionGroupId}/account-trading-volume HTTP/1.1
Host: {host}
Authorization: Bearer JWT
Content-Type: application/json; x-api-version=4.0
Accept: */*Response
In case of success, an object will be returned containing current trading volume, in RAT, for the account.
{
"currentTradingVolumeInRAT": "string"
}آخر تحديث في