L'e-mail pour les développeurs, à moitié prix.
Une API compatible Resend, construite sur AWS SES. Changez votre URL de base, gardez votre code et payez moins : Pro coûte 9 € HT par mois pour 50 k e-mails, Resend Pro 20 USD.
3 000 e-mails gratuits par mois. Sans carte bancaire.
Envoyer un e-mail avec SpacePost
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>",
});Même format de requête que Resend. Remplacez la clé par la vôtre.
Basé dans l'UE
Une entreprise européenne. Vos données restent dans l'UE.
SpacePost est développé et exploité par Studio 404 d.o.o., en Slovénie. Vos e-mails, journaux et données de compte sont stockés et traités dans l'UE, et vous contractez avec une entreprise européenne.
Entreprise européenne, contrat européen
Studio 404 d.o.o., Slovénie. Nos conditions d'utilisation, et l'avenant de traitement des données qui en fait partie, sont régis par le droit slovène.
Données à Francfort et Amsterdam
Les e-mails partent par Amazon SES à Francfort (eu-central-1). L'application, les workers et la base de données tournent chez Railway à Amsterdam (Pays-Bas).
Prix en EUR, factures avec TVA européenne
Prix en EUR, hors TVA. Chaque paiement donne lieu à une facture avec TVA en EUR, avec autoliquidation pour les entreprises de l'UE disposant d'un numéro de TVA valide.
Avenant de traitement des données (RGPD)
Un avenant de traitement des données conforme à l'article 28 du RGPD pour chaque client, et une liste publique des sous-traitants avec la localisation de chacun.
Certains de nos prestataires, comme AWS, Stripe et Railway, sont des entreprises américaines. Chacun figure, avec ce qu'il traite et où, dans notre liste des sous-traitants.
Migration
Quittez Resend en une ligne
Vos corps de requête, vos gestionnaires de webhooks et votre gestion d'erreurs restent tels quels. Pointez l'URL de base vers SpacePost et changez la clé.
- 01Vérifiez votre domaine (trois CNAME DKIM).
- 02Créez une clé API.
- 03Changez l'URL de base. Déployez.
# .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";Fonctions
Tout ce que fait l'API Resend, sans rien à réapprendre
API transactionnelle
POST /emails avec les mêmes chemins, corps de requête, réponses et format d'erreur que Resend. Pièces jointes, tags, en-têtes personnalisés, cc/bcc, reply-to.
Envoi par lot et planifié
Jusqu'à 100 e-mails par appel groupé. Planifiez avec un horodatage ISO ou « in 1 hour », puis reprogrammez ou annulez avant l'envoi.
Domaines avec DKIM, SPF, DMARC
Easy DKIM avec trois CNAME, sous-domaine MAIL FROM personnalisé, conseils DMARC et vérification en un clic, avec un bouton de copie sur chaque enregistrement.
Webhooks signés
Neuf types d'événements, signatures Standard Webhooks (compatibles Svix), nouvelles tentatives avec backoff et relecture depuis le tableau de bord.
Audiences et campagnes
Contacts, audiences et campagnes avec balises de fusion. La désinscription en un clic (RFC 8058) est ajoutée pour vous.
Relais SMTP
smtp.spacepost.dev sur le port 25976 avec STARTTLS. Identifiant « spacepost », mot de passe : une clé API. Compatible avec Supabase, Auth0, WordPress et consorts.
Clés d'idempotence
Envoyez un en-tête Idempotency-Key : les nouvelles tentatives sous 24 heures renvoient la réponse d'origine au lieu d'un e-mail en double.
Boîtes du mode test
Écrivez à des adresses en test.spacepost.dev pour simuler une remise, un bounce ou une plainte. Aucun vrai e-mail ne quitte nos serveurs.
Suivi des ouvertures et des clics
Activable par domaine. Les événements apparaissent dans la chronologie de l'e-mail et dans vos webhooks.
10 requêtes par seconde
Limite de débit par équipe avec en-têtes ratelimit-*, contre 2 chez Resend. Scale la porte à 25.
Pas encore disponible : e-mails entrants, éditeur de modèles, envoi multirégion. Voir ce qui est prévu.
Délivrabilité et confiance
Une infrastructure sobre et soignée pour les e-mails qui comptent
Nous n'avons pas encore de logos clients à afficher. Voici donc comment cela fonctionne vraiment.
Infrastructure Amazon SES
Les e-mails partent via Amazon SES dans eu-central-1 (Francfort). Nous n'exploitons pas nos propres serveurs de messagerie et nous ne prétendons pas le contraire.
Réputation isolée par équipe
Chaque équipe a son propre tenant SES : la mauvaise liste d'un expéditeur peut le mettre en pause lui, et personne d'autre.
Suppression automatique
Les hard bounces et les plaintes rejoignent automatiquement votre liste de suppression, et chaque destinataire est vérifié avant chaque envoi.
Des garde-fous avant SES
Les équipes sont mises en pause automatiquement au-delà de 5 % de bounces ou de 0,2 % de plaintes, bien avant les seuils d'examen de SES.
Nouveaux comptes en sandbox
Les nouvelles équipes sont limitées aux domaines vérifiés et à 100 e-mails par jour pendant 7 jours. Cela préserve la réputation partagée de tous.
Page d'état transparente
Incidents et disponibilité sont publiés sur notre page d'état, pas cachés derrière un ticket de support.
Chiffrement, gestion des clés, conservation des données et signalement d'une vulnérabilité.
Aperçu de la sécuritéDisponibilité et incidents en direct : page d'état.
Outils pour développeurs
Pensé pour être piloté depuis le code, un terminal ou un agent
$ 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"],
});SDK Node
@spacepost/node est compatible Resend, sans dépendance, et s'appuie sur fetch : il fonctionne sur Node, Bun, Deno et les runtimes edge.
CLI
spacepost send, spacepost domains verify, spacepost logs. Livré en un seul binaire pour macOS, Linux et Windows.
Serveur MCP pour agents IA
@spacepost/mcp permet à Claude, Cursor et d'autres agents d'envoyer des e-mails, de gérer les domaines et de lire les journaux de remise via stdio.
Spécification OpenAPI 3.1
Une spécification complète pour générer des clients typés dans n'importe quel langage, ou l'importer dans Postman et Insomnia.
Vérification des webhooks
En-têtes Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature) : les bibliothèques Svix existantes vérifient nos charges utiles.
Tarifs
Commencez gratuitement. Payez au millier quand vous grandissez.
Free
0 € /mois
HT
3 000 e-mails inclus.
Resend Free : 0 USD
Pro
9 € /mois
HT
50 000 e-mails inclus, puis 0,25 € par 1 000.
Resend Pro : 20 USD
Scale
35 € /mois
HT
200 000 e-mails inclus, puis 0,20 € par 1 000.
Resend Scale : 90 USD pour 100 k e-mails
SpacePost est-il vraiment compatible avec Resend ?
Pourquoi est-ce moins cher ?
Que devient ma réputation si un autre client se comporte mal ?
Où sont stockées mes données ?
Et si je dépasse l'offre gratuite ?
Puis-je envoyer des e-mails marketing ?
Envoyez votre premier e-mail en cinq minutes
Créez un compte gratuit, vérifiez un domaine et faites un appel API. Sans carte bancaire.