DEVELOPER GUIDE

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.