Pular para o conteúdo

Limites de taxa

A API limita as requisições por segundo por equipe (não por chave):

Plano Requisições por segundo
Free 10
Pro 10
Scale 25
Enterprise Personalizado

O limite do Resend é de 2 requisições por segundo. Um lote de até 100 e-mails é uma requisição, então você pode enviar milhares de e-mails por segundo dentro do limite.

Os limites são aplicados em janelas de um segundo. As sessões do painel não têm limite de taxa. As cotas de envio (Planos e cotas) são separadas dos limites de requisições.

Toda resposta inclui:

Cabeçalho Significado
ratelimit-limit Requisições permitidas por janela (por exemplo, 10).
ratelimit-remaining Requisições restantes na janela atual.
ratelimit-reset Segundos até a janela ser reiniciada (1).
retry-after Somente em 429: segundos a aguardar antes de tentar de novo (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");
}

Reutilize sempre o mesmo Idempotency-Key nas novas tentativas, para que uma requisição que na verdade teve sucesso não seja repetida.

  • Prefira lotes a muitos envios individuais.
  • Enfileire os envios em um worker em segundo plano e limite a concorrência dele ao seu limite.
  • Distribua os jobs de importação (por exemplo, a criação de contatos) em um ritmo constante.