レート制限
注文操作と API リクエストに対するウォレット単位のレート制限です。
概要
レート制限は 60 秒の固定ウィンドウで行われます。ウォレットの制限はそのウォレットのティアによって決まり、以下に適用されます。
- 注文の発注 (
POST /order、PUT /order、WebSocketPlaceOrder、およびTEEルートのパーペチュアル注文の送信) - 注文のキャンセル (
DELETE /order、DELETE /order_cloid、およびTEEルートのパーペチュアルのキャンセル) - API リクエスト (ウォレット単位の読み取りおよびその他の署名付き書き込み)
キャンセル、エージェント認可、MMP の書き込み、公開リスクシミュレーションには、ネットワークソースをキーとする別個の制限と、プロセス全体の上限が適用されます。
カウンターは各 API プロセスのメモリ上で保持されます。レプリカ間では共有されないため、公表している数値はクラスター全体の予算ではなく、単一のプロセスが受け付ける上限として扱ってください。
デフォルトの制限
| ティア | 注文/分 | キャンセル/分 | API リクエスト/分 | 最大オープン注文数 | 最大ポジション数 |
|---|---|---|---|---|---|
| デフォルト | 60 | 120 | 600 | 100 | 50 |
| Tier 1 | 30 | 60 | 300 | 50 | 20 |
| Tier 2 | 120 | 300 | 1,200 | 500 | 200 |
| マーケットメイカー | 1,200 | 2,400 | 6,000 | 5,000 | 無制限 |
新しいウォレットにはデフォルトの制限が適用されます。ティアのアップグレードについてはサポートにお問い合わせください。現在の API リクエスト制限は、ウォレット単位の読み取り (例: GET /orders?wallet=...) のレスポンスに含まれる X-RateLimit-Limit ヘッダーで確認できます。
レート制限のレスポンス
レート制限を超えると、API は 429 Too Many Requests を返します。
{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded for OrderPlacement: 60 per minute, retry after 45 seconds",
"retry_after_secs": 45,
"limit": 60
}
レスポンスヘッダー
ウォレット単位で制限されるエンドポイントは、以下のヘッダーを返します。429 には X-RateLimit-Limit、X-RateLimit-Remaining: 0、Retry-After が含まれますが、X-RateLimit-Reset は含まれません。
| ヘッダー | 説明 | 例 |
|---|---|---|
X-RateLimit-Limit | ウィンドウあたりの最大リクエスト数 | 60 |
X-RateLimit-Remaining | 現在のウィンドウで残っているリクエスト数 | 42 |
X-RateLimit-Reset | ウィンドウがリセットされる Unix タイムスタンプ (秒、成功レスポンスのみ) | 1737312060 |
Retry-After | リトライまでの秒数 (429 のみ) | 45 |
レスポンスヘッダーの例
成功したリクエスト:
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1737312060
レート制限されたリクエスト:
HTTP/1.1 429 Too Many Requests
Retry-After: 45
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
レート制限のカテゴリー
レート制限はアクションの種類ごとに個別に追跡されます。
注文の発注
ウォレットごとに、ティアの「注文/分」に対してカウントされます。
POST /orderおよびPUT /order- WebSocket
PlaceOrder POST /v1/tee-perp/orders/submitおよびその他のパーペチュアル注文の送信 (Account のマネージャーに対してカウント)
POST /bulk_order と PUT /bulk_order は、1 リクエストあたり 50 件までに制限されます。
注文のキャンセル
ウォレットごとに、ティアの「キャンセル/分」に対してカウントされます。
DELETE /orderおよびDELETE /order_cloid- パーペチュアルのキャンセル (署名した API ウォレットに対してカウント)
DELETE /bulk_order と DELETE /bulk_order_cloid を含むすべてのキャンセルルートは、署名検証の前にも、1 分あたりネットワークソースごとに 6,000 レッグ、プロセス全体で 60,000 レッグに制限されます。一括キャンセルでは、1 エントリーにつき 1 レッグとしてカウントされます。
API リクエスト
ウォレットごとに、ティアの「API リクエスト/分」に対してカウントされます。
- ウォレット単位の読み取り (
walletクエリパラメーターをキーとする) - 上記以外の署名付き書き込み (MMP の設定や証拠金モードなど)
RFQ の送信
POST /rfq/request と WebSocket の RFQ 送信コマンドは、ティアに関係なく、ウォレットごとに 1 分あたり 10 件に制限されます。
リスクシミュレーション
公開のポートフォリオおよび注文のシミュレーション (POST /risk/simulate/portfolio、
POST /risk/simulate/orders、およびパーペチュアルのプレビュー POST /v1/tee-perp/preview)
には、1 分あたりネットワークソースごとに 60 リクエスト、プロセス全体で 600 リクエストという
別個の制限があります。1 つの API プロセスで同時に実行されるシミュレーションは最大 4 件です。
クォータを超えたリクエスト、またはシミュレーションワーカーが飽和している場合のリクエストには、429 Too Many Requests が返されます。
エージェント認可
POST /approve-agent、DELETE /revoke-agent、DELETE /revoke-all-agents は、署名検証の前に、1 分あたりネットワークソースごとに 120 リクエスト、プロセス全体で 1,200 リクエストに制限されます。
MMP の書き込み
MMP の設定の書き込みは、ウォレットの API リクエスト制限に加えて、署名検証の前に、1 分あたりネットワークソースごとに 120 リクエスト、プロセス全体で 1,200 リクエストに制限されます。
ポジションと注文の制限
レート制限に加えて、ウォレットには最大オープン注文数と最大ポジション数の制限があります。
| 制限の種類 | 説明 | 拒否 |
|---|---|---|
| 最大オープン注文数 | 同時に保有できるオープン注文の最大数 | ウォレットが上限に達している間、新規注文は拒否されます |
| 最大ポジション数 | ユニークなポジションの最大数 (-1 = 無制限) | 新しいポジションを建てることになる注文は拒否されます |
これらは HTTP エラーではなく、注文の拒否です。注文レスポンスは HTTP 200 で、status: "REJECTED" と、次のような reason が返されます。
max_open_orders_exceeded: current=100, limit=100
max_positions_exceeded: wallet 0x... has 50 positions, limit is 50
ベストプラクティス
レート制限への対処
- ヘッダーを監視する:
X-RateLimit-Remainingを事前に追跡してください - Retry-After を守る: 指定された時間だけ待ってからリトライしてください
- バックオフを実装する: 429 が繰り返される場合は指数バックオフを使用してください
import time
def place_order_with_retry(order, max_retries=3):
for attempt in range(max_retries):
response = api.place_order(order)
if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
time.sleep(retry_after)
continue
return response
raise RateLimitError("Max retries exceeded")
リクエストの使用量を最適化する
- 一括エンドポイントを使う: 複数の注文は
POST /bulk_orderで 1 リクエストにまとめてください - キャンセルをまとめる: 複数の
DELETE /orderリクエストの代わりにDELETE /bulk_orderまたはDELETE /bulk_order_cloidを使用してください - 更新には WebSocket を使う:
GET /ordersをポーリングする代わりに、注文の更新を購読してください
モニタリング
クライアント側で以下のメトリクスを追跡してください。
- アクションの種類ごとのリクエストレート
X-RateLimit-Remainingの推移- 429 レスポンスの頻度
Retry-Afterの平均時間
エラーリファレンス
| HTTP ステータス | エラーコード | 説明 |
|---|---|---|
| 429 | rate_limit_exceeded | レート制限を超えました。指定された時間が経過してからリトライしてください |
エラーの完全なリファレンスについては エラー を参照してください。