Place Order
Send on an established WebSocket connection to place a new order.
Places a new order (market, limit, TWAP, steady_pace, or stop). When status is
accepted, the response contains only id and clientOrderId. Subscribe to the
orders channel for fills and status changes.
Order fields and validation match the REST Place Order endpoint (NewOrderRequest).
See our Trade Guide for order-type fields, funding types, and validation error codes.
Requires access token scope: trade_trade on the token used to open the connection.
WebSocket-specific rules:
clientOrderIdis required inorder(optional on REST).- Idempotency: retrying with the same
clientOrderIdreturnsacceptedwith the original order. The REST Place Order endpoint returns 409 for a duplicateclientOrderIdinstead. - If a
place_order_responseis lost (e.g. connection drop), retry with the sameclientOrderIdand a newreqId. sourceis ignored if sent — the server setsapi_websocket.
Header Params
-
Authorizationstring requiredBearer token for authorization
Body Params
object
order object uses the same shape as REST NewOrderRequest.-
typestring enum requiredMust beplace_order.place_order -
reqIdstringOptional client correlation ID, echoed in the response when valid. Omitted from the response when not supplied or whenreqIditself fails validation. Use a freshreqIdon each retry; keepclientOrderIdunchanged when retrying a lost acknowledgement. -
accountIdstring requiredThe ID of the account -
orderobject requiredOrder parameters. Same field definitions and order-type rules as REST
NewOrderRequest(market, limit, TWAP, steady_pace, stop). See Place Order for order-type-specific required fields and validation.WebSocket-only:
clientOrderIdis required on every variant (optional on REST).sourceis ignored — the server setsapi_websocket.
ONE OF
-
clientOrderIdstring requiredClient-supplied identifier for a single logical order. Must be unique among concurrent open orders in your account. Reuse the sameclientOrderIdwhen retrying aplace_orderafter a lost or ambiguous acknowledgement — the server treats a duplicate placement with the sameclientOrderIdas an idempotent retry (unlike REST, which returns 409). Do not reuse aclientOrderIdfor a different order. -
productstring requiredProduct name e.g. BTC-USD -
typestring requiredMust be set to "market" to place a market order -
fundingTypestring enumThe 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 for more details on each funding type.
marginfunded -
sidestring enum requiredbuysell -
quantitystring decimal requiredThe quantity of thequantityCurrencyto buy or sell. -
quantityCurrencystring requiredThe 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
limitPriceis 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
limitPriceis provided, a protective marketable limit is computed automatically. e.g. If product isBTC-USD, the base currency will beBTCand the quote currency will beUSD.
-
timeInForcestring enumTime in force policy for market orders. Only IOC and FOK are supported. If not specified, defaults to IOC.IOCFOK
-
clientOrderIdstring requiredClient-supplied identifier for a single logical order. Must be unique among concurrent open orders in your account. Reuse the sameclientOrderIdwhen retrying aplace_orderafter a lost or ambiguous acknowledgement — the server treats a duplicate placement with the sameclientOrderIdas an idempotent retry (unlike REST, which returns 409). Do not reuse aclientOrderIdfor a different order. -
productstring requiredProduct name e.g. BTC-USD -
typestring requiredMust be set to "limit" to place a limit order -
fundingTypestring enumThe 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 for more details on each funding type.
marginfunded -
sidestring enum requiredbuysell -
quantitystring decimal required -
quantityCurrencystring requiredThe 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 beBTCand the quote currency will beUSD.
-
limitPricestring decimal requiredThe limit price. It always refers to the quote currency.
- It's maximum precision is determined by the product's
quoteDisplayPrecisionfield, which can be fetched from the list products endpoint.
- It's maximum precision is determined by the product's
-
durationintegerDuration 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. -
timeInForcestring enumTime in force policy for limit orders. Supported values: GTC, IOC, FOK, GTD. If not specified, defaults to GTC. Whendurationis provided, the order automatically uses GTD regardless of this field. GTD requiresdurationto be set. GTC cannot be combined withduration.GTCIOCFOKGTD
-
clientOrderIdstring requiredClient-supplied identifier for a single logical order. Must be unique among concurrent open orders in your account. Reuse the sameclientOrderIdwhen retrying aplace_orderafter a lost or ambiguous acknowledgement — the server treats a duplicate placement with the sameclientOrderIdas an idempotent retry (unlike REST, which returns 409). Do not reuse aclientOrderIdfor a different order. -
productstring requiredProduct name e.g. BTC-USD -
typestring requiredMust be set to "twap" to place a TWAP order -
fundingTypestring enumThe 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 for more details on each funding type.
marginfunded -
sidestring enum requiredbuysell -
quantitystring decimal required -
quantityCurrencystring requiredThe 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
limitPriceis 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
limitPriceis provided, a protective marketable limit is computed automatically. e.g. If product isBTC-USD, the base currency will beBTCand the quote currency will beUSD.
- Buy orders in base currency specify an exact quantity to purchase. When no
-
limitPricestring decimalThe limit price. It always refers to the quote currency.
- It's maximum precision is determined by the product's
quoteDisplayPrecisionfield, which can be fetched from the list products endpoint.
- It's maximum precision is determined by the product's
-
durationinteger requiredDuration of the TWAP order in minutes. Must be greater than 0. -
intervalintegerInterval of the time-sliced TWAP order in minutes. Only required ifisTimeSlicedistrue. -
scheduledDatestring date-timeDate to schedule the order. If not provided, the order will be placed immediately. -
parametersobjectparameters object
-
isTimeSlicedbooleanThe 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.
-
boundsControlstring enumThe 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.
narrowstandardwide
-
-
clientOrderIdstring requiredClient-supplied identifier for a single logical order. Must be unique among concurrent open orders in your account. Reuse the sameclientOrderIdwhen retrying aplace_orderafter a lost or ambiguous acknowledgement — the server treats a duplicate placement with the sameclientOrderIdas an idempotent retry (unlike REST, which returns 409). Do not reuse aclientOrderIdfor a different order. -
productstring requiredProduct name e.g. BTC-USD -
typestring requiredMust be set to "steady_pace" to place a Steady Pace order -
fundingTypestring enumThe 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 for more details on each funding type.
marginfunded -
sidestring enum requiredbuysell -
quantitystring decimal required -
quantityCurrencystring requiredThe 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
limitPriceis 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
limitPriceis provided, a protective marketable limit is computed automatically. e.g. If product isBTC-USD, the base currency will beBTCand the quote currency will beUSD.
- Buy orders in base currency specify an exact quantity to purchase. When no
-
limitPricestring decimalThe limit price. It always refers to the quote currency.
- It's maximum precision is determined by the product's
quoteDisplayPrecisionfield, which can be fetched from the list products endpoint.
- It's maximum precision is determined by the product's
-
scheduledDatestring date-timeDate to schedule the order. If not provided, the order will be placed immediately. -
parametersobjectparameters object
-
intervalinteger requiredThe interval for the SteadyPace order, specified in conjunction with the interval unit. -
intervalUnitstring enum requiredThe unit of time for the interval. Defaults to "minute".secondminutehour -
subOrderSizestring decimal requiredThe size of each sub-order in the SteadyPace order. -
variancestring decimalOptional 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.
-
-
clientOrderIdstring requiredClient-supplied identifier for a single logical order. Must be unique among concurrent open orders in your account. Reuse the sameclientOrderIdwhen retrying aplace_orderafter a lost or ambiguous acknowledgement — the server treats a duplicate placement with the sameclientOrderIdas an idempotent retry (unlike REST, which returns 409). Do not reuse aclientOrderIdfor a different order. -
productstring requiredProduct name e.g. BTC-USD -
typestring requiredMust be set to "stop" to place a stop order -
fundingTypestring enumThe 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 for more details on each funding type.
marginfunded -
sidestring enum requiredbuysell -
quantitystring decimal requiredThe quantity of thequantityCurrencyto buy or sell. -
quantityCurrencystring requiredThe 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 beBTCand the quote currency will beUSD.
-
triggerPricestring decimal requiredThe trigger price for stop orders. When the market reaches this price, the stop order is activated.
- For buy stop-limit orders,
triggerPricemust be less than or equal tolimitPrice. - For sell stop-limit orders,
triggerPricemust be greater than or equal tolimitPrice. - It always refers to the quote currency.
- For buy stop-limit orders,
-
limitPricestring decimalThe limit price. It always refers to the quote currency.
- It's maximum precision is determined by the product's
quoteDisplayPrecisionfield, which can be fetched from the list products endpoint.
- It's maximum precision is determined by the product's
-
timeInForcestring enumTime in force policy for stop orders. Only GTC (Good Till Cancelled) is supported. If not specified, defaults to GTC.GTC
Responses
101
Switching Protocols. The server responds with WsPlaceOrderResponse for each place_order message.
WsPlaceOrderResponse for each place_order message.Response Body
Server response to a place_order message. Accepted responses contain a slim order
acknowledgement (id and clientOrderId only). Full order state is delivered on the
orders subscription channel.
place_order_response and subsequent orders channel updates may arrive out of order
on the same connection.
ONE OF
-
typestring enum requiredplace_order_response -
reqIdstringEchoed when the client supplied a validreqId. -
statusstring enum requiredaccepted -
orderobject requiredSlim acknowledgement returned on acceptedplace_order_response. Contains only identity fields.order object
-
idstring uuid requiredAssigned order ID. -
clientOrderIdstringClient-supplied order ID from the request.
-
-
typestring enum requiredplace_order_response -
reqIdstringEchoed when the client supplied a validreqId. -
statusstring enum requiredrejected -
errorobject requiredStructured error whenstatusisrejected. Error codes mirror REST domain codes (e.g.trade:invalidQuantity) without the RESTbackend:prefix.error object
-
codestring requiredError code. Common values:
common:invalidArgument— validation failure (seefield)common:permissionDenied— missingtrade_tradescopetrade:orderNotCancelable— cancel on completed/canceled orderinternal:internalError— internal failure (generic message)internal:timeout— request timed out or connection canceled
-
fieldstring nullableRequest field associated with the error when applicable. Cancel validation usesidfororderIdwire field errors. -
messagestring requiredHuman-readable error detail.
-
403
Forbidden - Insufficient permissions
Response Body
object
-
errorstring required -
errorNamestring required -
reqIdstring required