Zum Inhalt springen
spacepost

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.
Vollständige Migrationsanleitung
.env
# .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
app.ts
// 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übersicht

Live-Verfügbarkeit und Störungen: Statusseite.

Entwickler-Tools

Gebaut für Code, Terminal und Agenten

Terminal
$ 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-2f0e6f1d8c10
Webhooks verifizieren
import { 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

Preise und Rechner ansehen

FAQ

Fragen, klar beantwortet

Fehlt etwas? Schreib an support@spacepost.dev.

Ist SpacePost wirklich mit Resend kompatibel?
Pfade, Request- und Response-Formen, Fehlernamen und Pagination folgen der Resend-API. Die meisten Apps ändern daher nur die Base-URL und den API-Schlüssel. Im Funktionsvergleich siehst du genau, was heute unterstützt wird und was noch geplant ist.
Warum ist es günstiger?
Wir laufen auf Amazon SES, das rund 0,10 USD pro 1.000 E-Mails kostet, und halten das Produkt auf die API fokussiert. Pro kostet 9 € im Monat (zzgl. MwSt.) für 50.000 E-Mails, Resend verlangt 20 USD. Auch jedes weitere Tausend E-Mails berechnen wir günstiger.
Was passiert mit meiner Reputation, wenn sich ein anderer Kunde danebenbenimmt?
Jedes Team hat einen eigenen SES-Tenant mit getrennter Reputationsüberwachung, und unsere Schutzmechanismen pausieren einen Absender automatisch, wenn Bounce- oder Beschwerderaten Schwellen überschreiten. Dedizierte IPs gibt es im Enterprise-Tarif.
Wo werden meine Daten gespeichert?
Der Versand läuft in AWS eu-central-1 (Frankfurt). Die Anwendung und ihre Datenbank laufen bei Railway in dessen EU-Region (Amsterdam, Niederlande). Siehe die Liste der Unterauftragsverarbeiter.
Was, wenn mir der Free-Tarif nicht mehr reicht?
Der Free-Tarif endet bei 3.000 E-Mails im Monat, ohne dass heimlich abgerechnet wird. Wechsle jederzeit auf Pro und kündige, wann du willst.
Darf ich Marketing-E-Mails senden?
Ja, an Personen, die zugestimmt haben. Kampagnen fügen die Abmeldung per Klick automatisch hinzu. Gekaufte oder gescrapte Listen sind nicht erlaubt, siehe die Richtlinie zur akzeptablen Nutzung.

Sende deine erste E-Mail in fünf Minuten

Erstelle ein kostenloses Konto, verifiziere eine Domain und mach einen API-Aufruf. Keine Kreditkarte.