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 classic 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 classic mass quotes API: Once a portfolio is added to a Starbase Member, classic mass quoting is blocked for that portfolio. private/mass_quote over classic 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 classic 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 Classic 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.

Updating a resting quote

Each side of a quote entry is handled independently. When a side already has a resting order, the result depends on the quantity and price sent for that side: Any update other than leaving the side unchanged is a full replenishment of the side: the resulting resting quantity is the quantity sent (or the last quoted quantity if NULL_QUANTITY), regardless of fills since the previous quote. For example, quote 100, receive 12 in fills (88 resting), then send NULL_QUANTITY with a new price: 100 rests at the new price, so the side can be filled for up to 112 in total across the two quotes. To keep only the remaining size working, send the remaining quantity (88).

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 behavior 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, including 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.