Email per sviluppatori, a metà prezzo.
Un'API compatibile con Resend costruita su AWS SES. Cambi il base URL, tieni il tuo codice e paghi meno: Pro costa 9 € al mese (IVA esclusa) per 50K email, Resend Pro 20 USD.
3000 email al mese gratis. Senza carta di credito.
Invia un'email con 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>",
});Stessa struttura di richiesta di Resend. Sostituisci la chiave con la tua.
Con sede nell'UE
Un'azienda UE. I tuoi dati restano nell'UE.
SpacePost è sviluppato e gestito da Studio 404 d.o.o. in Slovenia. Le tue email, i log e i dati dell'account sono conservati ed elaborati nell'UE, e il tuo contratto è con un'azienda UE.
Azienda UE, contratto UE
Studio 404 d.o.o., Slovenia. I nostri Termini di servizio, e l'addendum sul trattamento dei dati che ne fa parte, sono regolati dalla legge slovena.
Dati a Francoforte e Amsterdam
Le email partono da Amazon SES a Francoforte (eu-central-1). L'applicazione, i worker e il database girano su Railway ad Amsterdam (Paesi Bassi).
Prezzi in EUR, fatture con IVA UE
Prezzi in EUR, IVA esclusa. Ogni pagamento ha la sua fattura con IVA in EUR, con inversione contabile (reverse charge) per le aziende UE con partita IVA valida.
Addendum sul trattamento dei dati (GDPR)
Un addendum sul trattamento dei dati ai sensi dell'articolo 28 del GDPR per ogni cliente e un elenco pubblico dei sub-responsabili con la sede di ciascun fornitore.
Alcuni dei nostri fornitori, come AWS, Stripe e Railway, sono aziende statunitensi. Ognuno è indicato, con cosa tratta e dove, nel nostro elenco dei sub-responsabili.
Migrazione
Passa da Resend con una riga
I corpi delle richieste, i gestori dei webhook e la gestione degli errori restano come sono. Punta il base URL su SpacePost e cambia la chiave.
- 01Verifica il tuo dominio (tre CNAME DKIM).
- 02Crea una chiave API.
- 03Cambia il base URL. Fai il 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";Funzioni
Tutto ciò che fa l'API di Resend, senza nulla da reimparare
API transazionale
POST /emails con gli stessi percorsi, corpi di richiesta, risposte e formato degli errori di Resend. Allegati, tag, header personalizzati, cc/bcc, reply-to.
Invio in batch e programmato
Fino a 100 email per chiamata batch. Programma con un timestamp ISO o "in 1 hour", poi riprogramma o annulla prima dell'invio.
Domini con DKIM, SPF, DMARC
Easy DKIM con tre CNAME, sottodominio MAIL FROM personalizzato, indicazioni DMARC e verifica con un clic, con pulsanti di copia su ogni record.
Webhook firmati
Nove tipi di evento, firme Standard Webhooks (compatibili con Svix), nuovi tentativi con backoff e replay dalla dashboard.
Pubblici e campagne
Contatti, pubblici e campagne con merge tag. L'annullamento dell'iscrizione con un clic (RFC 8058) viene aggiunto per te.
Relay SMTP
smtp.spacepost.dev sulla porta 25976 con STARTTLS. Nome utente "spacepost", la password è una chiave API. Funziona con Supabase, Auth0, WordPress e simili.
Chiavi di idempotenza
Invia un header Idempotency-Key e i nuovi tentativi entro 24 ore restituiscono la risposta originale invece di una email duplicata.
Caselle in modalità test
Invia a indirizzi su test.spacepost.dev per simulare esiti di consegna, rimbalzo e reclamo. Nessuna email reale lascia i nostri server.
Tracciamento di aperture e clic
Si attiva per dominio. Gli eventi compaiono nella cronologia dell'email e nei tuoi webhook.
10 richieste al secondo
Limite di frequenza per team con header ratelimit-*, contro le 2 di Resend. Scale lo porta a 25.
Non ancora disponibili: email in ingresso, editor di template, invio multi-regione. Guarda cosa è in programma.
Recapito e fiducia
Un'infrastruttura sobria e attenta per le email che contano
Non abbiamo ancora loghi di clienti da mostrare, quindi ecco come funziona davvero.
Infrastruttura Amazon SES
Le email partono da Amazon SES in eu-central-1 (Francoforte). Non gestiamo server di posta nostri e non facciamo finta di farlo.
Reputazione isolata per team
Ogni team ha il proprio tenant SES, così la lista sbagliata di un mittente può bloccare quel mittente e nessun altro.
Soppressione automatica
Hard bounce e reclami finiscono automaticamente nella tua lista di soppressione e ogni destinatario viene controllato prima di ogni invio.
Protezioni prima che arrivi a SES
I team vengono messi in pausa automaticamente con un tasso di rimbalzo sopra il 5% o un tasso di reclami sopra lo 0,2%, ben prima delle soglie di revisione di SES.
Nuovi account in sandbox
I nuovi team sono limitati ai domini verificati e a 100 email al giorno per i primi 7 giorni. Così la reputazione condivisa resta pulita per tutti.
Pagina di stato trasparente
Incidenti e uptime sono pubblicati sulla nostra pagina di stato, non nascosti dietro un ticket di supporto.
Crittografia, gestione delle chiavi, conservazione dei dati e come segnalare una vulnerabilità.
Panoramica sulla sicurezzaUptime e incidenti in tempo reale: pagina di stato.
Strumenti per sviluppatori
Pensato per essere usato da codice, terminale o agente
$ 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 è compatibile con Resend, non ha dipendenze e usa fetch, quindi gira su Node, Bun, Deno e runtime edge.
CLI
spacepost send, spacepost domains verify, spacepost logs. Distribuita come singolo binario per macOS, Linux e Windows.
Server MCP per agenti IA
@spacepost/mcp permette a Claude, Cursor e altri agenti di inviare email, gestire domini e leggere i log di consegna via stdio.
Specifica OpenAPI 3.1
Una specifica completa per generare client tipizzati in qualsiasi linguaggio, o da importare in Postman e Insomnia.
Verifica dei webhook
Header Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature), quindi le librerie Svix esistenti verificano i nostri payload.
Prezzi
Inizia gratis. Paghi a migliaia quando cresci.
Free
0 € /mese
IVA esclusa
3000 email incluse.
Resend Free: 0 USD
Pro
9 € /mese
IVA esclusa
50.000 email incluse, poi 0,25 € ogni 1.000.
Resend Pro: 20 USD
Scale
35 € /mese
IVA esclusa
200.000 email incluse, poi 0,20 € ogni 1.000.
Resend Scale: 90 USD per 100K email
SpacePost è davvero compatibile con Resend?
Perché costa meno?
Cosa succede alla mia reputazione se un altro cliente si comporta male?
Dove sono archiviati i miei dati?
E se supero il piano gratuito?
Posso inviare email di marketing?
Invia la tua prima email in cinque minuti
Crea un account gratuito, verifica un dominio ed effettua una chiamata API. Senza carta di credito.