---
title: "Place an order for trading"
method: POST
path: "/v1/order"
tags: ["Order"]
---

# Place an order for trading

`POST /v1/order`

## Request body

- SubmitOrderDto — Submit order request containing signature and order data
  - `data` union, required
    - SubmitOrderMarketDtoData
      - `clientOrderId` string — A subaccount scoped unique client-generated order id (either a UUID or alphanumeric string up to 32 characters)
      - `close` boolean — Order closes the entire current position, requires zero quantity and reduceOnly
      - `engineType` 0 | 1, required
      - `expiresAt` integer — Order expiry timestamp (seconds since Unix Epoch), defaults to the maximum allowed value: signedAt + 6652800
      - `groupContingencyType` 0 | 1
      - `groupId` string, uuid — Group Id (UUID) for linking orders together in OCO/OTO relationships
      - `nonce` string, uint64, required — Message nonce timestamp (nanoseconds since Unix Epoch)
      - `onchainId` integer, required — Onchain product ID, available from the products endpoint
      - `quantity` string, decimal, required — Non-directional quantity of product in native units expressed as a decimal (precision: 9)
      - `reduceOnly` boolean — Whether this should be a reduce-only order. Must be true when close is true
      - `sender` string, hex, required — Account address that produced the authorizing signature
      - `side` 0 | 1, required
      - `signedAt` integer, required — Message signedAt current timestamp (seconds since Unix Epoch)
      - `stopPrice` string, decimal — Stop price expressed as a decimal (precision: 9), requires stopType
      - `stopType` 0 | 1
      - `subaccount` string, hex, required — Bytes32 encoded subaccount name (0x prefix, zero padded)
      - `type` 'MARKET', required
    - SubmitOrderLimitDtoData
      - `clientOrderId` string — A subaccount scoped unique client-generated order id (either a UUID or alphanumeric string up to 32 characters)
      - `close` boolean — Order closes the entire current position, requires zero quantity and reduceOnly
      - `engineType` 0 | 1, required
      - `expiresAt` integer — Order expiry timestamp (seconds since Unix Epoch), defaults to the maximum allowed value: signedAt + 6652800
      - `groupContingencyType` 0 | 1
      - `groupId` string, uuid — Group Id (UUID) for linking orders together in OCO/OTO relationships
      - `nonce` string, uint64, required — Message nonce timestamp (nanoseconds since Unix Epoch)
      - `onchainId` integer, required — Onchain product ID, available from the products endpoint
      - `postOnly` boolean, required — Only add order if it does not immediately fill
      - `price` string, decimal, required — Limit price expressed as a decimal (precision: 9)
      - `quantity` string, decimal, required — Non-directional quantity of product in native units expressed as a decimal (precision: 9)
      - `reduceOnly` boolean — Whether this should be a reduce-only order. Must be true when close is true
      - `sender` string, hex, required — Account address that produced the authorizing signature
      - `side` 0 | 1, required
      - `signedAt` integer, required — Message signedAt current timestamp (seconds since Unix Epoch)
      - `stopPrice` string, decimal — Stop price expressed as a decimal (precision: 9), requires stopType
      - `stopType` 0 | 1
      - `subaccount` string, hex, required — Bytes32 encoded subaccount name (0x prefix, zero padded)
      - `timeInForce` 'GTD' | 'IOC' | 'FOK', required
      - `type` 'LIMIT', required
  - `signature` string, hex, required — Hex-encoded EIP-712 signature authorizing this request

## Response `201`

- SubmitOrderCreatedDto — Response returned when order is successfully submitted
  - `clientOrderId` string — Client-provided order id (if supplied in request)
  - `filled` string, decimal, required — Quantity filled expressed as a decimal string (precision: 9) **Deprecated:** This value is always zero when block execution is enabled.
  - `id` string, uuid, required — Id representing the order
  - `result` 'Ok' | 'AccountSuspended' | 'CausesImmediateLiquidation' | 'DuplicateSameSideOco' | 'ExchangeSuspended' | 'ImmediateMatchPostOnly' | 'InsufficientBalance' | 'LiquidationError' | 'MarketOrderReachedMaxSlippage' | 'MaxQuantityExceeded' | 'OcoFilled' | 'OpenValueCapExceeded' | 'OrderIncreasesPosition' | 'RiskLimitExceeded' | 'SignerRevoked' | 'TriggerCanceledError' | 'UnfilledFillOrKill' | 'UnfilledImmediateOrCancel' | 'UnfilledMarketOrder' | 'Unknown', required — Result codes for orders that were created (may still have been rejected)

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Order was created but rejected
- `429` — Too Many Requests
- `500` — Internal Server Error

---

[API](https://skmtc.net/ethereal/apis/ethereal-exchange-api.md) · [All operations](https://skmtc.net/ethereal/apis/ethereal-exchange-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ethereal/ethereal-exchange-api/revisions/6e6f8dad92bf/schema)
