Skip to main content
L’API Actero applique plusieurs couches de rate limit pour protéger ton tenant des abus, contenir les coûts LLM, et garantir une latence stable. Chaque couche a sa propre fenêtre et sa propre clé de comptage.

Limites en vigueur

Engine gateway

C’est la route la plus chargée — elle déclenche un appel LLM. Deux limites cumulatives : Un dépassement renvoie 429 Too Many Requests :

Quota mensuel (plan-based)

Indépendamment du rate limit court-terme, chaque plan a un quota mensuel de tickets traités : Au-delà du quota :
  • Tous les plans : bloqué (429) jusqu’à achat d’un pack de crédits ou upgrade. Aucun dépassement n’est facturé à l’insu du marchand.
  • Si le compte dispose de crédits, ils sont consommés automatiquement (1 crédit = 1 ticket) et le service continue sans interruption.

Routes auth & lectures

Le rate limiter par IP / user vit en mémoire process (Vercel Functions). En cas de scale horizontal, la limite effective est multipliée par le nombre d’instances chaudes — c’est volontaire et tolérable pour ces volumes.

Réponse 429

Toutes les routes répondent en JSON :
Le header Retry-After est exposé sur les routes auth/IP-based. Sur l’engine gateway, on ne l’envoie pas systématiquement — calcule ton retry sur la fenêtre de la limite (10 min ou 60 min selon le cas).

Stratégie de retry recommandée

N’attaque pas la même seconde N fois. Une boucle while (status === 429) retry() sans backoff garantit que tu seras toujours rate-limité. Le serveur ne te débloquera pas plus vite parce que tu insistes.

Headers de rate limit

Les routes engine n’exposent pas de headers X-RateLimit-Remaining ni X-RateLimit-Reset aujourd’hui. Pour estimer ta consommation en temps réel, utilise GET /api/billing/usage qui retourne tickets_used / tickets_limit / overage_tickets du mois en cours.

Augmenter tes limites

Pour des volumes Enterprise (>50 000 tickets/mois ou >1 000 messages/heure), on peut basculer sur Upstash Redis pour un rate limit cluster-wide. Demande au support.

Idempotence et anti-rejeu

Voir l’introduction → Idempotence. En court : les webhooks entrants sont dédupliqués par (provider, event_id) pendant 30 jours. Ton code peut donc rejouer en toute sécurité un webhook reçu deux fois — l’effet sera identique.