Skip to content

Limit Order Endpoints

This section covers API endpoints related to limit orders. Limit order operations allow users to exchange currencies within the platform at a specific price set by the user. Unlike swaps, limit orders are not executed immediately but remain active until either the specified price condition is met and the order executes, or until the user cancels the order. Limit orders are ideal for users who want to exchange at a specific target price rather than the current market rate.

Feature Activation Required

To use limit order features, you need to request this feature to be enabled for your account by contacting support. Once enabled, you must also ensure that your API keys have the appropriate allow_limit_order permission. All API features require specific permissions which you can select when creating or updating API keys.

Get Available Trading Pairs

Returns the list of trading pairs available to the authenticated user.

GET /limit-pairs

Required Permissions

  • allow_limit_order

Rate Limit

30 requests per minute

Response Fields

Field Type Description
symbol string Trading pair symbol (e.g., BTCUSDT)
base_currency string Base currency code
quote_currency string Quote currency code
price_precision integer Decimal precision for the price
amount_precision integer Decimal precision for the amount
total_precision integer Decimal precision for the quote amount (value)
min_base_amount string Minimum allowed amount
max_base_amount string Maximum allowed amount
min_quote_value string Minimum allowed value (amount * price)
max_quote_value string Maximum allowed value (amount * price)
is_enabled bool Trading is active
fee_percent string Trading fee percentage
fee_deduction string Algorithm of fees deduction: received - from received currency; quote - always from quote currency (default)
latest_price string Current market price. It may be null when do data available

Response Example

[
  {
    "symbol": "BTCUSDT",
    "base_currency": "BTC",
    "quote_currency": "USDT",
    "price_precision": 2,
    "amount_precision": 6,
    "total_precision": 8,
    "min_base_amount": "0.000100",
    "max_base_amount": "10.000000",
    "min_quote_value": "10.00",
    "max_quote_value": "1000000.00",
    "is_enabled": true,
    "fee_percent": "0.25",
    "latest_price": "29485.25"
  },
  {
    "symbol": "ETHUSDT",
    "base_currency": "ETH",
    "quote_currency": "USDT",
    "price_precision": 2,
    "amount_precision": 5,
    "min_base_amount": "0.000100",
    "max_base_amount": "10.000000",
    "min_quote_value": "10.00",
    "max_quote_value": "1000000.00",
    "is_enabled": true,
    "fee_percent": "0.25",
    "latest_price": "1843.75"
  }
]

Response Fields

Field Type Description
symbol string Trading pair symbol (e.g., BTCUSDT)
base_currency string Base currency code
quote_currency string Quote currency code
price_precision integer Decimal precision for the price
amount_precision integer Decimal precision for the amount
total_precision integer Decimal precision for the quote amount (value)
min_base_amount string Minimum allowed amount
max_base_amount string Maximum allowed amount
min_quote_value string Minimum allowed value (amount * price)
max_quote_value string Maximum allowed value (amount * price)
is_enabled bool Trading is active
fee_percent string Trading fee percentage
fee_deduction string Algoruthm of fees deduction: received - from received currency; quote - always from quote currency (default)
latest_price string Current market price. It may be null when do data available

Create Limit Order

Places a new limit order.

POST /limit-order

Required Permissions

  • allow_limit_order

Rate Limit

600 requests per minute

Request Parameters

Parameter Type Required Description
pair string Yes Trading pair symbol (e.g., BTCUSDT) (see Get Available Trading Pairs)
side string Yes Order side: "buy" or "sell"
limit_price string No* Limit price in quote currency
spend_amount string No* Order amount that you going to spend for order
receive_amount string No* Order amount that you want to receive for order (after fees)
callback_url string No URL that will be called with status updates
custom_id string No Custom identifier for tracking this order

Amounts and limit prices are optional, but two of three parameters must be provided: limit_price, spend_amount, or receive_amount. Choose combination most suitable for your use case. Also note that spent_amount and receive_amount express different currencies depending on order side. So is you set both amounts - limit price will be calculated automatically based on those amounts and fees.

Placed order will be in open status until it is filled or cancelled by user or system in rare cases.

Example Request

{
  "pair": "BTCUSDT",
  "side": "buy",
  "receive_amount": "0.01000000",
  "limit_price": "29000.00",
  "callback_url": "https://example.com/callbacks/orders",
  "custom_id": "my-order-123"
}

Response

{
  "code": "LMT123456",
  "custom_id": "my-order-123",
  "callback_url": "https://example.com/callbacks/orders",
  "pair": "BTCUSDT",
  "side": "buy",
  "receive_amount": "0.01000000",
  "limit_price": "29000.00",
  "spend_amount": "290.00",
  "base_amount": "0.01000000",
  "quote_amount": "290.00",
  "filled_base_amount": "0.00000000",
  "filled_quote_amount": "0.00",
  "filled_fee_amount": "0.00000000",
  "fee_currency": "USDT",
  "status": "open",
  "reason_code": null,
  "reason_message": null,
  "created_at": "2023-01-15T14:30:15Z",
  "updated_at": "2023-01-15T14:30:15Z",
  "done_at": null
}

Response Fields

Field Type Description
code string Unique order code
custom_id string Custom identifier provided in the request
callback_url string URL that will be called with status updates
pair string Trading pair symbol
side string Order side: "buy" or "sell"
limit_price string Limit price in quote currency
spend_amount string Order amount reserved to spend
receive_amount string Order amount expected after execution
base_amount string Base amount of order
quote_amount string Quote amount of order
filled_base_amount string Filled amount in base currency
filled_quote_amount string Filled value in quote currency
filled_fee_amount string Fee amount
fee_currency string Fee currency code
status string Current status of the order
reason_code string Error code (if the order failed)
reason_message string Error message (if the order failed)
created_at string Creation timestamp (ISO 8601 format)
updated_at string Last update timestamp (ISO 8601 format)
done_at string Completion timestamp (ISO 8601 format)

Cancel Limit Order

Cancels an open limit order.

POST /limit-order/cancel

Required Permissions

  • allow_limit_order

Rate Limit

600 requests per minute

Request Parameters

Parameter Type Required Description
code string Yes* Unique order code
custom_id string Yes* Custom identifier

At least one of the parameters code or custom_id must be provided. If both are provided, the code parameter will be used first.

Example Request

{
  "code": "LMT123456"
}

Response

Same as the order object, with status updated to cancelled.

List Limit Orders

Returns a list of limit orders.

GET /limit-order

Required Permissions

  • allow_limit_order

Rate Limit

600 requests per minute

Query Parameters

Parameter Type Required Description
status string No Filter by status (see Order Status Values)
pair string No Filter by trading pair (see Get Available Trading Pairs)
side string No Filter by side (buy or sell)
custom_id string No Filter by custom ID
start_at string No Filter by start datetime on field created_at (inclusive, ISO 8601 format)
end_at string No Filter by end datetime on field created_at (inclusive, ISO 8601 format)
limit integer No Number of results to return (default: 100, max: 200)
offset integer No Number of results to skip (for pagination)

Response

[
  {
    "code": "LMT123456",
    "custom_id": "my-order-123",
    "callback_url": "https://example.com/callbacks/orders",
    "pair": "BTCUSDT",
    "side": "buy",
    "receive_amount": "0.01000000",
    "limit_price": "29000.00",
    "spend_amount": "290.00",
    "base_amount": "0.01000000",
    "quote_amount": "290.00",
    "filled_base_amount": "0.00000000",
    "filled_quote_amount": "0.00",
    "filled_fee_amount": "0.00000000",
    "fee_currency": "USDT",
    "status": "open",
    "reason_code": null,
    "reason_message": null,
    "created_at": "2023-01-15T14:30:15Z",
    "updated_at": "2023-01-15T14:30:15Z",
    "done_at": null
  }
  // More orders...
]

Response Fields

Same as the creation order response. The results are returned as a direct array without pagination metadata.

Pagination

The API uses simple offset-based pagination with limit and offset parameters. Offset is limited for maximum 10000, if you set more - error will be returned. The default limit is 100, and the maximum limit is 200. The response is a direct list of limit order objects without pagination metadata wrapper. If you need to fetch more than 200 limit orders, you should use the start_at and end_at parameters to fetch limit orders in smaller date ranges. List is sorted by creation date in descending order.

Get Order Details

Returns details of a specific order.

GET /limit-order/{code}

Required Permissions

  • allow_limit_order

Rate Limit

600 requests per minute

Path Parameters

Parameter Type Required Description
code string Yes Unique order code

Response

Same as a single order object from the list endpoint.

Order Status Values

Status Description
queued Order is queued, awaiting to be placed on exchange
open Order is placed on the exchange
cancelling Order cancellation has been requested
success Order has been successfully completed, balance changed
failed Order has failed or been rejected (see reason_code for details)

Callback Notifications

If a callback_url was provided when creating the order, the system will send POST requests to this URL when the order status changes.

Important Note: You may not receive callbacks for every intermediate status change or field update if changes occur very rapidly. When operations transition through multiple states quickly, intermediate callbacks may be skipped. However, you will always receive callbacks for the final states of operations. Design your callback handling to be idempotent and not dependent on receiving every single state transition.

Callback Security

Currently, callbacks are not signed. The signature mechanism for callbacks is planned for a future update. You should validate callback data by making an authenticated API request to verify the order status.

Callback Payload

The callback payload contains the same data as the order details response, with essential fields for status updates:

{
  "code": "LMT123456",
  "custom_id": "my-order-123",
  "callback_url": "https://example.com/callbacks/orders",
  "pair": "BTCUSDT",
  "side": "buy",
  "receive_amount": "0.01000000",
  "limit_price": "29000.00",
  "spend_amount": "290.00",
  "base_amount": "0.01000000",
  "quote_amount": "290.00",
  "filled_base_amount": "0.00000000",
  "filled_quote_amount": "0.00",
  "filled_fee_amount": "0.00000000",
  "fee_currency": "USDT",
  "status": "open",
  "reason_code": null,
  "reason_message": null,
  "created_at": "2023-01-15T14:30:15Z",
  "updated_at": "2023-01-15T14:30:15Z",
  "done_at": null
}

Securing Callbacks

Since callbacks are not currently signed, you should implement these security measures:

  1. Whitelist IPs: Accept callbacks only from the service's IP addresses. Contact support to get the list of server IPs.
  2. Verify Data: Always make an authenticated API request to /limit-order/{code} to verify the status and details of any order after receiving a callback.
  3. Use HTTPS: Ensure your callback URL uses HTTPS to encrypt the data in transit.

Common Use Cases

  • Trading strategy execution: Implement buy/sell signals from trading strategies
  • Arbitrage: Place orders on multiple exchanges
  • Market making: Provide liquidity by placing buy and sell orders
  • Dollar-cost averaging: Place regular buy orders at predetermined prices