Saltar al contenido
spacepost

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.
Guía completa de migración
.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";

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 seguridad

Disponibilidad e incidentes en vivo: página de estado.

Herramientas para desarrolladores

Pensada para manejarse desde código, una terminal o un agente

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
verificar webhooks
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 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

Ver precios y calculadora

FAQ

Preguntas, respondidas sin rodeos

¿Falta algo? Escríbenos a support@spacepost.dev.

¿SpacePost es realmente compatible con Resend?
Las rutas, la forma de peticiones y respuestas, los nombres de error y la paginación siguen la API de Resend, así que la mayoría de las apps solo cambian la URL base y la clave de API. Consulta la comparación de funciones para ver exactamente qué se soporta hoy y qué sigue planeado.
¿Por qué es más barato?
Trabajamos sobre Amazon SES, que cuesta unos 0,10 USD por cada 1.000 emails, y mantenemos el producto centrado en la API. Pro cuesta 9 € al mes (sin IVA) por 50.000 emails; Resend publica 20 USD. Además cobramos menos por cada millar extra.
¿Qué pasa con mi reputación si otro cliente se porta mal?
Cada equipo tiene su propio tenant de SES con seguimiento de reputación separado, y nuestras barreras pausan a un remitente automáticamente cuando las tasas de rebote o quejas superan los umbrales. Las IP dedicadas están disponibles en Enterprise.
¿Dónde se almacenan mis datos?
El envío se ejecuta en AWS eu-central-1 (Fráncfort). La aplicación y su base de datos se ejecutan en Railway, en su región de la UE (Ámsterdam, Países Bajos). Consulta la lista de subencargados.
¿Y si me quedo pequeño con el plan gratis?
El plan Free se detiene en 3000 emails al mes en lugar de cobrarte sin avisar. Pasa a Pro cuando quieras y cancela en cualquier momento.
¿Puedo enviar email de marketing?
Sí, a personas que hayan dado su consentimiento. Las campañas añaden la baja con un clic automáticamente. No se permiten listas compradas ni extraídas, consulta la Política de uso aceptable.

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.