Limites de taux
Comprendre les limites de taux de l'API, les limites d'envoi d'emails et comment gérer les réponses à taux limité
MailLand applique des limites de taux à plusieurs niveaux pour garantir une utilisation équitable et la stabilité de la plateforme. Les limites varient selon le type de flux (transactionnel vs marketing), la méthode d'authentification et le niveau de forfait.
Limites de requêtes API
Limites basées sur l'IP
Chaque requête est soumise à une limitation de taux basée sur l'IP, appliquée avant l'authentification. Ces limites protègent contre les abus et les attaques DDoS.
| Endpoint | Limite | Fenêtre |
|---|---|---|
| API générale | 300 requêtes | Par minute |
| Connexion admin | 10 requêtes | Par minute |
| Invitations d'équipe | 10 requêtes | Par minute |
| Vérifications de domaine SSO | 15 requêtes | Par minute |
La connexion utilisateur (non admin) n'est pas régie par cette fenêtre IP : voir Limitation de taux de connexion ci-dessous pour le verrouillage de 5 tentatives/15 minutes qui s'y applique.
Les limites basées sur l'IP s'appliquent par adresse IP source. Si vous opérez derrière un proxy partagé, tous les clients partagent la même limite.
Limitation de taux de connexion
Les tentatives de connexion échouées sont suivies par combinaison IP + email :
| Paramètre | Valeur |
|---|---|
| Tentatives échouées max | 5 |
| Fenêtre de suivi | 15 minutes |
| Durée de verrouillage | 15 minutes |
Après 5 tentatives de connexion échouées en 15 minutes, la paire IP + email est verrouillée pendant 15 minutes. Une connexion réussie réinitialise le compteur.
Authentification par clé API
Les tentatives d'authentification par clé API échouées sont suivies en deux dimensions :
| Dimension | Échecs max | Fenêtre | Durée de blocage |
|---|---|---|---|
| Par préfixe de clé | 10 tentatives | 15 minutes | 15 minutes |
| Par adresse IP | 20 tentatives | 15 minutes | 15 minutes |
Si l'une des dimensions dépasse son seuil, l'authentification est temporairement bloquée.
Limites d'envoi d'emails
Les limites d'envoi d'emails sont appliquées par espace de travail et varient selon le type de flux. Les emails transactionnels (reçus, réinitialisations de mot de passe) bénéficient de limites plus élevées que les emails marketing (newsletters, campagnes). La limite par minute est la valeur qui provient réellement de votre forfait (voir Résumé de la politique) ; les limites par seconde et par heure en sont dérivées, et ne sont pas définies indépendamment ; seules les limites par jour et par mois utilisent des valeurs par défaut fixes de la plateforme.
Flux transactionnel
| Fenêtre | Comment elle est dérivée |
|---|---|
| Par seconde | Taux par minute du forfait ÷ 60 (minimum 1) ; une requête de 5 destinataires au plus est acceptée dans une seconde sans autre requête acceptée, voir ci-dessous |
| Par minute | Depuis votre forfait (TransactionalRatePerMin) |
| Par heure | Taux par minute du forfait × 60 |
| Par jour | 1 000 000 (valeur par défaut de la plateforme) |
| Par mois | 10 000 000 (valeur par défaut de la plateforme) |
Requêtes à plusieurs destinataires. Chaque destinataire compte dans chaque fenêtre. Une requête transactionnelle (5 destinataires au plus) dont le nombre de destinataires dépasse votre limite par seconde est tout de même acceptée si aucune autre requête n'a été acceptée dans cette seconde ; toute autre requête dans la même seconde reçoit 429 avec Retry-After: 1. Par exemple, avec un forfait de 60 par minute (1 par seconde), une requête vers 3 destinataires est acceptée et une autre requête dans cette seconde est refusée jusqu'à la seconde suivante. Les limites par minute, heure, jour et mois, le préchauffage et votre quota mensuel comptent toujours les 3 destinataires. SMTP applique la même règle à chaque message, en comptant ses adresses RCPT TO uniques.
Flux marketing
| Fenêtre | Comment elle est dérivée |
|---|---|
| Par seconde | Non vérifiée : les envois marketing ignorent toujours la vérification par seconde, en lot ou non |
| Par minute | Depuis votre forfait (MarketingRatePerMin) |
| Par heure | Taux par minute du forfait × 60 |
| Par jour | 100 000 (valeur par défaut de la plateforme) |
| Par mois | 1 000 000 (valeur par défaut de la plateforme) |
Les taux par minute sont spécifiques au forfait : consultez vos limites actuelles sur la page Facturation, qui s'appuie sur la route API GET /v1/account/subscription/policy-summary.
Priorité des flux
Les emails transactionnels ont une priorité plus élevée (priorité 1) que les emails marketing (priorité 2). Lorsque le système est sous charge, les emails transactionnels sont traités en premier.
Opérations par lot
Les opérations d'envoi par lot (par ex. POST /v1/transactional/send-batch) sont réservées au marketing et ignorent les vérifications de taux par seconde comme tout envoi marketing, mais restent soumises aux limites par minute, par heure, par jour et par mois.
Limites d'envoi de l'espace de travail
Le niveau de vérification ne définit pas de plafond de volume : il détermine quelles fonctionnalités sont disponibles. Votre volume d'envoi quotidien/mensuel provient de votre forfait (voir Résumé de la politique), pas de votre niveau de vérification.
| Niveau de vérification | Transactionnel | Marketing | Entrant |
|---|---|---|---|
| Sandbox | Destinataires autorisés uniquement | Non | Non |
| BasicVerified / SenderVerified | Oui | Non | Oui |
| BusinessVerified | Oui | Oui | Oui |
Les limites de l'espace de travail sont vérifiées avant les limites de taux des flux. Vous pouvez consulter vos limites et votre utilisation actuelles sur la page Facturation, alimentée par GET /v1/account/subscription/policy-summary.
Préchauffage IP
Le préchauffage dépend de la famille de forfait, ce n'est pas un calendrier fixe. Les forfaits Free suivent 6 paliers de 5 jours chacun (50 → 100 → 250 → 500 → 750 → 1 000/jour) sur 30 jours au total ; les forfaits Pro suivent 500 → 1 000 → 2 500 → 5 000 → 10 000 → 25 000/jour sur 14 jours ; les forfaits Max n'ont pas de préchauffage. Consultez le calendrier de préchauffage de votre forfait sur la page Facturation ci-dessus.
En-têtes de limitation de taux
La plupart des réponses API incluent :
| En-tête | Description |
|---|---|
X-RateLimit-Limit | Maximum de requêtes autorisées dans la fenêtre actuelle |
X-RateLimit-Remaining | Requêtes restantes dans la fenêtre actuelle |
Un 429 basé sur l'IP ajoute en plus :
| En-tête | Description |
|---|---|
X-RateLimit-Reset | Horodatage UTC au format ISO-8601 de la réinitialisation de la fenêtre actuelle |
Retry-After | Nombre de secondes à attendre avant de retenter |
Gestion des réponses 429
Lorsque vous recevez une réponse 429 Too Many Requests, le corps contient des détails sur la limite dépassée :
{
"code": "IP_RATE_LIMIT_EXCEEDED",
"message": "Too many requests from this IP. Retry after 45 seconds.",
"details": {
"limit": 300,
"current": 301,
"retryAfter": 45,
"resetAt": "2026-02-18T12:35:00Z"
}
}Pour les limites de taux d'envoi d'emails :
{
"code": "RATE_LIMIT_EXCEEDED",
"message": "Per-minute rate limit exceeded (transactional)"
}Le texte du message ci-dessus est un exemple : il est généré à partir du motif de décision du moteur de politique et n'est pas une chaîne littérale garantie. Faites correspondre sur code, et non sur message.
Stratégie de nouvelle tentative
#!/bin/bash
MAX_RETRIES=3
ATTEMPT=0
while [ $ATTEMPT -le $MAX_RETRIES ]; do
RESPONSE=$(curl -s -D - -o /tmp/body -w "%{http_code}" -X POST https://api.mail.land/v1/transactional/send \
-H "X-API-Key: ml_pet_Ab3Kx9mN2pQ7rT4wL8yD..." \
-H "Content-Type: application/json" \
-d '{ "from": {"email": "[email protected]"}, "to": [{"email": "[email protected]"}], "subject": "Hello", "htmlContent": "<p>Hi</p>" }')
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
if [ "$HTTP_CODE" -ne 429 ]; then
cat /tmp/body
exit 0
fi
# Read the Retry-After header, not the response body - not every 429 has a `details` block.
RETRY_AFTER=$(echo "$RESPONSE" | grep -i '^Retry-After:' | tr -d '\r' | cut -d' ' -f2)
RETRY_AFTER=${RETRY_AFTER:-60}
ATTEMPT=$((ATTEMPT + 1))
echo "Rate limited. Retrying in ${RETRY_AFTER}s (attempt ${ATTEMPT}/${MAX_RETRIES})"
sleep "$RETRY_AFTER"
done
echo "Max retries exceeded"
exit 1Bonnes pratiques
Surveillez votre utilisation. Vérifiez l'en-tête X-RateLimit-Remaining de manière proactive pour limiter les requêtes avant d'atteindre les limites.
Utilisez le backoff exponentiel. Lors d'une nouvelle tentative après un 429, respectez toujours l'en-tête Retry-After. S'il n'est pas présent, utilisez un backoff exponentiel commençant à 1 seconde.
Préférez les endpoints par lot. Pour les envois à haut volume (marketing), utilisez POST /v1/transactional/send-batch au lieu d'appeler POST /v1/transactional/send en boucle. Les endpoints par lot évitent les vérifications par seconde, comme tout envoi marketing, et sont plus efficaces.
Séparez transactionnel et marketing. Utilisez des identifiants API distincts pour les emails transactionnels et marketing. Cela garantit que l'envoi marketing n'impacte jamais la livraison transactionnelle.
Répartissez l'envoi dans le temps. Pour les grandes campagnes, MailLand régule automatiquement le rythme de livraison. Pour les envois en masse via l'API, répartissez les requêtes uniformément plutôt que d'envoyer par rafales.
Limites de réinitialisation de mot de passe
Les requêtes de réinitialisation de mot de passe ont des limites de taux distinctes :
| Paramètre | Valeur |
|---|---|
| Temps d'attente entre les requêtes | 60 secondes |
| Requêtes max par jour | 5 |
Prochaines étapes
- Codes d'erreur : référence complète des codes d'erreur
- Clés API : créer et gérer les identifiants API
- Facturation : consulter votre utilisation et vos limites actuelles