Rate Limits
Die API begrenzt Anfragen pro Sekunde und Team (nicht pro Schlüssel):
| Plan | Anfragen pro Sekunde |
|---|---|
| Free | 10 |
| Pro | 10 |
| Scale | 25 |
| Enterprise | Individuell |
Das Limit von Resend liegt bei 2 Anfragen pro Sekunde. Ein Batch mit bis zu 100 E-Mails ist eine Anfrage, sodass du innerhalb des Limits Tausende E-Mails pro Sekunde senden kannst.
Limits gelten in Ein-Sekunden-Fenstern. Dashboard-Sitzungen unterliegen keinem Rate Limit. Versandkontingente (Pläne und Kontingente) sind von den Anfragelimits getrennt.
Jede Antwort enthält:
| Header | Bedeutung |
|---|---|
ratelimit-limit |
Erlaubte Anfragen pro Fenster (zum Beispiel 10). |
ratelimit-remaining |
Verbleibende Anfragen im aktuellen Fenster. |
ratelimit-reset |
Sekunden, bis das Fenster zurückgesetzt wird (1). |
retry-after |
Nur bei 429: Sekunden, die vor dem erneuten Versuch zu warten sind (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." }429 behandeln
Abschnitt betitelt „429 behandeln“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 rVerwende bei Wiederholungen immer denselben Idempotency-Key, damit eine Anfrage, die tatsächlich erfolgreich war, nicht wiederholt wird.
- Bevorzuge Batches gegenüber vielen Einzelsendungen.
- Reihe Sendungen in einem Hintergrund-Worker ein und begrenze seine Parallelität auf dein Limit.
- Verteile Import-Jobs (zum Beispiel das Anlegen von Kontakten) in gleichmäßigem Tempo.