Deribit uses a volume-tiered rate limit system, focusing primarily on matching engine requests. These rate limits are implemented to ensure the robustness of our system's order processing capabilities.
General Mechanism of Rate Limits
Our rate limiting approach is based on a credit system, where each request consumes a certain number of credits and the credits are periodically refilled. Exceeding the rate limit results in a "too_many_requests" 10028 error. If you receive this error, it means you have used all of your credits, and will need to wait for a credit refill. Key elements of this system include:
-
Credit Refill: Credits are replenished at a consistent rate, ensuring a steady flow of allowable requests.
-
Maximum Credits: Each user is allocated a maximum number of credits, which sets the limit on how many requests can be made in a given period.
-
Cost per Request: Every API request consumes a predefined number of credits from the user's available credit pool.
Default Settings for Non-Matching Engine Requests
-
Cost per Request: 500 credits.
-
Maximum Credits: 50,000 credits.
-
Refill Rate: Credits are refilled at a rate that allows up to 20 requests per second (10,000 credits per second).
-
Burst Capacity: Allows up to 100 requests at once, considering the maximum credit pool.
Matching Engine Requests
Each sub-account has an hourly updated rate limit, applicable across all books. Users can check their current rate limits via the /private/get_account_summary method.
Tier Level |
7-Day Trading Volume |
Sustained Rate Limit (Requests/Second) |
Burst Rate Limit |
Description |
Tier 1 |
Over USD 25 million |
30 requests/second |
100 requests (burst) |
Suitable for high-volume traders, allowing up to 100 requests in a rapid burst or a steady rate of 30 requests per second. |
Tier 2 |
Over USD 5 million |
20 requests/second |
50 requests (burst) |
Designed for medium-volume traders, permitting up to 50 requests in a burst or 20 requests per second. |
Tier 3 |
Over USD 1 million |
10 requests/second |
30 requests (burst) |
Appropriate for active traders, enabling up to 30 requests in a burst or 10 requests per second. |
Tier 4 |
Up to USD 1 million |
5 requests/second |
20 requests (burst) |
For regular traders, allowing up to 20 requests in a burst or a steady rate of 5 requests per second. |
Checking current rate limits
Users can access the current rate limits by calling the /private/get_account_summary method and receiving limits field in response. The configuration of rate limits can be either on a per-currency basis or a default set applied globally across all currencies. Per-currency limits are not the default setting and are enabled only for specific clients upon request.
Limits field
non_matching_engine: Describes rate limits applicable to requests that do not involve the matching engine. Defined by:
-
burst: The maximum number of requests permitted in a short burst.
-
rate: The sustained number of requests allowed over time.
matching_engine: Outlines rate limits related to operations that utilize the matching engine, with the following structure:
Common Limits for All Configurations:
-
spot: Specific limits for spot trading, involving two different currencies.
-
cancel_all: Limits applicable to canceling all orders across all currencies or canceling by label without specifying the currency.
When limits_per_currencyis set to false, the following default limits apply globally across all currencies:
-
trading: Total trading limits applied to all trading operations.
-
maximum_quotes: Limits on the maximum number of quotes permissible.
-
maximum_mass_quotes: Limits on mass quoting operations.
-
guaranteed_mass_quotes: Guaranteed number of mass quotes that can be made.
When limits_per_currencyis set to true, rate limits are defined separately for each settlement currency, providing detailed control:
-
Each currency is represented by its code as a key in the matching_engine object.
Under each currency key, the limits are categorized as follows:
-
trading: Limits specific to trading activities for that currency.
-
maximum_quotes: Limits for the maximum number of quotes specific to the currency.
-
maximum_mass_quotes: Limits for mass quoting operations for the currency.
-
guaranteed_mass_quotes: Guaranteed number of mass quotes for the currency.
Additional Context for Cancel Operations
private/cancel_all: This endpoint utilizes the cancel_all limit from the matching_engine to determine allowable rates for canceling all orders across the platform.
private/cancel_all_by_currency/instrument: For operations targeted at specific currencies or instruments, the relevant limits under trading from the matching_engine apply. If the operation involves spot trading, the spot limit is applicable.
private/cancel_all_by_kind_or_type: The applicable limits depend on the parameters specified in the request:
-
For all currencies: thecancel_alllimit.
-
For a specific currency: the corresponding currency limit.
-
For spot operations: the spot limit.
Example for users without per currency config (default):
{ "non_matching_engine": { "burst": 1500, "rate": 1000 }, "limits_per_currency": false, "matching_engine": { "trading": { "total": { "burst": 20, "rate": 5 } }, "spot": { "burst": 250, "rate": 200 }, "maximum_quotes": { "burst": 500, "rate": 500 }, "maximum_mass_quotes": { "burst": 10, "rate": 10 }, "guaranteed_mass_quotes": { "burst": 2, "rate": 2 }, "cancel_all": { "burst": 250, "rate": 200 } } }
Example for users with per currency config:
{ "non_matching_engine": { "burst": 1500, "rate": 1000 }, "limits_per_currency": true, "matching_engine": { "cancel_all": { "burst": 250, "rate": 200 }, "spot": { "burst": 250, "rate": 200 }, "usdt": { "maximum_quotes": { "burst": 500, "rate": 500 }, "maximum_mass_quotes": { "burst": 10, "rate": 10 }, "guaranteed_mass_quotes": { "burst": 2, "rate": 2 }, "trading": { "total": { "burst": 250, "rate": 200 } } }, "usdc": { "maximum_quotes": { "burst": 500, "rate": 500 }, "maximum_mass_quotes": { "burst": 10, "rate": 10 }, "guaranteed_mass_quotes": { "burst": 2, "rate": 2 }, "trading": { "total": { "burst": 250, "rate": 200 } } }, "eth": { "maximum_quotes": { "burst": 500, "rate": 500 }, "maximum_mass_quotes": { "burst": 10, "rate": 10 }, "guaranteed_mass_quotes": { "burst": 2, "rate": 2 }, "trading": { "total": { "burst": 250, "rate": 200 } } }, "btc": { "maximum_quotes": { "burst": 500, "rate": 500 }, "maximum_mass_quotes": { "burst": 10, "rate": 10 }, "guaranteed_mass_quotes": { "burst": 2, "rate": 2 }, "trading": { "perpetuals": { "burst": 20, "rate": 10 }, "total": { "burst": 150, "rate": 100 } } } } }
Overview of Matching Engine Requests
All requests not in the list below are treated as non-matching engine requests.
API V2
/api/v2/private/buy
/api/v2/private/sell
/api/v2/private/edit
/api/v2/private/edit_by_label
/api/v2/private/cancel
/api/v2/private/cancel_by_label
/api/v2/private/cancel_all
/api/v2/private/cancel_all_by_instrument
/api/v2/private/cancel_all_by_currency
/api/v2/private/cancel_all_by_kind_or_type
/api/v2/private/close_position
/api/v2/private/verify_block_trade
/api/v2/private/execute_block_trade
/api/v2/private/move_positions
/api/v2/private/mass_quote
/api/v2/private/cancel_quotes
FIX
new_order_single
order_cancel_request
order_mass_cancel_request
order_cancel_replace_request
mass_quote
quote_cancel