レート制限とクォータ

Smart Money APIのレート制限、各サブスクリプション層の日次クォータ、API利用を最大化するための最適化戦略を理解しましょう。

概要

Smart Money APIは、サービス品質と全ユーザーへの公平性を保証するため、日次リクエストクォータを実装しています。各サブスクリプション層には異なる日次制限が含まれます。日次クォータを超過すると、UTC午前0時にクォータがリセットされるまで429 Too Many Requestsエラーが返されます。

レート制限はAPIキーごとに適用されます。各キーには独立したクォータがあります。異なるアプリケーション用に複数のキーを生成し、それぞれの利用状況を個別に監視できます。

サブスクリプション層別クォータ

ティア 日次リクエスト 価格 機能
無料 20リクエスト/日 $0 BTC, ETH, SOL, 資金調達率, 清算
トレーダー 400リクエスト/日 $29/月 全シンボル, クジラポジション, OIデータ
プロ 4,000リクエスト/日 $79/月 確認スコア, オンチェーンデータ, Webhook
エンタープライズ カスタム カスタム 専用サポート, カスタム統合

レート制限レスポンスヘッダー

すべてのAPIレスポンスには、現在のクォータ状況を示すヘッダーが含まれます:

HTTPヘッダー
X-Requests-Limit: 200 X-Requests-Remaining: 147 X-Requests-Reset: 1711116000 X-Requests-Reset-ISO: 2026-03-22T00:00:00Z
ヘッダー 説明
X-Requests-Limit 1日あたりの総リクエスト許可数 (例: トレーダーは200)
X-Requests-Remaining 現在の日に残っているリクエスト数
X-Requests-Reset クォータがリセットされるUnixタイムスタンプ
X-Requests-Reset-ISO クォータリセットのISO 8601タイムスタンプ

リクエスト前のクォータ確認

Python
import requests from datetime import datetime def check_quota_before_request(api_key): response = requests.head( "https://api.smartmoneyapi.com/v1/whales/events", headers={"Authorization": f"Bearer {api_key}"} ) limit = int(response.headers.get("X-Requests-Limit", 0)) remaining = int(response.headers.get("X-Requests-Remaining", 0)) reset_unix = int(response.headers.get("X-Requests-Reset", 0)) reset_time = datetime.fromtimestamp(reset_unix) percent_used = (limit - remaining) / limit * 100 print(f"クォータ: {remaining}/{limit} リクエスト ({percent_used:.1f}% 使用済み)") print(f"リセット時間: {reset_time}") if remaining < 5: print("警告: クォータ制限に近づいています!") return False return True # リクエスト前に確認 if check_quota_before_request("sk_live_abc123xyz789"): print("API呼び出しを安全に実行できます")

日次レートウィンドウ

レート制限は24時間のローリングウィンドウで動作します。クォータは毎日UTC午前0時(00:00 UTC)にリセットされます。正確なリセット時間は X-Requests-Reset-ISO ヘッダーで提供されます。

例: トレーダーティア (400リクエスト/日)

  • 1日目 (3月21日): 00:00 UTCで200リクエスト利用可能
  • 10:30 UTC: 75リクエスト実行、残り125
  • 15:45 UTC: さらに100リクエスト実行、残り25
  • 23:59 UTC: まだ25リクエスト残り (繰り越し不可)
  • 2日目 (3月22日, 00:00 UTC): クォータが200にリセット

最適化戦略

1. APIレスポンスをキャッシュする

クジラポジションは毎秒変化しません。結果を30-60秒間キャッシュし、新しいAPI呼び出しの代わりにキャッシュデータを提供します。

Python
import requests import time class CachedClient: def __init__(self, api_key, cache_ttl=60): self.api_key = api_key self.cache_ttl = cache_ttl self.cache = {} self.cache_time = {} def get_whale_positions(self, symbol): cache_key = f"whales:{symbol}" now = time.time() # キャッシュデータが新鮮なら返す if cache_key in self.cache: age = now - self.cache_time[cache_key] if age < self.cache_ttl: print(f"キャッシュから提供 (経過時間: {age:.1f}秒)") return self.cache[cache_key] # 新しいデータを取得 response = requests.get( f"https://api.smartmoneyapi.com/v1/whales/events?symbol={symbol}", headers={"Authorization": f"Bearer {self.api_key}"} ) data = response.json() self.cache[cache_key] = data self.cache_time[cache_key] = now return data # 使用例: 60秒間キャッシュ client = CachedClient("sk_live_abc123xyz789", cache_ttl=60) whales1 = client.get_whale_positions("BTCUSDT") # API呼び出し whales2 = client.get_whale_positions("BTCUSDT") # キャッシュから whales3 = client.get_whale_positions("BTCUSDT") # キャッシュから

2. リアルタイムデータにWebSocketを使用する

WebSocket接続は更新を即時に配信し、レート制限にカウントされません。ストリームを購読し、変更が発生するとすぐに更新を受け取ることで、必要なREST API呼び出しの数を減らせます。

3. 戦略的にリクエストをバッチ処理する

可能な場合は各シンボルごとに個別のリクエストを行う代わりに、複数のシンボルを含む1つのリクエストを作成します。これによりAPI呼び出しを最大10倍削減できます。

4. リクエスト時にフィルタリングを使用する

クエリパラメータでフィルタ(シンボル、取引所、最小ポジションサイズ)を適用し、必要なデータのみを取得することで、後処理の必要性を回避します。

レート制限エラーの処理

指数バックオフで再試行する

Python
import requests import time def request_with_retry(url, api_key, max_retries=5): for attempt in range(max_retries): try: response = requests.get( url, headers={"Authorization": f"Bearer {api_key}"}, timeout=10 ) if response.status_code == 200: return response.json() elif response.status_code == 429: # レート制限 - 指数バックオフ wait_time = min(2 ** attempt, 300) # 最大5分 reset_time = response.headers.get("X-Requests-Reset-ISO") print(f"レート制限. {wait_time}秒後に再試行 (リセット時間: {reset_time})") time.sleep(wait_time) elif response.status_code >= 500: # サーバーエラー - 再試行 wait_time = 2 ** attempt print(f"サーバーエラー {response.status_code}. {wait_time}秒後に再試行") time.sleep(wait_time) else: # その他のエラー - 再試行しない raise Exception(f"HTTP {response.status_code}: {response.text}") except requests.exceptions.Timeout: wait_time = 2 ** attempt print(f"タイムアウト. {wait_time}秒後に再試行") time.sleep(wait_time) raise Exception("最大再試行回数に達しました") # 使用例 data = request_with_retry( "https://api.smartmoneyapi.com/v1/whales/events", "sk_live_abc123xyz789" ) print(data)

アップグレードの準備はできていますか?

無料ティアでは足りませんか?確認スコアやオンチェーンデータなどの高度な機能にアクセスし、より高いクォータを得るためにトレーダーまたはプロにアップグレードしてください。

価格を見る

今日からAPI利用を最適化

キャッシュを実装し、リアルタイムデータにWebSocketを使用し、レート制限を適切に処理しましょう。

ドキュメントを読む
無料で開始 — 1日100コール、カード不要

3つの取引所からのライブクジラフロー、資金調達、オープンイテレスト、オンチェーンデータを1つのAPIで取得。無料ティア、クレジットカード不要、いつでもアップグレード可能。

無料で始める →
ライブAPIコンソールを試す → (アカウント不要)
30秒でAPIキーを取得

構築の準備はできましたか?無料APIキー(1日100コール、カード不要)を取得し、ライブクジラ、資金調達、オンチェーンデータの取得を開始しましょう。

APIキーを取得 →