E-mail para desenvolvedores, por metade do preço.
Uma API compatível com a Resend, sobre o AWS SES. Troque a base URL, mantenha seu código e pague menos: o Pro custa € 9 por mês (sem IVA) para 50 mil e-mails; o Pro da Resend custa USD 20.
3.000 e-mails por mês grátis. Sem cartão de crédito.
Envie um e-mail com a 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>",
});Mesmo formato de requisição da Resend. Troque a chave pela sua.
Sediada na UE
Uma empresa da UE. Seus dados ficam na UE.
O SpacePost é desenvolvido e operado pela Studio 404 d.o.o., na Eslovênia. Seus e-mails, logs e dados da conta são armazenados e processados na UE, e seu contrato é com uma empresa da UE.
Empresa da UE, contrato da UE
Studio 404 d.o.o., Eslovênia. Nossos Termos de Serviço, e o adendo de processamento de dados que faz parte deles, são regidos pela lei eslovena.
Dados em Frankfurt e Amsterdã
Os e-mails são enviados pelo Amazon SES em Frankfurt (eu-central-1). A aplicação, os workers e o banco de dados rodam na Railway em Amsterdã (Países Baixos).
Preços em EUR, faturas com IVA da UE
Preços em EUR, sem IVA. Cada pagamento recebe uma fatura com IVA em EUR, com autoliquidação (reverse charge) para empresas da UE com número de IVA válido.
Adendo de processamento de dados (GDPR)
Um adendo de processamento de dados conforme o artigo 28 do GDPR para todos os clientes e uma lista pública de subprocessadores com a localização de cada fornecedor.
Alguns dos nossos fornecedores, como AWS, Stripe e Railway, são empresas dos EUA. Cada um aparece, com o que processa e onde, na nossa lista de subprocessadores.
Migração
Saia da Resend com uma linha
Seus corpos de requisição, handlers de webhook e tratamento de erros continuam iguais. Aponte a base URL para a SpacePost e troque a chave.
- 01Verifique seu domínio (três CNAMEs de DKIM).
- 02Crie uma chave de API.
- 03Troque a base URL. Faça o deploy.
# .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";Recursos
Tudo o que a API da Resend faz, sem nada novo para aprender
API transacional
POST /emails com os mesmos caminhos, corpos de requisição, respostas e formato de erro da Resend. Anexos, tags, headers personalizados, cc/bcc, reply-to.
Envio em lote e agendado
Até 100 e-mails por chamada em lote. Agende com um timestamp ISO ou "in 1 hour" e reagende ou cancele antes do envio.
Domínios com DKIM, SPF e DMARC
Easy DKIM com três CNAMEs, subdomínio MAIL FROM personalizado, orientação de DMARC e verificação com um clique, com botão de copiar em cada registro.
Webhooks assinados
Nove tipos de evento, assinaturas Standard Webhooks (compatíveis com Svix), novas tentativas com backoff e reenvio pelo painel.
Públicos e campanhas
Contatos, públicos e campanhas com merge tags. O cancelamento de inscrição com um clique (RFC 8058) é adicionado para você.
Relay SMTP
smtp.spacepost.dev na porta 25976 com STARTTLS. Usuário "spacepost", senha é uma chave de API. Funciona com Supabase, Auth0, WordPress e companhia.
Chaves de idempotência
Envie o header Idempotency-Key e as novas tentativas em até 24 horas devolvem a resposta original, sem e-mail duplicado.
Caixas do modo de teste
Envie para endereços em test.spacepost.dev para simular entrega, rejeição (bounce) e reclamação. Nenhum e-mail real sai dos nossos servidores.
Rastreamento de aberturas e cliques
Ative por domínio. Os eventos aparecem na linha do tempo do e-mail e nos seus webhooks.
10 requisições por segundo
Limite por equipe com headers ratelimit-*, contra 2 na Resend. O Scale sobe para 25.
Ainda não temos: e-mail de entrada, editor de templates e envio multirregião. Veja o que está planejado.
Entregabilidade e confiança
Infraestrutura sóbria e cuidadosa para os e-mails que importam
Ainda não temos logos de clientes para mostrar, então aqui vai como tudo funciona de verdade.
Infraestrutura Amazon SES
Os e-mails saem pelo Amazon SES em eu-central-1 (Frankfurt). Não operamos servidores de e-mail próprios e não fingimos o contrário.
Reputação isolada por equipe
Cada equipe tem seu próprio tenant no SES, então a lista ruim de um remetente pode pausar só esse remetente e mais ninguém.
Supressão automática
Rejeições definitivas (hard bounces) e reclamações entram na sua lista de supressão automaticamente, e cada destinatário é verificado antes de cada envio.
Proteções antes de chegar ao SES
As equipes são pausadas automaticamente com taxa de bounce acima de 5% ou taxa de reclamação acima de 0,2%, bem antes dos limites de revisão do próprio SES.
Contas novas em sandbox
Equipes novas ficam limitadas a domínios verificados e 100 e-mails por dia nos primeiros 7 dias. Isso mantém a reputação compartilhada limpa para todos.
Página de status transparente
Incidentes e uptime são publicados na nossa página de status, não escondidos atrás de um chamado de suporte.
Criptografia, tratamento de chaves, retenção e como reportar uma vulnerabilidade.
Visão geral de segurançaUptime e incidentes em tempo real: página de status.
Ferramentas para desenvolvedores
Feita para ser usada por código, terminal ou 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 Node
O @spacepost/node é compatível com a Resend, não tem dependências e usa fetch, então roda em Node, Bun, Deno e runtimes de edge.
CLI
spacepost send, spacepost domains verify, spacepost logs. Distribuída como um único binário para macOS, Linux e Windows.
Servidor MCP para agentes de IA
O @spacepost/mcp permite que Claude, Cursor e outros agentes enviem e-mails, gerenciem domínios e leiam logs de entrega via stdio.
Especificação OpenAPI 3.1
Uma especificação completa para gerar clientes tipados em qualquer linguagem ou importar no Postman e no Insomnia.
Verificação de webhooks
Headers Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature), então as bibliotecas Svix que você já usa verificam nossos payloads.
Preços
Comece grátis. Pague por milhar quando crescer.
Free
€ 0 /mês
sem IVA
3.000 e-mails incluídos.
Resend Free: USD 0
Pro
€ 9 /mês
sem IVA
50.000 e-mails incluídos, depois € 0,25 por 1.000.
Resend Pro: USD 20
Scale
€ 35 /mês
sem IVA
200.000 e-mails incluídos, depois € 0,20 por 1.000.
Resend Scale: USD 90 por 100 mil e-mails
A SpacePost é mesmo compatível com a Resend?
Por que é mais barata?
O que acontece com a minha reputação se outro cliente se comportar mal?
Onde meus dados ficam armazenados?
E se eu ultrapassar o plano grátis?
Posso enviar e-mail de marketing?
Envie seu primeiro e-mail em cinco minutos
Crie uma conta grátis, verifique um domínio e faça uma chamada à API. Sem cartão de crédito.