Rate Limits

  • Updated

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