FIX›Orders FIX

FIXMsgType 35=D
FIX 4.4 Gateway TLS/TCP

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. Product minimum order sizes and quantity precision are not exposed via FIX; obtain them from the Products REST endpoint (List Products).

Message fields

TagFieldRequiredDescription
1 Account Optional

Optional. Per-message trading account. When present, validated against the session Go Account ID (from SenderCompID). Mismatch → ExecutionReport reject.

11 ClOrdID Required

Required. Client-assigned order ID (≤ 256 chars; UUID recommended). Duplicate → reject 103=6.

55 Symbol Required

Required. Trading pair / product (e.g. TBTC-TUSD*, ETH-USD*).

54 Side Required

Required. 1 = Buy, 2 = Sell.

38 OrderQty Required

Required. 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) and Currency (15).

Increments are precision constraints, not minimums. baseIncrement and quoteIncrement define the permitted quantity precision (step size) for the denomination selected by Currency (15). Do not divide or otherwise combine increments to calculate a minimum order quantity.

Minimum order size comes from the Products REST response fields baseMinSize and quoteMinSize, which are independent minimums in their own currencies: see List Products. The FIX gateway does not provide product-rule discovery (no SecurityList or SecurityDefinition messages); fetch minimums and increments from the Products endpoint.

When baseMinSize is empty but quoteMinSize is set, a base-denominated order must still meet the quote-currency minimum after its value is calculated using the validation price, so the effective base minimum varies with price. (The Products REST response always includes both fields; unset minimums are returned as empty strings, not omitted.) For market and limit orders, both configured minimums are checked regardless of the quantity currency: a base-denominated order must still meet quoteMinSize, and a quote-denominated order must still meet baseMinSize.

Validation price: passive limit orders are validated against the submitted limit price; market and marketable-limit orders (limit price would execute immediately) are validated against an indicative market price observed at validation time. The validation price may differ from the price at which the order ultimately executes.

TWAP and SteadyPace orders are additionally subject to strategy-specific sizing rules, such as the SubOrderSize minimum under TargetStrategy (847); product minimums alone do not describe the sizing rules for every order type.

Example (precision is not a minimum): a product with baseIncrement 0.0001, an empty baseMinSize, and quoteMinSize 20.00 does not accept a minimum order of 0.0001 BTC. 0.0001 is only the allowed quantity precision. If BTC is priced at $40,000, a base-denominated order must be worth at least $20, i.e. at least 0.0005 BTC (a valid increment multiple). On rejection, Text (58) states the minimum in the currency whose limit was not met (the quote currency here), e.g. Amount must be at least 20 USD.

15 Currency (QuantityCurrency) Required

Required. Currency of OrderQty (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). Fetch product minimums and quantity precision from List Products.

40 OrdType Required

Required. 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 with 40=3 or 40=4.

60 TransactTime Required

Required. Client order-creation time (UTC). Format YYYYMMDD-HH:MM:SS[.sss[sss]].

44 Price Optional

Conditional.

  • 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 with 40=4 (Stop Limit).

Must be > 0 when present. Precision: product QuoteDisplayPrecision.

99 StopPx Optional

Conditional. Trigger price. Required when OrdType is Stop or Stop Limit (40=3 or 40=4). Use only with Stop / Stop Limit orders.

59 TimeInForce Optional

Optional. 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).

126 ExpireTime Optional

Conditional. Expiration timestamp (UTC). Required when TimeInForce = GTD (59=6). Must not be set unless 59=6.

168 EffectiveTime Optional

Optional. Scheduled activation time (UTC). Maps to REST ScheduledDate.

847 TargetStrategy Optional

Optional. Execution strategy. 1 = Market/Sweep (requires 40=1), 2 = Limit (requires 40=2), T = TWAP (40=1 or 40=2), S = SteadyPace (40=1 or 40=2). When absent, derived from OrdType. Not allowed with 40=3 or 40=4.

957 NoStrategyParameters Optional

Conditional. 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.

958 StrategyParameterName Optional

Conditional (inside group 957). Parameter name.

TWAP (847=T):

Name Required Notes
Duration Yes Minutes (integer ≥ 1)
IsTimeSliced No true / false (default false)
Interval Conditional Minutes; required when IsTimeSliced=true; Duration must be divisible by Interval
BoundsControl No narrow / standard / wide (lowercase); used when not time-sliced

SteadyPace (847=S):

Name Required Notes
Interval Yes Integer > 0
SubOrderSize Yes Decimal; must be < total order qty/funds and at least the product minimum sub-order size (dynamic; the reject text states the current minimum)
IntervalUnit No second / minute / hour (lowercase; default minute)
Variance No Decimal 0.0–1.0

Limit (847=2 or derived from 40=2):

Name Required Notes
Duration No Minutes (integer ≥ 1); creates a limit-with-duration order
959 StrategyParameterType Optional

Optional. 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.

960 StrategyParameterValue Optional

Conditional (with 958). Parameter value. BoundsControl and IntervalUnit must be lowercase on the wire.

5001 FundingType Optional

Optional. BitGo custom tag. 1 = Funded (default when absent), 2 = Margin.

Response messages

  • On success
    Accepted or working; further ExecutionReports may follow.
  • On reject
    Rejected (150=8, 39=8). Check ordRejReason (103) and text (58).

Examples

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