Email para desarrolladores, a mitad de precio.
Una API compatible con Resend sobre AWS SES. Cambia tu URL base, conserva tu código y paga menos: Pro cuesta 9 € al mes (sin IVA) por 50 mil emails; Resend Pro cuesta 20 USD.
3000 emails al mes gratis. Sin tarjeta de crédito.
Envía 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>",
});Misma forma de petición que Resend. Sustituye la clave por la tuya.
Con sede en la UE
Una empresa de la UE. Tus datos se quedan en la UE.
SpacePost lo desarrolla y opera Studio 404 d.o.o. en Eslovenia. Tus emails, registros y datos de cuenta se almacenan y procesan en la UE, y tu contrato es con una empresa de la UE.
Empresa de la UE, contrato de la UE
Studio 404 d.o.o., Eslovenia. Nuestros Términos del servicio, y la adenda de tratamiento de datos que forma parte de ellos, se rigen por la ley eslovena.
Datos en Fráncfort y Ámsterdam
El email se envía con Amazon SES en Fráncfort (eu-central-1). La aplicación, los workers y la base de datos se ejecutan en Railway en Ámsterdam (Países Bajos).
Precios en EUR, facturas con IVA de la UE
Precios en EUR, sin IVA. Cada pago tiene su factura con IVA en EUR, con inversión del sujeto pasivo para empresas de la UE con un número de IVA válido.
Adenda de tratamiento de datos (RGPD)
Una adenda de tratamiento de datos según el artículo 28 del RGPD para todos los clientes y una lista pública de subencargados con la ubicación de cada proveedor.
Algunos de nuestros proveedores, como AWS, Stripe y Railway, son empresas de EE. UU. Cada uno aparece, con lo que procesa y dónde, en nuestra lista de subencargados.
Migración
Cambia desde Resend en una línea
Tus cuerpos de petición, manejadores de webhooks y gestión de errores se quedan como están. Apunta la URL base a SpacePost y cambia la clave.
- 01Verifica tu dominio (tres CNAME de DKIM).
- 02Crea una clave de API.
- 03Cambia la URL base. Despliega.
# .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";Funciones
Todo lo que hace la API de Resend, sin nada nuevo que aprender
API transaccional
POST /emails con las mismas rutas, cuerpos de petición, respuestas y formato de errores que Resend. Adjuntos, etiquetas, cabeceras personalizadas, cc/bcc, reply-to.
Envío por lotes y programado
Hasta 100 emails por llamada por lotes. Programa con una marca de tiempo ISO o "in 1 hour", y reprograma o cancela antes de que salga.
Dominios con DKIM, SPF y DMARC
Easy DKIM con tres CNAME, subdominio MAIL FROM personalizado, guía de DMARC y verificación con un clic, con botones de copiar en cada registro.
Webhooks firmados
Nueve tipos de evento, firmas Standard Webhooks (compatibles con Svix), reintentos con espera creciente y reenvío desde el panel.
Audiencias y campañas
Contactos, audiencias y campañas con etiquetas de combinación. La baja con un clic (RFC 8058) se añade por ti.
Relay SMTP
smtp.spacepost.dev en el puerto 25976 con STARTTLS. Usuario "spacepost", la contraseña es una clave de API. Funciona con Supabase, Auth0, WordPress y compañía.
Claves de idempotencia
Envía una cabecera Idempotency-Key y los reintentos durante 24 horas devuelven la respuesta original en lugar de un email duplicado.
Buzones de modo de prueba
Envía a direcciones de test.spacepost.dev para simular entregas, rebotes y quejas. Ningún correo real sale de nuestros servidores.
Seguimiento de aperturas y clics
Actívalo por dominio. Los eventos aparecen en la línea de tiempo del email y en tus webhooks.
10 peticiones por segundo
Límite de tasa por equipo con cabeceras ratelimit-*, frente a las 2 de Resend. Scale lo sube a 25.
Aún no disponible: email entrante, editor de plantillas, envío multirregión. Mira lo que está planeado.
Entregabilidad y confianza
Infraestructura aburrida y cuidadosa para el correo que importa
Todavía no tenemos logos de clientes que mostrar, así que aquí tienes cómo funciona de verdad.
Infraestructura de Amazon SES
El correo se envía a través de Amazon SES en eu-central-1 (Fráncfort). No operamos servidores de correo propios y no fingimos lo contrario.
Reputación aislada por equipo
Cada equipo tiene su propio tenant de SES, así que la mala lista de un remitente puede pausar a ese remitente y a nadie más.
Supresión automática
Los rebotes duros y las quejas pasan a tu lista de supresión automáticamente, y cada destinatario se comprueba antes de cada envío.
Barreras antes de que SES lo vea
Los equipos se pausan automáticamente con una tasa de rebote superior al 5 % o una tasa de quejas superior al 0,2 %, mucho antes de los umbrales de revisión de SES.
Cuentas nuevas en sandbox
Los equipos nuevos se limitan a dominios verificados y 100 emails al día durante los primeros 7 días. Así la reputación compartida se mantiene limpia para todos.
Página de estado transparente
Los incidentes y la disponibilidad se publican en nuestra página de estado, no se esconden tras un ticket de soporte.
Cifrado, manejo de claves, retención y cómo reportar una vulnerabilidad.
Resumen de seguridadDisponibilidad e incidentes en vivo: página de estado.
Herramientas para desarrolladores
Pensada para manejarse desde código, una terminal o un 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 de Node
@spacepost/node es compatible con Resend, no tiene dependencias y usa fetch, así que funciona en Node, Bun, Deno y entornos edge.
CLI
spacepost send, spacepost domains verify, spacepost logs. Se distribuye como un único binario para macOS, Linux y Windows.
Servidor MCP para agentes de IA
@spacepost/mcp permite a Claude, Cursor y otros agentes enviar correo, gestionar dominios y leer registros de entrega por stdio.
Especificación OpenAPI 3.1
Una especificación completa para generar clientes tipados en cualquier lenguaje, o importarla en Postman e Insomnia.
Verificación de webhooks
Cabeceras Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature), así que las librerías de Svix existentes verifican nuestros payloads.
Precios
Empieza gratis. Paga por millar cuando crezcas.
Free
0 € /mes
sin IVA
3000 emails incluidos.
Resend Free: 0 USD
Pro
9 € /mes
sin IVA
50.000 emails incluidos, luego 0,25 € por cada 1.000.
Resend Pro: 20 USD
Scale
35 € /mes
sin IVA
200.000 emails incluidos, luego 0,20 € por cada 1.000.
Resend Scale: 90 USD por 100 mil emails
¿SpacePost es realmente compatible con Resend?
¿Por qué es más barato?
¿Qué pasa con mi reputación si otro cliente se porta mal?
¿Dónde se almacenan mis datos?
¿Y si me quedo pequeño con el plan gratis?
¿Puedo enviar email de marketing?
Envía tu primer email en cinco minutos
Crea una cuenta gratis, verifica un dominio y haz una llamada a la API. Sin tarjeta de crédito.