Compare
A SendGrid alternative for transactional email
SpacePost is a transactional email API on Amazon SES, run by an EU company. If your app sends receipts, password resets and notifications through SendGrid, here is how each part moves over, and where SendGrid still does more.
This page is about transactional email. SpacePost has audiences and simple broadcasts, but it does not replace SendGrid Marketing Campaigns (automations, signup forms, A/B tests, a visual editor).
How SendGrid concepts map
| Topic | SendGrid | SpacePost |
|---|---|---|
| Sending API | v3 Mail Send: POST /v3/mail/send with personalizations (up to 1,000 per request), answers 202 Accepted | POST /emails (one message with to, cc and bcc) or POST /emails/batch (up to 100 messages), answers with the email id |
| SMTP | smtp.sendgrid.net, ports 25, 587 or 2525 (TLS) or 465 (SSL), username apikey | smtp.spacepost.dev, port 25976 with STARTTLS, username spacepost, password = your API key |
| Templates | Dynamic templates stored in SendGrid (ids starting with d-), Handlebars, filled with dynamic_template_data | No hosted templates yet: render HTML in your app (for example with React Email) and send html and text |
| Suppressions | Bounces, blocks, spam reports, invalid emails and unsubscribe groups | One suppression list per team: hard bounces, complaints and repeated soft bounces are added automatically; add your own with POST /suppressions |
| Event webhooks | Event Webhook: a JSON array of events (processed, delivered, deferred, bounce, dropped, open, click, spam report, unsubscribe), with a signed variant | Webhooks per event type (email.sent, delivered, delivery_delayed, bounced, complained, opened, clicked, failed, suppressed), one event per request, Standard Webhooks signatures |
| EU | Global API plus an EU host (api.eu.sendgrid.com) for EU regional subusers | Operated by Studio 404 d.o.o., an EU company; sending in AWS eu-central-1 (Frankfurt); data stored in the EU |
| Marketing email | Marketing Campaigns: contacts, segments, automations, signup forms | Audiences, contacts and broadcasts with one-click unsubscribe; no automations or visual editor |
Moving over
01
Key and domain
Create a SpacePost API key and verify your sending domain (three DKIM CNAMEs plus the MAIL FROM records). Keep SendGrid's DNS records until you switch.
02
Sending calls
Each personalization becomes one POST /emails call: to, cc, bcc, subject, html or text, reply_to, base64 attachments and custom headers carry over. Use POST /emails/batch for up to 100 messages at once.
03
Or just SMTP
Change the host to smtp.spacepost.dev, the port to 25976 with STARTTLS, the username to spacepost and the password to your API key.
04
Templates
Render your dynamic templates in your code before sending. Handlebars sources can be reused with any Handlebars library.
05
Suppressions
Export bounces, blocks, spam reports and unsubscribes from SendGrid and add each address with POST /suppressions, so you never email them again.
06
Webhooks
Create a webhook for the events you use and map SendGrid's event names to ours. Signatures follow Standard Webhooks, so Svix-compatible libraries verify them.
The same message, before and after
// SendGrid v3 Mail Send
await fetch("https://api.sendgrid.com/v3/mail/send", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SENDGRID_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
personalizations: [{ to: [{ email: "ada@example.com" }] }],
from: { email: "receipts@acme.com", name: "Acme" },
subject: "Your receipt",
content: [{ type: "text/html", value: html }],
}),
});// SpacePost (Resend-compatible API)
const res = await fetch("https://api.spacepost.dev/emails", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SPACEPOST_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
from: "Acme <receipts@acme.com>",
to: ["ada@example.com"],
subject: "Your receipt",
html,
}),
});
const { id } = await res.json();Where SendGrid does more
- Hosted dynamic templates with a design editor, and Marketing Campaigns with automations and signup forms.
- Inbound Parse for receiving email, which SpacePost does not offer yet.
- Many years of operation at very large volume, and more ways to split traffic across subusers and regions.
SendGrid details are taken from twilio.com/docs/sendgrid (Mail Send API, SMTP integration, Event Webhook) on October 29, 2026. They can change; tell us at support@spacepost.dev if something is out of date.
SpacePost is an independent product and is not affiliated with or endorsed by Twilio or SendGrid. "SendGrid" and "Twilio" are trademarks of their owners.
