Skip to content

Send an email

POST https://api.sushisend.com/v1/emails
Authorization: Bearer ssk_live_...
Content-Type: application/json

Body

{
"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"
}
  • from must be on a verified sending domain.
  • At least one of text or html is required.
  • subject can’t contain \r or \n (header-injection protection).
  • replyTo is 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

StatuserrorMeaning
400missing_from / missing_to / missing_subjectRequired field missing.
400invalid_from_emailfrom isn’t a valid email or contains CR/LF.
400invalid_subjectSubject contains a newline.
401unauthenticatedMissing / invalid Bearer token.
402daily_quota_exceededFree plan 50/day cap hit.
402monthly_quota_exceededPlan monthly cap hit.
403recipient suppressedAddress is on your workspace’s suppression list.
502send_failedDownstream 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.