Everything you need to call POST /api/v1/emails, poll status, and handle scheduling, tracking, and attachments.
Requires API key scope emails:send. Send either raw content (subject + html/text) or a template_id with template_vars—not both.
{
"to": ["user@example.com"],
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>",
"text": "Thanks for your order.",
"from_": "billing@yourdomain.com",
"cc": ["finance@yourdomain.com"],
"reply_to": ["support@yourdomain.com"],
"template_id": null,
"template_vars": {},
"domain_id": "OPTIONAL_DOMAIN_OBJECT_ID",
"track_opens": false,
"track_clicks": false,
"enable_unsubscribe": false,
"scheduled_at": "2026-06-01T15:00:00Z",
"attachments": [
{
"filename": "invoice.pdf",
"content_type": "application/pdf",
"content_b64": "BASE64_PAYLOAD"
}
]
}Optional header Idempotency-Key deduplicates retries for 24 hours. See API reference for curl, JavaScript, and Python examples.
Scope emails:read. List supports status, limit, and offset query params. The detail response includes provider attempts, bodies, attachment metadata, and timestamps for debugging.
| status | Meaning |
|---|---|
| queued | Accepted; waiting for the worker |
| scheduled | Will send at scheduled_at |
| sent | Handed to the delivery stack |
| delivering | In flight at the provider |
| delivered | Confirmed delivery event |
| failed | Send or provider error |
| bounced | Hard/soft bounce recorded |
| cancelled | Scheduled send cancelled before dispatch |
Cancel a scheduled message with POST /emails/{id}/cancel while status is scheduled. Resend with POST /emails/{id}/resend.
Set track_opens and/or track_clicks to true on send. The API rewrites HTML to inject a tracking pixel and wrap links before delivery. Opt-in per message.
Pass scheduled_at as an ISO-8601 UTC timestamp in the future. Omit for immediate queueing.
Up to 5 files per message, 5 MiB total decoded size. Each attachment needs filename, content_type, and content_b64.
Documentation
Quickstart, API reference, and webhooks—everything you need to send from your app.