DocsЛіміти запитів

Лiмiти запитiв

Зрозумiйте лiмiти запитiв FreeFileTools API та як їх обробляти у вашому додатку.

Лiмiти безкоштовного рiвня

ЛiмiтЗначення
Запитiв на годину50
Максимальний розмiр файлу на запит25 MB
Вiкно лiмiту запитiвRolling 1 hour

Лiмiт запитiв застосовується для кожного API Key. Кожен ключ має свiй незалежний лiчильник, який скидається на ковзнiй годиннiй основi.

Коли лiмiти запитiв перевищенi

Коли ви перевищуєте лiмiт запитiв, API повертає вiдповiдь 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 вказує кiлькiсть секунд очiкування перед наступним запитом.

Заголовки вiдповiдi лiмiту запитiв

Кожна вiдповiдь API мiстить заголовки для вiдстеження використання лiмiту запитiв:

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

Приклад заголовкiв вiдповiдi

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

Поради щодо дотримання лiмiтiв

1.

Перевiряйте залишок запитiв

Вiдстежуйте заголовок X-RateLimit-Remaining, щоб знати, скiльки запитiв у вас залишилося.

2.

Реалiзуйте експоненцiйне вiдступання

Коли отримаєте вiдповiдь 429, зачекайте та повторiть спробу зi зростаючими затримками замiсть бомбардування API.

3.

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

Якщо ви обробляєте тi самi файли повторно, кешуйте результати локально, щоб уникнути непотрiбних API-викликiв.

4.

Пакетуйте розумно

Для пакетної обробки розподiляйте запити в часi замiсть вiдправки всiх одночасно.

Приклад: Обробка лiмiтiв запитiв у 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");
}