Vai al contenuto
spacepost

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.
Guida completa alla migrazione
.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";

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 sicurezza

Uptime e incidenti in tempo reale: pagina di stato.

Strumenti per sviluppatori

Pensato per essere usato da codice, terminale o agente

terminale
$ 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
verifica i webhook
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"],
});
  • 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

Vedi prezzi e calcolatore

FAQ

Domande, con risposte chiare

Manca qualcosa? Scrivi a support@spacepost.dev.

SpacePost è davvero compatibile con Resend?
Percorsi, struttura di richieste e risposte, nomi degli errori e paginazione seguono l'API di Resend, quindi la maggior parte delle app cambia solo il base URL e la chiave API. Consulta il confronto delle funzioni per sapere esattamente cosa è supportato oggi e cosa è ancora in programma.
Perché costa meno?
Usiamo Amazon SES, che costa circa 0,10 USD ogni 1.000 email, e teniamo il prodotto concentrato sull'API. Pro costa 9 € al mese (IVA esclusa) per 50.000 email; Resend indica 20 USD. Facciamo pagare meno anche ogni migliaio di email in più.
Cosa succede alla mia reputazione se un altro cliente si comporta male?
Ogni team ha il proprio tenant SES con monitoraggio separato della reputazione, e le nostre protezioni mettono in pausa un mittente in automatico quando i tassi di rimbalzo o di reclami superano le soglie. Gli IP dedicati sono disponibili su Enterprise.
Dove sono archiviati i miei dati?
L'invio avviene in AWS eu-central-1 (Francoforte). L'applicazione e il suo database girano su Railway, nella sua regione UE (Amsterdam, Paesi Bassi). Vedi l'elenco dei sub-responsabili.
E se supero il piano gratuito?
Il piano Free si ferma a 3000 email al mese invece di addebitarti in silenzio. Passa a Pro quando vuoi, disdici in qualsiasi momento.
Posso inviare email di marketing?
Sì, a chi ha dato il consenso. Le campagne aggiungono automaticamente l'annullamento dell'iscrizione con un clic. Le liste acquistate o raccolte con scraping non sono ammesse, vedi la Acceptable Use Policy.

Invia la tua prima email in cinque minuti

Crea un account gratuito, verifica un dominio ed effettua una chiamata API. Senza carta di credito.