Send Email
POST /v1/emailsQueues a transactional email from one of your verified domains. The request returns as soon as the email is validated and stored; a worker sends it moments later, respecting the platform’s provider rate limit and retrying transient failures automatically. For many emails at once, use Send Batch.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
from | string | Yes | Sender. Either address@domain.com or Name <address@domain.com>. The domain must be registered and verified on your account. |
to | string | string[] | Yes | Recipient(s). 1–50 addresses. |
cc | string | string[] | No | CC recipient(s). 1–50 addresses. |
bcc | string | string[] | No | BCC recipient(s). 1–50 addresses. |
reply_to | string | string[] | No | Reply-To address(es). |
subject | string | Yes | 1–998 characters. |
html | string | Yes* | HTML body, up to 1,000,000 characters. |
text | string | Yes* | Plain-text body, up to 1,000,000 characters. |
* At least one of html or text is required; you can provide both.
Example
Node.js
import { Retransmit } from "retransmit.dev";
const retransmit = new Retransmit(process.env.RETRANSMIT_API_KEY);
const { data, error } = await retransmit.emails.send({
from: "Acme <hello@yourdomain.com>",
to: ["user@example.com"],
replyTo: "support@yourdomain.com",
subject: "Your receipt",
html: "<p>Thanks for your order!</p>",
text: "Thanks for your order!",
});The SDK uses camelCase field
names (replyTo); the raw HTTP API uses reply_to.
Response
202 Accepted
{
"id": "em_xxxxxxxxxxxx",
"status": "queued",
"created_at": "2026-09-01T12:00:00.000Z"
}Keep the id — it’s how you look the email up and
how webhook events reference it (emailId). The status moves from queued to
sent once the worker hands it to the provider (usually within seconds), then
onward as delivery events arrive. If every send retry fails, it ends up as
failed with the provider error recorded — you’ll get an email.failed
webhook if you subscribe to it.
Errors
| Status | Code | Cause |
|---|---|---|
400 | invalid_json | Body is not valid JSON. |
422 | validation_error | A field failed validation; the message names the field. |
403 | domain_not_found | The from domain is not registered on your account. |
403 | domain_not_verified | The from domain exists but is not verified yet. |
401 | unauthorized | Missing, malformed, or revoked API key. |