Send an email
POST https://api.sushisend.com/v1/emailsAuthorization: Bearer ssk_live_...Content-Type: application/jsonBody
{ "from": "hello@yourdomain.com", "to": "user@example.com", "subject": "Welcome", "text": "Plain-text body here.", "html": "<p>HTML body here.</p>", "replyTo": "support@yourdomain.com"}frommust be on a verified sending domain.- At least one of
textorhtmlis required. subjectcan’t contain\ror\n(header-injection protection).replyTois optional.
Response
{ "id": "01HRY3Z7Q9M7ABCDEF", "sesMessageId": "010201...", "status": "sent"}id is SushiSend’s message ID — use it to correlate webhook events. sesMessageId is the underlying provider ID.
Common errors
| Status | error | Meaning |
|---|---|---|
| 400 | missing_from / missing_to / missing_subject | Required field missing. |
| 400 | invalid_from_email | from isn’t a valid email or contains CR/LF. |
| 400 | invalid_subject | Subject contains a newline. |
| 401 | unauthenticated | Missing / invalid Bearer token. |
| 402 | daily_quota_exceeded | Free plan 50/day cap hit. |
| 402 | monthly_quota_exceeded | Plan monthly cap hit. |
| 403 | recipient suppressed | Address is on your workspace’s suppression list. |
| 502 | send_failed | Downstream provider rejected the send. |
Idempotency (roadmap)
Idempotency keys via the Idempotency-Key header are on the roadmap. Until they land, handle transient 5xx responses with an exponential-backoff retry and dedupe on your side.