A new method private/get_currencies has been added. It returns a list of cryptocurrencies available for the authenticated user’s account.The following fields have been added to the Trade and Order objects in order to support the Starbase migration:Trade object
Order object
The response of private/get_margins now includes fee fields.The
underlying_type field is now returned in public/get_instrument and public/get_instruments.The response of private/get_margins now includes fee fields.The
underlying_type field is now returned in public/get_instrument and public/get_instruments.As part of our ongoing platform improvements, there are a few minor breaking changes.Editing the mmp flag is no longer supportedPassing an
mmp value that differs from the order’s current value is rejected. Passing the same value the order already has continues to be accepted. private/edit returns an Invalid params error (-32602) with param: mmp and reason: "editing mmp flag is not supported".Editing a quote-originated order is rejectedAttempting to edit a quote-originated order via private/edit now returns order_not_found (code 10004). Previously this would cancel the entire quote; now the quote remains open.SMP taker orders may now be cancelled instead of rejectedWith self-match prevention in reject-taker mode, the taker order may now be cancelled instead of rejected. In both cases the taker does not enter the book and the maker order remains resting. When the taker is cancelled, cancel_reason is populated. Affected methods: private/buy, private/sell and private/edit. The cancel_reason is order_overlap for SMP within the same account and order_overlap_another_sub for SMP across subaccounts.Breaking Change — MMP configuration time limitsMMP configuration
interval and frozen_time parameters are now capped at a maximum of 3,600 seconds (1 hour).Instrument creation notification channelNew public subscription channel instrument.creation.<kind>.<currency> delivers a single notification with full instrument data (same format as public/get_instruments) when an instrument is created. The notification fires once at creation time, regardless of the instrument’s initial state. Examples: instrument.creation.any.any (all instruments), instrument.creation.future.BTC (BTC futures only), instrument.creation.option.any (all options).Main account trade query accessMain accounts are now permitted to call the following methods to retrieve subaccount trade data: private/get_user_trades_by_instrument, private/get_user_trades_by_instrument_and_time, private/get_user_trades_by_currency_and_time and private/get_user_trades_by_order. To retrieve trades for a specific subaccount, use the subaccount_id parameter.Direct access status in account summaryThe is_direct_access_allowed field has been added to the response of private/get_account_summary.Idempotent subaccount transfersAn optional nonce parameter has been added to private/withdraw and private/submit_transfer_between_subaccounts for idempotency. Duplicate requests carrying the same nonce will be rejected. The nonce is persisted on the transaction record and returned in the response.New API method: public/get_index_chart_data is now publicly accessible.
⚠️ New order book lifecycle - BREAKING CHANGEAs part of the Instrument Order Book lifecycle enhancement, the
state field in the following methods and channels has been updated:Affected methods:- /public/get_instrument
- /public/get_instruments
- /public/get_order_book
- /public/get_order_book_by_instrument_id
- /public/ticker
incremental_ticker.{instrument_name}instrument.state.{kind}.{currency}ticker.{instrument_name}.{interval}
pre_aggregated_risk_vectors, which contain aggregated_risk_vectors before applying the pnl_offset and extended_dampener params.max_quote_quantity is now required in /private/set_mmp_config.The precision of MMP configuration limits is restricted to a maximum of four decimal places.New fields were added to the responses of private/get_account_summary and private/get_account_summaries:affiliate_promotion_fee(if greater than 0.0)trading_products_details(which trading products are enabled or can be overwritten for the account)receive_notifications
fees field structure in private/get_account_summary and private/get_account_summaries has been updated. It is now a list of fee objects for all currency pairs and instrument types related to the currency. This field is visible when parameter extended = true and the user has any discounts.Breaking ChangesRemoved deprecated method
public/get_index. Users are advised to use /public/get_index_price instead.Non-Breaking ChangesAdded max_quote_quantity parameter to private/set_mmp_config (when block_rfq: false).Limited precision of Quantity Limit, Delta Limit and Vega Limit to 4 decimals.Breaking Changes
fee_precisionfield has been removed from the public/get_currencies method.
Non-Breaking ChangesAdded USDC APR data to public/get_currencies and public/get_apr_history.Introduced new method private/get_reward_eligibility returning reward eligibility status and 7-day SMA APR per currency.
Breaking ChangesAPI keys with the
account:read scope can no longer view secrets of other API keys, even if those keys share the same scope. Only API keys with the account:read_write scope are now permitted to view API key secrets.Non-Breaking ChangesThe public/get_index_price_names method now provides information regarding the potential creation of future/option combinations for the specified index.Added expires_at to the private/verify_block_trade response.Non-Breaking ChangesThe
currency parameter is now optional for the private/get_block_trades method. If the method is called without specifying a currency, it will return block trades for all available currencies.Breaking ChangesDeprecated the Fee discounts are now returned per currency pair in the responses of private/get_account_summary and private/get_account_summaries.Rate limiting for public/get_instruments on the WebSocket API has been updated: 1 request per 10 seconds, with a burst of 5.Added a new field
max_show parameter and introduced display_amount to define the visible portion of an iceberg order.The private/buy, private/sell, and private/edit API methods now support the optional display_amount parameter.Order responses and events for iceberg orders now include display_amount (current visible portion) and refresh_amount (initially requested display amount).refresh_amount remains constant throughout the order’s lifecycle. It represents the intended size of each iceberg “tip” as it gets replenished. The actual display_amount can be lower than refresh_amount when the order is partially or nearly fully filled.For example, if the total order amount is 10,000, refresh_amount is 1,000, and 9,500 has already been filled, the current display_amount would be 500 — the remaining visible portion.beneficiary_vasp_website to private/add_to_address_book, private/update_in_address_book, and private/get_address_book. This field is mandatory if the address belongs to a VASP not listed among known VASPs.Non-Breaking ChangesAdded a new extra_currencies parameter to the private/add_to_address_book method, allowing a list of valid ERC20 currencies. The extra_currencies parameter can only be used when currency is set to an ERC20 and type is set to withdrawal.Introduced a new event channel block_trade_confirmations.{currency}, which functions like block_trade_confirmations but supports filtering by currency for more efficient data handling.Breaking ChangesThe public/exchange_token method now supports an optional
scope parameter. This allows overriding the token scope when creating a new session for a subaccount. Scopes cannot be elevated beyond the caller’s permissions. If no session scope is provided to public/exchange_token then the provided refresh_token (and corresponding access_token) will be invalidated.The methods private/get_portfolio_margins and public/get_portfolio_margins have now been fully removed from the API, following a period of deprecation.Non-Breaking ChangesWe have introduced a new public/get_apr_history method. This method retrieves historical APR data for a specified currency. This applies to yield-generating tokens, currently including USDE and STETH.The apr field has been added to the public/get_currencies result. It represents the Simple Moving Average (SMA) of the last 7 days of rewards. If there are fewer than 7 days of reward data, the APR is calculated as the average of the available rewards. This applies to yield-generating tokens, currently including USDE and STETH.- An
ipfield has been added to trade type transaction logs inprivate/get_transaction_log. - Added
priceparameter to/private/add_block_rfq_quoteand/private/edit_block_rfq_quote. This parameter can be used as aggregated price for quoting future spreads. - Added new endpoint /private/get_mmp_status to retrieve MMP status for a triggered index or MMP group.
- The
public/get_expirationsendpoint now supports filtering by currency pair using the newcurrency_pairparameter. - The main account can now use the
subaccount_idparameter inprivate/get_transaction_logto retrieve the transaction log for a specific subaccount.
historical parameter. This feature has been added recently and is immediately available. While recent records (30 minutes for orders and 24 hours for trades) can be accessed without this parameter, they are only stored temporarily and eventually removed. After this period, the records are only available through the historical parameter.The following API endpoints support historical data retrieval:private/get_order_history_by_instrumentprivate/get_order_history_by_currencyprivate/get_user_trades_by_instrumentprivate/get_user_trades_by_instrument_and_timeprivate/get_user_trades_by_currencyprivate/get_user_trades_by_currency_and_timeprivate/get_user_trades_by_order
historical parameter in your API request to any of the endpoints listed above:historical:false→ Retrieves recent records (available immediately after execution).historical:true→ Retrieves historical records (available after a short delay for indexing).
The following methods can be used to manage the withdrawal process:
The following API updates have been added recently and are already available for use:
- A new transaction type,
options_settlement_summary, has been added to/private/get_transaction_log. This provides realized and unrealized profit and loss for an account’s option positions. - Deposit originator information can now be submitted using
/private/set_clearance_originator(docs).
Potential breaking change: scientific notation in JSON responsesWe have updated the JSON formatting of numeric values in our API responses. Starting with this release, some numerical values, such as prices, may be returned in scientific notation. For example,
"strike": 64000 may now be returned as "strike": 6.4e4. Our system does not enforce a strict rule for its use, so numeric values may be represented either way. Scientific notation is fully compatible with JSON standards and supported by most modern JSON libraries. Clients are advised to test their implementation against testnet to ensure compatibility.Breaking changes- We have removed the legacy method
private/toggle_portfolio_margining. Clients are advised to use private/change_margin_model instead.
A new method public/get_expirations has been added. It returns a map of all expiration strings for the given currency and instrument kind.We added validation to check the tick size of secondary OTO, OCO, and OTOCO orders when they are placed, in addition to the existing validation when they are triggered. Affected methods:
private/buyprivate/sell
private/add_to_address_book and private/update_in_address_book: when executed for one of the ETH/ERC20 supported currencies, we will automatically add or update the address for all other ETH/ERC20 supported currencies.Breaking changes
- Added a
settlement_pricefield to transaction logs of type delivery in /private/get_transaction_log. Theindex_pricefield now contains the index price instead of the settlement price. freeze_quoteswill only affect the given currency pair instead of the entire currency when cancelling quotes by currency pair in /private/cancel_all_by_currency_pair.
- private/get_mmp_config and private/set_mmp_config: we now allow
delta_limitto be greater thanquantity_limit, and addedvega_limit. - Added
simulated_positionsandadd_positionsto private/pme/simulate.
Breaking changes
- Matching engine rate limits: the
matching_enginefield in thelimitsfield of private/get_account_summary now contains multiple groups, and for each group there are objects with burst and rate. The_quotesrate limits are the rate limits for mass quotes; thecancel_allrate limit refers to cancelling all orders; thespotlimits are the rate limits for spot instruments. - Removed the deprecated
stop_priceandstop_order_idfields from the responses of /private/get_order_state,/private/get_open_orders*,/private/cancel*and theuser.orders.*notification. - Removed the deprecated
stop_priceparam, which was replaced bytrigger_price, from /private/buy, /private/sell and/private/edit*. - Removed the deprecated
stop_idfield from the /private/get_trigger_order_history response. - Removed
open_orders_marginfrom positions inuser.changes.*notifications. This field was always zero and hence irrelevant.
- Added block trade approval related endpoints and channel: /private/get_pending_block_trades, /private/approve_block_trade, /private/reject_block_trade and
block_trade_confirmations. - Added private/set_disabled_trading_products to deactivate trading products for specific subaccounts.
- The
freeze_quotesparameter has been added to multiple requests. This parameter determines whether incoming quotes should be rejected for 1 second after cancellation. Affected endpoints: private/cancel_all, private/cancel_all_by_kind_or_type, private/cancel_all_by_currency, private/cancel_all_by_instrument and private/cancel_quotes. - The
mark_ivfield has been added to multiple responses. This field indicates the implied volatility of a mark price and is applicable only to options. Affected endpoints: public/get_book_summary_by_currency and public/get_book_summary_by_instrument. - New API endpoint private/simulate_portfolio has been added. This new endpoint functions in the same manner as the now deprecated
get_portfolio_marginsendpoints. - Added
currencyto thenot_enough_funds_in_currencyAPI error. - Added
index_priceto settlements in private/get_transaction_log.
Breaking changes
- Renamed the
session_bankrupcyfield tosession_bankruptcyin/public/get_last_settlements_by_*and/private/get_settlement_history_by_*. /private/get_transaction_logwill return the Invalid params exception when thecountparameter is negative.
- The
currencyparameter has been made optional for some methods, and the valueanyis now supported:/public/get_instruments,/public/get_combosand/private/get_positions. - Added subscription channel
user.portfolio.any, which returns notifications for portfolios for all currencies. - Added a new API method
/private/get_account_summaries, which returns all the account summaries for all currencies. - Added a new API method
/private/get_open_ordersthat returns all open orders for all currencies.
Mass QuotesMass quote functionality allows users to place multiple quotes in a single request, based on the predefined MMP group configuration. Mass Quote functionality is auto-enabled for all accounts with MMP settings activated.
- Added
private/mass_quote. - Added
private/cancel_quote.
- Added an optional
mmp_groupparameter and response field toprivate/get_mmp_config,private/reset_mmpandprivate/set_mmp_config. - Added an optional
mmp_groupto theuser.mmp_trigger.{index_name}channel.
- Added XRP and MATIC currencies to multiple API endpoints.
private/get_transaction_log: added acontractsfield to see linear USDC option contracts.private/get_subaccounts: added amargin_modelfield.
Breaking ChangeWhen
private/get_subaccounts is called from a subaccount, the following fields are no longer shown for the main account object: security_keys_enabled, security_keys_assignments, proof_id_signature, proof_id, login_enabled and is_password.Non-breaking changeWhen a new book is started we now first emit the instrument state event and subsequently the ticker events (previously the ticker event was emitted first). Affected channels: instrument.state.{kind}.{currency}, incremental_ticker.{instrument_name} and ticker.{instrument_name}.{interval}.- Added support for USDT to multiple API methods and channels. USDT is not yet available in the wallet or for trading until the official launch.
MMP — Breaking ChangesMMP methods now require the
trade scope instead of account. Affected methods:private/set_mmp_config→trade:read_writeprivate/reset_mmp→trade:read_writeprivate/get_mmp_config→trade:read
trade scope to current production keys before the release and remove the account scope after the release.Liquidation informationTo avoid sharing potentially price-sensitive data with the market, Deribit has removed the real-time liquidation field for all public trade subscriptions and methods. Clients undergoing liquidation still receive this information via private subscriptions and methods. One hour after a liquidation trade has been executed, the field is made available in public methods so that it remains possible to obtain liquidation statistics. Affected methods: /public/get_last_trades_by_currency, /public/get_last_trades_by_currency_and_time, /public/get_last_trades_by_instrument and /public/get_last_trades_by_instrument_and_time. Affected channels: trades.{instrument_name}.{interval} and trades.{kind}.{currency}.{interval}.Breaking changes
- As announced on 1 August,
profit_lossandcommissionare removed from order objects to further improve platform performance and reduce latencies. - Removed
profit_lossandcommissionfrom order-related method responses and event notifications. - Commissions per trade can still be retrieved using trade methods (e.g.
private/get_user_trades_by_currency) or from the transaction log (private/get_transaction_log).
API changes
- Backwards incompatible change for
private/get_position: for USDC instruments the delta is now in the base currency instead of USDC. - New method
public/get_supported_index_namesto list all supported index names (this can, for instance, be used to get all index names supported in MMP). - New greeks breakdown for USDC options:
options_gamma_map,options_vega_mapandoptions_theta_mapare added touser.portfolio.{currency}notifications andprivate/get_account_summary. private/get_account_summary(withextended=true) will includemmp_enabled:truewhen the user has MMP enabled.private/editwill return the cancel reasonedit_post_only_rejectif the edit fails because ofreject_post_onlybehavior.
btc_usd instead of btc). Existing currency-based MMP configurations are automatically migrated (btc → btc_usd, eth → eth_usd); MMP configuration for SOL and USDC is removed.private/get_mmp_config: thecurrencyparam is replaced withindex_name.index_nameis optional; omitting it returns all configured MMP settings. A list is always returned.private/set_mmp_config: thecurrencyparam is replaced withindex_name. On success, the new configuration is returned instead of “OK”.private/reset_mmp: thecurrencyparam is replaced withindex_name.user.mmp_trigger.{currency}:{currency}is replaced with{index_name}. Theuser.mmp_trigger.anychannel is also available.
- In September we will remove
profit_lossandcommissionfrom order objects.
The instrument object returned in
public/get_instrument and public/get_instruments has two changes:- The
tick_sizefield represents the new minimum tick size. - A new
tick_size_stepsfield represents the new price-step validation rules. It is a list of objects{above_price, tick_size}, describing that a price aboveabove_priceshould be a multiple oftick_size. Multiple price steps are possible.
Allow the main account to read the account summary, trades and positions of a subaccount. To do this, use the
subaccount_id parameter. Supported methods:/private/get_account_summary/private/get_user_trades_by_currency/private/get_positions
Potential Breaking Changes
- Block trades returned by the API no longer have the
currencyfield. Affected methods:/private/execute_block_trade,/private/get_last_block_trades_by_currencyand/private/get_block_trade. private/verify_block_trade: changed the error returned when the minimum amount requirement is not satisfied. The response now includes aminimumsobject (for examplebtc_futureandbtc_option) instead of the previous free-text reason.- After this release all active sessions will be removed and all API access/refresh tokens will be invalidated (API keys stay valid).
- Block trades: spot instruments can be included, and instruments in different currencies can be included in a single block trade.
- New block trade IDs are prefixed with
BLOCK, e.g.BLOCK-123. Historical block trades are not affected. - The
currencyfield is ignored in block trade API methods:private/execute_block_trade,private/verify_block_tradeandprivate/simulate_block_trade.
Breaking WS API Changes
- Removed
open_interestfrom the combo book ticker. Affected endpoint:public/ticker. Affected subscriptions:ticker.{instrument_name}.{interval}andincremental_ticker.{instrument_name}. private/close_position: returns an error if the given price is not a multiple of the tick size.- The error code
11098(account_locked) is returned when the account is locked. - The trade endpoints return an error instead of an empty result if a parameter is invalid (time, trade id, …):
public/get_last_trades_by_currency,public/get_last_trades_by_currency_and_time,public/get_last_trades_by_instrument,public/get_last_trades_by_instrument_and_time,private/get_user_trades_by_currency,private/get_user_trades_by_currency_and_time,private/get_user_trades_by_instrumentandprivate/get_user_trades_by_instrument_and_time.
- Added
volume_usd(for options) andvolume_notional(volume in quote currency, for linear futures) to ticker and book summary. Affected endpoints:public/ticker,public/get_book_summary_by_currencyandpublic/get_book_summary_by_instrument. - New endpoints for fetching open orders by label:
private/get_open_orders_by_labelandprivate/get_order_state_by_label.
Potentially Breaking Change
private/get_portfolio_marginswill return an error when called for currency USDC, as Portfolio Margin is not yet available for USDC.
- Deribit Event Nodes is a new feature created to offload traffic from the retail nodes and to decrease latency. It is dedicated to handling public subscriptions and allows unauthenticated users to subscribe to raw and aggregated market data. To use Event Nodes, change the WebSocket endpoint: for test, use
wss://test.deribit.com/den/ws; for production, usewss://streams.deribit.com/ws/api/v2. public/get_instrument: the fieldfuture_typeis deprecated and will be replaced by the new fieldinstrument_type.- Added optional
start_timestampandend_timestampfilters topublic/get_last_trades_by_currency,public/get_last_trades_by_instrument,private/get_user_trades_by_currencyandprivate/get_user_trades_by_instrument. orderobject: new optionalmobilefield (truefor orders made with the mobile app) and newcancel_reasonfield (the reason the order was canceled). Affected endpoints:private/get_open_orders_by_currency,private/get_open_orders_by_instrument,private/get_order_history_by_currency,private/get_order_history_by_instrumentandprivate/get_order_state. Affected subscriptions:user.orders.{kind}.{currency}.raw,user.orders.{kind}.{currency}.{interval},user.orders.{instrument_name}.raw,user.orders.{instrument_name}.{interval}anduser.changes.{kind}.{currency}.{interval}.
/public/get_order_bookandget_order_book_by_instrument_id: random numbers for the depth parameter are no longer permitted. Supported depth levels are[1, 5, 10, 20, 50, 100, 1000, 10000]. If the depth parameter is not one of the supported levels it will be rounded up to the closest supported level, with a maximum value of 10,000.private/toggle_portfolio_margining: theuser_idparameter is now optional (by default the authenticated user is used). The method is also available for subaccounts, so users that only have access to one of the subaccounts can also switch margin settings from standard to portfolio margining (and vice versa).- Fixed a bug that prevented sending combination or strategy orders.
- Resetting the login password will close all open sessions.
- New WS API error when an order falls outside the trading bandwidth for futures & perpetual orders (when a bid is higher than the Max Buy or an ask is lower than the Min Sell). Previously these orders were price-adjusted to the Min Sell or Max Buy; as of this release they receive the error
price_too_highorprice_too_low. - All trades & orders in API results are now always chronologically ordered. Previously these were sorted by order/trade ID, which was not necessarily chronological.
- Added two numerical fields
block_trade_tick_sizeandblock_trade_min_trade_amountto/public/get_instrumentsand/public/get_instrument(WS API). - New WS endpoint
private/simulate_block_trade. This endpoint can be used to verify whether a certain trade would be accepted by Deribit (price trading bandwidth, quantity, margins, risks, and all other platform checks). - Margin balance will be equal to equity for PM users in
private/get_account_summaryanduser.portfolio.{currency}notifications. - Direct transfers between sub-accounts are no longer allowed (they can only be done via the main account).
- Position move: when the price is not specified, the average price of the position (which can be outside the trading bandwidth) is used instead of the instrument mark price.
- Support for RSA and ed25519 signatures in the API.
Potential Breaking Change
- Subscribing to instruments that are not open is no longer allowed. This implies clients cannot subscribe to deactivated combo books.
- Deribit will only allow subscriptions to the
combo_tradesendpoint for combo instruments and rejects the subscription for other instruments.
- Add index price to deposits, withdrawals, transfers and swap logs in the transaction log.
- Removed the minimum order price on Call Calendar Spread and Put Calendar Spread combos.
- Allowed the
anyvalue for thecurrencyfield inpublic/get_rfqs. - Subscription
user.portfolio.{currency}now also works withaccount:read-scoped API keys (previously it worked only fortrade:read).
Potential Breaking Change
- The
deribit_price_ranking.{index_name}notification now returnsnullvalues instead of"undefined"for unavailable ranking prices.
- Added an initial event for the
deribit_volatility_indexsubscription. - Increased the limit of whitelisted addresses for API keys.
- Access for all 3rd party applications is revoked after a password change and requires renewed consent.
- Added
MMPandrisk_reducingflags to the order response object (request responses and subscription notifications). - Added
MMP,risk_reducingandAPIflags and anadvancedfield to the private trade response object (request responses and subscription notifications). - New field
sid(session id) in thepublic/authresponse, returned for session tokens (scopesession:name). This allows a user to kill a specific session instead of all sessions.
- Added
private/toggle_portfolio_marginingmethod (it existed earlier but was designed only for internal use). Added adry_runparameter to only check the effect of toggling PM — it skips risk checks (returns the portfolio change even if it would otherwise return anot_enough_fundserror). - Added an
interest_valuefield topublic/ticker,private/get_positionandprivate/get_positionsresponses and toincremental_ticker.{instrument_name},ticker.{instrument_name}.{interval}anduser.changes.*(in positions) notifications for perpetual instruments. public/get_instrumentsnow returns instruments pre-sorted by expiration date and kind (futures before options).
Possible Breaking Change
- In all notifications from the
platform_statesubscription, thecurrencyfield has been removed and replaced by aprice_indexfield. This enables locking a specific instrument range (e.g. USDC perpetual linked to the ADA index) instead of all instruments within a currency.
- Added field
price_indexwith the name of the Price Index used in the instrument to/public/get_instrumentand/public/get_instrumentsresults. - New error
move_positions_over_limit(code13780) is returned after a user reaches the allowed number ofprivate/move_positionsexecutions.
- New trailing stop-loss order type: it lets the client set a max drop from the high of an instrument, measured in USD for inverse instruments and USDC for linear instruments. It can be triggered by the same triggers as other triggers (index price, mark price or last price). If the price moves in favor of the client, the trigger level moves up accordingly; once the instrument price falls by the maximum offset value (
trigger_offset), the position gets stopped out. - Added a new
valid_untilparameter (timestamp) to allprivate/buy,private/sell,private/editandprivate/edit_by_labelrequests. The request is only executed if the current server timestamp is lower than the provided value when the request reaches the book; otherwise atimed_outerror is returned. This feature is not available from the UI. - Added a new
/private/send_rfqrequest, which sends a notification to market makers or anyone subscribing to therfq.{currency}notification channel or requesting RFQs via/public/get_rfqs. The RFQ request is rate limited to 10 per 3 days. Amount and side (buy/sell) are non-compulsory fields.
- The
platform_statechannel notification has been modified: in addition to existing currency lock notifications,{"maintenance": true}data is now sent before moving the platform to maintenance mode during releases. - Added the
private/move_positionsmethod, enabling clients to move full or partial existing positions from a source subaccount to a target subaccount. It is not possible to create new open interest (non-existing positions) using this method. A maximum of 1 position transfer per day per account per currency is allowed (one transfer can consist of multiple positions). - Added the following fields to
public/get_instrumentandpublic/get_instrumentsresponses (to facilitate trading of linear instruments):settlement_currency,counter_currencyandfuture_type(futures only; possible values:linear,reversed).
- Deribit will no longer allow unauthenticated connections to subscribe to raw book changes (WS users only). Affected subscriptions:
book.{instrument_name}.raw,ticker.{instrument_name}.raw,trades.{instrument_name}.raw,trades.{instrument_kind}.{currency}.rawandperpetual.{instrument_name}.raw. Attempts to subscribe without authentication are rejected withraw_subscriptions_not_available_for_unauthorized. - Fee coupons/vouchers: a new
fee_balancefield with the current value of the fee balance is added to the response ofprivate/get_transaction_log(for every log), to the response ofprivate/get_account_summary, and to theuser.portfolio.{currency}notification.
- All orders with an invalid quantity or price (not conforming to the tick size) are now rejected instead of being truncated to the minimum granularity. Affected methods:
private/buy,private/sell,private/edit,private/verify_block_tradeandprivate/execute_block_trade. - Passing the optional
detailed: trueparameter toprivate/cancel_all*andprivate/cancel_by_labelmethods changes their response to contain a detailed report of cancelling errors/results. - Added a new
user.access_logsubscription; theprivate/get_access_logmethod has been made visible in the documentation. private/get_portfolio_marginscan now be used with theaccount:readscope (previously the more restrictiveaccount:read_writewas required).- Complex parameters can now be provided in GET requests as URI-encoded strings (the
tradesparameter inprivate/verify_block_tradeandprivate/execute_block_trade). - Reversed the sorting of the bids and asks lists generated by the
changeevent of thebook.{instrument_name}.{interval}andbook.{instrument_name}.{group}.{depth}.{interval}subscription channels.
Breaking Changes
- Using the
stopvalue for thetypeparameter in/private/cancel_all_by_currencyand/private/cancel_all_by_instrumentwill now result in cancellation of only Stop-Loss orders. To cancel Take-Profit orders, use one of two new values:take(only Take-Profit) ortrigger_all(both Stop-Loss and Take-Profit).trigger_allshould be used in place ofalgo_all, which is now deprecated and will be removed in future updates. - Removed the
initiator_user_idandexecutor_user_idfields from the response object of/private/execute_block_trade,/private/get_block_tradeand/private/get_last_block_trades_by_currency.
- Added an optional
app_namefield to the block trade response object. - Added
private/get_daily_withdrawal_limitandprivate/set_daily_withdrawal_limit(only for reducing the current limit) methods. - Added the ability to whitelist an IP range (subnet) for an API Key, for example
126.23.12.x/24. - Added
private/get_portfolio_marginsmethod, returning portfolio margins for provided simulated positions. - Added
private/get_subaccounts_detailsmethod. Affects/private/get_positionand/private/get_positions: added parameterall_accounts(defaultfalse); if set totruethis returns the positions for all subaccounts. - Added an optional
currencyparameter forprivate/cancel_by_label(passing it optimizes execution, but cancels orders only in the selected currency). - Added notifications after editing notes in withdrawals, deposits and transfers (
withdrawal.*,deposit.*andtransfer.*channels). - Added the
incremental_ticker.{instrument_name}subscription. It is more efficient in terms of the number of updates and data sent: it sends a full ticker in the initial event and later only incremental changes between consecutive tickers; it is not sent more than once per second; if nothing changes it is not sent at all (a normal ticker is sent at least every 5 seconds), but if nothing changes for more than 1 minute a full ticker is resent. - Clients subscribing to private channels of multiple accounts on the same connection can now receive the assigned label in notification messages.
- Deribit has enabled sending market-limit orders to be placed as hidden orders.
- Added new
public/unsubscribe_allandprivate/unsubscribe_allAPI endpoints for fast unsubscribing. - Optimised the
markprice.options.{index_name}subscription: the initial event sends all prices and after that only changes are propagated; values are rounded to 4 decimal places (as they were in the initial event before); atimestampfield has been added; and the undocumentedsynthetic_futurefield has been removed. - New feature to set a maximum quantity of total short options for non-PM accounts. To notify the client of a breach of this limit, a new API error code
non_pme_total_short_options_positions_size(code10037) is introduced.
New features / changes
- The instrument descriptive field “quoted currency” for BTC and ETH options has been corrected from USD to the respective currency (BTC or ETH). The actual quoted currency does not change, but this may be a breaking change for some clients. Affected endpoints:
/public/get_instruments,/public/get_book_summary_by_currencyand/public/get_book_summary_by_instrument. - Modified error message text for API error codes:
10034stop_price_too_high→trigger_price_too_high;10035stop_price_too_low→trigger_price_too_low;10044stop_price_wrong_tick→trigger_price_wrong_tick;11036invalid_stop_price→invalid_trigger_price.
- New order type “Market Limit” (market-to-limit): submitted as a market order to execute at the current best available market price. If only partially filled, the remainder is entered as a limit order with the limit price equal to the price at which the filled portion was executed. Available for all products using the API.
- New time-in-force order type “Good ‘til day” (GTD): a limit order that stays in the book until the end of the session at 8 UTC, when it is automatically cancelled (maximum lifetime up to 24 hrs).
- New “Take profit” algorithmic orders: order types
take_marketandtake_limitwere added to/private/buyand/private/sell; order typesalgo_all,take_all,take_marketandtake_limitwere added to the filter lists of/private/get_open_orders_by_instrument,/private/get_open_orders_by_currencyand/private/get_subaccount_details. - The optional
stop_priceparameter for/private/buy,/private/selland/private/editwas renamed totrigger_price. Fallback to the old parameter name is preserved but will be removed soon. - The
trigger_pricefield was added to the responses of/private/buy,/private/sell,/private/editand/private/get_order_stateas a replacement forstop_price. - The
stop_idandstop_order_idfields were replaced withtrigger_order_idin the API response documentation, but remain present in the JSON object for backward compatibility. - The
/private/get_stop_order_historyendpoint was renamed to/private/get_trigger_order_history. The old one remains for backward compatibility only.
- New API v2 method
/private/edit_by_label, which can edit orders that are waiting to be processed. This feature is only available for WebSocket, not FIX. - More restrictive instrument validation in APIv1 and APIv2 subscriptions (only “active” instruments allowed); subscribing to expired instruments has been disabled.
- Added a new public subscription channel
deribit_price_statistics.{index_name}, which disseminates 24h price index statistics (low24h,high24handchange24hprices), updated every 15 seconds.
Breaking changes
- Removed
estimated_liquidation_pricefrom positions inuser.changes.{instrument_name}.{interval}notifications. - In responses of
/private/get_positionand/private/get_positions,estimated_liquidation_priceis now returned asnullif it has an undefined value (previously999999.99was returned in such a case). - Renamed the
rplanduplfields tosession_rplandsession_uplto maintain the same naming convention as in other methods. Documentation was also added for the previously undocumented/private/get_transaction_logmethod.
- Added an
estimated_liquidation_ratiofield touser.portfolio.{currency}notifications (returned only for non-PM users). Users can use this ratio to determine the estimated liquidation price of their future positions by multiplying the current position market price by this ratio.
- New message informing clients when the system is in Maintenance Mode:
{"jsonrpc":"2.0","error":{"message":"system_maintenance","code":11051}}. - Market Maker Protection: a new MMP flag
mmp_cancelledis available in WS responses and event notifications, indicating that an order was cancelled due to MMP triggering.
- Due to event pipeline optimisations, clients using the incremental changes subscription may (in a very low-chance scenario) receive redundant events with
change_id <= snapshot change_idafter the initial full book snapshot. Such events should simply be discarded.
- Canceling an unprocessed order in the manageable request queue now results in a new error code
13666request_cancelled_by_user.
- A new authorization method has been added for registered applications to generate access tokens using API keys provided by their users (such access token has an additional
app_id: APP_IDscope).
- All WS API trade responses have been expanded with a new field
profit_loss(the same field already present for all orders). - Added MMP (Market Maker Protection) functionality, available via the API.
public/get_trade_volumesis enriched with rolling 7 and 30 days trade volume statistics.- Additional fields in
estimated_expiration_price,user_portfolionotifications and theget_account_summarymethod response:projected_delta_total,left_ticksandtotal_ticks.
- Added APIv2 methods
private/enable_affiliate_programandprivate/get_affiliate_program_infoto provide details about affiliate status. public/get_trade_volumesaccepts a new parameterextended, which allows receiving statistics for 7 and 30 days.- A new mark price field has been added to the trade confirmations for REST and WebSocket (this field is not available in FIX). The field is added in all responses that return a list of trades, i.e.
buy/sell/edit/get_last_tradesand trades events.
- APIv2 method
private/get_stop_order_historyprovides new fields:order_type,label,post_onlyandreduce_only.
- For API v2 a
price_changeresponse/notification parameter has been introduced; it reflects the 24-hour asset price change. - The API v2 request
private/get_account_summaryhas been extended with acreation_timestampfield.
- Added APIv2 method
public/get_delivery_prices. - APIv2 response parameter
position(for perpetual instruments) includes the fieldrealized_funding. - APIv2 methods
public/exchange_tokenandpublic/fork_tokendon’t accept registered application tokens.