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

Concepts

Inboxes

Addresses, plus-addressing, send policies and lifecycle.

An inbox is one email address. Create as many as your plan allows: one per agent, per task or per customer.

const inbox = await send0.inboxes.create({
  name: "procurement-agent",          // → procurement-agent@send0.email
  display_name: "Procurement Agent",   // sender name recipients see
  send_policy: "reply_only",           // open | reply_only | approval
  retention_days: 7,                   // keep message content 1–30 days
  metadata: { team: "ops", run: 42 },  // your own labels, up to 20 keys
});

Prop

Type

Addresses

  • Addresses are case-insensitive: Research-Agent@ and research-agent@ are the same inbox.
  • Plus-addressing: mail to procurement-agent+po4471@send0.email lands in procurement-agent with tag: "po4471". Use it to tell tasks apart without creating inboxes.
  • Reserved names can't be used: postmaster, abuse, admin, support, noreply, security, billing and similar.
  • Mail to an address that doesn't exist is refused while the sender's server is still connected (550 5.1.1), so senders get an immediate, clear bounce.

Send policies

PolicyBehaviour
reply_onlyCan only send to addresses that have already emailed this inbox. Free accounts are always reply-only.
openCan send to anyone (paid plans, subject to limits and the acceptable use policy).
approvalEvery outgoing message becomes a draft that a person approves.

Change it any time:

await send0.inboxes.update(inbox.id, { send_policy: "approval" });

Retention

Each inbox keeps message content for retention_days: 7 by default, at most 30. After that the message expires:

  • Its text, html, extracted_text, extracted and attachments are deleted, along with the original .eml.
  • The message stays in lists, threads and search by subject, with "expired": true. Its addresses, subject, status and timestamps are kept, so reply-only sending, threading and delivery history keep working.
  • GET /v1/messages/{id}/raw and forwarding it answer 410 message_expired. You can still reply to it.

35 days after it arrived or was sent, the message is deleted entirely, and a thread with no messages left goes with it. Webhook events and delivery logs are kept for 35 days too.

await send0.inboxes.update(inbox.id, { retention_days: 30 });

Save anything you need longer, such as an attachment or a code, when it arrives: a webhook or wait is the place to do it.

Deleting

await send0.inboxes.delete(inbox.id); // needs an admin key

Mail to a deleted inbox is refused from then on. The address is never given to anyone else, so a deleted agent's mail can't land with a stranger.

Limits

The free plan includes 5 inboxes. Deleted inboxes don't count. Creating one more returns 402 plan_limit_reached.

On this page