---
title: "Create order"
method: POST
path: "/orders"
tags: ["Orders"]
---

# Create order

`POST /orders`

Submits a new order to Paradex.

Returns an order status object with a unique order `id` assigned by Paradex. This
order `id` serves as the primary identifier for the order.

The REST API performs basic validation and queues the order for risk checks
(order `status`=`NEW`).

Once validation and risk checks are successful, the order is sent to the matching
engine. The matching engine processes the order and updates the status to `OPEN`
if the order is resting. If the order is fully filled or cannot be processed, the
status changes to `CLOSED` and a `cancel_reason` code is provided (e.g., fully
filled or no liquidity).

## Request body

- RequestsOrderRequest
  - `client_id` string — Unique client assigned ID for the order
  - `dime_discount` boolean — If true, fees are charged in DIME with the DIME discount applied; falls back to USDC if balance is insufficient
  - `flags` ResponsesOrderFlag[] — Order flags, allow flag: REDUCE_ONLY
  - `instruction` 'GTC' | 'POST_ONLY' | 'IOC' | 'RPI', required
  - `market` string, required — Market for which order is created
  - `on_behalf_of_account` string — ID corresponding to the configured isolated margin account. Only for isolated margin orders
  - `price` string, required — Order price
  - `recv_window` integer — Order will be created if it is received by API within RecvWindow milliseconds from signature timestamp, minimum is 10 milliseconds
  - `side` 'BUY' | 'SELL', required
  - `signature` string, required — Order signature in as a string "[r,s]" signed by account's paradex private key
  - `signature_timestamp` integer, required — Unix timestamp in milliseconds of order creation, used for signature verification
  - `size` string, required — Size of the order
  - `stp` string — Self Trade Prevention, EXPIRE_MAKER, EXPIRE_TAKER or EXPIRE_BOTH, if empty EXPIRE_TAKER
  - `trigger_price` string — Trigger price for stop order
  - `type` 'MARKET' | 'LIMIT' | 'STOP_LIMIT' | 'STOP_MARKET' | 'TAKE_PROFIT_LIMIT' | 'TAKE_PROFIT_MARKET' | 'STOP_LOSS_MARKET' | 'STOP_LOSS_LIMIT', required
  - `vwap_price` string — Optional VWAP price for market orders used for VWAP instruction, bounded by price band

## Response `201`

Created

- ResponsesOrderResp
  - `account` string — Paradex Account
  - `avg_fill_price` string — Average fill price of the order
  - `cancel_reason` string — Reason for order cancellation if it was closed by cancel
  - `client_id` string — Client order id provided by the client at order creation
  - `created_at` integer — Order creation time
  - `flags` ResponsesOrderFlag[] — Order flags, allow flag: REDUCE_ONLY
  - `id` string — Unique order identifier generated by Paradex
  - `instruction` 'GTC' | 'POST_ONLY' | 'IOC' | 'RPI'
  - `last_updated_at` integer — Order last update time. No changes once status=CLOSED
  - `market` string — Market
  - `price` string — Order price. 0 for MARKET orders
  - `published_at` integer — Timestamp in milliseconds when order was sent to the client
  - `received_at` integer — Timestamp in milliseconds when order was received by API service
  - `remaining_size` string — Remaining size of the order
  - `request_info` ResponsesRequestInfo
    - `id` string — Request id
    - `message` string — Error message for failed requests
    - `request_type` string — Type of request (MODIFY_ORDER)
    - `status` string — Status of modify order request
  - `seq_no` integer — Unique increasing number (non-sequential) that is assigned to this order update and changes on every order update. Can be used to deduplicate multiple feeds. WebSocket and REST responses use independently generated seq_no per event.
  - `side` 'BUY' | 'SELL'
  - `size` string — Order size
  - `status` 'NEW' | 'UNTRIGGERED' | 'OPEN' | 'CLOSED'
  - `stp` 'EXPIRE_MAKER' | 'EXPIRE_TAKER' | 'EXPIRE_BOTH'
  - `timestamp` integer — Order signature timestamp
  - `trigger_price` string — Trigger price for stop order
  - `type` 'MARKET' | 'LIMIT' | 'STOP_LIMIT' | 'STOP_MARKET' | 'TAKE_PROFIT_LIMIT' | 'TAKE_PROFIT_MARKET' | 'STOP_LOSS_MARKET' | 'STOP_LOSS_LIMIT'

## Other responses

- `400` — Bad Request

---

[API](https://skmtc.net/tradeparadex/apis/paradex-rest-api-2.md) · [All operations](https://skmtc.net/tradeparadex/apis/paradex-rest-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tradeparadex/paradex-rest-api-2/versions/6a76453d754c/schema)
