Ir al contenido

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.

  1. Crea una clave de API de SpacePost en el panel. Las claves de SpacePost empiezan por sp_live_ (las de Resend empiezan por re_).

  2. 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 subdominio send.

  3. 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_KEY
    RESEND_BASE_URL=https://api.spacepost.dev
    import { 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" });
  4. Vuelve a crear tus webhooks. Crea de nuevo cada endpoint en SpacePost (POST /webhooks) y guarda el nuevo signing_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 duplicados svix-*). Consulta Verificar firmas.

  5. 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.

  6. Envía una prueba y luego haz el cambio. Envía a delivered@test.spacepost.dev, comprueba que llega el webhook y despliega.

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
  • 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ñade suppressed, que se usa cuando todos los destinatarios estaban en tu lista de supresión. El estado nunca retrocede: un evento opened que llega antes que delivered conserva el estado posterior.
  • Evento de webhook adicional. email.suppressed se 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ñade data.tenant_id para 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.dev reemplaza a onboarding@resend.dev. Los buzones de prueba están en test.spacepost.dev en lugar de resend.dev: delivered@, bounced@, complained@, delayed@, además de softbounced@ (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).