Resend からの移行
SpacePost は Resend API を実装しています。パス、フィールド名、レスポンス形式、エラー形式がすべて同じです。ほとんどのアプリは、ベース URL と API キーを変えるだけで移行できます。
-
ダッシュボードで SpacePost の API キーを作成します。SpacePost のキーは
sp_live_で始まります(Resend のキーはre_で始まります)。 -
SpacePost でドメインを追加して検証します。DNS レコードは Resend のものと異なるため、新しい DKIM の CNAME と、
sendの MX/TXT レコードを追加してください。DKIM セレクターは衝突しないので、切り替えが終わるまで Resend のレコードをそのまま残しておけます。詳しくは追加と検証をご覧ください。SPF/DMARC のポリシーを移す必要があるのは、sendサブドメインを変更した場合のみです。 -
クライアントを切り替えます。 以下のいずれかを選んでください。
公式の
resendパッケージをそのまま使います。環境変数でベース URL を設定し、SpacePost のキーを使ってください。.env RESEND_API_KEY=sp_live_YOUR_API_KEYRESEND_BASE_URL=https://api.spacepost.devimport { 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>" });コード内で渡すこともできます。
const resend = new Resend("sp_live_YOUR_API_KEY", { baseUrl: "https://api.spacepost.dev" });import を差し替えます。メソッド名と
{ data, error }の戻り値の形式は同じです。import { Resend } from "resend";const resend = new Resend(process.env.RESEND_API_KEY);import { SpacePost } from "@spacepost/node";const spacepost = new SpacePost(process.env.SPACEPOST_API_KEY);await resend.emails.send({ ... });await spacepost.emails.send({ ... });ホストとキーを変更します。パスとボディは同一です。
curl https://api.resend.com/emails -H "Authorization: Bearer re_..."curl https://api.spacepost.dev/emails -H "Authorization: Bearer sp_live_..."ホスト、ポート、パスワードを変更し、STARTTLS を使います。ユーザー名
resendはspacepostの別名として受け付けられます。Host: smtp.spacepost.dev Port: 25976 (STARTTLS)User: spacepost Password: sp_live_YOUR_API_KEY -
Webhook を再作成します。 SpacePost で各エンドポイントを作成し直し(
POST /webhooks)、新しいsigning_secretを保存してください。SpacePost は同じ Standard Webhooks ヘッダー(加えてsvix-*の重複ヘッダー)を送信するため、Resend や Svix 向けに書いた検証コードはそのまま動作します。詳しくは署名の検証をご覧ください。 -
オーディエンスとコンタクトを移行します。
POST /audiences/{id}/contactsでオーディエンスを作成し、コンタクトをインポートします。{{{FIRST_NAME|fallback}}}や{{{RESEND_UNSUBSCRIBE_URL}}}などのプレースホルダーは、一斉配信でもそのまま使えます。 -
テスト送信をしてから切り替えます。
delivered@test.spacepost.devに送信し、Webhook が届くことを確認してからデプロイしてください。
互換性の対応表
Section titled “互換性の対応表”| Resend の機能 | SpacePost | 備考 |
|---|---|---|
POST /emails |
対応 | to/cc/bcc/reply_to はそれぞれ最大 50 件。キャメルケースの別名 replyTo、scheduledAt も受け付けます |
POST /emails/batch |
対応 | 最大 100 通。添付ファイルと scheduled_at はメールごとに指定可能。全件成功か全件失敗のどちらかです |
GET /emails/{id}, GET /emails |
対応 | 一覧には本文が含まれません |
PATCH /emails/{id} |
対応 | スケジュール済みメールの送信日時を変更します |
POST /emails/{id}/cancel |
対応 | スケジュール済みメールのみ |
添付ファイル(content、path) |
対応 | path は https である必要があります |
| タグ、カスタムヘッダー | 対応 | タグに使える文字の制約は同じです |
Idempotency-Key |
対応 | 24 時間。POST /emails と /emails/batch |
| ドメイン(作成、取得、一覧、検証、更新、削除) | 対応 | open_tracking、click_tracking |
| API キー | 対応 | full_access、sending_access、任意の domain_id |
| Webhook、Standard Webhooks 署名 | 対応 | svix-* ヘッダーも送信します |
| オーディエンス、コンタクト、一斉配信 | 対応 | コンタクトは /audiences/{id}/contacts の配下にあります |
| 送信停止 API | 対応 | 追加機能: エントリの一覧、追加、削除 |
| テナント(プラットフォームモード) | SpacePost のみ | 顧客ごとに評判を分離します。プラットフォームモードをご覧ください。Resend SDK は tenant_id を破棄するため、resend.post かテナント所有のドメインを使ってください |
| SMTP リレー | 対応 | smtp.spacepost.dev:25976、STARTTLS を使用(465 での暗黙的 TLS はまだ未対応) |
| 受信メール | 未対応 | |
| テンプレートエディター | 未対応 | React Email または独自の HTML を使ってください |
知っておきたい相違点
Section titled “知っておきたい相違点”last_eventの値。 Resend の値(queued、scheduled、sent、delivered、delivery_delayed、bounced、complained、opened、clicked、canceled、failed)はすべて存在します。SpacePost では、すべての宛先が送信停止リストに載っていた場合に使うsuppressedが加わります。ステータスが逆戻りすることはありません。deliveredより先にopenedイベントが届いても、後の状態が保持されます。- 追加の Webhook イベント。 宛先が送信停止中のためスキップされたときに
email.suppressedが発火します。処理するイベントだけを購読してください。ペイロードはそれ以外 Resend と同一で、テナントのメールにはdata.tenant_idが追加されます。 - レート制限。 チームあたり 1 秒に 10 リクエスト(Scale は 25)で、Resend の 2 より高く、
ratelimit-*ヘッダーは同じです。 - 料金。 Pro は 50,000 通で €9、追加 1,000 通ごとに €0.25 で、EUR 建て、VAT 別で請求します(Resend Pro: USD 20、追加 1,000 通ごとに USD 0.90。2026 年 10 月 23 日時点の Resend の USD 価格)。最初の 7 日間を過ぎると、Free を含むすべてのプランに、送信実績に応じて増える 1 日の上限があります。1,000 通と直近 14 日間で最も多かった日の 2 倍のうち大きいほうで、上限は 1 日 50,000 通です。詳しくはプランとクォータをご覧ください。
- メール 1 通の数え方。 宛先ごとに 1 通と数えます。3 つの宛先(to、cc、bcc の合計)への 1 通のメールは、クォータを 3 通分消費します。
- テスト用送信元。
onboarding@resend.devの代わりにonboarding@test.spacepost.devを使います。テスト用の受信箱はresend.devではなくtest.spacepost.devにあります:delivered@、bounced@、complained@、delayed@、さらにsoftbounced@(SpacePost のみ)。 - 新規アカウントのサンドボックス。 最初の 7 日間は 1 日 100 通までに制限されます。詳しくはアカウント認証と送信上限をご覧ください。
- 自動一時停止。 バウンス率や苦情率が異常なチームは自動的に一時停止されます。詳しくは自動一時停止をご覧ください。
- ベース URL。
https://api.spacepost.devで、パスはルート直下です。/v1プレフィックスも使えます(https://api.spacepost.dev/v1/emails)。