---
title: "Submit Orders"
method: POST
path: "/v1/accounts/{account_id}/orders"
tags: ["Orders"]
---

# Submit Orders

`POST /v1/accounts/{account_id}/orders`

## Request

- Base URL: `https://api.clearstreet.com`
- URL: `https://api.clearstreet.com/v1/accounts/{account_id}/orders`
- Auth: HTTP bearer

Submit new orders

## Path parameters

- `account_id` integer, required

## Request body

- OrderSubmissionRequest[]
  - `expires_at` string, date-time, nullable: The timestamp when the order should expire (UTC). Required when time_in_force is GOOD_TILL_DATE.
  - `extended_hours` boolean, nullable: Allow trading outside regular trading hours. Some brokers disallow options outside RTH.
  - `id` string, nullable: Optional client-provided unique ID (idempotency). Required to be unique per account.
  - `instrument_id` string: Instrument identifier: either an instrument UUID or a symbol (symbol for equities, OSI for options). Non-UUID inputs are resolved server-side.
  - `limit_offset` string, nullable: Limit offset for trailing stop-limit orders (signed)
  - `limit_price` string, nullable: Limit price (required for LIMIT and STOP_LIMIT orders)
  - `order_type` 'MARKET' | 'LIMIT' | 'STOP' | 'STOP_LIMIT' | 'TRAILING_STOP' | 'TRAILING_STOP_LIMIT', required: Strict order-type enum for order submission/replacement requests.
  - `position_intent` 'OPEN' | 'CLOSE': Client-attested open/close intent for an order.
  - `quantity` string, required: Quantity to trade. For COMMON_STOCK: shares (may be fractional if supported). For OPTION (single-leg): contracts (must be an integer)
  - `side` 'BUY' | 'SELL', required: Side of the order (BUY or SELL).
  - `stop_price` string, nullable: Stop price (required for STOP and STOP_LIMIT orders)
  - `strategy` union: Optional execution strategy controlling how the order is worked in the market. Omit to use standard routing. One of `SOR`, `VWAP`, `TWAP`, or `DMA`.
    - object: Smart Order Router. Routes the order to the best available venue(s).
      - `type` 'SOR', required: Execution strategy type.
    - object: Volume-Weighted Average Price. Works the order to track the volume-weighted average price over the execution window.
      - `end_at` string, date-time: UTC timestamp (RFC 3339) by which to finish working the order. Defaults to market close.
      - `start_at` string, date-time: UTC timestamp (RFC 3339) at which to begin working the order. Defaults to the time the order is received.
      - `type` 'VWAP', required: Execution strategy type.
    - object: Time-Weighted Average Price. Spreads execution evenly across the execution window.
      - `end_at` string, date-time: UTC timestamp (RFC 3339) by which to finish working the order. Defaults to market close.
      - `start_at` string, date-time: UTC timestamp (RFC 3339) at which to begin working the order. Defaults to the time the order is received.
      - `type` 'TWAP', required: Execution strategy type.
    - object: Direct Market Access. Routes the order straight to the named venue.
      - `destination` string, required: Venue code the order is routed to.
      - `type` 'DMA', required: Execution strategy type.
  - `symbol` string, nullable: Trading symbol. For equities, use the ticker symbol (e.g., "TSLA"). For options, use the OSI symbol (e.g., "TSLA 250117C00190000"). Either `symbol` or `instrument_id` must be provided.
  - `time_in_force` 'DAY' | 'GOOD_TILL_CANCEL' | 'IMMEDIATE_OR_CANCEL' | 'FILL_OR_KILL' | 'GOOD_TILL_DATE' | 'AT_OPEN' | 'AT_CLOSE', required: Strict time-in-force enum for order submission requests.
  - `trailing_offset` string, nullable: Trailing offset amount (required for trailing orders)
  - `trailing_offset_type` 'PRICE' | 'BPS': Trailing offset type for trailing stop orders.

## Response `200`

Orders submitted successfully

- object
  - `error` ApiError: A direct mapping of tonic::Status, for use in HTTP responses.
    - `code` integer, required: The error code is used to identify the nature of the error. It corresponds to an HTTP status code.
    - `details` object[]
    - `message` string, required: A human-readable message providing more details about the error.
  - `metadata` ResponseMetadata, required: Metadata for the response. This will always contain a request ID which can be used to identify the request to Clear Street for tracing, and optionally may include pagination data.
    - `next_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `page_number` integer, nullable: Pagination. Included if this was a GET (list) response
    - `previous_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `request_id` string, required: A unique ID for this request, generated upon ingestion of the request.
    - `total_items` integer, nullable: Total number of items available (not just in this page).
    - `total_pages` integer, nullable: Total number of pages available.
  - `data` Order[], required
    - `account_id` integer, required
    - `average_fill_price` string, nullable: Average fill price across all executions. For multileg orders this is the venue's strategy-level average when reported, else the signed net package price derived from the leg averages: net debit positive, net credit negative, zero possible. When a null/undefined value is observed, it indicates that there is no available data.
    - `client_order_id` string, required: Client-provided identifier echoed back.
    - `created_at` string, date-time, required: Timestamp when order was created (UTC)
    - `details` string[]: Contains execution, rejection or cancellation details, if any
    - `expires_at` string, date-time, nullable: Timestamp when the order will expire (UTC). Present when time_in_force is GOOD_TILL_DATE. When a null/undefined value is observed, it indicates it does not apply.
    - `extended_hours` boolean, nullable: Whether the order is eligible for extended-hours trading.
    - `filled_quantity` string, required: Cumulative filled quantity
    - `id` string, required: Engine-assigned unique identifier for this order (UUID).
    - `instrument_id` string, uuid, nullable: Instrument identifier for the traded instrument. `null` when the order is a multileg strategy whose legs are reported individually in `legs[]`. When a null/undefined value is observed, it indicates it does not apply.
    - `instrument_type` 'COMMON_STOCK' | 'INDEX' | 'OPTION' | 'CASH': Security type
    - `leaves_quantity` string, required: Remaining unfilled quantity
    - `limit_offset` string, nullable: Limit offset for trailing stop-limit orders (signed) When a null/undefined value is observed, it indicates it does not apply.
    - `limit_price` string, nullable: Limit price (for LIMIT and STOP_LIMIT orders) When a null/undefined value is observed, it indicates it does not apply.
    - `order_type` 'MARKET' | 'LIMIT' | 'STOP' | 'STOP_LIMIT' | 'TRAILING_STOP' | 'TRAILING_STOP_LIMIT' | 'OTHER', required: Order type
    - `quantity` string, required: Total order quantity
    - `releases_at` string, date-time, nullable: Scheduled release time for orders awaiting release. When a null/undefined value is observed, it indicates it does not apply.
    - `side` 'BUY' | 'SELL', required: Side of the order (BUY or SELL).
    - `status` 'PENDING_NEW' | 'QUEUED' | 'PENDING_TRIGGER' | 'NEW' | 'PARTIALLY_FILLED' | 'FILLED' | 'CANCELED' | 'REJECTED' | 'EXPIRED' | 'PENDING_CANCEL' | 'PENDING_REPLACE' | 'REPLACED' | 'DONE_FOR_DAY' | 'STOPPED' | 'SUSPENDED' | 'CALCULATED' | 'OTHER', required: Order status
    - `stop_price` string, nullable: Stop price (for STOP and STOP_LIMIT orders) When a null/undefined value is observed, it indicates it does not apply.
    - `strategy` object: The execution strategy the order was submitted with, if any.
      - `destination` string: Venue code the order is routed to. DMA only.
      - `end_at` string, date-time: UTC timestamp (RFC 3339) at which execution ends.
      - `start_at` string, date-time: UTC timestamp (RFC 3339) at which execution begins.
      - `type` 'SOR' | 'VWAP' | 'TWAP' | 'DMA', required: Execution strategy type.
    - `symbol` string, nullable: Trading symbol. `null` when the order is a multileg strategy whose legs are reported individually in `legs[]`. When a null/undefined value is observed, it indicates it does not apply.
    - `time_in_force` 'DAY' | 'GOOD_TILL_CANCEL' | 'IMMEDIATE_OR_CANCEL' | 'FILL_OR_KILL' | 'GOOD_TILL_DATE' | 'AT_OPEN' | 'AT_CLOSE' | 'OTHER', required: Time in force
    - `trailing_limit_px` string, nullable: Current trailing limit price computed by the trailing strategy When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_offset` string, nullable: Trailing offset amount for trailing orders When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_offset_type` 'PRICE' | 'BPS': Trailing offset type for trailing stop orders.
    - `trailing_stop_px` string, nullable: Current trailing stop price computed by the trailing strategy When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_watermark_px` string, nullable: Trailing watermark price for trailing orders. Strategy-computed, so it is absent on the order-submission acknowledgement and only appears once fetched via the order fetch or list endpoints. When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_watermark_ts` string, date-time, nullable: Trailing watermark timestamp for trailing orders. Strategy-computed, so it is absent on the order-submission acknowledgement and only appears once fetched via the order fetch or list endpoints. When a null/undefined value is observed, it indicates it does not apply.
    - `underlying_instrument_id` string, uuid, nullable: Instrument ID of the option's underlying instrument. Populated only for options orders. A `null` means one of two things: the order is not an option, so the field does not apply; or the order is an option whose underlier has not yet been resolved. When a null/undefined value is observed, it indicates it does not apply.
    - `underlying_instrument_type` 'COMMON_STOCK' | 'INDEX' | 'OPTION' | 'CASH': Security type
    - `updated_at` string, date-time, required: Timestamp of the most recent update (UTC)
    - `venue` string, required: MIC code of the venue where the order is routed

## Other responses

- `400`: Invalid order request
- `403`: Forbidden
- `422`: Malformed order request payload
- `500`: Internal server error

## Changes

- **2026-10-30** `7e4b278ca27a`: 1 warning
  - removed the optional property `allOf[subschema #2]/data/items/queue_state` from the response with the `200` status
- **2026-10-16** `1bd9eddeffc8`: 10 breaking, 4 warning, 13 info
  - removed the enum value `AT_CROSSING` of the request property `items/oneOf[#/components/schemas/NewOrderRequest]/time_in_force`
  - removed the enum value `AT_THE_CLOSE` of the request property `items/oneOf[#/components/schemas/NewOrderRequest]/time_in_force`
  - removed the enum value `AT_THE_OPENING` of the request property `items/oneOf[#/components/schemas/NewOrderRequest]/time_in_force`
  - removed the enum value `GOOD_THROUGH_CROSSING` of the request property `items/oneOf[#/components/schemas/NewOrderRequest]/time_in_force`
  - …23 more
- **2026-07-17** `12dd2417df82`: 1 warning
  - added the new `INDEX` enum value to the `allOf[subschema #2]/data/items/instrument_type/oneOf[#/components/schemas/SecurityType]/` response property for the response status `200`
- …earlier changes not shown

[Operation history](https://skmtc.dev/clear-street/apis/clear-street-trading-api/changes/v1/accounts/:account_id/orders/post.md)

---

[API](https://skmtc.dev/clear-street/apis/clear-street-trading-api.md) - [All operations](https://skmtc.dev/clear-street/apis/clear-street-trading-api/llms.txt) - [OpenAPI document](https://skmtc.dev/clear-street/apis/clear-street-trading-api/revisions/52e77ea7d731?raw)
