Migrar desde Resend
SpacePost implementa la API de Resend: las mismas rutas, los mismos nombres de campos, las mismas formas de respuesta y el mismo formato de errores. La mayoría de las apps migra cambiando una URL base y una clave de API.
-
Crea una clave de API de SpacePost en el panel. Las claves de SpacePost empiezan por
sp_live_(las de Resend empiezan porre_). -
Añade y verifica tu dominio en SpacePost. Los registros DNS son distintos de los de Resend, así que añade los nuevos CNAME de DKIM y los registros MX/TXT de
send. Puedes dejar los registros de Resend mientras haces el cambio, porque los selectores DKIM no chocan. Consulta Añadir y verificar. Cambia tu política SPF/DMARC solo si modificaste el subdominiosend. -
Cambia el cliente. Elige una de las opciones siguientes.
Conserva el paquete oficial
resend. Define la URL base con una variable de entorno y usa tu clave de SpacePost:.env RESEND_API_KEY=sp_live_YOUR_API_KEYRESEND_BASE_URL=https://api.spacepost.devimport { Resend } from "resend";const resend = new Resend(process.env.RESEND_API_KEY);await resend.emails.send({ from: "Acme <hello@acme.com>", to: "you@example.com", subject: "Hi", html: "<p>Hi</p>" });O pásala en el código:
const resend = new Resend("sp_live_YOUR_API_KEY", { baseUrl: "https://api.spacepost.dev" });Cambia el import. Los nombres de los métodos y la forma de retorno
{ data, error }son los mismos.import { Resend } from "resend";const resend = new Resend(process.env.RESEND_API_KEY);import { SpacePost } from "@spacepost/node";const spacepost = new SpacePost(process.env.SPACEPOST_API_KEY);await resend.emails.send({ ... });await spacepost.emails.send({ ... });Cambia el host y la clave. Las rutas y los cuerpos son idénticos.
curl https://api.resend.com/emails -H "Authorization: Bearer re_..."curl https://api.spacepost.dev/emails -H "Authorization: Bearer sp_live_..."Cambia el host, el puerto y la contraseña, y usa STARTTLS. El usuario
resendse acepta como alias despacepost.Host: smtp.spacepost.dev Port: 25976 (STARTTLS)User: spacepost Password: sp_live_YOUR_API_KEY -
Vuelve a crear tus webhooks. Crea de nuevo cada endpoint en SpacePost (
POST /webhooks) y guarda el nuevosigning_secret. El código de verificación escrito para Resend o Svix sigue funcionando, porque SpacePost envía los mismos encabezados de Standard Webhooks (más duplicadossvix-*). Consulta Verificar firmas. -
Mueve tus audiencias y contactos. Crea las audiencias e importa los contactos con
POST /audiences/{id}/contacts. Los marcadores como{{{FIRST_NAME|fallback}}}y{{{RESEND_UNSUBSCRIBE_URL}}}funcionan sin cambios en las campañas. -
Envía una prueba y luego haz el cambio. Envía a
delivered@test.spacepost.dev, comprueba que llega el webhook y despliega.
Tabla de paridad
Sección titulada «Tabla de paridad»| Función de Resend | SpacePost | Notas |
|---|---|---|
POST /emails |
Compatible | to/cc/bcc/reply_to hasta 50 cada uno; se aceptan los alias en camelCase replyTo, scheduledAt |
POST /emails/batch |
Compatible | Hasta 100 correos; se permiten archivos adjuntos y scheduled_at en cada correo; todo o nada |
GET /emails/{id}, GET /emails |
Compatible | El listado omite los cuerpos |
PATCH /emails/{id} |
Compatible | Reprograma correos programados |
POST /emails/{id}/cancel |
Compatible | Solo correos programados |
Archivos adjuntos (content, path) |
Compatible | path debe ser https |
| Etiquetas, encabezados personalizados | Compatible | Las mismas restricciones de caracteres en las etiquetas |
Idempotency-Key |
Compatible | 24 horas, POST /emails y /emails/batch |
| Dominios (crear, obtener, listar, verificar, actualizar, eliminar) | Compatible | open_tracking, click_tracking |
| Claves de API | Compatible | full_access, sending_access, domain_id opcional |
| Webhooks, firma de Standard Webhooks | Compatible | También encabezados svix-* |
| Audiencias, contactos, campañas | Compatible | Los contactos viven bajo /audiences/{id}/contacts |
| API de supresiones | Compatible | Extra: listar, añadir y eliminar entradas |
| Tenants (modo plataforma) | Solo SpacePost | Reputación aislada por cliente; consulta Modo plataforma. El SDK de Resend descarta tenant_id; usa resend.post o dominios propiedad del tenant |
| Relé SMTP | Compatible | smtp.spacepost.dev:25976 con STARTTLS (todavía sin TLS implícito en el 465) |
| Correo entrante | Aún no | |
| Editor de plantillas | Aún no | Usa React Email o tu propio HTML |
Diferencias que conviene conocer
Sección titulada «Diferencias que conviene conocer»- Valores de
last_event. Todos los valores de Resend (queued,scheduled,sent,delivered,delivery_delayed,bounced,complained,opened,clicked,canceled,failed) están presentes. SpacePost añadesuppressed, que se usa cuando todos los destinatarios estaban en tu lista de supresión. El estado nunca retrocede: un eventoopenedque llega antes quedeliveredconserva el estado posterior. - Evento de webhook adicional.
email.suppressedse dispara cuando se omite un destinatario por estar suprimido. Suscríbete solo a los eventos que gestionas. Por lo demás, los payloads son idénticos a los de Resend; se añadedata.tenant_idpara el correo de tenants. - Límite de tasa. 10 peticiones por segundo por equipo (25 en Scale), frente a 2 en Resend, con los mismos encabezados
ratelimit-*. - Precios. Pro cuesta 9 € por 50.000 correos, con 0,25 € por cada 1.000 adicionales, facturado en EUR sin IVA (Resend Pro: 20 USD con 0,90 USD por cada 1.000 adicionales, precios de Resend en USD a 23 de octubre de 2026). Pasados los primeros 7 días, todos los planes, incluido Free, tienen un tope diario que crece con tus envíos: el mayor entre 1.000 y el doble de tu mejor día de los últimos 14 días, hasta 50.000 al día. Consulta Planes y cuotas.
- Qué cuenta como un correo. Cada destinatario cuenta: un correo a 3 destinatarios (to, cc y bcc en conjunto) descuenta 3 de tu cuota.
- Remitente de prueba.
onboarding@test.spacepost.devreemplaza aonboarding@resend.dev. Los buzones de prueba están entest.spacepost.deven lugar deresend.dev:delivered@,bounced@,complained@,delayed@, además desoftbounced@(solo en SpacePost). - Sandbox de cuenta nueva. Los primeros 7 días están limitados a 100 correos por día. Consulta Verificación y límites.
- Pausa automática. Los equipos con tasas anormales de rebotes o quejas se pausan automáticamente. Consulta Pausa automática.
- URL base.
https://api.spacepost.dev, con las rutas en la raíz. También se acepta el prefijo/v1(https://api.spacepost.dev/v1/emails).