Resend ist eine E-Mail-API für Entwickler: Eine POST-Anfrage, ein JSON-Body und eine Transaktions-E-Mail wird versendet. Jede Anfrage benötigt einen API-Schlüssel, und die Art und Weise, wie Sie diesen Schlüssel erstellen, entscheidet darüber, wie viel Schaden ein geleakter Schlüssel anrichten kann. Dieser Leitfaden führt Sie durch den gesamten Prozess: Registrierung, Verifizierung einer Absenderdomäne (oder Nutzung der integrierten Testadresse), Erstellung eines Schlüssels mit dem richtigen Berechtigungsumfang und das Versenden Ihrer ersten E-Mail mit curl, Node und Python. Sie speichern den Schlüssel auch in Apidog, um den Endpunkt zu testen, ohne Geheimnisse in Ihre Shell einzufügen.
Wenn Sie ein umfassenderes Bild davon erhalten möchten, was die API über das Senden hinaus leistet, deckt der Resend API Anfängerleitfaden den Rest ab. Alles unten stehende ist mit der offiziellen Resend-Dokumentation abgeglichen, sodass die Zahlen und Fehlermeldungen mit dem übereinstimmen, was Sie sehen werden.
Was Sie vor dem Start benötigen
- Ein Resend-Konto. Der kostenlose Plan reicht für dieses Tutorial aus.
- Eine Domain, die Sie kontrollieren. Wenn Sie keine zur Hand haben, deckt die Testadresse den ersten Versand ab.
- curl auf Ihrem Rechner, plus Node.js oder Python, wenn Sie die SDK-Beispiele nutzen möchten.
- Apidog installiert, falls Sie dem Abschnitt zum Testen folgen möchten.
Schritt 1: Ein Resend-Konto erstellen
Registrieren Sie sich unter resend.com und bestätigen Sie Ihre E-Mail-Adresse. Notieren Sie sich die Adresse, mit der Sie sich angemeldet haben: Bis Sie eine Domain verifiziert haben, ist dies der einzige Posteingang, an den Resend Test-E-Mails liefern wird, und das Vergessen führt zum verwirrendsten 403, das Sie am ersten Tag sehen werden.
Schritt 2: Eine Absenderdomäne verifizieren oder die Testadresse verwenden
Zwei Wege; beginnen Sie mit dem schnellen.
Weg A: Die Onboarding-Testadresse. Resend ermöglicht Ihnen das Senden von onboarding@resend.dev ohne Einrichtung. Der Haken ist der Empfänger: Es muss Ihre eigene Konto-E-Mail-Adresse sein. Senden Sie an jemand anderen, und die API gibt einen 403-Fehler mit der Meldung „You can only send testing emails to your own email address“ (Sie können Test-E-Mails nur an Ihre eigene E-Mail-Adresse senden) zurück.
Weg B: Ihre eigene Domain. Für alles Reale fügen Sie eine Domain im Dashboard unter Domains hinzu. Resend empfiehlt eine Subdomain wie notifications.example.com anstelle Ihrer Root-Domain, damit der Sender-Ruf Ihres Produkts von Ihrer Unternehmens-E-Mail getrennt bleibt. Wählen Sie die Region, die Ihren Empfängern am nächsten liegt, und kopieren Sie dann die von Resend generierten DNS-Einträge in Ihren DNS-Anbieter. Die Dokumentation beschreibt sie als „die DKIM- und SPF-Konfigurationen (TXT- und MX- oder CNAME-Einträge)“. Die Return-Path-Subdomain ist standardmäßig send.example.com.

Die Verifizierung ist normalerweise innerhalb von 15 Minuten abgeschlossen, obwohl die DNS-Propagierung bis zu 72 Stunden dauern kann. Wenn sie stockt, überprüfen Sie zwei klassische Übeltäter: Einträge, die auf dem Root statt auf der send-Subdomain platziert wurden, und Cloudflare-Proxying (das Wolken-Symbol muss grau, nicht orange sein). Korrigieren Sie die Einträge und klicken Sie dann auf „Restart verification“ (Verifizierung neu starten). Fügen Sie danach einen DMARC-Eintrag hinzu; er ist für den Versand nicht erforderlich, aber Posteingangsanbieter belohnen ihn.
Schritt 3: Den API-Schlüssel mit dem richtigen Umfang erstellen
Öffnen Sie die API-Schlüssel-Seite im Dashboard und klicken Sie auf API-Schlüssel erstellen. Drei Felder sind wichtig; die Dokumentation zum Erstellen eines API-Schlüssels behandelt jedes:
- Name. Bis zu 50 Zeichen. Benennen Sie ihn nach der Anwendung und Umgebung, z.B.
billing-service-prod, damit Schlüssel später leicht zu unterscheiden sind. - Berechtigung. „Full access“ (Voller Zugriff) kann beliebige Ressourcen erstellen, löschen, abrufen und aktualisieren, einschließlich Domains und anderer API-Schlüssel. „Sending access“ (Sendezugriff) kann nur E-Mails versenden. Wählen Sie Sendezugriff für alles, was eingesetzt wird. Der Schlüssel mit vollem Zugriff gehört auf Ihren Laptop oder gar nicht.
- Domain. Mit Sendezugriff können Sie den Schlüssel auf eine verifizierte Domain beschränken. Ein Schlüssel, der auf
notifications.example.combeschränkt ist, kann nicht vonbilling.example.comsenden, was den Schadensradius eines Leaks begrenzt.

Resend zeigt den Schlüssel genau einmal an. Er beginnt mit re_, und sobald Sie das Dialogfeld schließen, können Sie den Schlüssel umbenennen, aber niemals wieder anzeigen. Kopieren Sie ihn direkt in eine Umgebungsvariable:
export RESEND_API_KEY="re_xxxxxxxxx"
Resends eigene Empfehlung: Schlüssel verfallen nie, daher sollten sie alle 90 Tage oder früher rotiert werden; das Dashboard kennzeichnet jeden Schlüssel, der 30 Tage lang unbenutzt war; und wenn ein Schlüssel leckt, löschen Sie ihn sofort, anstatt auf die nächste Rotation zu warten. Das Commitieren von re_-Strings in Git ist der häufigste Leak-Pfad, daher führen Sie vor dem ersten Push einen Secret-Scanner über Ihre Repositories aus.
Sie können auch Schlüssel mit POST https://api.resend.com/api-keys erstellen, indem Sie name, permission (full_access oder sending_access) und eine optionale domain_id übergeben. Dieser Aufruf benötigt einen Schlüssel mit vollem Zugriff, ein weiterer Grund, genau einen davon zu behalten.
Schritt 4: Ihre erste E-Mail senden
Der Sende-Endpunkt ist POST https://api.resend.com/emails. Die Authentifizierung erfolgt über einen Bearer-Token im Authorization-Header, der Body ist JSON, und nur HTTPS wird akzeptiert. Drei Felder sind erforderlich: from, to und subject. Fügen Sie html, text oder beides hinzu; wenn Sie nur html senden, generiert Resend den Nur-Text-Teil. to akzeptiert einen String oder ein Array von bis zu 50 Adressen. Die vollständige Parameterliste finden Sie in der Referenz zum Senden von E-Mails.
curl
curl -X POST 'https://api.resend.com/emails' \
-H "Authorization: Bearer $RESEND_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"from": "Acme <onboarding@resend.dev>",
"to": ["you@yourcompany.com"],
"subject": "Erste Resend E-Mail",
"html": "<p>Ihr Resend Schlüssel funktioniert.</p>"
}'
Ein erfolgreicher Aufruf gibt {"id": "49a3999c-0ce1-4ea6-ab68-afcd6dc2e794"} zurück. Eine Besonderheit: Jede Anfrage muss einen User-Agent-Header enthalten, andernfalls antwortet die API mit 403 und Code 1010. curl und die SDKs setzen einen; ein selbstgebauter Client in einer Edge-Runtime möglicherweise nicht.
Node.js
npm install resend
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
const { data, error } = await resend.emails.send({
from: 'Acme <notifications@example.com>',
to: ['you@yourcompany.com'],
subject: 'Erste Resend E-Mail',
html: '<p>Ihr Resend Schlüssel funktioniert.</p>',
});
if (error) {
console.error(error);
} else {
console.log(data.id);
}
Das Node SDK wirft niemals Fehler für API-Fehler. Es gibt { data, error } zurück, überprüfen Sie also error, bevor Sie data.id berühren.
Python
pip install resend
import os
import resend
from resend.exceptions import ResendError
resend.api_key = os.environ["RESEND_API_KEY"]
params: resend.Emails.SendParams = {
"from": "Acme <notifications@example.com>",
"to": ["you@yourcompany.com"],
"subject": "Erste Resend E-Mail",
"html": "<p>Ihr Resend Schlüssel funktioniert.</p>",
}
try:
email = resend.Emails.send(params)
print(email["id"])
except ResendError as err:
print(err)
Das Python SDK macht das Gegenteil: Es wirft ResendError bei einem Fehler, also umschließen Sie Sendungen in try/except.
Schritt 5: Den Schlüssel in Apidog speichern und testen
Curl beweist, dass der Schlüssel einmal funktioniert. Apidog macht aus diesem einmaligen Test etwas, das Ihr Team wiederholen kann, und hält den Schlüssel aus der Shell-History und den Chat-Protokollen fern.
Speichern Sie den Schlüssel als geheime Variable. Erstellen Sie eine Umgebung namens Resend, fügen Sie RESEND_API_KEY als Variable hinzu und markieren Sie sie als geheim, damit der Wert in der Benutzeroberfläche maskiert und aus Exporten ausgeschlossen wird. Der Leitfaden für Umgebungen und geheime Variablen behandelt die Aufteilung in Dev, Staging und Produktion, falls Sie pro Umgebung einen separaten, nur zum Senden bestimmten Schlüssel verwenden, was Sie tun sollten.
Senden Sie die Anfrage. Erstellen Sie eine POST-Anfrage an https://api.resend.com/emails, stellen Sie die Authentifizierung auf Bearer-Token mit {{RESEND_API_KEY}} ein und fügen Sie den JSON-Body aus dem curl-Beispiel ein. Klicken Sie auf Senden. Die id erscheint im Antwortfenster neben den unten beschriebenen Ratenbegrenzung-Headern.
Speichern Sie es als Test. Fügen Sie zwei Zusicherungen hinzu: Status gleich 200 und $.id existiert. Fügen Sie die Anfrage in ein Testszenario ein, und Sie haben einen Smoke-Test, der jedes Mal ausgeführt wird, wenn jemand den E-Mail-Code berührt. Richten Sie ihn auf Staging mit einem auf die Domain beschränkten Sendeschlüssel aus, und er kann sicher von CI aus ausgeführt werden.
Den Endpunkt für Frontend-Arbeiten mocken. Ihr Frontend benötigt die Antwortform, nicht einen echten Versand. Mocken Sie den Endpunkt in Apidog, sodass er bei jedem Aufruf {"id": "mock-email-id"} zurückgibt. Das UI-Team kann den „E-Mail gesendet“-Status den ganzen Tag erstellen, ohne das kostenlose Kontingent von 100 pro Tag zu verbrauchen oder einen echten Posteingang zu spammen. Laden Sie Apidog herunter, um dies einzurichten; der kostenlose Plan deckt vier Benutzer ab.
Kostenlose Tier-Limits, die Sie zuerst erreichen werden
Die Resend Preisgestaltung listet den kostenlosen Plan mit 3.000 E-Mails pro Monat, begrenzt auf 100 pro Tag, mit 3 Domains und 30-tägiger Datenaufbewahrung. Pro beginnt bei 20 $ pro Monat für 50.000 E-Mails, 10 Domains und ohne Tageslimit, mit Überschreitungen zu 0,90 $ pro 1.000 E-Mails.
Test-E-Mails an die resend.dev-Adressen zählen gegen diese Kontingente, so dass ein Lasttest, der auf delivered@resend.dev abzielt, immer noch Ihre täglichen 100 verbraucht. bounced@resend.dev, complained@resend.dev und suppressed@resend.dev simulieren einen Hard Bounce, eine Spam-Beschwerde und einen unterdrückten Empfänger ohne wirklich schlechte Adressen.
Unabhängig vom Kontingent liegt die Ratenbegrenzung standardmäßig bei 10 Anfragen pro Sekunde pro Team, die auf jeden Schlüssel im Team verteilt wird. Jede Antwort enthält die Header ratelimit-limit, ratelimit-remaining, ratelimit-reset und retry-after, so dass eine Sendeschleife zurückweichen kann, bevor sie einen 429-Fehler erhält. Benötigen Sie mehr? Resend bittet Sie, den Support zu kontaktieren, anstatt zusätzliche Teams zu erstellen.
Häufige Fehler und wie man sie behebt
Jeder Fehler kommt als JSON mit einem statusCode, einem name und einer message zurück. Dies sind diejenigen, die Sie am ersten Tag treffen werden, aus der Fehlerreferenz:
| Status | Name | Was passiert ist | Behebung |
|---|---|---|---|
| 401 | missing_api_key |
Kein Authorization Header |
Authorization: Bearer re_... hinzufügen |
| 401 | restricted_api_key |
Nur-Sende-Schlüssel wurde auf einem Nicht-Sende-Endpunkt verwendet | Verwenden Sie einen Vollzugriffs-Schlüssel für diesen Aufruf |
| 403 | validation_error |
„Die Domain ist nicht verifiziert“ | DNS-Verifizierung abschließen oder die from-Adresse korrigieren |
| 403 | validation_error |
Testadresse wurde an jemanden außer Sie selbst gesendet | Senden Sie an Ihre Konto-E-Mail-Adresse oder verifizieren Sie eine Domain |
| 403 | restricted_api_key |
„API-Schlüssel ist nicht aktiv“ | Der Schlüssel wurde gelöscht; einen neuen erstellen |
| 422 | missing_required_field |
from, to oder subject fehlt |
Überprüfen Sie den Body anhand der Referenz |
| 429 | rate_limit_exceeded |
Mehr als 10 Anfragen pro Sekunde | Sendungen in Warteschlange stellen, retry-after beachten |
| 429 | daily_quota_exceeded |
Täglich 100 E-Mails im kostenlosen Plan überschritten | Auf den Reset warten oder upgraden |
Ein 401-Fehler bei einem Schlüssel, von dem Sie sicher sind, dass er richtig ist, bedeutet meistens eine überflüssige neue Zeile in der Variable oder eine .env-Datei, die nie geladen wurde. Beides sieht aus Sicht der API wie ein fehlender Schlüssel aus.
FAQ
Kann ich meinen Resend API-Schlüssel nach der Erstellung erneut sehen?
Nein. Resend zeigt den Wert einmal bei der Erstellung an. Wenn Sie ihn verlieren, erstellen Sie einen neuen Schlüssel mit demselben Namen und derselben Berechtigung, stellen Sie ihn bereit und löschen Sie dann den alten.
Sollte ich vollen Zugriff oder Sendezugriff wählen?
Sendezugriff, beschränkt auf eine Domain, für jeden Schlüssel, der Ihr System verlässt. Behalten Sie einen Vollzugriffsschlüssel für Dashboard-ähnliche Arbeiten wie das Hinzufügen von Domains oder das Erstellen anderer Schlüssel und verwenden Sie ihn niemals in einer App.
Kann ich das Senden testen, ohne eine Domain zu verifizieren?
Ja. Verwenden Sie onboarding@resend.dev als Absenderadresse und Ihre eigene Konto-E-Mail-Adresse als Empfänger. Jeder andere Empfänger gibt einen 403-Fehler zurück, bis eine Domain verifiziert ist.
Gibt es eine Möglichkeit, Resend über das Terminal statt über das Dashboard zu verwalten?
Ja. Der Resend CLI Walkthrough beschreibt, wie man es installiert und die gängigen Domain- und E-Mail-Befehle ausführt, ohne einen Browser zu öffnen.
Was passiert, wenn ich im kostenlosen Plan täglich mehr als 100 E-Mails versende?
Die API gibt einen 429-Fehler mit daily_quota_exceeded zurück, und die Sendungen werden nach dem täglichen Reset fortgesetzt. Wenn Sie regelmäßig mehr benötigen, entfernt der Pro-Plan die Begrenzung, und der Vergleich kostenloser E-Mail-APIs zeigt, wie sich die kostenlosen Tarife anderer Anbieter vergleichen.
Zusammenfassung
Einen Resend API-Schlüssel zu erhalten dauert zwei Minuten; ihn richtig zu konfigurieren dauert fünf. Verifizieren Sie eine Subdomain, erstellen Sie einen Nur-Sende-Schlüssel, der auf diese Domain beschränkt ist, speichern Sie ihn in einer Umgebungsvariablen und senden Sie eine E-Mail mit curl, um die vollständige Übertragung zu bestätigen. Verschieben Sie dann die Anfrage in Apidog, speichern Sie die Zusicherungen und mocken Sie den Endpunkt, damit der Rest Ihres Teams darauf aufbauen kann, ohne Ihr Kontingent zu verbrauchen. Stellen Sie den am wenigsten mächtigen Schlüssel bereit, der die Aufgabe noch erfüllt.
