Ограничение скорости и квоты

Поймите ограничения скорости Smart Money API, ежедневные квоты для каждого уровня подписки и стратегии оптимизации для максимального использования API.

Обзор

Smart Money API применяет ежедневные квоты запросов для обеспечения качества обслуживания и справедливости для всех пользователей. Каждый уровень подписки включает разные ежедневные лимиты. При превышении ежедневной квоты вы получаете ошибку 429 Too Many Requests до тех пор, пока квота не сбросится в полночь по UTC.

Ограничения скорости применяются к каждому API-ключу. Каждый ключ имеет свою независимую квоту. Вы можете генерировать несколько ключей для разных приложений и отслеживать использование каждого отдельно.

Квоты по уровням подписки

Уровень Ежедневные запросы Цена Функции
Бесплатный 100 запросов/день $0 BTC, ETH, SOL, ставки финансирования, ликвидации
Трейдер 1,000 запросов/день $29/месяц Все символы, позиции китов, данные OI
Профессиональный 5,000 запросов/день $79/месяц Оценки подтверждения, данные блокчейна, вебхуки
Корпоративный Индивидуальный Индивидуальный Персональная поддержка, индивидуальные интеграции

Заголовки ответа на ограничение скорости

Каждый ответ 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 Общее количество запросов, разрешенных в день (например, 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"Quota: {remaining}/{limit} requests ({percent_used:.1f}% used)") print(f"Resets at: {reset_time}") if remaining < 5: print("WARNING: Approaching quota limit!") return False return True # Check before making requests if check_quota_before_request("sk_live_abc123xyz789"): print("Safe to proceed with API calls")

Ежедневное окно ограничения скорости

Ограничения скорости работают в 24-часовом скользящем окне. Ваша квота сбрасывается ежедневно в полночь по UTC (00:00 UTC). Точное время сброса указано в заголовке X-Requests-Reset-ISO .

Пример: Уровень Трейдер (1,000 запросов/день)

  • День 1 (21 марта): 200 запросов доступны в 00:00 UTC
  • 10:30 UTC: Сделано 75 запросов, осталось 125
  • 15:45 UTC: Сделано еще 100 запросов, осталось 25
  • 23:59 UTC: Осталось 25 запросов (нельзя переносить)
  • День 2 (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() # Return cached data if still fresh if cache_key in self.cache: age = now - self.cache_time[cache_key] if age < self.cache_ttl: print(f"Served from cache (age: {age:.1f}s)") return self.cache[cache_key] # Fetch fresh data 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 # Usage: Cache for 60 seconds client = CachedClient("sk_live_abc123xyz789", cache_ttl=60) whales1 = client.get_whale_positions("BTCUSDT") # API call whales2 = client.get_whale_positions("BTCUSDT") # From cache whales3 = client.get_whale_positions("BTCUSDT") # From cache

2. Используйте WebSocket для данных в реальном времени

WebSocket-соединения доставляют обновления мгновенно, не засчитываясь в ваш лимит скорости. Подпишитесь на потоки и получайте обновления по мере их поступления, сокращая количество необходимых вызовов REST API.

3. Стратегически объединяйте запросы

Делайте один запрос с несколькими символами, когда это возможно, вместо отдельных запросов для каждого символа. Это сокращает количество вызовов 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: # Rate limited - back off exponentially wait_time = min(2 ** attempt, 300) # Max 5 minutes reset_time = response.headers.get("X-Requests-Reset-ISO") print(f"Rate limited. Retrying in {wait_time}s (resets at {reset_time})") time.sleep(wait_time) elif response.status_code >= 500: # Server error - retry wait_time = 2 ** attempt print(f"Server error {response.status_code}. Retrying in {wait_time}s") time.sleep(wait_time) else: # Other error - don't retry raise Exception(f"HTTP {response.status_code}: {response.text}") except requests.exceptions.Timeout: wait_time = 2 ** attempt print(f"Timeout. Retrying in {wait_time}s") time.sleep(wait_time) raise Exception("Max retries exceeded") # Usage data = request_with_retry( "https://api.smartmoneyapi.com/v1/whales/events", "sk_live_abc123xyz789" ) print(data)

Готовы обновить?

Бесплатного уровня недостаточно? Перейдите на уровень Трейдер или Профессиональный для увеличения квот и доступа к расширенным функциям, таким как оценки подтверждения и данные блокчейна.

Посмотреть цены

Оптимизируйте использование API уже сегодня

Реализуйте кэширование, используйте WebSocket для данных в реальном времени и корректно обрабатывайте ограничения скорости.

Читать документацию
Начните бесплатно — 100 вызовов/день, без карты

Получайте данные о потоках китов, финансировании, открытом интересе и данных блокчейна с 3 бирж через один API. Бесплатный уровень, без кредитной карты, обновляйтесь в любое время.

Начать бесплатно →
Попробуйте консоль API в реальном времени → (аккаунт не требуется)
Получите ваш API-ключ за 30 секунд

Готовы строить? Получите бесплатный API-ключ (100 вызовов/день, без карты) и начните получать данные о китах, финансировании и блокчейне в реальном времени.

Получить ваш API-ключ →