Aller au contenu

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.

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 Requests
ratelimit-limit: 10
ratelimit-remaining: 0
ratelimit-reset: 1
retry-after: 1
{ "statusCode": 429, "name": "rate_limit_exceeded", "message": "Too many requests. You can only make 10 requests per second." }
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");
}

Ré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.

  • 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.