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

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

Узнайте о лимитах запросов API FreeFileTools и как обрабатывать их в вашем приложении.

Лимиты бесплатного плана

ЛимитЗначение
Запросов в час50
Максимальный размер файла на запрос25 MB
Окно лимита запросовRolling 1 hour

Лимит запросов применяется на каждый API key. Каждый ключ имеет свой независимый счетчик, который сбрасывается на скользящей почасовой основе.

Когда лимиты запросов превышены

Когда вы превышаете лимит запросов, API возвращает ответ 429 Too Many Requests:

json
{
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
  "retryAfter": 1742
}

Поле retryAfter указывает количество секунд ожидания перед следующим запросом.

Заголовки ответа лимита запросов

Каждый ответ API включает заголовки, помогающие отслеживать использование лимита запросов:

ЗаголовокОписание
X-RateLimit-LimitМаксимальное количество запросов в час (50)
X-RateLimit-RemainingКоличество оставшихся запросов в текущем окне
Retry-AfterСекунд ожидания перед повторной попыткой (только для ответов 429)

Пример заголовков ответа

http
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42

Советы по соблюдению лимитов

1.

Проверяйте оставшиеся запросы

Отслеживайте заголовок X-RateLimit-Remaining, чтобы знать, сколько запросов у вас осталось.

2.

Реализуйте экспоненциальную задержку

При получении ответа 429 подождите и повторите попытку с увеличивающимися задержками, а не бомбардируйте API.

3.

Кэшируйте результаты

Если вы обрабатываете одни и те же файлы повторно, кэшируйте результаты локально, чтобы избежать ненужных вызовов API.

4.

Группируйте с умом

Для пакетной обработки распределяйте запросы по времени, а не отправляйте все сразу.

Пример: Обработка лимитов запросов в JavaScript

javascript
async function apiCall(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const retryAfter = parseInt(response.headers.get("Retry-After") || "60");
      console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
      await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
      continue;
    }

    return response;
  }

  throw new Error("Max retries exceeded");
}