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 -
웹훅을 다시 만듭니다. 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로 보내고 웹훅이 도착하는지 확인한 다음 배포하세요.
호환 표
섹션 제목: “호환 표”| Resend 기능 | SpacePost | 비고 |
|---|---|---|
POST /emails |
지원 | to/cc/bcc/reply_to는 각각 최대 50개, camelCase 별칭 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 |
| 웹훅, Standard Webhooks 서명 | 지원 | svix-* 헤더도 제공 |
| 오디언스, 연락처, 브로드캐스트 | 지원 | 연락처는 /audiences/{id}/contacts 아래에 있음 |
| 발송 제외 API | 지원 | 추가 기능: 항목 목록 조회, 추가, 삭제 |
| 테넌트(플랫폼 모드) | SpacePost 전용 | 고객별로 평판을 분리함. 플랫폼 모드 참고. Resend SDK는 tenant_id를 버리므로 resend.post나 테넌트 소유 도메인을 사용하세요 |
| SMTP 릴레이 | 지원 | STARTTLS를 사용하는 smtp.spacepost.dev:25976(465의 암시적 TLS는 아직 미지원) |
| 수신 이메일 | 아직 미지원 | |
| 템플릿 편집기 | 아직 미지원 | React Email이나 직접 작성한 HTML 사용 |
알아 둘 차이점
섹션 제목: “알아 둘 차이점”last_event값. Resend의 값(queued,scheduled,sent,delivered,delivery_delayed,bounced,complained,opened,clicked,canceled,failed)이 모두 있습니다. SpacePost는 모든 수신자가 발송 제외 목록에 있을 때 사용하는suppressed를 추가로 제공합니다. 상태는 뒤로 돌아가지 않습니다.delivered보다 먼저opened이벤트가 도착해도 나중 상태가 유지됩니다.- 추가 웹훅 이벤트.
email.suppressed는 발송 제외 상태라서 수신자를 건너뛸 때 발생합니다. 처리하는 이벤트만 구독하세요. 페이로드는 그 외에는 Resend와 동일하며, 테넌트 메일에는data.tenant_id가 추가됩니다. - 요청 한도. 팀당 초당 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, Resend의 2026년 10월 23일 기준 USD 가격). 처음 7일이 지나면 Free를 포함한 모든 요금제에 발송량에 따라 늘어나는 일일 한도가 적용됩니다. 1,000통과 최근 14일 중 가장 많이 보낸 날의 두 배 중 큰 값이며, 하루 최대 50,000통입니다. 요금제 및 할당량을 참고하세요.
- 이메일로 집계되는 기준. 수신자마다 집계됩니다. 수신자 3명(to, cc, bcc 합계)에게 보낸 이메일 한 통은 할당량에서 3통으로 계산됩니다.
- 테스트 발신자.
onboarding@resend.dev대신onboarding@test.spacepost.dev를 사용합니다. 테스트 수신함은resend.dev대신test.spacepost.dev에 있습니다.delivered@,bounced@,complained@,delayed@가 있고, SpacePost 전용인softbounced@도 있습니다. - 신규 계정 샌드박스. 처음 7일 동안은 하루 100통으로 제한됩니다. 계정 인증 및 발송 한도를 참고하세요.
- 자동 일시 중지. 반송률이나 스팸 신고율이 비정상적인 팀은 자동으로 일시 중지됩니다. 자동 일시 중지를 참고하세요.
- 기본 URL.
https://api.spacepost.dev이며 경로는 루트에 있습니다./v1접두사도 허용됩니다(https://api.spacepost.dev/v1/emails).