Rate limits
Picked beperkt hoeveel aanroepen een werkruimte per minuut mag doen. Deze pagina geeft de limieten, de headers die laten zien waar je staat, en hoe je wacht en het opnieuw probeert.
De limieten
| Endpoints | Limiet |
|---|---|
GET /api/v1/stock, GET /api/v1/stock/changes en GET /api/v1/stock/changes/feed |
200 verzoeken per minuut |
| Elk ander endpoint | 60 verzoeken per minuut |
De limieten tellen per werkruimte, niet per token: alle tokens van je werkruimte putten uit hetzelfde budget. De voorraad-endpoints hebben een eigen budget, zodat voorraad pollen nooit het budget opmaakt dat je orderimport nodig heeft. Het terugbellen van een stap neemt geen token en wordt niet beperkt zolang het een stap noemt die erop wacht; alleen terugbellen naar een adres waar geen stap op wacht (een 404) telt, per IP-adres.
Elke aanroep telt mee, ook aanroepen die mislukken en proefruns.
De headers
Elk antwoord op een geauthenticeerde aanroep vertelt je waar je staat:
| Header | Betekenis |
|---|---|
X-RateLimit-Limit |
De limiet die voor deze aanroep geldt, per minuut. |
X-RateLimit-Remaining |
Hoeveel aanroepen je deze minuut nog over hebt. |
Boven de limiet antwoordt Picked met 429 en de code rate_limited, en nog twee headers:
| Header | Betekenis |
|---|---|
Retry-After |
Hoeveel seconden je moet wachten voor je opnieuw aanroept. |
X-RateLimit-Reset |
Wanneer de limiet weer vrijkomt, als Unix-tijdstempel. |
Onder de limiet blijven
- Lees voorraad in bulk.
GET /api/v1/stock?skus=A,B,Cneemt tot 100 SKU's in één aanroep, dus je hebt niet per product een aanroep nodig. - Spreid het werk. Stuur een reeks orders in een gelijkmatig tempo dat onder de limiet blijft, in plaats van allemaal tegelijk. Stuur je ze allemaal tegelijk, dan wordt het meeste geweigerd.
Wachten en opnieuw proberen
Antwoordt een aanroep met 429, wacht dan het aantal seconden uit Retry-After en probeer het opnieuw. Antwoordt hij met 503 of 500, wacht dan even en verdubbel de pauze bij elke nieuwe poging. Geef het na een paar pogingen op en meld de fout, in plaats van eindeloos door te gaan.
Een schets in JavaScript (Node.js 18 of nieuwer):
async function callPicked(url, options = {}, attempts = 5) {
for (let attempt = 1; ; attempt++) {
const response = await fetch(url, {
...options,
headers: {
Authorization: `Bearer ${process.env.PICKED_TOKEN}`,
Accept: 'application/json',
...options.headers,
},
});
const retryable = [429, 500, 503].includes(response.status);
if (!retryable || attempt === attempts) {
return response;
}
const retryAfter = Number(response.headers.get('Retry-After'));
const seconds = retryAfter > 0 ? retryAfter : 2 ** attempt;
await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
}
}
Stuur een schrijfaanroep alleen opnieuw als Picked de herhaling herkent. Zie Idempotentie.