DocsLimieten

Snelheidslimieten

Begrijp de snelheidslimieten van de FreeFileTools API en hoe je ermee omgaat in je applicatie.

Gratis limietwaarden

LimietWaarde
Verzoeken per uur50
Maximale bestandsgrootte per verzoek25 MB
Snelheidslimiet-vensterRolling 1 hour

De snelheidslimiet wordt per API Key toegepast. Elke sleutel heeft een eigen onafhankelijke teller die op een rollende basis per uur wordt gereset.

Bij overschrijding van snelheidslimieten

Wanneer je de snelheidslimiet overschrijdt, retourneert de API een 429 Too Many Requests-respons:

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

Het retryAfter-veld geeft het aantal seconden aan dat je moet wachten voordat je een nieuw verzoek doet.

Snelheidslimiet-responsheaders

Elke API-respons bevat headers om je te helpen het gebruik van je snelheidslimiet bij te houden:

HeaderBeschrijving
X-RateLimit-LimitMaximaal aantal verzoeken per uur (50)
X-RateLimit-RemainingAantal resterende verzoeken in het huidige venster
Retry-AfterSeconden te wachten voor opnieuw proberen (alleen bij 429-responsen)

Voorbeeld responsheaders

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

Tips om binnen de limieten te blijven

1.

Controleer resterende verzoeken

Monitor de X-RateLimit-Remaining-header om te weten hoeveel verzoeken je nog hebt.

2.

Implementeer exponentieel terugvallen

Wanneer je een 429-respons ontvangt, wacht en probeer opnieuw met toenemende vertragingen in plaats van de API te bestoken.

3.

Cache resultaten

Als je dezelfde bestanden herhaaldelijk verwerkt, cache de resultaten dan lokaal om onnodige API-aanroepen te vermijden.

4.

Batch verstandig

Voor batchverwerking, spreid je verzoeken over de tijd in plaats van ze allemaal tegelijk te versturen.

Voorbeeld: Snelheidslimieten afhandelen in 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");
}