Skip to content
Get started

Submit Orders

client.V1.Orders.SubmitOrders(ctx, accountID, body) (*V1OrderSubmitOrdersResponse, error)
POST/v1/accounts/{account_id}/orders

Submit new orders

ParametersExpand Collapse
accountID int64
body V1OrderSubmitOrdersParams
Orders param.Field[[]V1OrderSubmitOrdersParamsOrderUnion]
type V1OrderSubmitOrdersParamsOrderNewOrderMultilegRequest struct{…}

Multileg strategy order request

Legs []V1OrderSubmitOrdersParamsOrderNewOrderMultilegRequestLeg

Legs that compose the strategy.

InstrumentType SecurityType

Security type for the leg.

One of the following:
const SecurityTypeCommonStock SecurityType = "COMMON_STOCK"
const SecurityTypePreferredStock SecurityType = "PREFERRED_STOCK"
const SecurityTypeOption SecurityType = "OPTION"
const SecurityTypeCash SecurityType = "CASH"
const SecurityTypeOther SecurityType = "OTHER"
Ratio string

Ratio for the leg.

Security string

Trading symbol (e.g. “AAPL” or OSI symbol for options)

Side Side

Leg side.

One of the following:
const SideBuy Side = "BUY"
const SideSell Side = "SELL"
const SideSellShort Side = "SELL_SHORT"
const SideOther Side = "OTHER"
ID stringOptional

Optional leg reference identifier.

PositionEffect PositionEffectOptional

Optional leg position effect.

One of the following:
const PositionEffectOpen PositionEffect = "OPEN"
const PositionEffectClose PositionEffect = "CLOSE"

Type of order (currently MARKET or LIMIT for multileg strategy submission)

One of the following:
const RequestOrderTypeMarket RequestOrderType = "MARKET"
const RequestOrderTypeLimit RequestOrderType = "LIMIT"
const RequestOrderTypeStop RequestOrderType = "STOP"
const RequestOrderTypeStopLimit RequestOrderType = "STOP_LIMIT"
const RequestOrderTypeTrailingStop RequestOrderType = "TRAILING_STOP"
const RequestOrderTypeTrailingStopLimit RequestOrderType = "TRAILING_STOP_LIMIT"
TimeInForce RequestTimeInForce

Time in force

One of the following:
const RequestTimeInForceDay RequestTimeInForce = "DAY"
const RequestTimeInForceGoodTillCancel RequestTimeInForce = "GOOD_TILL_CANCEL"
const RequestTimeInForceImmediateOrCancel RequestTimeInForce = "IMMEDIATE_OR_CANCEL"
const RequestTimeInForceFillOrKill RequestTimeInForce = "FILL_OR_KILL"
const RequestTimeInForceGoodTillDate RequestTimeInForce = "GOOD_TILL_DATE"
const RequestTimeInForceAtTheOpening RequestTimeInForce = "AT_THE_OPENING"
const RequestTimeInForceAtTheClose RequestTimeInForce = "AT_THE_CLOSE"
const RequestTimeInForceGoodTillCrossing RequestTimeInForce = "GOOD_TILL_CROSSING"
const RequestTimeInForceGoodThroughCrossing RequestTimeInForce = "GOOD_THROUGH_CROSSING"
const RequestTimeInForceAtCrossing RequestTimeInForce = "AT_CROSSING"
ID stringOptional

Optional client-provided unique ID (idempotency). Required to be unique per account.

maxLength64
LimitPrice stringOptional

Strategy price, required for LIMIT orders.

Quantity stringOptional

Optional strategy-level quantity. Multiplies leg quantities. Defaults to 1.

type NewOrderRequest struct{…}

Request to submit a new order (PlaceOrderRequest from spec)

InstrumentType SecurityType

Type of security

One of the following:
const SecurityTypeCommonStock SecurityType = "COMMON_STOCK"
const SecurityTypePreferredStock SecurityType = "PREFERRED_STOCK"
const SecurityTypeOption SecurityType = "OPTION"
const SecurityTypeCash SecurityType = "CASH"
const SecurityTypeOther SecurityType = "OTHER"

Type of order

One of the following:
const RequestOrderTypeMarket RequestOrderType = "MARKET"
const RequestOrderTypeLimit RequestOrderType = "LIMIT"
const RequestOrderTypeStop RequestOrderType = "STOP"
const RequestOrderTypeStopLimit RequestOrderType = "STOP_LIMIT"
const RequestOrderTypeTrailingStop RequestOrderType = "TRAILING_STOP"
const RequestOrderTypeTrailingStopLimit RequestOrderType = "TRAILING_STOP_LIMIT"
Quantity string

Quantity to trade. For COMMON_STOCK: shares (may be fractional if supported). For OPTION (single-leg): contracts (must be an integer)

Side Side

Side of the order

One of the following:
const SideBuy Side = "BUY"
const SideSell Side = "SELL"
const SideSellShort Side = "SELL_SHORT"
const SideOther Side = "OTHER"
TimeInForce RequestTimeInForce

Time in force

One of the following:
const RequestTimeInForceDay RequestTimeInForce = "DAY"
const RequestTimeInForceGoodTillCancel RequestTimeInForce = "GOOD_TILL_CANCEL"
const RequestTimeInForceImmediateOrCancel RequestTimeInForce = "IMMEDIATE_OR_CANCEL"
const RequestTimeInForceFillOrKill RequestTimeInForce = "FILL_OR_KILL"
const RequestTimeInForceGoodTillDate RequestTimeInForce = "GOOD_TILL_DATE"
const RequestTimeInForceAtTheOpening RequestTimeInForce = "AT_THE_OPENING"
const RequestTimeInForceAtTheClose RequestTimeInForce = "AT_THE_CLOSE"
const RequestTimeInForceGoodTillCrossing RequestTimeInForce = "GOOD_TILL_CROSSING"
const RequestTimeInForceGoodThroughCrossing RequestTimeInForce = "GOOD_THROUGH_CROSSING"
const RequestTimeInForceAtCrossing RequestTimeInForce = "AT_CROSSING"
ID stringOptional

Optional client-provided unique ID (idempotency). Required to be unique per account.

maxLength64
ExpiresAt TimeOptional

The timestamp when the order should expire (UTC). Required when time_in_force is GOOD_TILL_DATE.

formatdate-time
ExtendedHours boolOptional

Allow trading outside regular trading hours. Some brokers disallow options outside RTH.

InstrumentID InstrumentIDOrSymbolOptional

OEMS instrument UUID

formatuuid
LimitOffset stringOptional

Limit offset for trailing stop-limit orders (signed)

LimitPrice stringOptional

Limit price (required for LIMIT and STOP_LIMIT orders)

PositionEffect PositionEffectOptional

Required when instrument_type is OPTION. Specifies whether the order opens or closes a position.

One of the following:
const PositionEffectOpen PositionEffect = "OPEN"
const PositionEffectClose PositionEffect = "CLOSE"
StopPrice stringOptional

Stop price (required for STOP and STOP_LIMIT orders)

Symbol stringOptional

Trading symbol. For equities, use the ticker symbol (e.g., “AAPL”). For options, use the OSI symbol (e.g., “AAPL 250117C00190000”). Either symbol or instrument_id must be provided.

TrailingOffset stringOptional

Trailing offset amount (required for trailing orders)

TrailingOffsetType TrailingOffsetTypeOptional

Trailing offset type (PRICE or PERCENT_BPS)

One of the following:
const TrailingOffsetTypePrice TrailingOffsetType = "PRICE"
const TrailingOffsetTypeBps TrailingOffsetType = "BPS"
ReturnsExpand Collapse
type V1OrderSubmitOrdersResponse struct{…}
ID string

Engine-assigned unique identifier for this order (UUID).

AccountID int64

Account placing the order

formatint64
ClientOrderID string

Client-provided identifier echoed back (FIX tag 11).

CreatedAt Time

Timestamp when order was created (UTC)

formatdate-time
FilledQuantity string

Cumulative filled quantity

InstrumentID string

OEMS instrument UUID for the traded instrument.

formatuuid
InstrumentType SecurityType

Type of security

One of the following:
const SecurityTypeCommonStock SecurityType = "COMMON_STOCK"
const SecurityTypePreferredStock SecurityType = "PREFERRED_STOCK"
const SecurityTypeOption SecurityType = "OPTION"
const SecurityTypeCash SecurityType = "CASH"
const SecurityTypeOther SecurityType = "OTHER"
LeavesQuantity string

Remaining unfilled quantity

OrderType OrderType

Type of order (MARKET, LIMIT, etc.)

One of the following:
const OrderTypeMarket OrderType = "MARKET"
const OrderTypeLimit OrderType = "LIMIT"
const OrderTypeStop OrderType = "STOP"
const OrderTypeStopLimit OrderType = "STOP_LIMIT"
const OrderTypeTrailingStop OrderType = "TRAILING_STOP"
const OrderTypeTrailingStopLimit OrderType = "TRAILING_STOP_LIMIT"
const OrderTypeOther OrderType = "OTHER"
Quantity string

Total order quantity

Side Side

Side of the order (BUY, SELL, SELL_SHORT)

One of the following:
const SideBuy Side = "BUY"
const SideSell Side = "SELL"
const SideSellShort Side = "SELL_SHORT"
const SideOther Side = "OTHER"

Current status of the order

One of the following:
const OrderStatusPendingNew OrderStatus = "PENDING_NEW"
const OrderStatusNew OrderStatus = "NEW"
const OrderStatusPartiallyFilled OrderStatus = "PARTIALLY_FILLED"
const OrderStatusFilled OrderStatus = "FILLED"
const OrderStatusCanceled OrderStatus = "CANCELED"
const OrderStatusRejected OrderStatus = "REJECTED"
const OrderStatusExpired OrderStatus = "EXPIRED"
const OrderStatusPendingCancel OrderStatus = "PENDING_CANCEL"
const OrderStatusPendingReplace OrderStatus = "PENDING_REPLACE"
const OrderStatusReplaced OrderStatus = "REPLACED"
const OrderStatusDoneForDay OrderStatus = "DONE_FOR_DAY"
const OrderStatusStopped OrderStatus = "STOPPED"
const OrderStatusSuspended OrderStatus = "SUSPENDED"
const OrderStatusCalculated OrderStatus = "CALCULATED"
const OrderStatusOther OrderStatus = "OTHER"
Symbol string

Trading symbol

TimeInForce TimeInForce

Time in force instruction

One of the following:
const TimeInForceDay TimeInForce = "DAY"
const TimeInForceGoodTillCancel TimeInForce = "GOOD_TILL_CANCEL"
const TimeInForceImmediateOrCancel TimeInForce = "IMMEDIATE_OR_CANCEL"
const TimeInForceFillOrKill TimeInForce = "FILL_OR_KILL"
const TimeInForceGoodTillDate TimeInForce = "GOOD_TILL_DATE"
const TimeInForceAtTheOpening TimeInForce = "AT_THE_OPENING"
const TimeInForceAtTheClose TimeInForce = "AT_THE_CLOSE"
const TimeInForceGoodTillCrossing TimeInForce = "GOOD_TILL_CROSSING"
const TimeInForceGoodThroughCrossing TimeInForce = "GOOD_THROUGH_CROSSING"
const TimeInForceAtCrossing TimeInForce = "AT_CROSSING"
const TimeInForceOther TimeInForce = "OTHER"
UpdatedAt Time

Timestamp of the most recent update (UTC)

formatdate-time
Venue string

MIC code of the venue where the order is routed

AverageFillPrice stringOptional

Average fill price across all executions

Details []stringOptional

Contains execution, rejection or cancellation details, if any

ExpiresAt TimeOptional

Timestamp when the order will expire (UTC). Present when time_in_force is GOOD_TILL_DATE.

formatdate-time
ExtendedHours boolOptional

Whether the order is eligible for extended-hours trading.

LimitOffset stringOptional

Limit offset for trailing stop-limit orders (signed)

LimitPrice stringOptional

Limit price (for LIMIT and STOP_LIMIT orders)

QueueState QueueStateOptional

Parent order queue state, present when the order is awaiting release or released.

One of the following:
const QueueStateAwaitingRelease QueueState = "AWAITING_RELEASE"
const QueueStateReleased QueueState = "RELEASED"
ReleasesAt TimeOptional

Scheduled release time for orders awaiting release.

formatdate-time
StopPrice stringOptional

Stop price (for STOP and STOP_LIMIT orders)

TrailingLimitPx stringOptional

Current trailing limit price computed by the trailing strategy

TrailingOffset stringOptional

Trailing offset amount for trailing orders

TrailingOffsetType TrailingOffsetTypeOptional

Trailing offset type for trailing orders

One of the following:
const TrailingOffsetTypePrice TrailingOffsetType = "PRICE"
const TrailingOffsetTypeBps TrailingOffsetType = "BPS"
TrailingStopPx stringOptional

Current trailing stop price computed by the trailing strategy

TrailingWatermarkPx stringOptional

Trailing watermark price for trailing orders

TrailingWatermarkTs TimeOptional

Trailing watermark timestamp for trailing orders

formatdate-time
UnderlyingInstrumentID stringOptional

OEMS instrument ID of the option’s underlying instrument. Populated only for OPTIONS orders; null for non-options and for options whose underlier cannot be resolved from the instrument cache.

formatuuid

Submit Orders

package main

import (
  "context"
  "fmt"

  "github.com/clear-street/clear-street-go"
  "github.com/clear-street/clear-street-go/option"
)

func main() {
  client := clearstreet.NewClient(
    option.WithAPIKey("My API Key"),
  )
  response, err := client.V1.Orders.SubmitOrders(
    context.TODO(),
    0,
    clearstreet.V1OrderSubmitOrdersParams{
      Orders: []clearstreet.V1OrderSubmitOrdersParamsOrderUnion{clearstreet.V1OrderSubmitOrdersParamsOrderUnion{
        OfV1OrderSubmitOrderssOrderNewOrderMultilegRequest: &clearstreet.V1OrderSubmitOrdersParamsOrderNewOrderMultilegRequest{
          Legs: []clearstreet.V1OrderSubmitOrdersParamsOrderNewOrderMultilegRequestLeg{clearstreet.V1OrderSubmitOrdersParamsOrderNewOrderMultilegRequestLeg{
            InstrumentType: clearstreet.SecurityTypeOption,
            Ratio: "ratio",
            Security: "0193bb84-447a-706f-996f-097254663f02",
            Side: clearstreet.SideBuy,
          }, clearstreet.V1OrderSubmitOrdersParamsOrderNewOrderMultilegRequestLeg{
            InstrumentType: clearstreet.SecurityTypeOption,
            Ratio: "ratio",
            Security: "0193bb84-4db4-78ec-b4fd-cba8be61cf8a",
            Side: clearstreet.SideSell,
          }, clearstreet.V1OrderSubmitOrdersParamsOrderNewOrderMultilegRequestLeg{
            InstrumentType: clearstreet.SecurityTypeOption,
            Ratio: "ratio",
            Security: "0193bb84-5264-7f20-8fd3-35df82cd6ef0",
            Side: clearstreet.SideBuy,
          }},
          OrderType: clearstreet.RequestOrderTypeLimit,
          TimeInForce: clearstreet.RequestTimeInForceDay,
        },
      }},
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response)
}
{
  "data": [
    {
      "account_id": 19816,
      "average_fill_price": null,
      "client_order_id": "my-ref-id-20251003-001",
      "created_at": "2025-10-03T14:01:15.000000000Z",
      "filled_quantity": "0",
      "id": "0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01",
      "instrument_id": "c3c4c5c6-d3d4-e3e4-f3f4-f5f6f7f8f9fa",
      "instrument_type": "COMMON_STOCK",
      "leaves_quantity": "25",
      "limit_price": null,
      "order_type": "MARKET",
      "quantity": "25",
      "side": "SELL",
      "status": "PENDING_NEW",
      "stop_price": null,
      "symbol": "GOOG",
      "time_in_force": "DAY",
      "updated_at": "2025-10-03T14:01:15.000000000Z",
      "venue": "XNAS"
    },
    {
      "account_id": 19816,
      "average_fill_price": null,
      "client_order_id": "my-ref-id-20251003-002",
      "created_at": "2025-10-03T14:01:15.000000000Z",
      "filled_quantity": "0",
      "id": "0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e02",
      "instrument_id": "d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab",
      "instrument_type": "COMMON_STOCK",
      "leaves_quantity": "50",
      "limit_price": "180.00",
      "order_type": "LIMIT",
      "quantity": "50",
      "side": "BUY",
      "status": "PENDING_NEW",
      "stop_price": null,
      "symbol": "TSLA",
      "time_in_force": "DAY",
      "updated_at": "2025-10-03T14:01:15.000000000Z",
      "venue": "XNAS"
    }
  ],
  "error": null,
  "metadata": {
    "request_id": "ea0b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d"
  }
}
{
  "error": {
    "code": 400,
    "message": "Failed to parse the request body as JSON: [0].?: expected `,` or `}` at line 11 column 3"
  },
  "metadata": {
    "request_id": "8cb2657f-828e-4af5-b7d0-5cc6b7354bc2"
  }
}
{
  "error": {
    "code": 400,
    "details": [
      {
        "description": "Buying Power: required > available",
        "subject": "order:019dba52-6611-7b53-9bc9-18c410e5ebb8",
        "type": "BUYING_POWER"
      },
      {
        "domain": "com.clearstreet.oems.risk",
        "metadata": {
          "account_id": "100001",
          "account_type": "margin_reg_t",
          "available": "11004.5000",
          "multiplier": "2",
          "order_id": "019dba52-6611-7b53-9bc9-18c410e5ebb8",
          "required_equity": "30000",
          "required_options": "0",
          "required_total": "30000",
          "side": "Buy",
          "symbol": "AAPL"
        },
        "reason": "BUYING_POWER"
      }
    ],
    "message": "Risk check failed"
  },
  "metadata": {
    "request_id": "00bf689a-f53d-47b7-8b73-f0e69d2e89b6"
  }
}
{
  "error": {
    "code": 400,
    "details": [
      {
        "description": "Self-Match: would cross own orders",
        "subject": "order:019dba51-a906-7133-aacc-ea4fc05058d8",
        "type": "SELF_MATCH"
      },
      {
        "domain": "com.clearstreet.oems.risk",
        "metadata": {
          "account_id": "100001",
          "order_id": "019dba51-a906-7133-aacc-ea4fc05058d8",
          "price": "$200",
          "side": "Sell",
          "symbol": "AAPL"
        },
        "reason": "SELF_MATCH"
      }
    ],
    "message": "Risk check failed"
  },
  "metadata": {
    "request_id": "21b77c52-2386-40a4-8955-8fa1127ff424"
  }
}
{
  "error": {
    "code": 403,
    "message": "The caller does not have permission to execute the specified operation"
  },
  "metadata": {
    "request_id": "5518f0c6-58ff-4b4a-81a5-701556d41206"
  }
}
{
  "error": {
    "code": 422,
    "message": "Failed to deserialize the JSON body into the target type: [0]: missing field `order_type` at line 26 column 1"
  },
  "metadata": {
    "request_id": "1b2c02c3-92a1-4432-8638-e71038c105c3"
  }
}
Returns Examples
{
  "data": [
    {
      "account_id": 19816,
      "average_fill_price": null,
      "client_order_id": "my-ref-id-20251003-001",
      "created_at": "2025-10-03T14:01:15.000000000Z",
      "filled_quantity": "0",
      "id": "0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e01",
      "instrument_id": "c3c4c5c6-d3d4-e3e4-f3f4-f5f6f7f8f9fa",
      "instrument_type": "COMMON_STOCK",
      "leaves_quantity": "25",
      "limit_price": null,
      "order_type": "MARKET",
      "quantity": "25",
      "side": "SELL",
      "status": "PENDING_NEW",
      "stop_price": null,
      "symbol": "GOOG",
      "time_in_force": "DAY",
      "updated_at": "2025-10-03T14:01:15.000000000Z",
      "venue": "XNAS"
    },
    {
      "account_id": 19816,
      "average_fill_price": null,
      "client_order_id": "my-ref-id-20251003-002",
      "created_at": "2025-10-03T14:01:15.000000000Z",
      "filled_quantity": "0",
      "id": "0195f6d0-a1b2-7c3d-8e4f-5a6b7c8d9e02",
      "instrument_id": "d4d5d6d7-e4e5-f4f5-a4a5-a6a7a8a9aaab",
      "instrument_type": "COMMON_STOCK",
      "leaves_quantity": "50",
      "limit_price": "180.00",
      "order_type": "LIMIT",
      "quantity": "50",
      "side": "BUY",
      "status": "PENDING_NEW",
      "stop_price": null,
      "symbol": "TSLA",
      "time_in_force": "DAY",
      "updated_at": "2025-10-03T14:01:15.000000000Z",
      "venue": "XNAS"
    }
  ],
  "error": null,
  "metadata": {
    "request_id": "ea0b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d"
  }
}
{
  "error": {
    "code": 400,
    "message": "Failed to parse the request body as JSON: [0].?: expected `,` or `}` at line 11 column 3"
  },
  "metadata": {
    "request_id": "8cb2657f-828e-4af5-b7d0-5cc6b7354bc2"
  }
}
{
  "error": {
    "code": 400,
    "details": [
      {
        "description": "Buying Power: required > available",
        "subject": "order:019dba52-6611-7b53-9bc9-18c410e5ebb8",
        "type": "BUYING_POWER"
      },
      {
        "domain": "com.clearstreet.oems.risk",
        "metadata": {
          "account_id": "100001",
          "account_type": "margin_reg_t",
          "available": "11004.5000",
          "multiplier": "2",
          "order_id": "019dba52-6611-7b53-9bc9-18c410e5ebb8",
          "required_equity": "30000",
          "required_options": "0",
          "required_total": "30000",
          "side": "Buy",
          "symbol": "AAPL"
        },
        "reason": "BUYING_POWER"
      }
    ],
    "message": "Risk check failed"
  },
  "metadata": {
    "request_id": "00bf689a-f53d-47b7-8b73-f0e69d2e89b6"
  }
}
{
  "error": {
    "code": 400,
    "details": [
      {
        "description": "Self-Match: would cross own orders",
        "subject": "order:019dba51-a906-7133-aacc-ea4fc05058d8",
        "type": "SELF_MATCH"
      },
      {
        "domain": "com.clearstreet.oems.risk",
        "metadata": {
          "account_id": "100001",
          "order_id": "019dba51-a906-7133-aacc-ea4fc05058d8",
          "price": "$200",
          "side": "Sell",
          "symbol": "AAPL"
        },
        "reason": "SELF_MATCH"
      }
    ],
    "message": "Risk check failed"
  },
  "metadata": {
    "request_id": "21b77c52-2386-40a4-8955-8fa1127ff424"
  }
}
{
  "error": {
    "code": 403,
    "message": "The caller does not have permission to execute the specified operation"
  },
  "metadata": {
    "request_id": "5518f0c6-58ff-4b4a-81a5-701556d41206"
  }
}
{
  "error": {
    "code": 422,
    "message": "Failed to deserialize the JSON body into the target type: [0]: missing field `order_type` at line 26 column 1"
  },
  "metadata": {
    "request_id": "1b2c02c3-92a1-4432-8638-e71038c105c3"
  }
}