Лимиты запросов

Каждый API request в FourA проходит через rate limiting. Вы столкнетесь с двумя типами лимитов: concurrency (одновременные requests) и RPM (requests в минуту). Оба лимита применяются для каждого сервиса отдельно.

Как работает rate limiting

API применяет лимиты на двух уровнях:

  1. Глобальный лимит API: применяется ко всем requests независимо от endpoint. Эта проверка выполняется первой.
  2. Лимит на сервис: применяется отдельно к каждому endpoint (single, proxy, browser). Эта проверка выполняется только в том случае, если пройден глобальный лимит.

Если превышен глобальный лимит, проверка лимита на сервис не выполняется. Request должен пройти обе проверки, прежде чем он достигнет бэкенда.

На каждом уровне отслеживаются две метрики:

  • Concurrency: сколько requests выполняется одновременно.
  • RPM: сколько requests вы отправили за последние 60 секунд.

Ответы rate limit

При превышении лимита API возвращает JSON response с текущим уровнем использования и действующими лимитами.

429: Превышен RPM

{
  "error": "Rate limit exceeded",
  "status": 429,
  "service": "single",
  "retryAfter": 5,
  "current": {
    "concurrency": 12,
    "rpm": 3000
  },
  "limits": {
    "maxConcurrency": 500,
    "maxRpm": 3000
  }
}

Вы отправили слишком много requests за последнюю минуту. Подождите в течение периода retryAfter, прежде чем отправлять новые requests.

503: Превышен лимит Concurrency

{
  "error": "Service at capacity",
  "status": 503,
  "service": "proxy",
  "retryAfter": 2,
  "current": {
    "concurrency": 500,
    "rpm": 1200
  },
  "limits": {
    "maxConcurrency": 500,
    "maxRpm": 3000
  }
}

Слишком много requests выполняется одновременно. Некоторые из ваших предыдущих requests еще не завершились.

Сервис отключен

Когда сервис временно отключается для обслуживания, API возвращает 503 с другим сообщением об ошибке:

{
  "error": "Service disabled",
  "status": 503,
  "retryAfter": 60
}

Это не связано с rate limit. Сервис временно недоступен. Проверьте значение retryAfter и повторите попытку через указанное количество секунд. Обычно это решается в течение нескольких минут.

Не путайте это с ошибкой 503 для concurrency. Response "Service disabled" не будет содержать полей current или limits.

Поля response

Поле Тип Описание
error string Понятное человеку сообщение об ошибке
status number Код статуса HTTP (429 или 503)
service string Какой сервис превысил лимит: single, proxy, browser или api
retryAfter number Рекомендуемое время ожидания в секундах перед повторной попыткой
current.concurrency number Ваше текущее количество активных requests
current.rpm number Ваши requests за последние 60 секунд
limits.maxConcurrency number Максимально допустимое количество одновременных requests
limits.maxRpm number Максимально допустимое количество requests в минуту

Обработка rate limits

Используйте поле retryAfter для реализации задержки повторных попыток (backoff):

import requests
import time

def fetch(url, max_retries=5):
    for attempt in range(max_retries):
        resp = requests.post(
            "https://eu.api.foura.ai/api/single/",
            headers={
                "X-API-Key": "YOUR_API_KEY",
                "Content-Type": "application/json"
            },
            json={"method": "GET", "url": url}
        )

        if resp.status_code in (429, 503):
            data = resp.json()
            wait = data.get("retryAfter", 5)
            time.sleep(wait)
            continue

        return resp

    raise Exception("Max retries exceeded")

Советы

  • Проверяйте поля current в responses от rate limit, чтобы понять характер использования.
  • Если вы постоянно превышаете лимиты concurrency, уменьшите количество параллельных requests.
  • Если вы превышаете лимиты RPM, добавьте небольшую задержку между requests или распределите их на более длительный период.
  • Значение retryAfter зависит от типа лимита: 2 секунды для concurrency, 5 секунд для RPM.
  • Response "Service disabled" означает, что выполняется техническое обслуживание. Не продолжайте непрерывно отправлять requests на endpoint.

Связанные разделы

  • API Endpoints: Полный справочник параметров
  • Error Handling: Все типы ошибок и responses
  • Troubleshooting: Распространенные проблемы и их решения
Обновлено: 15 апреля 2026 г.