Limites de débit
L’API limite les requêtes par seconde et par équipe (pas par clé) :
| Forfait | Requêtes par seconde |
|---|---|
| Free | 10 |
| Pro | 10 |
| Scale | 25 |
| Enterprise | Sur mesure |
La limite de Resend est de 2 requêtes par seconde. Un lot de 100 e-mails au maximum compte pour une requête : vous pouvez donc envoyer des milliers d’e-mails par seconde dans la limite.
Les limites s’appliquent par fenêtres d’une seconde. Les sessions du tableau de bord ne sont pas limitées en débit. Les quotas d’envoi (Forfaits et quotas) sont distincts des limites de requêtes.
En-têtes
Section intitulée « En-têtes »Chaque réponse inclut :
| En-tête | Signification |
|---|---|
ratelimit-limit |
Requêtes autorisées par fenêtre (par exemple 10). |
ratelimit-remaining |
Requêtes restantes dans la fenêtre courante. |
ratelimit-reset |
Secondes avant la réinitialisation de la fenêtre (1). |
retry-after |
Uniquement sur 429 : secondes à attendre avant de réessayer (1). |
HTTP/1.1 429 Too Many Requestsratelimit-limit: 10ratelimit-remaining: 0ratelimit-reset: 1retry-after: 1
{ "statusCode": 429, "name": "rate_limit_exceeded", "message": "Too many requests. You can only make 10 requests per second." }Gérer les 429
Section intitulée « Gérer les 429 »import { SpacePost, type SendEmailOptions } from "@spacepost/node";
const spacepost = new SpacePost();
async function sendWithRetry(email: SendEmailOptions, key: string, attempts = 5) { for (let i = 0; i < attempts; i++) { const { data, error } = await spacepost.emails.send(email, { idempotencyKey: key }); if (!error) return data; if (error.name !== "rate_limit_exceeded") throw new Error(`${error.name}: ${error.message}`); await new Promise((r) => setTimeout(r, 1000 * (i + 1))); } throw new Error("rate limited");}import time, requests
def post_with_retry(url, headers, json, attempts=5): for _ in range(attempts): r = requests.post(url, headers=headers, json=json, timeout=15) if r.status_code != 429: return r time.sleep(float(r.headers.get("retry-after", 1))) return rRéutilisez toujours la même Idempotency-Key lors des nouvelles tentatives afin qu’une requête qui a en réalité abouti ne soit pas répétée.
Conseils
Section intitulée « Conseils »- Préférez les lots à de nombreux envois individuels.
- Mettez les envois en file dans un worker d’arrière-plan et plafonnez sa concurrence à votre limite.
- Répartissez les tâches d’import (par exemple la création de contacts) à un rythme régulier.