Límites de tasa
La API limita las peticiones por segundo por equipo (no por clave):
| Plan | Peticiones por segundo |
|---|---|
| Free | 10 |
| Pro | 10 |
| Scale | 25 |
| Enterprise | A medida |
El límite de Resend es de 2 peticiones por segundo. Un lote de hasta 100 correos es una petición, así que puedes enviar miles de correos por segundo dentro del límite.
Los límites se aplican en ventanas de un segundo. Las sesiones del panel no tienen límite de tasa. Las cuotas de envío (Planes y cuotas) son independientes de los límites de peticiones.
Encabezados
Sección titulada «Encabezados»Toda respuesta incluye:
| Encabezado | Significado |
|---|---|
ratelimit-limit |
Peticiones permitidas por ventana (por ejemplo 10). |
ratelimit-remaining |
Peticiones restantes en la ventana actual. |
ratelimit-reset |
Segundos hasta que se reinicia la ventana (1). |
retry-after |
Solo en 429: segundos que hay que esperar antes de reintentar (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." }Gestionar el 429
Sección titulada «Gestionar el 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 rReutiliza siempre la misma Idempotency-Key en los reintentos para que no se repita una petición que en realidad tuvo éxito.
Consejos
Sección titulada «Consejos»- Prefiere los lotes a muchos envíos individuales.
- Encola los envíos en un worker en segundo plano y limita su concurrencia a tu límite.
- Reparte las tareas de importación (por ejemplo, la creación de contactos) a un ritmo constante.