Rate Limiting

Лимиты запросов к API и стратегии обработки ограничений

Обзор

Все запросы к Premiss Cloud API ограничены по частоте (rate limiting). Лимиты зависят от вашего тарифного плана и измеряются в запросах в минуту (RPM).

Используется алгоритм Sliding Window — лимит считается за скользящее окно в 60 секунд, а не за фиксированный интервал.

Лимиты по тарифам

ТарифRPM (запросов в минуту)
Start10
Pro50
Business100

Тариф определяется суммой пополнения баланса и действует 1 год. Текущий тариф и использование отображаются в Dashboard.

Заголовки ответа

Каждый ответ API содержит заголовки с информацией о лимитах:

X-RateLimit-Limit: 10          # Ваш лимит RPM
X-RateLimit-Remaining: 7       # Осталось запросов в текущем окне
X-RateLimit-Reset: 1708012345  # Unix timestamp сброса окна

При превышении лимита дополнительно возвращается:

Retry-After: 25                # Секунды до сброса лимита

Обработка ошибки 429

При превышении лимита API возвращает HTTP 429 Too Many Requests:

429 Too Many Requests
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Try again in 25 seconds."
  }
}

Рекомендуемая стратегия повтора

Используйте exponential backoff с учётом заголовка Retry-After:

retry_strategy.py
import requests
import time
 
def make_request_with_retry(url, headers, json_data, max_retries=3):
    for attempt in range(max_retries):
        response = requests.post(url, headers=headers, json=json_data)
 
        if response.status_code == 429:
            retry_after = int(response.headers.get('Retry-After', 5))
            print(f"Rate limit. Ожидаем {retry_after} сек...")
            time.sleep(retry_after)
            continue
 
        return response
 
    raise Exception("Превышено количество попыток")
 
# Использование
response = make_request_with_retry(
    "https://premiss.ru/api/v1/tasks",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json_data={"url": "https://example.com/audio.mp3", "steps": [...]}
)

Рекомендации

  • Отслеживайте заголовки X-RateLimit-Remaining — снижайте частоту запросов заблаговременно, не дожидаясь 429
  • Используйте batch APIPOST /api/v1/tasks/batch позволяет создать до 30 задач одним запросом (считается как 1 запрос к rate limiter)
  • Используйте webhooks — вместо polling статуса задачи, чтобы не тратить запросы на опрос
  • Используйте SSEGET /api/v1/tasks/{taskId}/events для отслеживания статуса в реальном времени (1 запрос вместо множества polling-запросов)

Rate limiting применяется ко всем эндпоинтам /api/v1/* — не только к созданию задач, но и к запросам статуса, списку задач и другим операциям.

На этой странице