One API · transactional + marketing email · onboard in 60 seconds
Send your key on every request. Create keys in the console — the plaintext is shown exactly once.
POST /v1/emails — from-domain and params are validated synchronously; a queued send returns 202 with an email id, and later status flows back via events and webhooks.
Response 202
Pass template_id and variables (mutually exclusive with subject/html/text). Variables use Handlebars syntax.
POST /v1/emails/batch — up to 100 emails per request, each with its own content.
Register an endpoint in the console — events arrive HMAC-signed: email.sent / delivered / bounced / complained / opened / clicked.
One error envelope — type marks the category, code is the machine-readable cause.
| type | HTTP |
|---|---|
| invalid_request_error | 400 / 404 / 409 / 422 |
| authentication_error | 401 |
| permission_error | 403 |
| rate_limit_error | 429 |
| api_error | 500 |
| service_unavailable_error | 503 |
Send an Idempotency-Key header — same key + body within 24h returns the first response, same key + different body returns 409. Default limit: 10 req/s per key.