Place Order

Places an order to be triggered if a provided price criteria is met.

Rate limits

  • A max of 100 pending trigger orders per subaccount

Request

POST [TRIGGER_ENDPOINT]/execute

Body


{
  "place_order": {
    "product_id": 1,
    "order": {
      "sender": "0x7a5ec2748e9065794491a8d29dcf3f9edb8d7c43746573743000000000000000",
      "priceX18": "9900000000000000000000",
      "amount": "1000000000000000000",
      "expiration": "4294967295",
      "nonce": "1757062078359666688"
    },
    "trigger": {
      "price_below": "9900000000000000000000"
    }
    "signature": "0x",
    "id": 100
  }
}

Request Parameters

Parameter
Type
Required
Description

product_id

number

Yes

Id of spot / perp product for which to place order. Use All products query to retrieve all valid product ids.

order

object

Yes

Order object, see Signing section for details on each order field.

signature

string

Yes

Hex string representing hash of the signed order. See Signing section for more details.

trigger

object

Yes

Trigger criteria could be any of: {"price_above":"{PRICE}"}, {"price_below":"{PRICE}"}, {"last_price_above":"{PRICE}"},{"last_price_below":"{PRICE}"}

digest

string

No

Hex string representing a hash of the order.

spot_leverage

boolean

No

Indicates whether leverage should be used; when set to false , placing the order fails if the transaction causes a borrow on the subaccount. Defaults to true.

id

number

No

An optional id that when provided is returned as part of Fill and OrderUpdate stream events when the order is triggered / executed. See gateway > place order and subscriptions for more details.

Note: - price_above: Order is triggered if the indicated price is above the oracle price. - price_below: Order is triggered if the indicated price is below the oracle price. - last_price_above: Order is triggered if the indicated price is above the last trade price. - last_price_below: Order is triggered if the indicated price is below the last trade price.

Order Nonce

Note: The first most significant bit must be set, this is used to identify a trigger order from a regular one. See order nonce for more details.

To compute a nonce for a trigger order with a random integer of 1000, and a discard time 50 ms from now, we can do the following:

import time
unix_epoch_ms = int(time.time()) * 1000
nonce = ((unix_epoch_ms + 50) << 20) + 1000 | (1 << 63)

Response

Success

{
  "status": "success",
  "signature": {signature},
  "data": { 
    "digest": {order digest} 
  },
  "request_type": "execute_place_order"
  "id": 100
}

Failure

{
  "status": "failure",
  "signature": {signature}
  "error": "{error_msg}"
  "error_code": {error_code},
  "request_type": "execute_place_order"
}

Last updated