# SpacePost > SpacePost is a Resend-compatible email API for developers, built on AWS SES. Same paths, request/response shapes, error format and webhook signing as the Resend API. Base URL: https://api.spacepost.dev. Auth: `Authorization: Bearer sp_live_...`. Docs: https://docs.spacepost.dev Key facts: - Send: `POST /emails` (to/cc/bcc up to 50 each, subject max 998 chars, html or text required, attachments up to 50, tags, headers, scheduled_at up to 30 days), `POST /emails/batch` (max 100). Returns `{ "id": "" }`. - Errors: `{ "statusCode": 422, "name": "validation_error", "message": "..." }`. - Rate limit: 10 req/s per team (25 on Scale), headers `ratelimit-limit/remaining/reset`, `retry-after` on 429. - Idempotency: `Idempotency-Key` header (1-256 chars, 24h) on POST /emails and /emails/batch. - Pagination: `limit` (1-100, default 20), `after`, `before` (ids), newest first, `{ object: "list", has_more, data }`. - Test addresses: delivered@, bounced@, complained@, delayed@test.spacepost.dev. Test sender: onboarding@test.spacepost.dev (only to team members and test addresses). - Webhooks: Standard Webhooks signing (`webhook-id`, `webhook-timestamp`, `webhook-signature`; `svix-*` duplicates). Events: email.sent, delivered, delivery_delayed, bounced, complained, opened, clicked, failed, scheduled, suppressed. Payload is Resend-shaped: `{ type, created_at, data: { email_id, from, to, subject, created_at, broadcast_id?, tenant_id?, tags? (object), plus bounce | click | open | failed | suppressed per event } }`. - SDK: `npm i @spacepost/node`; `new SpacePost(process.env.SPACEPOST_API_KEY)`; methods return `{ data, error }`. - Resend SDK works unchanged with `RESEND_BASE_URL=https://api.spacepost.dev` or `new Resend(key, { baseUrl })`. SpacePost-only fields such as `tenant_id` are dropped by its `emails.send`; use `resend.post("/emails", { ..., tenant_id })` or `@spacepost/node`. - Platform mode (tenants): your own customers, each with isolated SES reputation, own bounce/complaint guard, pause switch and optional daily cap. `POST /tenants {name, external_id?, daily_limit?}`, `GET /tenants`, `GET|PATCH|DELETE /tenants/{ref}` (`ref` = our id or your external_id; delete is 422 while the tenant has domains), `POST /tenants/{ref}/pause {reason?}`, `POST /tenants/{ref}/unpause` (403 for reputation pauses unless the team is trusted). Needs a full_access key. - `tenant_id` (our id or external_id) is optional on `POST /emails`, items of `POST /emails/batch` and `POST /domains`. A tenant-owned domain implies its tenant; a team-level domain may send for any tenant; a conflicting `tenant_id` is 422; a paused tenant is 403 `sending_paused`; a tenant over `daily_limit` is 429 `daily_quota_exceeded`. Emails, domains and webhook `data` carry `tenant_id`. - SMTP: smtp.spacepost.dev, port 25976 with STARTTLS (required before AUTH; implicit TLS on 465 is not offered yet), user `spacepost`, password = API key. - Never put API keys in browser code. ## Getting started - [Introduction](https://docs.spacepost.dev/getting-started/introduction/): what SpacePost is and how it compares - [Quickstart](https://docs.spacepost.dev/getting-started/quickstart/): key, first email, domain - [Migrating from Resend](https://docs.spacepost.dev/getting-started/migrating-from-resend/): parity table and differences - [Node.js](https://docs.spacepost.dev/getting-started/quickstarts/nodejs/), [Next.js](https://docs.spacepost.dev/getting-started/quickstarts/nextjs/), [Python](https://docs.spacepost.dev/getting-started/quickstarts/python/), [Go](https://docs.spacepost.dev/getting-started/quickstarts/go/), [PHP](https://docs.spacepost.dev/getting-started/quickstarts/php/), [Ruby](https://docs.spacepost.dev/getting-started/quickstarts/ruby/), [Rust](https://docs.spacepost.dev/getting-started/quickstarts/rust/), [cURL](https://docs.spacepost.dev/getting-started/quickstarts/curl/), [SMTP](https://docs.spacepost.dev/getting-started/quickstarts/smtp/) ## Sending - [Send an email](https://docs.spacepost.dev/sending/send-email/) - [Batch sending](https://docs.spacepost.dev/sending/batch/) - [Scheduling](https://docs.spacepost.dev/sending/scheduling/) - [Attachments](https://docs.spacepost.dev/sending/attachments/) - [Tags](https://docs.spacepost.dev/sending/tags/) - [Custom headers](https://docs.spacepost.dev/sending/headers/) - [Idempotency keys](https://docs.spacepost.dev/sending/idempotency/) - [React Email](https://docs.spacepost.dev/sending/react-email/) - [Testing](https://docs.spacepost.dev/sending/testing/) ## Domains - [Adding and verifying](https://docs.spacepost.dev/domains/adding-and-verifying/) - [DMARC](https://docs.spacepost.dev/domains/dmarc/) - [Open and click tracking](https://docs.spacepost.dev/domains/tracking/) - [Custom return path](https://docs.spacepost.dev/domains/return-path/) - [Troubleshooting](https://docs.spacepost.dev/domains/troubleshooting/) ## Webhooks - [Overview](https://docs.spacepost.dev/webhooks/overview/) - [Event types](https://docs.spacepost.dev/webhooks/event-types/) - [Verifying signatures](https://docs.spacepost.dev/webhooks/verifying/) - [Retries](https://docs.spacepost.dev/webhooks/retries/) ## Platform mode - [Platform mode (tenants)](https://docs.spacepost.dev/platform/tenants/): create tenants, tenant-owned vs team-level domains, send for a tenant, pause, caps, webhooks ## Audiences and broadcasts - [Contacts](https://docs.spacepost.dev/audiences/contacts/) - [Broadcasts](https://docs.spacepost.dev/audiences/broadcasts/) - [Personalization](https://docs.spacepost.dev/audiences/personalization/) - [Unsubscribe](https://docs.spacepost.dev/audiences/unsubscribe/) ## Deliverability and account - [Best practices](https://docs.spacepost.dev/deliverability/best-practices/) - [Bounces, complaints and suppressions](https://docs.spacepost.dev/deliverability/bounces-and-complaints/) - [Account sandbox](https://docs.spacepost.dev/deliverability/sandbox/) - [Automatic pausing](https://docs.spacepost.dev/deliverability/auto-pausing/) - [Account verification and sending limits](https://docs.spacepost.dev/account/verification-and-limits/) - [Plans and quotas](https://docs.spacepost.dev/account/plans-and-quotas/) - [Security and API keys](https://docs.spacepost.dev/account/security/) ## API and tools - [API introduction](https://docs.spacepost.dev/api/introduction/) - [Errors](https://docs.spacepost.dev/api/errors/) - [Rate limits](https://docs.spacepost.dev/api/rate-limits/) - [Pagination](https://docs.spacepost.dev/api/pagination/) - [API reference](https://docs.spacepost.dev/api-reference/) - [OpenAPI spec](https://api.spacepost.dev/openapi.json) - [Node.js SDK](https://docs.spacepost.dev/tools/node-sdk/) - [CLI](https://docs.spacepost.dev/tools/cli/) - [MCP server](https://docs.spacepost.dev/tools/mcp/) - [SMTP relay](https://docs.spacepost.dev/tools/smtp/) ## Full text - [llms-full.txt](https://docs.spacepost.dev/llms-full.txt): key pages concatenated