---
title: "GET /private/mass_quote"
method: GET
path: "/private/mass_quote"
tags: ["Trading", "Matching Engine", "Private"]
---

# GET /private/mass_quote

`GET /private/mass_quote`

Places buy and/or sell orders (quotes) on one or more instruments simultaneously. This method is designed for market makers who need to quote on multiple instruments efficiently.

**Requirements:**
- Cancel-on-Disconnect must be enabled (see [private/enable_cancel_on_disconnect](https://docs.deribit.com/api-reference/session-management/private-enable_cancel_on_disconnect)), otherwise the request will return an error.
- This endpoint can only be used after approval from the administrators.

Each quote can include both bid and ask sides, or just one side. Quotes are identified by `quote_set_id` for targeted cancellation. Use the `wait_for_response` parameter to control whether to wait for all orders to be processed before returning.

Accepted quotes are published to the standard Deribit order book and are visible in the UI and non-Starbase market data feeds.

**📖 Related Article:** [Mass Quotes Specifications](https://docs.deribit.com/articles/mass-quotes-specifications)

**Scope:** `trade:read_write`

[Try in API console](https://test.deribit.com/api_console?method=%2Fprivate%2Fmass_quote)

## Query parameters

- `wait_for_response` boolean
- `detailed` boolean
- `quote_id` string, required
- `mmp_group` string, required
- `valid_until` integer
- `quotes` object[], required
  - `instrument_name` string — The name of the instrument.
  - `quote_set_id` string — User-defined label that can be used for targeted cancels using private/cancel_quotes.
  - `ask` object — Order details for the ask. If not provided, `bid` must be present.
    - `price` number — The price of this side of the quote. If no price is supplied, only the amount is amended.
    - `amount` number — The amount of this side of the quote. If no quantity is supplied, only the price is amended.
    - `post_only` boolean — If true, the order is considered post-only. If the new price would cause the order to be filled immediately (as taker), the price will be changed to be just below the spread. Default - `false`
    - `reject_post_only` boolean — If an order is considered post-only and this field is set to true then the order is put to the order book unmodified or the request is rejected. Only valid in combination with "post_only" set to `true`. Default value - `false`
  - `bid` object — Order details for the bid. If not provided, `ask` must be present.
    - `price` number — The price of this side of the quote. If no price is supplied, only the amount is amended.
    - `amount` number — The amount of this side of the quote. If no quantity is supplied, only the price is amended.
    - `post_only` boolean — If true, the order is considered post-only. If the new price would cause the order to be filled immediately (as taker), the price will be changed to be just below the spread. Default - `false`
    - `reject_post_only` boolean — If an order is considered post-only and this field is set to true then the order is put to the order book unmodified or the request is rejected. Only valid in combination with "post_only" set to `true`. Default value - `false`

## Response `200`

Success response

- PrivateMassQuoteResponse
  - `jsonrpc` '2.0', required — The JSON-RPC version (2.0)
  - `id` integer — The id that was sent in the request
  - `result` object, required
    - `orders` Order[]
      - `order_id` string, required — Unique order identifier
      - `order_state` 'open' | 'filled' | 'rejected' | 'cancelled' | 'untriggered' | 'triggered', required — Order state: `"open"`, `"filled"`, `"rejected"`, `"cancelled"`, `"untriggered"`
      - `order_type` 'market' | 'limit' | 'stop_market' | 'stop_limit' | 'take_market' | 'take_limit' | 'trailing_stop', required — Order type: `"limit"`, `"market"`, `"stop_limit"`, `"stop_market"`, `"take_limit"`, `"take_market"`, `"trailing_stop"`
      - `original_order_type` 'market' | 'market_limit' — Original API order type when an order is represented internally as a limit order. For example, Starbase market orders use `"limit"` as `order_type` with `"market"` in this optional field.
      - `time_in_force` 'good_til_cancelled' | 'good_til_day' | 'fill_or_kill' | 'immediate_or_cancel', required — Order time in force: `"good_til_cancelled"`, `"good_til_day"`, `"fill_or_kill"` or `"immediate_or_cancel"`
      - `is_rebalance` boolean — Optional (only for spot). `true` if order was automatically created during cross-collateral balance restoration
      - `is_liquidation` boolean — Optional (not added for spot). `true` if order was automatically created during liquidation
      - `instrument_name` string, required — Unique instrument identifier
      - `creation_timestamp` integer, required — The timestamp (milliseconds since the Unix epoch)
      - `last_update_timestamp` integer, required — The timestamp (milliseconds since the Unix epoch)
      - `starbase_last_update_timestamp` integer — The Starbase causal timestamp (nanoseconds since the Unix epoch) of the last book update that affected this order. Present only for orders placed in Starbase, including combo leg order updates; not always available for direct access orders
      - `starbase_client_order_id` string — Client order id of an order submitted directly to [Starbase](https://docs.deribit.com/starbase/overview) via direct access; not returned for orders placed through the Deribit API (combo legs inherit the parent combo order's client order id)
      - `direction` 'buy' | 'sell', required — Direction: `buy`, or `sell`
      - `price` union, required — Price in base currency or "market_price" in case of open trigger market orders
        - number
        - 'market_price'
      - `label` string, required — User defined label (up to 64 characters)
      - `post_only` boolean, required — `true` for post-only orders only
      - `reject_post_only` boolean — `true` if order has `reject_post_only` flag (field is present only when `post_only` is `true`)
      - `reduce_only` boolean — Optional (not added for spot). '`true` for reduce-only orders only'
      - `api` boolean, required — `true` if created with API
      - `web` boolean — `true` if created via Deribit frontend (optional)
      - `mobile` boolean — Optional field with value `true` added only when created with Mobile Application
      - `refresh_amount` number — The initial display amount of iceberg order. Iceberg order display amount will be refreshed to that value after match consuming actual display amount. Absent for other types of orders
      - `display_amount` number — The actual display amount of iceberg order. Absent for other types of orders.
      - `amount` number — It represents the requested order size. For perpetual and inverse futures the amount is in USD units. For options and linear futures it is the underlying base currency coin.
      - `contracts` number — It represents the order size in contract units. (Optional, may be absent in historical data).
      - `filled_amount` number — Filled amount of the order. For perpetual and futures the filled_amount is in USD units, for options - in units or corresponding cryptocurrency contracts, e.g., BTC or ETH.
      - `average_price` number — Average fill price of the order
      - `advanced` 'usd' | 'implv' — advanced type: `"usd"` or `"implv"` (Only for options; field is omitted if not applicable).
      - `implv` number — Implied volatility in percent. (Only if `advanced="implv"`)
      - `usd` number — Option price in USD (Only if `advanced="usd"`)
      - `triggered` boolean — Whether the trigger order has been triggered
      - `trigger` 'index_price' | 'mark_price' | 'last_price' — Trigger type (only for trigger orders). Allowed values: `"index_price"`, `"mark_price"`, `"last_price"`.
      - `trigger_price` number — Trigger price (Only for future trigger orders)
      - `trigger_offset` number — The maximum deviation from the price peak beyond which the order will be triggered (Only for trailing trigger orders)
      - `trigger_reference_price` number — The price of the given trigger at the time when the order was placed (Only for trailing trigger orders)
      - `block_trade` boolean — `true` if order made from block_trade trade, added only in that case.
      - `mmp` boolean — `true` if the order is a MMP order, otherwise `false`.
      - `risk_reducing` boolean — `true` if the order is marked by the platform as a risk reducing order (can apply only to orders placed by PM users), otherwise `false`.
      - `replaced` boolean — `true` if the order was edited (by user or - in case of advanced options orders - by pricing engine), otherwise `false`.
      - `auto_replaced` boolean — Options, advanced orders only - `true` if last modification of the order was performed by the pricing engine, otherwise `false`.
      - `quote` boolean — If order is a quote. Present only if true.
      - `mmp_group` string — Name of the MMP group supplied in the `private/mass_quote` request. Only present for quote orders.
      - `quote_set_id` string — Identifier of the QuoteSet supplied in the `private/mass_quote` request. Only present for quote orders.
      - `quote_id` string — The same QuoteID as supplied in the `private/mass_quote` request. Only present for quote orders.
      - `trigger_order_id` string — Id of the trigger order that created the order (Only for orders that were created by triggered orders).
      - `combo_order_id` string — Id of the combo order that created this order (only present for orders that were created as legs of a combo order).
      - `starbase_order_id` integer — Raw Starbase order id, in Starbase's own (non currency-prefixed) id namespace. Only present for orders placed in Starbase. Combo leg orders expose the parent combo order's Starbase order id.
      - `app_name` string — The name of the application that placed the order on behalf of the user (optional).
      - `mmp_cancelled` boolean — `true` if order was cancelled by mmp trigger (optional)
      - `cancel_reason` 'user_request' | 'autoliquidation' | 'cancel_on_disconnect' | 'risk_mitigation' | 'pme_risk_reduction' | 'pme_account_locked' | 'position_locked' | 'mmp_trigger' | 'mmp_config_curtailment' | 'edit_post_only_reject' | 'oco_other_closed' | 'oto_primary_closed' | 'settlement' — Enumerated reason behind cancel `"user_request"`, `"autoliquidation"`, `"cancel_on_disconnect"`, `"risk_mitigation"`, `"pme_risk_reduction"` (portfolio margining risk reduction), `"pme_account_locked"` (portfolio margining account locked per currency), `"position_locked"`, `"mmp_trigger"` (market maker protection), `"mmp_config_curtailment"` (market maker configured quantity decreased), `"edit_post_only_reject"` (cancelled on edit because of `reject_post_only` setting), `"oco_other_closed"` (the oco order linked to this order was closed), `"oto_primary_closed"` (the oto primary order that was going to trigger this order was cancelled), `"settlement"` (closed because of a settlement event, e.g. good-til-day orders are cancelled when an instrument enters the daily settlement). Note: orders cancelled because an instrument expired (delivery) currently do not include a `cancel_reason` field.
      - `oto_order_ids` OrderId[] — The Ids of the orders that will be triggered if the order is filled
      - `trigger_fill_condition` 'first_hit' | 'complete_fill' | 'incremental' — <p>The fill condition of the linked order (Only for linked order types), default: `first_hit`.</p> <ul> <li>`"first_hit"` - any execution of the primary order will fully cancel/place all secondary orders.</li> <li>`"complete_fill"` - a complete execution (meaning the primary order no longer exists) will cancel/place the secondary orders.</li> <li>`"incremental"` - any fill of the primary order will cause proportional partial cancellation/placement of the secondary order. The amount that will be subtracted/added to the secondary order will be rounded down to the contract size.</li> </ul>
      - `oco_ref` string — Unique reference that identifies a one_cancels_others (OCO) pair.
      - `primary_order_id` string — Unique order identifier
      - `is_secondary_oto` boolean — `true` if the order is an order that can be triggered by another order, otherwise not present.
      - `is_primary_otoco` boolean — `true` if the order is an order that can trigger an OCO pair, otherwise not present.
    - `trades` UserTrade[]
      - `trade_id` string, required — Unique (per currency) trade identifier
      - `trade_seq` integer, required — The sequence number of the trade within instrument
      - `instrument_name` string, required — Unique instrument identifier
      - `timestamp` integer, required — The timestamp of the trade (milliseconds since the UNIX epoch)
      - `starbase_timestamp` integer — The Starbase causal timestamp of the trade (nanoseconds since the Unix epoch)
      - `starbase_order_id` integer — Raw Starbase order id of the user's order, in Starbase's own (non currency-prefixed) id namespace (present only for trades matched in Starbase)
      - `starbase_client_order_id` string — Client order id of the user's own order (maker or taker side) submitted directly to [Starbase](https://docs.deribit.com/starbase/overview) via direct access; not returned for orders placed through the Deribit API; for self-trades this is the taker order's client order id
      - `order_type` 'limit' | 'market' | 'liquidation' — Order type: `"limit`, `"market"`, or `"liquidation"`
      - `original_order_type` 'market' | 'market_limit' — Original API order type when an order is represented internally as a limit order. For example, Starbase market orders use `"limit"` as `order_type` with `"market"` in this optional field.
      - `advanced` 'usd' | 'implv' — Advanced type of user order: `"usd"` or `"implv"` (only for options; omitted if not applicable)
      - `order_id` string, required — Id of the user order (maker or taker), i.e. subscriber's order id that took part in the trade
      - `matching_id` string, required — Always `null`
      - `direction` 'buy' | 'sell', required — Direction: `buy`, or `sell`
      - `tick_direction` 0 | 1 | 2 | 3, required — Direction of the "tick" (`0` = Plus Tick, `1` = Zero-Plus Tick, `2` = Minus Tick, `3` = Zero-Minus Tick).
      - `index_price` number, required — Index Price at the moment of trade
      - `price` number, required — Price in base currency
      - `amount` number, required — Trade amount. For perpetual and inverse futures the amount is in USD units. For options and linear futures it is the underlying base currency coin.
      - `contracts` number — Trade size in contract units (optional, may be absent in historical trades)
      - `iv` number — Option implied volatility for the price (Option only)
      - `underlying_price` number — Underlying price for implied volatility calculations (Options only)
      - `liquidation` 'M' | 'T' | 'MT' — Optional field (only for trades caused by liquidation): `"M"` when maker side of trade was under liquidation, `"T"` when taker side was under liquidation, `"MT"` when both sides of trade were under liquidation
      - `liquidity` 'M' | 'T' — Describes what was role of users order: `"M"` when it was maker order, `"T"` when it was taker order
      - `fee` number, required — User's fee in units of the specified `fee_currency`
      - `fee_currency` 'BTC' | 'ETH' | 'USDC' | 'USDT' | 'EURR', required — Currency, i.e `"BTC"`, `"ETH"`, `"USDC"`
      - `label` string — User defined label (presented only when previously set for order by user)
      - `state` 'open' | 'filled' | 'rejected' | 'cancelled' | 'untriggered' | 'archive', required — Order state: `"open"`, `"filled"`, `"rejected"`, `"cancelled"`, `"untriggered"` or `"archive"` (if order was archived)
      - `block_trade_id` string — Block trade id - when trade was part of a block trade
      - `block_trade_leg_count` integer — Block trade leg count - when trade was part of a block trade
      - `block_rfq_id` integer — ID of the Block RFQ - when trade was part of the Block RFQ
      - `block_rfq_quote_id` integer — ID of the Block RFQ quote - when trade was part of the Block RFQ
      - `reduce_only` string — `true` if user order is reduce-only
      - `post_only` string — `true` if user order is post-only
      - `mmp` boolean — `true` if user order is MMP
      - `risk_reducing` boolean — `true` if user order is marked by the platform as a risk reducing order (can apply only to orders placed by PM users)
      - `api` boolean — `true` if user order was created with API
      - `profit_loss` number — Profit and loss in base currency.
      - `mark_price` number, required — Mark Price at the moment of trade
      - `legs` unknown[] — Optional field containing leg trades if trade is a combo trade (present when querying for **only** combo trades and in `combo_trades` events). Each leg trade has the same fields as a top-level user trade, including `starbase_match_id`, `starbase_order_id`, and `starbase_timestamp` when matched in Starbase, and `starbase_client_order_id` for orders submitted via [Starbase](https://docs.deribit.com/starbase/overview) direct access.
        - unknown
      - `combo_id` string — Optional field containing combo instrument name if the trade is a combo trade
      - `combo_trade_id` string — Optional field containing combo trade identifier if the trade is a combo trade
      - `starbase_match_id` integer — Optional field containing the Starbase match identifier (present only for trades matched via Starbase)
      - `quote_set_id` string — QuoteSet of the user order (optional, present only for orders placed with `private/mass_quote`)
      - `quote_id` string — QuoteID of the user order (optional, present only for orders placed with `private/mass_quote`)
      - `trade_allocations` object[] — List of allocations for Block RFQ pre-allocation. Each allocation specifies `user_id`, `amount`, and `fee` for the allocated part of the trade. For broker client allocations, a `client_info` object will be included.
        - `user_id` integer — User ID to which part of the trade is allocated. For brokers the User ID is obstructed.
        - `amount` number, required — Amount allocated to this user.
        - `fee` number, required — Fee for the allocated part of the trade.
        - `client_info` object — Optional client allocation info for brokers.
          - `client_id` integer — ID of a client; available to broker. Represents a group of users under a common name.
          - `client_link_id` integer — ID assigned to a single user in a client; available to broker.
          - `name` string — Name of the linked user within the client; available to broker.
    - `errors_count` integer — Number of errors (present when `detailed` : `false`).
    - `pending_requests_count` integer — Number of pending quotes (present when `wait_for_response`: `false` and `detailed` : `false`).
    - `pending_requests` object[] — List of pending quotes (present when `wait_for_response`: `false` and `detailed` : `true`).
      - `instrument_name` string — Instrument name.
      - `side` string — Quote side - `bid` or `ask`.
    - `errors` object[] — List of errors (present when `detailed` : `true`).
      - `instrument_name` string — Instrument name.
      - `side` string — Quote side - `bid` or `ask`.
      - `error` object — Error data.
      - `code` integer — Error code
      - `message` string — Error message.

---

[API](https://skmtc.net/deribit/apis/deribit-api.md) · [All operations](https://skmtc.net/deribit/apis/deribit-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/deribit/deribit-api/versions/78a0783dbfcc/schema)
