Email System
Send transactional email via Resend using the job queue or direct API.
Savannah Cloud sends email via Resend. The sender domain savannahcloud.com is verified on Resend via Cloudflare DNS.
Default sender: noreply@savannahcloud.com
Prerequisites
Set RESEND_API_KEY in your .env:
RESEND_API_KEY=re_xxxxxxxxxxxxxxxxxxxx
EMAIL_FROM=Savannah Cloud <noreply@savannahcloud.com>Send Email via Job Queue
The recommended approach — queued with retry logic.
curl -X POST https://api.savannahcloud.com/jobs \
-H "X-API-Key: sc_your_key" \
-H "Content-Type: application/json" \
-d '{
"type": "send_email",
"payload": {
"to": "user@example.com",
"subject": "Welcome to Savannah Cloud",
"body": "Your account is ready."
},
"max_retries": 3
}'Payload fields:
| Field | Required | Description |
|---|---|---|
to | Yes | Recipient email address |
subject | Yes | Email subject line |
body | Yes | Email body (plain text or HTML) |
from | No | Override sender. Defaults to EMAIL_FROM env var |
Custom Sender Domains
Once a custom domain is verified (see Custom Domains), it appears as a From option in the dashboard email compose UI at /email.
To send from a custom domain via API, pass from in the payload:
{
"type": "send_email",
"payload": {
"to": "customer@example.com",
"from": "hello@acme.com",
"subject": "Order confirmed",
"body": "Your order #1234 has shipped."
}
}The domain acme.com must be verified in your org before using it as a sender.
Dashboard
The /email page provides a 3-column inbox UI:
- Compose — recipient, subject, body, from-selector
- Sent folder — history of sent emails with status
- From selector — shows
mail.savannahcloud.comas default + all org-verified domains
Resend Webhook (Delivery Events)
Resend can POST delivery events (delivered, bounced, complained) to your API. Configure in Resend dashboard with:
https://api.savannahcloud.com/webhooks/resendQuick Reference
# Send email via job queue
curl -X POST https://api.savannahcloud.com/jobs \
-H "X-API-Key: sc_your_key" \
-H "Content-Type: application/json" \
-d '{"type":"send_email","payload":{"to":"user@example.com","subject":"Hi","body":"Hello"}}'