Лимиты запросов
Каждый API request в FourA проходит через rate limiting. Вы столкнетесь с двумя типами лимитов: concurrency (одновременные requests) и RPM (requests в минуту). Оба лимита применяются для каждого сервиса отдельно.
Как работает rate limiting
API применяет лимиты на двух уровнях:
- Глобальный лимит API: применяется ко всем requests независимо от endpoint. Эта проверка выполняется первой.
- Лимит на сервис: применяется отдельно к каждому 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: Распространенные проблемы и их решения