E-Mail für Entwickler, zum halben Preis.
Eine Resend-kompatible API auf AWS SES. Ändere deine Base-URL, behalte deinen Code und zahle weniger: Pro kostet 9 € im Monat (zzgl. MwSt.) für 50.000 E-Mails, Resend Pro 20 USD.
3.000 E-Mails im Monat gratis. Keine Kreditkarte nötig.
E-Mail mit SpacePost senden
import { SpacePost } from "@spacepost/node";
const spacepost = new SpacePost("sp_live_xxxxxxxxxxxx");
const { data, error } = await spacepost.emails.send({
from: "Acme <hello@acme.com>",
to: ["ada@example.com"],
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
});curl -X POST https://api.spacepost.dev/emails \
-H "Authorization: Bearer sp_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@acme.com>",
"to": ["ada@example.com"],
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>"
}'import requests
r = requests.post(
"https://api.spacepost.dev/emails",
headers={"Authorization": "Bearer sp_live_xxxxxxxxxxxx"},
json={
"from": "Acme <hello@acme.com>",
"to": ["ada@example.com"],
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>",
},
)
print(r.json())body := strings.NewReader(`{
"from": "Acme <hello@acme.com>",
"to": ["ada@example.com"],
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>"
}`)
req, _ := http.NewRequest("POST", "https://api.spacepost.dev/emails", body)
req.Header.Set("Authorization", "Bearer sp_live_xxxxxxxxxxxx")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)<?php
$ch = curl_init("https://api.spacepost.dev/emails");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer sp_live_xxxxxxxxxxxx",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"from" => "Acme <hello@acme.com>",
"to" => ["ada@example.com"],
"subject" => "Your receipt",
"html" => "<p>Thanks for your order.</p>",
]),
]);
$response = curl_exec($ch);require "net/http"
require "json"
uri = URI("https://api.spacepost.dev/emails")
req = Net::HTTP::Post.new(uri, "Content-Type" => "application/json")
req["Authorization"] = "Bearer sp_live_xxxxxxxxxxxx"
req.body = {
from: "Acme <hello@acme.com>",
to: ["ada@example.com"],
subject: "Your receipt",
html: "<p>Thanks for your order.</p>"
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }import nodemailer from "nodemailer";
const transport = nodemailer.createTransport({
host: "smtp.spacepost.dev",
port: 25976,
secure: false, // STARTTLS
requireTLS: true,
auth: { user: "spacepost", pass: "sp_live_xxxxxxxxxxxx" },
});
await transport.sendMail({
from: "Acme <hello@acme.com>",
to: "ada@example.com",
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
});Gleiche Anfrageform wie bei Resend. Ersetze den Schlüssel durch deinen eigenen.
Aus der EU
Ein EU-Unternehmen. Deine Daten bleiben in der EU.
SpacePost wird von Studio 404 d.o.o. in Slowenien entwickelt und betrieben. Deine E-Mails, Logs und Kontodaten werden in der EU gespeichert und verarbeitet, und dein Vertragspartner ist ein EU-Unternehmen.
EU-Unternehmen, EU-Vertrag
Studio 404 d.o.o., Slowenien. Unsere Nutzungsbedingungen und der Auftragsverarbeitungsvertrag, der Teil davon ist, unterliegen slowenischem Recht.
Daten in Frankfurt und Amsterdam
E-Mails werden über Amazon SES in Frankfurt (eu-central-1) versendet. Anwendung, Worker und Datenbank laufen bei Railway in Amsterdam (Niederlande).
Preise in EUR, EU-Rechnungen mit MwSt.
Preise in EUR, zzgl. MwSt. Für jede Zahlung gibt es eine Rechnung in EUR, mit Reverse-Charge für Unternehmen in der EU mit gültiger USt-IdNr.
DSGVO-Auftragsverarbeitungsvertrag
Ein Auftragsverarbeitungsvertrag nach Art. 28 DSGVO für alle Kunden und eine öffentliche Liste der Unterauftragsverarbeiter mit dem Standort jedes Anbieters.
Einige unserer Dienstleister, etwa AWS, Stripe und Railway, sind US-Unternehmen. Jeder steht mit Zweck und Standort in unserer Liste der Unterauftragsverarbeiter.
Umstieg
Von Resend in einer Zeile wechseln
Request-Bodys, Webhook-Handler und Fehlerbehandlung bleiben, wie sie sind. Richte die Base-URL auf SpacePost und tausche den Schlüssel.
- 01Verifiziere deine Domain (drei DKIM-CNAMEs).
- 02Erstelle einen API-Schlüssel.
- 03Ändere die Base-URL. Deploy.
# .env
- RESEND_BASE_URL=https://api.resend.com
- RESEND_API_KEY=re_xxxxxxxx
+ RESEND_BASE_URL=https://api.spacepost.dev
+ RESEND_API_KEY=sp_live_xxxxxxxx// Option A: keep the Resend SDK, point it at SpacePost
- const resend = new Resend(process.env.RESEND_API_KEY);
+ const resend = new Resend(process.env.SPACEPOST_API_KEY, { baseUrl: "https://api.spacepost.dev" });
// Option B: use the drop-in SDK
- import { Resend } from "resend";
+ import { SpacePost as Resend } from "@spacepost/node";Funktionen
Alles, was die Resend-API kann, ohne Umlernen
Transaktions-API
POST /emails mit denselben Pfaden, Request-Bodys, Antworten und Fehlerformaten wie bei Resend. Anhänge, Tags, eigene Header, cc/bcc, reply-to.
Batch und Zeitplanung
Bis zu 100 E-Mails pro Batch-Aufruf. Plane mit einem ISO-Zeitstempel oder „in 1 hour“ und verschiebe oder storniere vor dem Versand.
Domains mit DKIM, SPF, DMARC
Easy DKIM mit drei CNAMEs, eigene MAIL-FROM-Subdomain, DMARC-Hinweise und Verifizierung per Klick, mit Kopieren-Button bei jedem Eintrag.
Signierte Webhooks
Neun Ereignistypen, Standard-Webhooks-Signaturen (Svix-kompatibel), Wiederholungen mit Backoff und Replay im Dashboard.
Zielgruppen und Kampagnen
Kontakte, Zielgruppen und Kampagnen mit Merge-Tags. Die Abmeldung per Klick (RFC 8058) wird automatisch ergänzt.
SMTP-Relay
smtp.spacepost.dev auf Port 25976 mit STARTTLS. Benutzername „spacepost“, Passwort ist ein API-Schlüssel. Funktioniert mit Supabase, Auth0, WordPress und Co.
Idempotency-Keys
Sende einen Idempotency-Key-Header, und Wiederholungen innerhalb von 24 Stunden liefern die ursprüngliche Antwort statt einer doppelten E-Mail.
Testmodus-Postfächer
Sende an Adressen bei test.spacepost.dev, um zugestellte, gebouncte und beanstandete Ergebnisse zu simulieren. Keine echte E-Mail verlässt unsere Server.
Öffnungs- und Klick-Tracking
Pro Domain schaltbar. Ereignisse erscheinen in der E-Mail-Timeline und in deinen Webhooks.
10 Anfragen pro Sekunde
Limit pro Team mit ratelimit-*-Headern, bei Resend sind es 2. Scale erhöht es auf 25.
Noch nicht dabei: eingehende E-Mails, ein Template-Editor, Versand aus mehreren Regionen. Sieh dir an, was geplant ist.
Zustellbarkeit und Vertrauen
Solide, sorgfältige Infrastruktur für wichtige E-Mails
Wir haben noch keine Kundenlogos zum Vorzeigen, deshalb hier, wie es tatsächlich funktioniert.
Amazon-SES-Infrastruktur
E-Mails werden über Amazon SES in eu-central-1 (Frankfurt) versendet. Wir betreiben keine eigenen Mailserver und tun auch nicht so.
Reputation pro Team getrennt
Jedes Team bekommt einen eigenen SES-Tenant. So kann eine schlechte Liste eines Absenders nur diesen Absender pausieren und niemanden sonst.
Automatische Sperrliste
Hard Bounces und Beschwerden landen automatisch auf deiner Sperrliste, und jeder Empfänger wird vor jedem Versand geprüft.
Schutzgeländer vor SES
Teams werden bei einer Bounce-Rate über 5 % oder einer Beschwerderate über 0,2 % automatisch pausiert, lange vor den Prüfschwellen von SES.
Neue Konten in der Sandbox
Neue Teams sind in den ersten 7 Tagen auf verifizierte Domains und 100 E-Mails pro Tag begrenzt. Das hält die gemeinsame Reputation für alle sauber.
Transparente Statusseite
Störungen und Verfügbarkeit stehen auf unserer Statusseite, nicht hinter einem Support-Ticket.
Verschlüsselung, Schlüsselverwaltung, Aufbewahrung und wie du eine Schwachstelle meldest.
SicherheitsübersichtLive-Verfügbarkeit und Störungen: Statusseite.
Entwickler-Tools
Gebaut für Code, Terminal und Agenten
$ bunx spacepost send \
--from "Acme <hello@acme.com>" \
--to ada@example.com \
--subject "Hello from the CLI" \
--text "It works."
✓ Queued email_id=0192f3a4-7c1e-7b6d-9a35-2f0e6f1d8c10import { Webhook } from "standardwebhooks";
const wh = new Webhook(process.env.SPACEPOST_WEBHOOK_SECRET!);
const event = wh.verify(rawBody, {
"webhook-id": req.headers["webhook-id"],
"webhook-timestamp": req.headers["webhook-timestamp"],
"webhook-signature": req.headers["webhook-signature"],
});Node SDK
@spacepost/node ist Resend-kompatibel, hat keine Abhängigkeiten und nutzt fetch. Es läuft auf Node, Bun, Deno und Edge-Runtimes.
CLI
spacepost send, spacepost domains verify, spacepost logs. Als einzelne Binary für macOS, Linux und Windows.
MCP-Server für KI-Agenten
@spacepost/mcp lässt Claude, Cursor und andere Agenten per stdio E-Mails senden, Domains verwalten und Zustellprotokolle lesen.
OpenAPI-3.1-Spezifikation
Eine vollständige Spezifikation, um typisierte Clients in jeder Sprache zu generieren oder in Postman und Insomnia zu importieren.
Webhook-Verifizierung
Standard-Webhooks-Header (webhook-id, webhook-timestamp, webhook-signature), damit bestehende Svix-Bibliotheken unsere Payloads verifizieren.
Preise
Kostenlos starten. Pro Tausend zahlen, wenn du wächst.
Free
0 € /Monat
zzgl. MwSt.
3.000 E-Mails inklusive.
Resend Free: 0 USD
Pro
9 € /Monat
zzgl. MwSt.
50.000 E-Mails inklusive, danach 0,25 € pro 1.000.
Resend Pro: 20 USD
Scale
35 € /Monat
zzgl. MwSt.
200.000 E-Mails inklusive, danach 0,20 € pro 1.000.
Resend Scale: 90 USD für 100.000 E-Mails
Ist SpacePost wirklich mit Resend kompatibel?
Warum ist es günstiger?
Was passiert mit meiner Reputation, wenn sich ein anderer Kunde danebenbenimmt?
Wo werden meine Daten gespeichert?
Was, wenn mir der Free-Tarif nicht mehr reicht?
Darf ich Marketing-E-Mails senden?
Sende deine erste E-Mail in fünf Minuten
Erstelle ein kostenloses Konto, verifiziere eine Domain und mach einen API-Aufruf. Keine Kreditkarte.