Salta ai contenuti

Migrare da Resend

SpacePost implementa l’API di Resend: stessi percorsi, stessi nomi dei campi, stessi formati di risposta e lo stesso formato degli errori. La maggior parte delle app migra cambiando un URL di base e una chiave API.

  1. Crea una chiave API SpacePost nella dashboard. Le chiavi SpacePost iniziano con sp_live_ (quelle di Resend iniziano con re_).

  2. Aggiungi e verifica il tuo dominio in SpacePost. I record DNS sono diversi da quelli di Resend, quindi aggiungi i nuovi CNAME DKIM e i record MX/TXT di send. Puoi lasciare al loro posto i record di Resend durante il passaggio, perché i selettori DKIM non collidono. Vedi Aggiungere e verificare. Sposta la tua policy SPF/DMARC solo se hai cambiato il sottodominio send.

  3. Cambia il client. Scegli una delle opzioni qui sotto.

    Mantieni il pacchetto ufficiale resend. Imposta l’URL di base con una variabile d’ambiente e usa la tua chiave 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>" });

    Oppure passalo nel codice:

    const resend = new Resend("sp_live_YOUR_API_KEY", { baseUrl: "https://api.spacepost.dev" });
  4. Ricrea i tuoi webhook. Crea di nuovo ogni endpoint in SpacePost (POST /webhooks) e salva il nuovo signing_secret. Il codice di verifica scritto per Resend o Svix continua a funzionare, perché SpacePost invia gli stessi header Standard Webhooks (più i duplicati svix-*). Vedi Verificare le firme.

  5. Sposta pubblici e contatti. Crea i pubblici e importa i contatti tramite POST /audiences/{id}/contacts. Segnaposto come {{{FIRST_NAME|fallback}}} e {{{RESEND_UNSUBSCRIBE_URL}}} funzionano senza modifiche nelle campagne.

  6. Invia un test, poi passa in produzione. Invia a delivered@test.spacepost.dev, controlla che il webhook arrivi, poi esegui il deploy.

Funzionalità di Resend SpacePost Note
POST /emails Supportato to/cc/bcc/reply_to fino a 50 ciascuno; gli alias camelCase replyTo, scheduledAt sono accettati
POST /emails/batch Supportato Fino a 100 email; allegati e scheduled_at sono consentiti per ogni email; tutto o niente
GET /emails/{id}, GET /emails Supportato L’elenco omette i corpi
PATCH /emails/{id} Supportato Riprogramma le email pianificate
POST /emails/{id}/cancel Supportato Solo email pianificate
Allegati (content, path) Supportato path deve essere https
Tag, header personalizzati Supportato Stessi vincoli sui caratteri dei tag
Idempotency-Key Supportato 24 ore, POST /emails e /emails/batch
Domini (crea, ottieni, elenca, verifica, aggiorna, elimina) Supportato open_tracking, click_tracking
Chiavi API Supportato full_access, sending_access, domain_id facoltativo
Webhook, firma Standard Webhooks Supportato Anche gli header svix-*
Pubblici, contatti, campagne Supportato I contatti stanno sotto /audiences/{id}/contacts
API delle soppressioni Supportato In più: elenca, aggiungi e rimuovi voci
Tenant (modalità piattaforma) Solo SpacePost Reputazione isolata per cliente; vedi Modalità piattaforma. L’SDK di Resend scarta tenant_id; usa resend.post o domini di proprietà del tenant
Relay SMTP Supportato smtp.spacepost.dev:25976 con STARTTLS (ancora nessun TLS implicito sulla 465)
Email in ingresso Non ancora
Editor di template Non ancora Usa React Email o il tuo HTML
  • Valori di last_event. Tutti i valori di Resend (queued, scheduled, sent, delivered, delivery_delayed, bounced, complained, opened, clicked, canceled, failed) sono presenti. SpacePost aggiunge suppressed, usato quando tutti i destinatari erano nella tua lista di soppressione. Lo stato non torna mai indietro: un evento opened che arriva prima di delivered mantiene lo stato successivo.
  • Evento webhook aggiuntivo. email.suppressed viene emesso quando un destinatario viene saltato perché soppresso. Iscriviti solo agli eventi che gestisci. Per il resto i payload sono identici a quelli di Resend; per le email dei tenant viene aggiunto data.tenant_id.
  • Limite di frequenza. 10 richieste al secondo per team (25 su Scale) contro le 2 di Resend, con gli stessi header ratelimit-*.
  • Prezzi. Pro costa 9 € per 50.000 email, con 0,25 € per ogni 1.000 in più, fatturati in EUR IVA esclusa (Resend Pro: 20 USD con 0,90 USD per ogni 1.000 in più, prezzi di Resend in USD al 23 ottobre 2026). Dopo i primi 7 giorni ogni piano, Free incluso, ha un tetto giornaliero che cresce con i tuoi invii: il maggiore tra 1.000 e il doppio del tuo giorno migliore negli ultimi 14 giorni, fino a 50.000 al giorno. Vedi Piani e quote.
  • Che cosa conta come email. Ogni destinatario conta: un’email a 3 destinatari (to, cc e bcc insieme) pesa 3 sulla tua quota.
  • Mittente di test. onboarding@test.spacepost.dev sostituisce onboarding@resend.dev. Le caselle di test stanno su test.spacepost.dev invece che su resend.dev: delivered@, bounced@, complained@, delayed@, più softbounced@ (solo SpacePost).
  • Sandbox dei nuovi account. I primi 7 giorni sono limitati a 100 email al giorno. Vedi Verifica e limiti.
  • Pausa automatica. I team con tassi anomali di rimbalzo o di reclamo vengono messi in pausa automaticamente. Vedi Pausa automatica.
  • URL di base. https://api.spacepost.dev, con i percorsi alla radice. È accettato anche il prefisso /v1 (https://api.spacepost.dev/v1/emails).