// docs

Build with VoltMail.

A REST API designed to be boring. JSON in, JSON out, no SDK lock-in. Idempotency keys, webhooks, deterministic error codes — everything you need to wire transactional mail into a production service.

Quickstart

Verify a domain in the dashboard, copy your API key, then send your first email.

curlcurl https://api.voltmail.dev/v1/emails \
  -H "Authorization: Bearer $VOLTMAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "noreply@receipts.acme.dev",
    "to": ["jane@example.com"],
    "subject": "Hello",
    "text": "It works."
  }'

Authentication

All requests use bearer authentication. Pass your API key in the Authorization header. Live keys are prefixed vm_live_ and test keys vm_test_.

Errors

Every error returns a stable code, a human message, and a request_id you can include in support tickets. Status codes follow standard REST conventions.

error response{
  "error": {
    "code": "domain_not_verified",
    "message": "Sending domain receipts.acme.dev is not verified.",
    "request_id": "req_01HV9XA12B3C4D5E6F7G8H9I0J"
  }
}

Rate limits

Default: 100 requests/sec/account. Batch sends count as 1 request. Limits are returned in the X-RateLimit-Remaining header. Pro Max scales linearly to 5,000 rps with prior notice.