---
title: "Place a simple order (beta)"
method: POST
path: "/accounts/{accountId}/trading/simple"
tags: ["Experimental endpoints"]
---

# Place a simple order (beta)

`POST /accounts/{accountId}/trading/simple`

## Request

- Base URL: `https://api.snaptrade.com`
- URL: `https://api.snaptrade.com/accounts/{accountId}/trading/simple`
- Auth: API key in header `Signature` and API key in query parameter `clientId` and API key in query parameter `timestamp`

**Beta.** Places a single-leg or multi-leg order using a common request format for equities, equity options, futures, and future options. This endpoint is experimental; breaking changes are possible during the experimental phase.

Equity and equity-option orders use the existing brokerage trading capabilities. Futures and future options are currently supported only on tastytrade. Order types, time in force, optional fields, and strategy combinations remain subject to brokerage support. See the [brokerage trading support page](https://support.snaptrade.com/brokerages).

An order may contain equity/option legs or future/future_option legs, but cannot mix those two families. Equity/option strategies must share the same underlying symbol. Each strategy is submitted as one brokerage order; unsupported strategies are never split into independent orders. Tastytrade supports single-leg outright futures and up to four future-option legs, and does not support multi-leg market orders.

All string choices use lower snake_case and are case-sensitive. Symbols retain their native format: equity tickers, OCC equity-option symbols, or the exact tastytrade BrokerageInstrument ticker for futures and future options, including any spaces.

A successful response contains only the brokerage order ID. Use the existing order endpoints to retrieve order details.

## Path parameters

- `accountId` string, uuid, required: Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.

## Query parameters

- `userId` string, required: SnapTrade User ID. This is chosen by the API partner and can be any string that is a) unique to the user, and b) immutable for the user. It is recommended to NOT use email addresses for this property because they are usually not immutable.
- `userSecret` string, required: SnapTrade User Secret. This is a randomly generated string and should be stored securely. If compromised, please rotate it via the [rotate user secret endpoint](/reference/Authentication/Authentication_resetSnapTradeUserSecret).

## Request body

- SimpleTradeForm
  - `order_type` 'limit' | 'market' | 'stop' | 'stop_limit', required
  - `time_in_force` 'day' | 'gtc' | 'gtd' | 'fok' | 'ioc', required: Order duration, subject to brokerage and execution-path support. gtd requires expiry_date and a non-market single-leg equity/option order. Existing single-leg option routing does not support ioc. Futures and multi-leg orders do not support gtd through this endpoint.
  - `legs` SimpleTradeLeg[], required: Legs of one brokerage order. Use equity/option legs or future/future_option legs, without mixing the two families. Brokerage strategy and leg-count limits apply.
    - `instrument` SimpleTradeInstrument, required
      - `kind` 'equity' | 'option' | 'future' | 'future_option', required
      - `symbol` string, required: Equity ticker, OCC equity-option symbol, or exact tastytrade BrokerageInstrument ticker for a future or future option. Future tickers begin with `/`; future-option tickers begin with `./`. Preserve spaces and punctuation. Universal symbol IDs are not accepted.
    - `action` 'buy' | 'sell' | 'buy_to_open' | 'buy_to_close' | 'sell_to_open' | 'sell_to_close', required: Equities and futures require buy or sell. Equity options and future options require buy_to_open, buy_to_close, sell_to_open, or sell_to_close.
    - `units` string, decimal, nullable: A finite decimal, supplied as a decimal string to preserve precision.
  - `limit_price` string, decimal, nullable: A finite decimal, supplied as a decimal string to preserve precision.
  - `stop_price` string, decimal, nullable: A finite decimal, supplied as a decimal string to preserve precision.
  - `price_effect` 'credit' | 'debit' | 'even', nullable: Only applicable to multi-leg limit and stop_limit orders. Requirements and supported values depend on the brokerage; tastytrade requires credit or debit. even implies a zero limit_price, which may be omitted and must be zero if supplied. Single-leg price effects are derived from the action.
  - `client_order_id` string, uuid, nullable: Optional caller-supplied identifier passed through to the brokerage for idempotent order placement. Must be a canonical 36-character UUID. Idempotency enforcement is brokerage-specific - SnapTrade forwards this value to the broker but does not enforce uniqueness server-side. Refer to per-brokerage documentation for behavior on duplicate submission.
  - `expiry_date` string, date-time, nullable: ISO 8601 expiry timestamp, required for gtd and invalid with other durations. A missing timezone is treated as UTC. Supported only through existing single-leg Public and Sandbox execution paths.
  - `notional_value` string, decimal, nullable: A finite decimal, supplied as a decimal string to preserve precision.
  - `trading_session` 'regular' | 'extended': extended uses existing single-leg equity/option brokerage support and requires extended-hours enablement. Futures and multi-leg orders only accept regular.

## Response `200`

Order placed

- SimpleTradeResponse
  - `brokerage_order_id` string, required: The brokerage-assigned ID of the submitted order.

## Other responses

- `400`: Invalid request, unsupported trading feature, or brokerage rejection
- `403`: User does not have permissions to place trades
- `404`: Account not found
- `500`: Unexpected error

## Changes

- **2026-10-14** `efd73af6c911`: 6 breaking
  - the `default_code` response's property type changed from `string` to no type for status `400`
  - the `default_code` response's property type changed from `string` to no type for status `403`
  - the `default_code` response's property type changed from `string` to no type for status `404`
  - the `default_detail` response's property type changed from `string` to no type for status `400`
  - …2 more
- **2026-10-14** `07c9022b410a`: 6 breaking
  - the `default_code` response's property type changed from no type to `string` for status `400`
  - the `default_code` response's property type changed from no type to `string` for status `403`
  - the `default_code` response's property type changed from no type to `string` for status `404`
  - the `default_detail` response's property type changed from no type to `string` for status `400`
  - …2 more
- **2026-10-07** `24a278733b30`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/passiv/apis/snaptrade/changes/accounts/:accountId/trading/simple/post.md)

---

[API](https://skmtc.dev/passiv/apis/snaptrade.md) - [All operations](https://skmtc.dev/passiv/apis/snaptrade/llms.txt) - [OpenAPI document](https://skmtc.dev/passiv/apis/snaptrade/revisions/60be624d75b7?raw)
