---
title: "Submits a dry-mode to simulate an order submission"
method: POST
path: "/v1/order/dry-run"
tags: ["Order"]
---

# Submits a dry-mode to simulate an order submission

`POST /v1/order/dry-run`

## Request body

- SubmitDryOrderDto
  - `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

## Response `200`

- DryRunOrderCreatedDto
  - `code` 'AccountSuspended' | 'CausesImmediateLiquidation' | 'DuplicateSameSideOco' | 'ExchangeSuspended' | 'ImmediateMatchPostOnly' | 'InsufficientBalance' | 'LiquidationError' | 'MarketOrderReachedMaxSlippage' | 'MaxQuantityExceeded' | 'OcoFilled' | 'Ok' | 'OpenValueCapExceeded' | 'OrderIncreasesPosition' | 'RiskLimitExceeded' | 'SignerRevoked' | 'TriggerCanceledError' | 'UnfilledFillOrKill' | 'UnfilledImmediateOrCancel' | 'UnfilledMarketOrder' | 'MakerCanceledByTaker' | 'CloseOrder', required — Code indicating the result of the submission
  - `marginAvailable` string, decimal, required — Margin available excluding this order in USD expressed as a decimal (precision: 9)
  - `marginRequired` string, decimal, required — Margin required for order in USD expressed as a decimal (precision: 9)
  - `riskAvailable` string, decimal, required — Risk available for the product in USD expressed as a decimal (precision: 9)
  - `riskUsed` string, decimal, required — Risk used including position and open orders in USD expressed as a decimal (precision: 9)
  - `totalUsedMargin` string, decimal, required — Total used margin including this order in USD expressed as a decimal (precision: 9)

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Unprocessable Entity
- `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)
