Skip to content

Place limit order

POST
/v2/orders/limit

Create a new limit order. Limit orders are only executed at the specified price or better. When you receive a 201 Created response with an id, it means that the order has been successfully placed. You can use the Order Status REST API or WebSocket API to receive the status of this order.

Required parameters: side (BUY/SELL), quantity (base amount), price (per coin in quote currency), pair (currency pair).

Optional parameters: postOnly (true to place a Maker order that fails if matched immediately, default false), customerOrderId (alphanumeric value for tracking, must be unique across all open orders), timeInForce (GTC/FOK/IOC, default GTC), allowMargin (true/false for margin/leverage trades, default false), reduceOnly (true/false for orders that should only reduce a position, default false).

Notes: The customerOrderId supports alphanumeric characters with a 50-character limit (no special characters). It must be unique across all open orders for a given account. Fee currency depends on maker/taker role and trade side.

When placement fails synchronously, the endpoint returns 201 Created with {orderId, code, message} instead of {id}. Check the response body structure to distinguish success from failure.

Authorizations

apiKey

Your API key

Type
API Key (header: X-VALR-API-KEY)
+
apiSignature

HMAC SHA512 signature of the request (see Authentication section)

Type
API Key (header: X-VALR-SIGNATURE)
+
apiTimestamp

Request timestamp in milliseconds

Type
API Key (header: X-VALR-TIMESTAMP)

Request Body

application/json
JSON
{
"side": "SELL",
"quantity": "0.020000",
"price": "62829",
"pair": "BTCUSDT",
"postOnly": false,
"customerOrderId": "LimitSell",
"timeInForce": "GTC",
"allowMargin": "false"
}

Responses

Limit order created successfully

application/json
JSON
{
"id": "14ed7fbc-272e-4bac-a4f9-7ec8df36df34"
}

Playground

Authorization
Body

Samples