# Documentation

> Email Fast documentation: quickstarts from Node.js to SMTP, the REST API reference, webhooks, and migration guides — every page mirrored in markdown for agents.

Canonical: https://emailfast.dev/docs

## Quickstarts

| Guide | For |
|---|---|
| [Node.js](/docs/quickstart-node) | Server-side JavaScript/TypeScript with `@email-fast/nodejs` |
| [Next.js](/docs/quickstart-nextjs) | App-router API routes and server actions |
| [curl / REST](/docs/quickstart-curl) | Any language — the raw HTTP API |
| [Python](/docs/quickstart-python) | The generated Python SDK |
| [PHP](/docs/quickstart-php) | The generated PHP SDK |
| [Go](/docs/quickstart-go) | The generated Go SDK |
| [Ruby](/docs/quickstart-ruby) | The generated Ruby SDK |
| [SMTP relay](/docs/quickstart-smtp) | Anything that already speaks SMTP — no code changes |
| [Browser (frontend-only)](/docs/quickstart-browser) | `@email-fast/browser` — EmailJS-compatible |

## Core concepts

- **Authentication** — `Authorization: Bearer ef_live_...`; key prefixes: `ef_live_` (secret), `ef_pub_` (browser-safe public), `ef_sandbox_` (dry-run), `ef_rk_` (restricted).
- **Idempotency** — pass `idempotency_key` (or an `Idempotency-Key` header); retries are replay-safe for 90 days.
- **Streams** — `transactional`, `marketing`, and `journey` streams are tracked and suppressed independently, so a newsletter unsubscribe never blocks a password reset.
- **Events & webhooks** — `email.sent|bounced|opened|clicked|complained|unsubscribed|inbound`, signed with timestamped HMAC-SHA256.
- **Sandbox** — sandbox keys (ef_sandbox_…) that run the real pipeline dry: real validation, real rendering, real events, a hosted capture inbox — and no email leaves.

## Framework guides

Working recipes for the stack you're on:
[Next.js](/send-email-with/nextjs) · [React](/send-email-with/react) ·
[Node](/send-email-with/node) · [Express](/send-email-with/express) ·
[Fastify](/send-email-with/fastify) · [Vue](/send-email-with/vue) ·
[Svelte](/send-email-with/svelte) · [Python](/send-email-with/python) ·
[Django](/send-email-with/django) · [PHP](/send-email-with/php) ·
[Laravel](/send-email-with/laravel) · [Ruby](/send-email-with/ruby) ·
[Rails](/send-email-with/rails) · [Go](/send-email-with/go)

## Reference

- [OpenAPI specification](/openapi.yaml) — machine-readable, kept in sync with the API
- [Migration & compatibility](/features/migration) — SendGrid, Mailgun, Postmark, EmailJS
- [For AI agents](/agents) — llms.txt, markdown mirrors, MCP
- [Glossary](/glossary) — DKIM, DMARC, VERP, warmup, and the rest of the alphabet soup
