Skip to main content
The Sendmux Sending API lets you send emails programmatically through your configured delivery providers. It supports single and batch sending, attachments, idempotency keys, and returns structured responses with per-message status.

Base URL

All Sending API requests should be made to:
https://smtp.sendmux.ai/api/v1
This is a different base URL from the Management API (app.sendmux.ai). The Sending API runs on the email delivery infrastructure for optimal performance.

Authentication

Authenticate using an API key with the email.send permission. Pass it as a Bearer token in the Authorization header.
curl -X POST https://smtp.sendmux.ai/api/v1/emails/send \
  -H "Authorization: Bearer smx_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "from": { "email": "hello@yourdomain.com", "name": "Your App" },
    "to": { "email": "user@example.com" },
    "subject": "Welcome!",
    "html_body": "<h1>Welcome to our platform</h1>"
  }'
API keys are scoped to a team. Create and manage keys under Settings > API Keys in the dashboard. Keys used for sending require the email.send permission — the mailbox key category includes this by default.

Permissions

EndpointRequired permission
POST /api/v1/emails/sendemail.send
POST /api/v1/emails/send/batchemail.send
GET /api/v1/openapi.jsonNone (public)

Response format

All responses use the same JSON envelope as the Management API.

Success

{
  "ok": true,
  "data": {
    "message_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "status": "queued"
  },
  "meta": {
    "request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
  }
}

Error

{
  "ok": false,
  "error": {
    "code": "insufficient_credits",
    "message": "Your team's balance is too low to send this email.",
    "doc_url": "https://docs.sendmux.ai/sending-api/errors#insufficient_credits"
  },
  "meta": {
    "request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
  }
}

Rate limiting

Each sending API key is rate-limited to 1800 requests per minute (batch requests count as 1). Rate limit headers are included on every response:
X-RateLimit-Limit: 1800
X-RateLimit-Remaining: 1794
X-RateLimit-Reset: 1679313700
When the limit is exceeded, the API returns a 429 status with a Retry-After header.

Conventions

  • snake_case fields in all JSON request and response bodies
  • UTC ISO 8601 timestamps in RFC 3339 format: 2026-03-19T10:30:00Z
  • Public IDs only — internal database IDs are never exposed
  • Cache-Control: no-store on all authenticated responses (the OpenAPI spec endpoint uses public, max-age=3600)
  • JSON onlyContent-Type: application/json

OpenAPI specification

The full OpenAPI 3.1 specification is available at:
https://smtp.sendmux.ai/api/v1/openapi.json