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

- Base URL: `https://api.ethereal.trade`
- URL: `https://api.ethereal.trade/v1/order/dry-run`
- Auth: none declared
- TypeScript: <https://skmtc.dev/ethereal/apis/ethereal-exchange-api/docs/v1/order/dry-run/post.ts> (a function with typed inputs; its response is checked against the schema)

## 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
- `413`: Payload Too Large
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error

## Changes

- **2026-08-25** `63e8937ff6f7`: 2 warning, 1 info
  - added the new `QuantityBelowMinimum` enum value to the `data/allOf[#/components/schemas/DryRunOrderFailedDto]/code/allOf[#/components/schemas/SubmitOrderFailedResultCode]/` response property for the response status `422`
  - added the new `QuantityBelowMinimum` enum value to the `message/allOf[#/components/schemas/SubmitOrderFailedResultCode]/` response property for the response status `422`
  - added the non-success response with the status `413`
- **2026-06-07** `dc14c1586dfa`: 19 breaking, 4 warning, 86 info
  - the `data/oneOf[#/components/schemas/SubmitOrderLimitDtoData]/engineType` request property type changed from `number` to `integer`
  - the `data/oneOf[#/components/schemas/SubmitOrderLimitDtoData]/expiresAt` request property format changed from no format to `uint64`
  - the `data/oneOf[#/components/schemas/SubmitOrderLimitDtoData]/groupContingencyType` request property type changed from `number` to `integer`
  - the `data/oneOf[#/components/schemas/SubmitOrderLimitDtoData]/nonce` request property type changed from `string` to no type
  - …105 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/ethereal/apis/ethereal-exchange-api/changes/v1/order/dry-run/post.md)

---

[API](https://skmtc.dev/ethereal/apis/ethereal-exchange-api.md) - [All operations](https://skmtc.dev/ethereal/apis/ethereal-exchange-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ethereal/apis/ethereal-exchange-api/revisions/63e8937ff6f7?raw)
