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@andresearch-agent@are the same inbox. - Plus-addressing: mail to
procurement-agent+po4471@send0.emaillands inprocurement-agentwithtag: "po4471". Use it to tell tasks apart without creating inboxes. - Reserved names can't be used:
postmaster,abuse,admin,support,noreply,security,billingand 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
| Policy | Behaviour |
|---|---|
reply_only | Can only send to addresses that have already emailed this inbox. Free accounts are always reply-only. |
open | Can send to anyone (paid plans, subject to limits and the acceptable use policy). |
approval | Every 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,extractedand 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}/rawand forwarding it answer410 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 keyMail 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.