API v1Private beta. The API is stable; send limits are low while the shared domain warms up.

Concepts

Sending & replies

Send, reply and forward, and the rules that keep send0 mail landing in inboxes.

Send a new message

const sent = await send0.messages.send(inbox.id, {
  to: "dana@acme.com",                       // string, {email, name}, or a list
  cc: [{ email: "ops@acme.com", name: "Ops" }],
  subject: "PO #4471 delivery date",
  text: "Can you confirm Thursday?",
  html: "<p>Can you confirm <b>Thursday</b>?</p>", // optional
});

A new message starts a new thread. Up to 50 recipients across to, cc and bcc. If you send only html, a plain-text version is generated for you.

Reply

await send0.messages.reply(msg.id, { text: "Thursday works.", reply_all: false });
  • Goes to the original sender (their Reply-To if set). With reply_all: true, the original To and Cc are included too. Your own address is always left out.
  • Keeps the thread: In-Reply-To, References and a Re: subject.

Forward

await send0.messages.forward(msg.id, { to: "finance@acme.com", text: "FYI, see below." });

The original is quoted under a standard ---------- Forwarded message --------- header in a new thread. Attachments aren't forwarded yet.

Responses

StatusBodyWhen
201Message with status: "sent"Sent through our mail servers
202DraftThe inbox's send policy is approval. See Drafts.

Delivery happens after that: status moves to delivered, bounced or complained, and you get message.delivered / message.bounced / message.complained events.

Sending rules

These protect everyone's deliverability on the shared domain. Breaking one returns an error with a clear code:

RuleError
Free accounts and reply_only inboxes may only send to addresses that have emailed that inbox403 recipient_not_allowed
Addresses that hard-bounced or complained are never mailed again from your account422 recipient_suppressed
New accounts can send 50 messages per day (UTC). The limit rises as your record builds.429 daily_limit_reached
Sending pauses automatically if complaints pass 0.3% or hard bounces pass 5% over 30 days. Receiving keeps working.403 sending_paused

Cold outreach, bulk mail and marketing are not allowed. See the acceptable use policy.

Test keys

With an s0_test_ key, sends go through every rule above and are recorded as sent, but nothing leaves. Use them in CI.

How messages are built

Every message has Message-ID: <msg_…@send0.email>, a sender name, a plain-text part, and is DKIM-signed for send0.email, with SPF and DMARC aligned. Bodies use quoted-printable, as mainstream mail clients do. See Deliverability.

On this page