// for engineers

The email API
you'd actually pick.

Typed SDKs in 7 languages. Idempotent sends. HMAC-signed webhooks with replay. OpenTelemetry-compatible tracing. Zero proprietary dashboards required to ship.

SDK languages

7

Median send

187ms

Event types

9

Idempotency TTL

24h

// send

One endpoint.
Every send shape.

Transactional, marketing, receipts, one-offs, bulk batch, React components rendered at send time — the same POST /v1/email handles all of it.

  • Idempotency keys

    Every key cached for 24h. Retry a thousand times, deliver exactly once.

  • Batch sending

    Up to 100 recipients per request, individually tracked, single atomic call.

  • Scheduled delivery

    Pass scheduled_at; we queue and fire to the minute.

  • Attachments up to 40MB

    base64 or pre-signed URL, MIME types you pick.

  • Tags & metadata

    Up to 10 tags, 40 metadata fields. Filter logs, slice analytics.

POST /v1/email
// One call. Typed response. Retries built in.
const { id, status } = await volt.send({
from: 'team@acme.dev',
to: ['dev@customer.io'],
subject: 'Your receipt #4827',
react: <Receipt order={order} />,
tags: ['billing', 'receipt'],
metadata: { order_id: order.id, plan: 'pro_plus' },
idempotencyKey: `receipt:${order.id}`,
});
 
// → { id: "em_01HQ7X9KVZT…", status: "queued" }
// events & webhooks

Every state change,
signed and streamed.

Delivered · Opened · Clicked · Bounced · Complained · Deferred · Unsubscribed · Queued · Rejected. Nine event types, HMAC-signed payloads, exponential retry, dashboard replay.

  • HMAC-SHA256 signing

    Verify X-VoltMail-Signature; rotate secrets without downtime.

  • Retry with backoff

    5 attempts over 3 hours, then dead-letter queue you can replay.

  • Replay from dashboard

    Pick a date range, pick events, replay to any endpoint.

  • Event filtering

    Subscribe per-endpoint to only the events you need. No noise.

  • TypeScript schemas

    Zod-validated payloads bundled with the SDK.

events — livestreaming
deliveredteam@acme.dev → ops@cargodrop.ioem_01HQ7XD88LG
unsublist-unsub · one-clickem_01HQ7XAB2MN
bouncedsmtp 550 5.1.1 · user unknownem_01HQ7XBPQ4S
complainedabuse@aol.com · feedback loopem_01HQ7XE4K1J
deferredsmtp 451 · greylistem_01HQ7XCFD2W
deliveredteam@acme.dev → ana@peddlebee.coem_01HQ7XAB2MN
clickedhttps://acme.dev/r/4827302
openedbeacon · em_01HQ7X9KVZT204
// api keys

Scoped keys.
Zero-downtime rotation.

Separate live from test. Separate read from send. Rotate without a deploy. Audit who used what, last.

  • Permission scopes

    send:write, logs:read, domains:admin, etc.

  • IP allowlists

    Bind a key to specific CIDR ranges.

  • Rate limits per key

    Protect production from runaway scripts.

  • Last-used tracking

    Find stale keys. Revoke with a click.

  • Audit log

    Every key action (create, rotate, revoke) recorded, exportable as CSV.

dashboard — api keys
  • prod-apiLIVEsend:writevm_live_•••••• 7a2f
  • prod-logsLIVElogs:readvm_live_•••••• 3c91
  • ci-testsTESTsend:writevm_test_•••••• b4e2
  • webhooks-adminLIVEwebhooks:adminvm_live_•••••• 9d05
  • legacy-migrationREVOKEDvm_live_•••••• e118
5 active · 1 revoked · rotated 12d ago
// in the box

What ships with every SDK.

Typed client

Full request + response types per endpoint, generated from OpenAPI.

Discriminated errors

`InvalidInputError`, `RateLimitError`, `IdempotentReplay` — never `unknown`.

Retry policy

Exponential backoff with jitter on 5xx + network errors. Configurable.

Webhook verifier

HMAC-SHA256 signature check, replay-window guard, raw-body helper.

Zod schemas

Every event type bundled. Parse webhook bodies with one call.

Mock client for tests

In-memory implementation that records sends, asserts, and replays.

Tracing hooks

OpenTelemetry-compatible. Wire to your existing trace context.

CLI

Tail logs, send a test email, verify a domain — without the dashboard.

Read the OpenAPI.
Paste the key. Ship.

Free forever up to 3,000 emails / month. No card. No call. The pricing page is the contract.