---
title: "Place Order"
method: POST
path: "/api/prime/trading/v1/accounts/{accountId}/orders"
tags: ["Orders"]
---

# Place Order

`POST /api/prime/trading/v1/accounts/{accountId}/orders`

Places a new order. There are several types of orders available - Market, Limit, TWAP, SteadyPace, and Stop (the latter three optionally support a limit price).
Orders can be funded by your account balance or on margin.
- When an order with funding type "funded" is placed, funds will be reserved from your Go account for the amount of the order. You must have sufficient available balance in your Go account to place a funded order.
- When an order with funding type "margin" is placed, funds will be reserved from your Margin Trade Account. You must have sufficient available margin (NOP limit) to place a margin order.
- Stop orders require a `triggerPrice`. When the market reaches the trigger price, the order is activated. A stop order without a `limitPrice` executes as a market order (stop-market). A stop order with a `limitPrice` places a limit order at the specified price (stop-limit).
- Buy orders can be placed in either base or quote currency. A buy in base currency specifies an exact quantity to purchase (e.g., "buy 1 BTC"), while a buy in quote currency specifies a total spend amount (e.g., "buy $10,000 of BTC"). Similarly, sell orders can be placed in either base or quote currency.
- When no `limitPrice` is provided on a base-buy or quote-sell order, the system automatically computes a protective marketable limit price derived from the current reference price. This prevents orders from executing at an unexpectedly unfavorable price. For market (Sweep) orders, the computed limit is valid for a short window to avoid leaving orders open indefinitely if the market moves away.
See our [Trade Guide](/docs/trade-overview) for more details on each order type and funding options.

**Requires access token scope:** `trade_trade`

## Path parameters

- `accountId` string, required

## Request body

- union
  - NewMarketOrderRequest
    - `clientOrderId` string — Custom order ID provided by the client. This must be a unique ID for each individual order and cannot be the same across multiple requests. Can be used to ensure idempotency of order requests.
    - `product` string, required — Product name e.g. BTC-USD
    - `type` string, required — Must be set to "market" to place a market order
    - `fundingType` 'margin' | 'funded' — The funding type of the order. - Funded orders will be placed using the Go account balance. - Margin orders will be placed using the margin account balances. See our [Trade Guide](/docs/trade-overview) for more details on each funding type.
    - `side` 'buy' | 'sell', required — The side of the order
    - `quantity` string, decimal, required — The quantity of the `quantityCurrency` to buy or sell.
    - `quantityCurrency` string, required — The quantity currency for the order. Can be in base or quote currency for both buy and sell orders. - Buy orders in quote currency specify a total spend amount (e.g., "buy $10,000 of BTC"). - Buy orders in base currency specify an exact quantity to purchase (e.g., "buy 1 BTC"). When no `limitPrice` is provided, a protective marketable limit is computed automatically. - Sell orders in base currency specify an exact quantity to sell (e.g., "sell 0.5 BTC"). - Sell orders in quote currency specify a target proceeds amount (e.g., "sell $500 of BTC"). When no `limitPrice` is provided, a protective marketable limit is computed automatically. e.g. If product is `BTC-USD`, the base currency will be `BTC` and the quote currency will be `USD`.
    - `timeInForce` 'IOC' | 'FOK' — Time in force policy for market orders. Only IOC and FOK are supported. If not specified, defaults to IOC.
  - NewLimitOrderRequest
    - `clientOrderId` string — Custom order ID provided by the client. This must be a unique ID for each individual order and cannot be the same across multiple requests. Can be used to ensure idempotency of order requests.
    - `product` string, required — Product name e.g. BTC-USD
    - `type` string, required — Must be set to "limit" to place a limit order
    - `fundingType` 'margin' | 'funded' — The funding type of the order. - Funded orders will be placed using the Go account balance. - Margin orders will be placed using the margin account balances. See our [Trade Guide](/docs/trade-overview) for more details on each funding type.
    - `side` 'buy' | 'sell', required — The side of the order
    - `quantity` string, decimal, required
    - `quantityCurrency` string, required — The quantity currency. Can be in base or quote currency for both buy and sell orders. - Buy orders in base currency specify an exact quantity to purchase. - Buy orders in quote currency specify a total spend amount. - Sell orders in base currency specify an exact quantity to sell. - Sell orders in quote currency specify a target proceeds amount. e.g. If product is `BTC-USD`, the base currency will be `BTC` and the quote currency will be `USD`.
    - `limitPrice` string, decimal, required — The limit price. It always refers to the quote currency. - It's maximum precision is determined by the product's `quoteDisplayPrecision` field, which can be fetched from the list products endpoint.
    - `duration` integer — Duration of the limit order in minutes. When set, the order uses GTD (Good Till Date) time in force and expires after the specified duration. Cannot be combined with timeInForce=GTC. For orders that are good till cancelled, omit duration and use timeInForce=GTC.
    - `timeInForce` 'GTC' | 'IOC' | 'FOK' | 'GTD' — Time in force policy for limit orders. Supported values: GTC, IOC, FOK, GTD. If not specified, defaults to GTC. When `duration` is provided, the order automatically uses GTD regardless of this field. GTD requires `duration` to be set. GTC cannot be combined with `duration`.
  - NewTWAPOrderRequest
    - `clientOrderId` string — Custom order ID provided by the client. This must be a unique ID for each individual order and cannot be the same across multiple requests. Can be used to ensure idempotency of order requests.
    - `product` string, required — Product name e.g. BTC-USD
    - `type` string, required — Must be set to "twap" to place a TWAP order
    - `fundingType` 'margin' | 'funded' — The funding type of the order. - Funded orders will be placed using the Go account balance. - Margin orders will be placed using the margin account balances. See our [Trade Guide](/docs/trade-overview) for more details on each funding type.
    - `side` 'buy' | 'sell', required — The side of the order
    - `quantity` string, decimal, required
    - `quantityCurrency` string, required — The quantity currency. Can be in base or quote currency for both buy and sell orders. - Buy orders in base currency specify an exact quantity to purchase. When no `limitPrice` is provided, a protective marketable limit is computed automatically. - Buy orders in quote currency specify a total spend amount. - Sell orders in base currency specify an exact quantity to sell. - Sell orders in quote currency specify a target proceeds amount. When no `limitPrice` is provided, a protective marketable limit is computed automatically. e.g. If product is `BTC-USD`, the base currency will be `BTC` and the quote currency will be `USD`.
    - `limitPrice` string, decimal — The limit price. It always refers to the quote currency. - It's maximum precision is determined by the product's `quoteDisplayPrecision` field, which can be fetched from the list products endpoint.
    - `duration` integer, required — Duration of the TWAP order in minutes. Must be greater than 0.
    - `interval` integer — Interval of the time-sliced TWAP order in minutes. Only required if `isTimeSliced` is `true`.
    - `scheduledDate` string, date-time — Date to schedule the order. If not provided, the order will be placed immediately.
    - `parameters` TWAPOrderParameters
      - `isTimeSliced` boolean — The isTimeSliced field when provided determines the order's time slicing behavior: - If isTimeSliced is set to true, the order will be executed using a time-sliced strategy. - If isTimeSliced is set to false, the order will be executed using a regular TWAP strategy without time slicing. - If isTimeSliced is not specified, the default behavior uses a regular TWAP strategy without time slicing.
      - `boundsControl` 'narrow' | 'standard' | 'wide' — The boundsControl field when provided determines how strictly the TWAP order adheres to its target fill progression. This parameter only applies to regular TWAP orders. It is not supported for TimeSliced orders and will be ignored if provided. - narrow - within 3% or 3 minutes - standard - within 5% or 5 minutes - wide - within 7.5% or 7.5 minutes - If boundsControl is not specified, the default behavior is `standard`.
  - NewSteadyPaceOrderRequest
    - `clientOrderId` string — Custom order ID provided by the client. This must be a unique ID for each individual order and cannot be the same across multiple requests. Can be used to ensure idempotency of order requests.
    - `product` string, required — Product name e.g. BTC-USD
    - `type` string, required — Must be set to "steady_pace" to place a Steady Pace order
    - `fundingType` 'margin' | 'funded' — The funding type of the order. - Funded orders will be placed using the Go account balance. - Margin orders will be placed using the margin account balances. See our [Trade Guide](/docs/trade-overview) for more details on each funding type.
    - `side` 'buy' | 'sell', required — The side of the order
    - `quantity` string, decimal, required
    - `quantityCurrency` string, required — The quantity currency. Can be in base or quote currency for both buy and sell orders. - Buy orders in base currency specify an exact quantity to purchase. When no `limitPrice` is provided, a protective marketable limit is computed automatically. - Buy orders in quote currency specify a total spend amount. - Sell orders in base currency specify an exact quantity to sell. - Sell orders in quote currency specify a target proceeds amount. When no `limitPrice` is provided, a protective marketable limit is computed automatically. e.g. If product is `BTC-USD`, the base currency will be `BTC` and the quote currency will be `USD`.
    - `limitPrice` string, decimal — The limit price. It always refers to the quote currency. - It's maximum precision is determined by the product's `quoteDisplayPrecision` field, which can be fetched from the list products endpoint.
    - `scheduledDate` string, date-time — Date to schedule the order. If not provided, the order will be placed immediately.
    - `parameters` SteadyPaceOrderParameters
      - `interval` integer, required — The interval for the SteadyPace order, specified in conjunction with the interval unit.
      - `intervalUnit` 'second' | 'minute' | 'hour', required — The unit of time for the interval. Defaults to "minute".
      - `subOrderSize` string, decimal, required — The size of each sub-order in the SteadyPace order.
      - `variance` string, decimal — Optional degree of randomization for sub-order sizes. Accepts a decimal value rounded to two decimal places between 0 and 1, representing the variation in the size of each sub-order. For example, a value of 0.20 indicates a 20% variance in sub-order sizes.
  - NewStopOrderRequest
    - `clientOrderId` string — Custom order ID provided by the client. This must be a unique ID for each individual order and cannot be the same across multiple requests. Can be used to ensure idempotency of order requests.
    - `product` string, required — Product name e.g. BTC-USD
    - `type` string, required — Must be set to "stop" to place a stop order
    - `fundingType` 'margin' | 'funded' — The funding type of the order. - Funded orders will be placed using the Go account balance. - Margin orders will be placed using the margin account balances. See our [Trade Guide](/docs/trade-overview) for more details on each funding type.
    - `side` 'buy' | 'sell', required — The side of the order
    - `quantity` string, decimal, required — The quantity of the `quantityCurrency` to buy or sell.
    - `quantityCurrency` string, required — The quantity currency. Can be in base or quote currency for both buy and sell orders. - Buy orders in base currency specify an exact quantity to purchase. - Buy orders in quote currency specify a total spend amount. - Sell orders in base currency specify an exact quantity to sell. - Sell orders in quote currency specify a target proceeds amount. e.g. If product is `BTC-USD`, the base currency will be `BTC` and the quote currency will be `USD`.
    - `triggerPrice` string, decimal, required — The trigger price for stop orders. When the market reaches this price, the stop order is activated. - For buy stop-limit orders, `triggerPrice` must be less than or equal to `limitPrice`. - For sell stop-limit orders, `triggerPrice` must be greater than or equal to `limitPrice`. - It always refers to the quote currency.
    - `limitPrice` string, decimal — The limit price. It always refers to the quote currency. - It's maximum precision is determined by the product's `quoteDisplayPrecision` field, which can be fetched from the list products endpoint.
    - `timeInForce` 'GTC' — Time in force policy for stop orders. Only GTC (Good Till Cancelled) is supported. If not specified, defaults to GTC.

## Response `200`

An order

- Order
  - `id` string, uuid, required — Unique identifier for the order. Used to reference the order in other endpoints.
  - `accountId` string, required — The ID of the account
  - `enterpriseId` string, required
  - `initiatedByUserId` string, required
  - `canceledByUserId` string, required
  - `clientOrderId` string, required — Custom order ID provided by the client. This must be a unique ID for each individual order and cannot be the same across multiple requests. Can be used to ensure idempotency of order requests.
  - `time` string, date-time, required
  - `creationDate` string, date-time, required
  - `scheduledDate` string, date-time, required — Date to schedule the order. If not provided, the order will be placed immediately.
  - `lastFillDate` string, date-time, required
  - `completionDate` string, date-time, required
  - `settleDate` string, date-time, required
  - `fundingType` 'margin' | 'funded', required — The funding type of the order. - Funded orders will be placed using the Go account balance. - Margin orders will be placed using the margin account balances. See our [Trade Guide](/docs/trade-overview) for more details on each funding type.
  - `type` 'market' | 'twap' | 'limit' | 'steady_pace' | 'stop', required — The type of order to be placed. See our [Trade Guide](/docs/trade-overview) for more details on each order type.
  - `timeInForce` 'GTC' | 'IOC' | 'FOK' | 'GTD', required — Time in force policy for the order. - GTC (Good Till Cancelled): Order remains active until filled or cancelled. - IOC (Immediate or Cancel): Order fills as much as possible immediately, any unfilled remainder is cancelled. - FOK (Fill or Kill): The entire order must be filled immediately or it is cancelled completely. Unlike IOC, no partial fills are accepted. - GTD (Good Till Date): Order remains active until filled, cancelled, or the specified duration expires. Requires `duration` to be set.
  - `status` 'pending_open' | 'open' | 'completed' | 'pending_cancel' | 'canceled' | 'error' | 'scheduled', required
  - `reason` 'internalError' | 'insufficientFunds', required — Reason for order cancellation. 'internalError' indicates an error occurred within the server while processing the order, resulting in an order cancellation. 'insufficientFunds' indicates that the order was cancelled due to shortage of funds to complete the transaction.
  - `reasonDescription` string, required
  - `product` string, required — Product name e.g. BTC-USD (base-quote)
  - `side` 'buy' | 'sell', required — The side of the order
  - `quantity` string, decimal, required — The specified quantity.
  - `quantityCurrency` string, required — The specified quantity currency.
  - `filledQuantity` string, decimal, required — The total base quantity filled.
  - `filledQuoteQuantity` string, decimal, required — The total quote quantity filled.
  - `leavesQuantity` string, decimal, required — For orders created with base currency, this field is set to the remaining unfilled base quantity. - Only one of leavesQuantity or leavesQuoteQuantity will be set. - This field is set to null for orders created with quote currency.
  - `leavesQuoteQuantity` string, decimal, required — For orders created with quote currency, this field is set to the remaining unfilled quote quantity. - Only one of leavesQuantity or leavesQuoteQuantity will be set. - This field is set to null for orders created with base currency.
  - `averagePrice` string, decimal, required — The average price for the order's trades.
  - `limitPrice` string, decimal, required — The limit price. It always refers to the quote currency. - It's maximum precision is determined by the product's `quoteDisplayPrecision` field, which can be fetched from the list products endpoint.
  - `triggerPrice` string, decimal — The trigger price for stop orders. When the market reaches this price, the stop order is activated. - For buy stop-limit orders, `triggerPrice` must be less than or equal to `limitPrice`. - For sell stop-limit orders, `triggerPrice` must be greater than or equal to `limitPrice`. - It always refers to the quote currency.
  - `duration` integer, required — Duration of the order in minutes.
  - `twapInterval` integer, required — Interval length of the TWAP order in minutes.
  - `rtId` string, required — The request tracking ID associated with the order.
  - `parameters` object
    - `isTimeSliced` boolean — The isTimeSliced field when provided determines the order's time slicing behavior: - If isTimeSliced is set to true, the order will be executed using a time-sliced strategy. - If isTimeSliced is set to false, the order will be executed using a regular TWAP strategy without time slicing. - If isTimeSliced is not specified, the default behavior uses a regular TWAP strategy without time slicing.
    - `boundsControl` 'narrow' | 'standard' | 'wide' — The boundsControl field when provided determines how strictly the TWAP order adheres to its target fill progression. This parameter only applies to regular TWAP orders. It is not supported for TimeSliced orders and will be ignored if provided. - narrow - within 3% or 3 minutes - standard - within 5% or 5 minutes - wide - within 7.5% or 7.5 minutes - If boundsControl is not specified, the default behavior is `standard`.
    - `interval` integer, required — The interval for the SteadyPace order, specified in conjunction with the interval unit.
    - `intervalUnit` 'second' | 'minute' | 'hour', required — The unit of time for the interval. Defaults to "minute".
    - `subOrderSize` string, decimal, required — The size of each sub-order in the SteadyPace order.
    - `variance` string, decimal — Optional degree of randomization for sub-order sizes. Accepts a decimal value rounded to two decimal places between 0 and 1, representing the variation in the size of each sub-order. For example, a value of 0.20 indicates a 20% variance in sub-order sizes.
  - `notes` string, required — Additional notes associated with the order.

## Other responses

- `400` — Bad request - Invalid order parameters
- `401` — Unauthorized - Invalid or missing authentication
- `403` — Forbidden - Insufficient permissions
- `409` — Conflict - An identifier or resource is already in use
- `422` — Unprocessable Entity - JSON payload is improperly formatted
- `429` — Too Many Requests - Rate limit exceeded
- `500` — Internal Server Error

---

[API](https://skmtc.net/bitgo/apis/bitgo-api.md) · [All operations](https://skmtc.net/bitgo/apis/bitgo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bitgo/bitgo-api/revisions/e445c15e5bee/schema)
