Start here

Quickstart

A verified domain, a scoped key, and one request. Ten minutes, most of which is DNS.

1. Verify a domain

Sign up, then add the domain you will send from. We give you the DNS records to publish — a DKIM key, a return path, and the DMARC record if you have none. You cannot send from a domain you have not verified, and neither can anybody else.

Verification puts 3,000 credits in the account so you can send before you buy anything.

2. Create a key

In Settings → API keys, create a key and give it only the scopes it needs — email:send for a service that sends. The secret is shown once; we store a hash of it and nothing else, so a lost key is replaced rather than recovered.

3. Send

Send an emailcurl -X POST https://api.transmit.dev/v1/emails \
  -H "Authorization: Bearer $TRANSMIT_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@yourdomain.com",
    "to": "you@example.com",
    "subject": "It arrived.",
    "html": "<p>Nobody noticed. That is the job.</p>"
  }'

A 202 means we have the message, charged the credits, and queued it. The body is the receipt for that submission.

202 Accepted{
  "id": "0f9f8e7d-6c5b-4a39-8271-1a2b3c4d5e6f",
  "from": "hello@yourdomain.com",
  "to": ["you@example.com"],
  "subject": "It arrived.",
  "status": "queued",
  "credits_consumed": 1,
  "suppressed_recipients": [],
  "scheduled_for": null,
  "created_at": "2026-09-03T09:41:02.118Z"
}

4. Watch it land

The dashboard shows every delivery and its events. For your own systems, add a webhook and we will post each event as it happens — delivered, bounced, complained, opened, clicked.

Prefer a typed client? npm install transmitdev, then see the TypeScript SDK.