Skip to main content

Placing multiple quotes

Mass Quotes Limit: Mass quotes are limited to 15 double-sided quotes.Fill Limits: The maximum number of fills on a single mass quote is 2000 fills for single-leg instruments and 400 fills for combo instruments.
Duplicate quote handling: When a client sends the same quote twice (identical price, amount, and instrument), Starbase preserves the bid and ask priorities.
Lowest-latency quoting: Mass quotes are always MMP-enforced and therefore use the MMP risk bypass — the lowest-latency method for market access, which skips the pre-trade risk engine. For single orders, set the MMP flag to get the same treatment. Most integrating clients should prefer this path. The bypass requires the MMP group’s Quantity Limit ≤ Max Quote Quantity.
Quote quantity validation is all-or-nothing: If any quote entry in a MassQuoteRequest contains an invalid buyAmount or sellAmount, the entire request is rejected and a MassQuoteReject (232) is returned — no quotes in the message are processed. This differs from the JSON-RPC mass quote system, where each side is validated independently and one side may succeed while the other fails.
Member portfolios cannot use the legacy mass quotes API: Once a portfolio is added to a Starbase Member, legacy mass quoting is blocked for that portfolio — private/mass_quote over JSON-RPC/WebSocket and mass quoting over the FIX API no longer work. Mass quotes for Member portfolios must be submitted through the Starbase Binary API. Regular order entry through the standard APIs is unaffected.
One mass-quote operating mode per portfolio: A portfolio cannot use legacy JSON-RPC/FIX mass quoting and Starbase mass quoting concurrently. Mass-quote updates replace the resting quote, so accepting both paths at the same time could produce inconsistent quote state. Select either Legacy or Starbase mass-quote mode for the portfolio.
The operating mode can be switched in real time through the API or Account Panel. Before switching, stop quote submission on the current path and reconcile or cancel its resting quotes. Mass-quote enablement remains separate from regular order-entry access.
Rate limiting and cancels: Setting a quote’s bidQty or askQty to 0 cancels that side. A MassQuoteRequest where all quantities are zero is treated as a cancel: it consumes tokens from the mass quote bucket but is never rejected due to rate limits, even when throttled. Any message containing at least one non-zero quantity is subject to normal rate limiting. See API Rate Limits for details.

MassQuoteRequest (130)

Place buy and/or sell orders for up to 15 instruments in one message. The table below outlines the content of field 5 (flags, type MassQuoteFlags) of MassQuoteRequest. This message-level field carries resetMmp only — all other quote behaviour is set per side in bidFlags/askFlags. The table below outlines the content of fields 13/14 (bidFlags/askFlags, type OrderFlags) of MassQuoteRequest. These are the same flags as field 10 of NewOrderRequest and are set independently per quote side.
Session-level cancel-on-disconnect: setting cancelOnDisconnect on LogonRequest covers every order and quote submitted on that session — both NewOrderRequest and MassQuoteRequest — with no need to tag each side individually. The per-side cancelOnDisconnect flag remains available. See Session-level CoD.

MassQuoteResponse (230)

Acknowledges the successful execution of a MassQuoteRequest. Quotes do not have a separate fillAmount and amount. A quote’s amount will always be what’s still available for execution. As such, in a MassQuoteResponse, the amounts of the quotes returned will already incorporate the accompanying fills. Individual quote sides that aggress may be speed bumped, indicated by bidStatus = 8 or askStatus = 8 (Queued). Once the speed bump period expires, an unsolicited MassQuoteOrdersPlaced message is sent for the placed sides. See Speed Bumps for details.

MassQuoteReject (232)

Reject generated in case a MassQuoteRequest is unsuccessful.