New Order Single (35=D)
The client sends NewOrderSingle (35=D) to the server over TLS/TCP. This is not an HTTP request.
Place a new trade order on the order-entry session (56=BITGO). Order types and business
validation match Prime REST order placement — including Market, Limit, TWAP, SteadyPace, and
Stop. See Place Order for the full
REST order catalog; the same order types are supported over FIX.
Both buy and sell support base- and quote-denominated sizing via OrderQty (38) and
Currency (15). The server responds with one or more ExecutionReports (35=8) on the same session.
Examples (pipe-delimited FIX):
Market buy $250 notional (funded):
8=FIX.4.4|9=156|35=D|49=0123456789abcdef0123456789abcdef|56=BITGO|34=5|52=20260415-14:30:00.123|11=ord-001|55=TBTC-TUSD*|54=1|40=1|38=250|15=TUSD*|60=20260415-14:30:00.123|10=XXX
Limit buy GTC (funded):
8=FIX.4.4|9=194|35=D|34=33|49=0123456789abcdef0123456789abcdef|52=20260511-11:57:46.396|56=BITGO|11=limit-gtc-funded-001|15=TBTC|38=0.001|40=2|44=83220.0|54=1|55=TBTC-TUSD*|59=1|60=20260511-13:00:02.000|5001=1|10=XXX
TWAP sell 60min (time-sliced):
8=FIX.4.4|9=234|35=D|49=0123456789abcdef0123456789abcdef|56=BITGO|34=8|52=20260415-15:07:16.163|11=ord-003|55=TBTC-TUSD*|54=2|38=0.002|15=TBTC|40=1|847=T|60=20260415-15:07:16.163|957=3|958=Duration|960=60|958=IsTimeSliced|960=true|958=Interval|960=5|10=XXX
Stop market sell:
8=FIX.4.4|9=166|35=D|49=0123456789abcdef0123456789abcdef|56=BITGO|34=9|52=20260415-15:10:00.000|11=ord-006|55=TBTC-TUSD*|54=2|40=3|38=0.001|15=TBTC|99=48000|60=20260415-15:10:00.000|10=XXX
SteadyPace buy:
8=FIX.4.4|9=245|35=D|49=0123456789abcdef0123456789abcdef|56=BITGO|34=12|52=20260415-15:12:00.000|11=ord-004|55=TBTC-TUSD*|54=1|38=0.001|15=TBTC|40=1|847=S|60=20260415-15:12:00.000|957=3|958=Interval|960=5|958=IntervalUnit|960=minute|958=SubOrderSize|960=0.0002|10=XXX
Margin market buy $250:
8=FIX.4.4|9=164|35=D|49=0123456789abcdef0123456789abcdef|56=BITGO|34=10|52=20260415-14:30:00.789|11=ord-008|55=TBTC-TUSD*|54=1|40=1|38=250|15=TUSD*|5001=2|60=20260415-14:30:00.789|10=XXX
Body Params
object
35=D) body fields.
Field descriptions mark Required / Optional / Conditional.-
accountstringOptional. Per-message trading account. When present, validated against the session Go Account ID (from SenderCompID). Mismatch → ExecutionReport reject. -
clOrdIDstring requiredRequired. Client-assigned order ID (≤ 256 chars; UUID recommended). Duplicate → reject103=6. -
symbolstring requiredRequired. Trading pair / product (e.g.TBTC-TUSD*,ETH-USD*). -
sidestring enum requiredRequired.1= Buy,2= Sell.12 -
orderQtystring requiredRequired. Order quantity in the currency of tag 15. Must be > 0. Precision follows the product Base Increment / Quote Increment for that currency.
QuantityCurrency (15) Side Meaning Base (e.g. BTC) Buy Buy N base units Base (e.g. BTC) Sell Sell N base units Quote (e.g. USD) Buy Buy N quote notional of base Quote (e.g. USD) Sell Sell base for N quote notional Size orders with
OrderQty(38) andCurrency(15). -
currencystring requiredRequired. Currency ofOrderQty(38). Must be the product base or quote currency; determines base-unit vs quote-notional sizing. Both buy and sell are supported for base- and quote-denominated sizes. When absent or empty, defaults to the product base currency. Must match against currencies in List Currencies and be consistent with Product (55). -
ordTypestring enum requiredRequired.
1= Market,2= Limit,3= Stop (market when triggered),4= Stop Limit.When TargetStrategy (847) is absent:
1→Sweep,2→Limit,3/4→Stop. Tag 847 is not allowed with40=3or40=4.1234 -
transactTimestring requiredRequired. Client order-creation time (UTC). FormatYYYYMMDD-HH:MM:SS[.sss[sss]]. -
pricestringConditional.
- Required when OrdType = Limit (
40=2) (strategy Limit). - Optional for TWAP / SteadyPace. When present, acts as a limit cap.
- Optional for Stop (
40=3/40=4): present → stop-limit; absent → stop-market. Send Price with40=4(Stop Limit).
Must be > 0 when present. Precision: product QuoteDisplayPrecision.
- Required when OrdType = Limit (
-
stopPxstringConditional. Trigger price. Required when OrdType is Stop or Stop Limit (40=3or40=4). Use only with Stop / Stop Limit orders. -
timeInForcestring enumOptional.1= GTC (default for Limit and Stop when omitted).3= IOC (Limit and Market orders only).4= FOK (Fill or Kill).6= GTD (requires ExpireTime 126).1346 -
expireTimestringConditional. Expiration timestamp (UTC). Required when TimeInForce = GTD (59=6). Must not be set unless59=6. -
effectiveTimestringOptional. Scheduled activation time (UTC). Maps to RESTScheduledDate. -
targetStrategystring enumOptional. Execution strategy.1= Market/Sweep (requires40=1),2= Limit (requires40=2),T= TWAP (40=1or40=2),S= SteadyPace (40=1or40=2). When absent, derived from OrdType. Not allowed with40=3or40=4.12TS -
noStrategyParametersintegerConditional. Count of strategy-parameter entries (repeating group with 958/959/960). Required for TWAP (847=T) and SteadyPace (847=S). Tag 959 is optional between each 958/960 pair. -
strategyParameterNamestringConditional (inside group 957). Parameter name.
TWAP (
847=T):Name Required Notes DurationYes Minutes (integer ≥ 1) IsTimeSlicedNo true/false(default false)IntervalConditional Minutes; required when IsTimeSliced=true; Duration must be divisible by IntervalBoundsControlNo narrow/standard/wide(lowercase); used when not time-slicedSteadyPace (
847=S):Name Required Notes IntervalYes Integer > 0 SubOrderSizeYes Decimal; must be < total order qty/funds and at least the product minimum sub-order size (dynamic; the reject text states the current minimum) IntervalUnitNo second/minute/hour(lowercase; defaultminute)VarianceNo Decimal 0.0–1.0 Limit (
847=2or derived from40=2):Name Required Notes DurationNo Minutes (integer ≥ 1); creates a limit-with-duration order -
strategyParameterTypestring enumOptional. Accepted for FIX compliance but ignored by the server on inbound orders; parameter types are inferred from the parameter name (958). Any listed value may be sent or the tag omitted entirely.1614 -
strategyParameterValuestringConditional (with 958). Parameter value.BoundsControlandIntervalUnitmust be lowercase on the wire. -
fundingTypestring enumOptional. BitGo custom tag.1= Funded (default when absent),2= Margin.12
Responses
200
Accepted or working; further ExecutionReports may follow.
Response Body
object
ExecutionReport (35=8). Server → client. Lifecycle events for NewOrderSingle, cancels,
fills, rejects, and OrderStatusRequest (150=I).
Correlate with ClOrdID (11) and OrderID (37). ExecType=F is used for all fills.
Use OrdStatus (39) and LeavesQty (151) for working vs terminal state — not 150=F
alone. Terminal Filled (39=2, typically 151=0) is usually on the following Order
Status report (150=I), not on the last fill.
-
accountstringOptional Trading account ID (Go account ID) -
avgPxstring requiredRequired. Average fill price (0if unfilled). -
clOrdIDstring requiredRequired. Client order id.NONEon cancel reports (PendingCancel / Canceled) and when the order has no client id. -
cumQtystring requiredRequired. Total quantity filled so far. -
currencystringOptional. Quantity currency for tag 38. -
execIDstring requiredRequired. Unique id for this ExecutionReport. -
lastPxstringConditional. This fill's price. Present only when ExecType = F (Trade). Omitted otherwise. -
lastQtystringConditional. This fill's quantity. Present only when ExecType = F (Trade). Omitted otherwise. -
orderIDstring requiredRequired. BitGo order UUID.NONEon some reject reports. -
orderQtystringOptional. Original order quantity echoed from the NewOrderSingle. -
ordStatusstring enum requiredRequired. Current order state:APending New,0New,1Partially Filled,2Filled,4Canceled,6Pending Cancel,8Rejected.012468A -
ordTypestring enumOptional. Echoed from the original NewOrderSingle.1234 -
origClOrdIDstringOptional / Conditional. Set on cancel-related ERs to the original NOS ClOrdID. -
pricestringOptional. Limit price echoed from the original NewOrderSingle. -
sidestring enum requiredRequired.1Buy,2Sell.7Undisclosed may appear on some reject reports.127 -
symbolstring requiredRequired. Product echoed from the NewOrderSingle.N/Aon some reject reports. -
textstringOptional / Conditional. Human-readable reject detail. Present on rejects (150=8). -
timeInForcestring enumOptional. Echoed from the original NewOrderSingle.1346 -
transactTimestring requiredRequired. UTC business timestamp for this report. -
stopPxstringOptional. Stop/trigger price echoed from the original NewOrderSingle. -
ordRejReasoninteger enumConditional. Present only when ExecType = 8 (Rejected).1Unknown symbol,2Market unavailable,3OrderExceedsLimit,6Duplicate ClOrdID,15UnknownAccount,99Other (see Text).12361599 -
execTypestring enum requiredRequired. Event type:APendingNew,0New,FTrade (partial or full),6PendingCancel,4Canceled,8Rejected,IOrder Status (response to35=H, and terminal status summary after a full fill).0468AFI -
leavesQtystring requiredRequired. Quantity still open. Use together withOrdStatus(39) for working vs terminal state. On terminal Canceled reports (150=4/39=4) this stays at the open quantity at cancel time; it is not reset to0(39=4is canceled even when151>0). On fills,151=0with39=1is not yet terminal Filled — wait for39=2(typically on150=I). -
effectiveTimestringOptional. Scheduled activation time echoed from NOS. -
grossTradeAmtstringOptional. Cumulative filled quote quantity (equivalent to RESTfilledQuoteQuantity). -
targetStrategystring enumOptional. Algo strategy echoed from the original order (TTWAP,SSteadyPace).TS -
noStrategyParametersintegerOptional. Strategy param group count echoed from NOS for algo orders. -
strategyParameterNamestringOptional. Parameter name within group 957. -
strategyParameterTypestring enumOptional. Populated by the server on echoed strategy parameters:1= Int,6= Float,14= String, based on the parameter's inferred type.1614 -
strategyParameterValuestringOptional. Parameter value within group 957. -
fundingTypestring enumOptional.1Funded,2Margin. Echoed from the original order.12
150=8, 39=8). Check ordRejReason (103) and text (58).