Send email through one API.
Use a key scoped to one application and a verified domain. Store the key in a server-side secret store. The from address must belong to that domain.
Send
POST https://email-services.expandig.com/v1/messages
Authorization: Bearer es_live_...
Idempotency-Key: your-stable-job-id
Content-Type: application/json
{
"from": "hello@yourdomain.com",
"to": ["person@example.com"],
"subject": "Welcome aboard",
"text": "Your account is ready."
}A successful response is HTTP 202 with a gateway message ID and status: accepted. It means SES accepted the submission. Recipient-server delivery is a later event, and inbox placement cannot be guaranteed.
Retries and limits
Use the same Idempotency-Key for a retry of the same job. A changed payload with that key returns 409. An uncertain response after SMTP DATA must be reconciled before replay. Monthly plan limits count recipients. At a hard limit, the API responds 429 and does not send. API keys are displayed once and may be revoked in the dashboard.
Status meanings
Accepted: SES accepted the email. Delivered to server: the recipient's mail server accepted it. Delayed: delivery is pending. Bounced or complained: feedback was reported by SES and suppression may apply. A message sent to multiple recipients can show partial delivery; inspect each recipient's timeline.
This guide describes the version 2 API under staged development. Public sending opens after SES event, billing, and security verification.