Deribit provides a suite of API methods for managing Market Maker Protection (MMP) settings. These methods allow for real-time configuration and monitoring of MMP parameters, ensuring efficient risk management for market makers.
For comprehensive details on MMP configuration and management, refer to the Deribit API Documentation.
Notice
Authentication: All private API methods require prior authentication using the public/auth method. Ensure that your WebSocket connection is authenticated before invoking private methods.
-
private/get_mmp_config: Retrieves the current MMP configuration for a specified index and MMP group. If no parameters are provided, it returns all configurations.
-
private/set_mmp_config: Sets or updates the MMP configuration for a specified index and MMP group.
-
private/reset_mmp: Resets the MMP state for a specified index and MMP group, allowing for immediate resumption of quoting after a trigger.
-
private/get_mmp_status: Retrieves the current MMP status, indicating whether MMP is active or has been triggered for a given index and MMP group.
index_name (string, required)
Identifier of the derivative instrument (index) on the Deribit platform, such as btc_usd
or eth_usd
. All configuration settings will apply specifically to this index.
interval (integer, required)
The duration of the monitoring window in seconds. For example, an interval of 3 implies a 3-second window.
-
The interval begins after the first trade.
-
If a new trade is executed after the interval has ended, a new interval is started, and counters reset.
-
If a trade occurs during an already running interval, that interval continues unaffected.
This mechanism allows the platform to track activity in short, rolling windows to identify potentially risky trading behavior.
frozen_time (integer, required)
Time in seconds that MMP remains active after being triggered. Once this frozen period has passed, MMP will automatically reset, allowing new orders to be submitted.
-
If you want to disable automatic reset, set
frozen_time
to0
. In that case, a manual reset is required using theprivate/reset_mmp
method. -
Manual reset is also possible during the frozen time period.
quantity_limit (float, required)
The total traded quantity, measured in units of the base currency (e.g., BTC in BTC-PERPETUAL), within the interval.
-
This count is direction-agnostic—a buy followed by a sell counts double.
Example: Buy 10 BTC and sell 10 BTC = 20 total quantity.
-
Applicable to both options and futures.
Note
Once this is set, an initial margin will be reserved even without any open positions. Initial Margin due to
quantity_limit
=quantity_limit
*0.03
delta_limit (float, required)
The maximum allowable net transaction delta change during the interval.
-
Expressed in units of base currency.
-
The delta limit is treated as an absolute threshold:
e.g.,
delta_limit
: 10 → MMP is triggered if net transaction delta exceeds +10 or drops below -10. -
Direction matters: buying +5 delta and selling −5 delta cancels out if within the same interval.
Note
Note that we use the net transaction delta instead of delta. Net Transaction Delta = Delta - Mark Price. In the rest of this document, "delta" actually refers to net transaction delta
vega_limit (float, optional)
The maximum change in vega exposure allowed within a given interval, measured in absolute terms.
-
Expressed in USD, representing the change in sensitivity to implied volatility across executed trades.
-
This parameter is primarily relevant for options traders managing risk in volatile markets.
-
Similar to
delta_limit
, thevega_limit
is direction-aware and evaluated on a net basis. If the exposure exceeds the set threshold (positively or negatively), MMP will be triggered.
Notice
When evaluating Delta and Vega limits for MMP, Deribit uses the greeks at the moment of trade execution. The system does not re-evaluate Delta or Vega using live greeks at the time of MMP checking.
mmp_group (string, optional)
Specifies the MMP group used for Mass Quotes. If omitted, the methods apply to the default MMP settings.
block_rfq(boolean, optional)
When set to true
, the methods apply to Block RFQ MMP settings. See Block RFQ - Configuring MMP for more details.
Clients can control whether individual limit orders are subject to Market Maker Protection by setting the mmp flag in buy, sell, or edit requests.
-
To enable or disable MMP for a specific order, include "
mmp
":true
or "mmp
":false
in the request. -
If you’re only updating price or size and wish to retain the current MMP setting, you can simply omit the mmp parameter—its state will remain unchanged.
-
The edit method supports toggling the MMP flag, allowing you to apply or remove protection without canceling and resubmitting the order.
Deribit provides real-time feedback on MMP (Market Maker Protection) activity via user.mmp_trigger.{index_name} subscription and event flags, enabling clients to react promptly when protection is triggered.
Clients can subscribe to the channel:
user.mmp_trigger.{index_name}
Replace {index_name} with the desired instrument index, such as:
user.mmp_trigger.btc
Upon MMP being triggered for a given index, the client will receive a trigger notification in the following format:
{ "frozen_until": 1594390902986 }
-
The value is a Unix timestamp in milliseconds indicating until when the MMP is active (i.e., orders remain blocked).
-
If
frozen_until
:0
, it means MMP will remain active until manually reset using theprivate/reset_mmp
method.
This notification allows the client to track MMP state per index and avoid submitting new orders that would be rejected due to ongoing MMP freeze.
MMP Flags in WebSocket Responses
In addition to the event channel, Deribit also communicates MMP-trigger-related actions using a special field in order event messages.
If an order is cancelled as a direct result of an MMP trigger, the order event will include:
{ "mmp_cancelled": true }
This field will be absent in all other cases, allowing clients to clearly distinguish between MMP-related cancellations and other reasons (e.g., manual, timeout, user API).
Best Practices
-
Monitor both
user.mmp_trigger
events andmmp_cancelled
flags to maintain a complete picture of your quoting activity and protection status. -
On receiving a
frozen_until
timestamp, you should pause quote submission for the affected index until the freeze period ends or you manually reset MMP. -
Always handle the
mmp_cancelled
flag explicitly in order management logic to prevent resubmitting orders that may immediately be cancelled again.
Please review the FIX specs here: https://docs.deribit.com/#mmprotection-limits-mm