開発者のためのメールを、 半額で。
AWS SES 上に構築した Resend 互換 API。ベース URL を変えるだけでコードはそのまま、料金も抑えられます。Pro は 5万 通で月 €9(VAT 別)、Resend Pro は USD 20 です。
月 3,000 通まで無料。クレジットカード不要。
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>",
});リクエストの形式は Resend と同じです。キーはご自身のものに置き換えてください。
EU 拠点
EU の会社です。データは EU 内にとどまります。
SpacePost はスロベニアの Studio 404 d.o.o. が開発・運営しています。メール、ログ、アカウントデータは EU 内で保存・処理され、契約相手は EU の会社です。
EU の会社、EU の契約
Studio 404 d.o.o.(スロベニア)。利用規約と、その一部であるデータ処理契約(DPA)にはスロベニア法が適用されます。
データはフランクフルトとアムステルダム
メールはフランクフルト(eu-central-1)の Amazon SES から送信します。アプリケーション、ワーカー、データベースはアムステルダム(オランダ)の Railway 上で動いています。
ユーロ建て料金、EU の VAT インボイス
料金はユーロ(EUR)建て、VAT 別です。すべての支払いに EUR の VAT インボイスを発行し、有効な VAT 番号を持つ EU の事業者にはリバースチャージを適用します。
GDPR データ処理契約
すべてのお客様に GDPR 第 28 条に基づくデータ処理契約をご用意し、各委託先の所在地を記載したサブプロセッサー一覧を公開しています。
AWS、Stripe、Railway など、一部の委託先は米国企業です。各社の処理内容と所在地はサブプロセッサー一覧に掲載しています。
移行
Resend からの切り替えは 1 行で
リクエストボディ、Webhook ハンドラー、エラー処理はそのまま。ベース URL を SpacePost に向け、キーを差し替えるだけです。
- 01ドメインを認証します(DKIM の CNAME 3 件)。
- 02API キーを作成します。
- 03ベース URL を変更して、デプロイします。
# .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";機能
Resend API のすべてを、学び直しなしで
トランザクション API
POST /emails のパス、リクエストボディ、レスポンス、エラー形式は Resend と同じです。添付ファイル、タグ、カスタムヘッダー、cc/bcc、reply-to に対応しています。
バッチ送信とスケジュール
バッチ呼び出し 1 回で最大 100 通。ISO タイムスタンプや "in 1 hour" で送信日時を指定でき、送信前なら変更やキャンセルもできます。
DKIM、SPF、DMARC に対応したドメイン
CNAME 3 件で設定できる Easy DKIM、カスタム MAIL FROM サブドメイン、DMARC のガイド、ワンクリック認証。各レコードにはコピーボタンも付いています。
署名付き Webhook
9 種類のイベント、Standard Webhooks 署名(Svix 互換)、バックオフ付きリトライ、ダッシュボードからの再送に対応しています。
オーディエンスと一斉配信
コンタクト、オーディエンス、差し込みタグ付きの一斉配信。ワンクリック配信停止(RFC 8058)は自動で追加されます。
SMTP リレー
smtp.spacepost.dev のポート 25976(STARTTLS)を利用できます。ユーザー名は "spacepost"、パスワードは API キーです。Supabase、Auth0、WordPress などで使えます。
冪等性キー
Idempotency-Key ヘッダーを送ると、24 時間以内の再試行では重複メールを送らず、最初のレスポンスを返します。
テストモードの受信箱
test.spacepost.dev のアドレスに送信すると、配信成功、バウンス、苦情の結果をシミュレートできます。実際のメールは外部に送信されません。
開封・クリックのトラッキング
ドメインごとに切り替えられます。イベントはメールのタイムラインと Webhook に表示されます。
毎秒 10 リクエスト
チームごとのレート制限で、ratelimit-* ヘッダーを返します。Resend の 2 から引き上げました。Scale では 25 です。
まだ対応していないもの: 受信メール、テンプレートエディター、マルチリージョン送信。今後の予定をご覧ください。
到達率と信頼性
大切なメールのための、堅実で地味なインフラ
まだ紹介できる顧客ロゴはありません。その代わり、実際の仕組みをお伝えします。
Amazon SES インフラ
メールは eu-central-1(フランクフルト)の Amazon SES から送信されます。自前のメールサーバーは運用しておらず、運用しているふりもしません。
チームごとの評価の分離
各チームに専用の SES テナントを用意するため、ある送信者のリストに問題があっても、停止されるのはその送信者だけです。
自動の送信停止
ハードバウンスと苦情は自動的に送信停止リストへ追加され、送信のたびにすべての宛先を確認します。
SES に届く前のガードレール
バウンス率が 5% を超えるか苦情率が 0.2% を超えると、SES 自身の審査基準よりはるかに早く、チームを自動で一時停止します。
新規アカウントはサンドボックス
新規チームは、最初の 7 日間は認証済みドメインと 1 日 100 通までに制限されます。共有の評価をみんなのためにきれいに保つためです。
透明性のあるステータスページ
インシデントと稼働状況は、サポートチケットの陰に隠さず、ステータスページで公開しています。
暗号化、キーの扱い、保持期間、脆弱性の報告方法。
セキュリティの概要稼働状況とインシデント: ステータスページ。
開発者向けツール
コード、ターミナル、エージェントから操作できる設計
$ 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"],
});Node SDK
@spacepost/node は Resend 互換で、依存関係はゼロ。fetch を使うので、Node、Bun、Deno、エッジランタイムで動きます。
CLI
spacepost send、spacepost domains verify、spacepost logs。macOS、Linux、Windows 向けの単一バイナリで提供します。
AI エージェント向け MCP サーバー
@spacepost/mcp を使うと、Claude、Cursor などのエージェントが stdio 経由でメール送信、ドメイン管理、配信ログの確認を行えます。
OpenAPI 3.1 仕様
完全な仕様から、あらゆる言語の型付きクライアントを生成できます。Postman や Insomnia にもインポートできます。
Webhook の検証
Standard Webhooks のヘッダー(webhook-id、webhook-timestamp、webhook-signature)を使うため、既存の Svix ライブラリでペイロードを検証できます。
料金
無料で始めて、成長したら 1,000 通単位で支払い。
Free
€0 /月
VAT 別
3,000 通を含みます。
Resend Free: USD 0
Pro
€9 /月
VAT 別
50,000 通を含み、超過分は 1,000 通あたり €0.25。
Resend Pro: USD 20
Scale
€35 /月
VAT 別
200,000 通を含み、超過分は 1,000 通あたり €0.20。
Resend Scale: 10万 通で USD 90