Naar de inhoud
SyncMyShop

Kennisbank

Rate limits en throttling: wat gebeurt er als een API "te veel" zegt

Een rate limit is het maximum aantal aanroepen dat een API binnen een bepaalde tijd van één afnemer accepteert. Ga je erover, dan weigert de API de aanroep, meestal met HTTP-status 429, en moet de koppeling wachten en het later opnieuw proberen.

Bijgewerkt op

Wat een rate limit is

Een API bedient veel afnemers tegelijk op dezelfde servers. De rate limit zorgt ervoor dat één afnemer de rest niet vertraagt. Voor een koppeling is het een vast gegeven: zoveel aanroepen per minuut, per dag of tegelijk, en niet meer.

Raak je de grens, dan antwoordt de API met status 429 Too Many Requests. Die status staat in RFC 6585, sectie 4. Het antwoord mag een Retry-After header bevatten die zegt hoe lang je moet wachten.

Veel API's melden het saldo al voordat het op is. Exact Online stuurt bij elk antwoord vijf headers mee. Na de zestigste aanroep binnen een minuut staan ze zo, met voorbeeldwaarden:

HTTP/1.1 200 OK
X-RateLimit-Minutely-Limit: 60
X-RateLimit-Minutely-Remaining: 0
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 3841
X-RateLimit-Reset: 1791072000000

De minuutlimiet is op, van de daglimiet zijn er nog 3.841 over. Elke volgende aanroep in dezelfde minuut krijgt een 429. X-RateLimit-Reset is het moment waarop het dagvenster opnieuw begint, in milliseconden sinds 1 januari 1970 UTC.

Limieten komen in vier vormen voor:

Vorm Hoe het telt Voorbeeld
Vast venster een aantal per minuut of per dag Exact Online: 60 per minuut, 5.000 per dag
Lekkende emmer een emmer vult per aanroep en loopt met vaste snelheid leeg Shopify REST: emmer van 40, lek van 2 per seconde
Kosten per query elke query kost punten naar wat hij opvraagt Shopify GraphQL: 100 punten per seconde, maximaal 1.000 per query
Gelijktijdigheid een aantal aanvragen dat tegelijk open mag staan NetSuite: 5 per account op het Standard-niveau

Limieten per systeem

De getallen komen uit de documentatie van de leveranciers, gecontroleerd op 3 oktober 2026.

Systeem Limiet Antwoord bij overschrijding
Exact Online 60 per minuut en 5.000 per dag, per app per administratie 429. Bij de daglimiet tot het begin van de volgende dag
Shopify, REST Admin API emmer van 40, lek van 2 per seconde. Plus: 400 en 20 429 met Retry-After
Shopify, GraphQL Admin API 100 punten per seconde, Advanced 200, Plus 1.000 200 OK met foutcode THROTTLED in de body
NetSuite 5 gelijktijdig op Standard, 15 op Premium, 20 op Enterprise. 5.000 units per RESTlet RESTlet: 400 met SSS_REQUEST_LIMIT_EXCEEDED. REST: 429
Business Central online 6.000 OData-aanvragen per 5 minuten per gebruiker, 5 tegelijk 429
WooCommerce Store API 25 POST-aanvragen per 10 seconden, staat standaard uit header RateLimit-Retry-After
Picqer 500 per minuut per API-sleutel 429

Vier dingen in deze tabel gaan in de praktijk mis.

Shopify GraphQL antwoordt met 200. Een afgeknepen query komt terug als een geslaagd HTTP-antwoord met "code": "THROTTLED" in de body. Een koppeling die alleen naar de statuscode kijkt, boekt de aanroep als gelukt en de voorraadwijziging is nooit aangekomen.

NetSuite geeft een 400. Een RESTlet die het maximum aan gelijktijdige aanvragen raakt, antwoordt met 400 Bad Request en de foutcode SSS_REQUEST_LIMIT_EXCEEDED. Dat is dezelfde status als bij een fout in de data. De koppeling moet de foutcode lezen om te weten dat opnieuw proberen hier zin heeft. Het maximum geldt per account en wordt gedeeld met elke andere koppeling die daar draait.

Exact Online telt ook fouten. Naast de aanroepen geldt een grens van 10 fouten per uur per endpoint, waarbij 400, 401, 403 en 404 meetellen. Een koppeling die een afgekeurde order blijft aanbieden, blokkeert zichzelf voor een uur. Exact beschrijft dit op de pagina API limits.

WooCommerce begrenst alleen de Store API. Die limiet bestaat sinds WooCommerce 7.2, geldt voor POST-aanvragen en staat standaard uit. De documentatie van de REST API waar een koppeling orders en producten mee leest, noemt geen limiet. Daar bepaalt de server van je hostingpartij hoeveel verkeer hij aankan, en een trage server geeft een timeout in plaats van een 429.

AFAS Profit publiceert geen getal. Er geldt een fair-use-beleid, en een GetConnector geeft zonder take-parameter de eerste 100 regels terug. Een koppeling die dat niet weet, synchroniseert 100 artikelen en meldt dat alles gelukt is.

Wat een koppeling doet bij een 429

De aanroep is niet verwerkt. De koppeling moet hem bewaren, wachten en opnieuw aanbieden. Hoe lang wachten hangt af van de vorm van de limiet.

Neem de lekkende emmer van de REST API van Shopify: 40 groot, 2 per seconde eruit. Er komen 100 orderstatussen tegelijk klaar te staan.

  • De eerste 40 gaan direct door. De emmer is vol.
  • Aanroep 41 krijgt een 429 met Retry-After: 2.0.
  • De overige 60 kunnen met 2 per seconde: 60 / 2 = 30 seconden.
100 aanroepen tegelijk tegen een lekkende emmer van 40 met 2 per seconde Van 100 aanroepen die tegelijk binnenkomen laat de API er 40 direct door. De overige 60 gaan met 2 per seconde en zijn na 30 seconden verwerkt. Zonder wachtrij krijgen die 60 een 429. Wachtrij van de koppeling 100 aanroepen staan klaar wachtrij leeg Wat de API doorlaat: emmer 40, lek 2 per seconde 60 aanroepen, 2 per seconde 40 direct Dezelfde 100 zonder wachtrij 40 gelukt, 60 keer een 429 0 s 10 s 20 s 30 s De emmer loopt leeg met 2 per seconde. 60 aanroepen gedeeld door 2 per seconde is 30 seconden.
Een lekkende emmer van 40 met 2 per seconde: 100 aanroepen duren 30 seconden met een wachtrij, en leveren 60 fouten op zonder.

Een koppeling met een wachtrij verstuurt de 60 in dat tempo en is na 30 seconden klaar, zonder één fout. Zonder wachtrij zijn er 60 aanroepen geweigerd en hangt het van de foutafhandeling af of ze ooit nog aankomen.

Geeft de API geen Retry-After mee, dan wacht de koppeling met groeiende pauzes: 1 seconde, dan 2, 4, 8 en 16. Vijf pogingen kosten samen 1 + 2 + 4 + 8 + 16 = 31 seconden. Bij een vast venster zoals de minuutlimiet van Exact Online heeft sneller proberen geen zin: de ruimte komt pas terug als de minuut om is.

Wat na het laatste aantal pogingen nog faalt, gaat met het originele bericht naar een aparte lijst. Daar blijft het staan tot de oorzaak is opgelost en het opnieuw verwerkt kan worden. Een herhaalde aanroep mag geen tweede order opleveren. Hoe je dat voorkomt staat in dubbele klanten en debiteuren.

Limieten ontwerpen in plaats van ontdekken

Een limiet die je op de drukste dag ontdekt, kost orders. De som maak je vooraf.

Polling verbruikt budget zonder dat er iets verandert. Vier endpoints die elke minuut bevraagd worden, zijn 4 x 1.440 = 5.760 aanroepen per dag. Dat is meer dan de 5.000 van Exact Online, voordat er één order geschreven is. Elke 5 minuten is 4 x 288 = 1.152. Waar het systeem een webhook biedt, vervalt het vragen grotendeels.

Eén sleutel, twee koppelingen. De limiet van Exact Online geldt per app per administratie, die van Picqer per API-sleutel. Twee processen op dezelfde sleutel delen hetzelfde budget en weten niet van elkaar wat ze verbruiken. Zelf meetellen klopt dan niet meer. De koppeling leest het resterende saldo uit de headers van elk antwoord.

Een budget per stroom. Van 5.000 per dag gaat een vast deel naar orders, een deel naar voorraad en de rest naar artikelgegevens. Orders gaan voor: een volledige artikelronde wacht als het saldo onder een drempel komt. De rekensom per stroom staat in doorvoer berekenen.

Foutmeldingen die iets anders zeggen. Niet elke tussenlaag geeft een limiet ongewijzigd door. Er zijn koppelplatformen die een bereikte limiet tonen als Ratelimit exceeded met foutcode UNAUTHORIZED. Wie alleen de code leest, gaat zoeken naar een verlopen wachtwoord.

Wat betekent dit voor je koppeling?

Wij bouwen elke koppeling met een wachtrij tussen de systemen. Aanroepen gaan in het tempo dat de API toelaat, een 429 leidt tot wachten en een nieuwe poging, en wat blijft falen staat met het originele bericht op een lijst die je in het dashboard ziet. De limieten van jouw systemen en je aantallen op een piekdag bepalen hoe de stromen verdeeld worden.

De basis staat in wat is een API koppeling, de bewaking op monitoring van je koppeling en het overzicht op koppelingen. Wil je weten waar jouw systemen de grens leggen, stuur ze dan in.

Veelgestelde vragen

Wat betekent HTTP 429 Too Many Requests?

De API heeft de aanroep begrepen maar weigert hem omdat je in korte tijd te veel aanroepen hebt gedaan. De status is vastgelegd in RFC 6585. Het antwoord kan een Retry-After header bevatten met het aantal seconden dat je moet wachten. De aanroep zelf is niet verwerkt en moet opnieuw.

Wat is het verschil tussen een rate limit en throttling?

De rate limit is de regel: 60 aanroepen per minuut, of 100 punten per seconde. Throttling is wat er gebeurt als je de regel raakt: de API knijpt af door aanroepen te weigeren of te vertragen. Een koppeling kan ook zichzelf afknijpen door bewust onder de limiet te blijven.

Raken er orders kwijt als de limiet bereikt is?

Niet als de koppeling met een wachtrij werkt. De order blijft in de wachtrij staan, de koppeling wacht tot de API weer ruimte geeft en biedt de order opnieuw aan. Een koppeling die rechtstreeks aanroept en de 429 niet afhandelt, slaat de order over zonder dat iemand het ziet.

Kan ik een hogere limiet krijgen?

Dat hangt af van het systeem en je abonnement. Shopify Plus heeft een emmer van 400 in plaats van 40 en 1.000 punten per seconde in plaats van 100. NetSuite telt 10 gelijktijdige aanvragen op per SuiteCloud Plus-licentie. Exact Online noemt voor Premium een totaal tot 30.000 aanroepen per dag.

Hoe zie ik hoeveel aanroepen er nog over zijn?

In het antwoord van de API. Exact Online stuurt X-RateLimit-Remaining en X-RateLimit-Minutely-Remaining mee. De REST API van Shopify geeft X-Shopify-Shop-Api-Call-Limit: 32/40. GraphQL bij Shopify zet het saldo in extensions.cost.throttleStatus.currentlyAvailable. Een koppeling leest die waarden na elke aanroep.

Vertel wat je nodig hebt

Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.

  • Je weet de prijs en de doorlooptijd voordat je iets toezegt
  • Wij zoeken uit welke koppeling het werk uit handen neemt
  • Wij verzorgen de bouw, hosting, bewaking en het onderhoud
  • Je team krijgt minder overtypwerk en minder uitzoekwerk

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com