Cas d’usage
Rate limiting API (60/min prod, 1000/min sandbox, backoff client)
Limites par tenant, headers de quota, backoff exponentiel client
Scell.io applique un rate limit par tenant : 60 requêtes/minute en production (sk_live_*), 1000 requêtes/minute en sandbox (sk_test_*) pour faciliter le load testing. Les headers de réponse `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` (epoch) permettent au client de s'ajuster. En cas de dépassement : HTTP 429 + header `Retry-After` (secondes). Pattern client recommandé : exponential backoff avec jitter (1s, 2s, 4s, 8s, 16s) sur 5 tentatives max. Pour les besoins > 60/min, contacter le support pour un quota custom (entreprises et SSII).
À retenir
- Production : 60 req/min/tenant
- Sandbox : 1000 req/min/tenant
- Headers `X-RateLimit-*` sur toutes les réponses
- HTTP 429 + `Retry-After` en cas de dépassement
- Backoff exponentiel + jitter recommandé côté client
- Quota custom disponible pour entreprises et SSII
Exemple de code
async function callWithBackoff<T>(fn: () => Promise<T>, maxAttempts = 5): Promise<T> {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
return await fn();
} catch (err: any) {
if (err.status !== 429 || attempt === maxAttempts) throw err;
const retryAfter = Number(err.headers?.['retry-after'] ?? 0);
const backoff = retryAfter > 0 ? retryAfter * 1000 : Math.min(1000 * 2 ** (attempt - 1), 16_000);
const jitter = Math.random() * 250;
await new Promise((r) => setTimeout(r, backoff + jitter));
}
}
throw new Error('unreachable');
}
const invoice = await callWithBackoff(() => scell.invoices.create(payload));