Aller au contenu principal

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));

Voir aussi

Vos préférences cookies

Nous utilisons des cookies pour améliorer votre expérience. Les cookies essentiels sont toujours actifs. Politique cookies.