Dana Ruiz
Mon 09:13dana@lindmetall.de
Automatic reply: Out of office until Friday
English · In-Reply-To · the address we wrote to
Email APIs solved delivery, then developer experience. AI Inbx is built for what comes next: software that handles the conversation end to end, on its own.
What arrived, and what AI Inbx did with it
RFQ 4471 — 3mm brushed sheets
Sent by your code
One POST. We hold the conversation from here.
Automatic reply: Out of office until 8 Sep
Your agent stays asleep
out of officeWe tell you which mail needs a reply. This one doesn't.
Preise Blech 3mm
Same thread
smart-matchedA colleague of dana@, answering our price.
Blech 3mm — Bestätigung
Same thread
smart-matchedBack from leave. New subject, nothing quoted.
Re: Blech 3mm — Bestätigung
Held until Monday 09:00
queuedNo real company sends at 02:47 on a Sunday.
5 messages · 4 subjects · 2 languages · 1 thread
threads.get("thr_8f2c")one callOne thread: an RFQ, an out-of-office, and a colleague answering from a different address — matched and categorised on the way in.
Why AI Inbx
Marco replies instead of Dana, from his phone, with a new subject
Dana answers your four questions inside the quoted text
An out-of-office bounces back
The quote comes back as a scanned PDF
Something wants to send at 02:47 on a Sunday
Your agent has 400 follow-ups ready at once
Someone replies “please stop emailing me”
Threading
You email Dana. Marco answers instead — new address, new subject, in German. Same thread.
You wrote to dana@lindmetall.de — RFQ 4471, Mon 09:12. Three replies came back:
Dana Ruiz
Mon 09:13dana@lindmetall.de
Automatic reply: Out of office until Friday
English · In-Reply-To · the address we wrote to
Marco Lind
Mon 11:48marco.lind@lindmetall.de
Preise Blech 3mm
German · no headers · new subject · new address
Dana Ruiz
Fri 08:40dana@lindmetall.de
Blech 3mm — Bestätigung
German · no headers · new subject · four days later
thr_8f2c
One thread. One call to read it.
Categories
Out-of-office replies, receipts, newsletters. Every message arrives carrying what it is, so one line of yours decides whether it is worth waking your agent for.
if (email.category !== "human") return3 of 8 wake your agent
marco.lind@lindmetall.de
your agentRe: RFQ 4471 — can you do 3mm?
dana@lindmetall.de
out of officeAutomatic reply: Out of office until 8 Sep
growth@sendhive.co
marketing50% off enterprise seats, this week only
p.raman@cadence.health
your agentQuick question before we sign
mailer-daemon@googlemail.com
bounceDelivery Status Notification (Failure)
receipts@stripe.com
transactionalYour receipt from Lind Metall #1832
support@vendor.io
auto-reply[Ticket #58213] We received your request
lena@fjordlabs.no
your agentRe: intro call — Thursday works
Attachments
Marco answers with a PDF. It is Markdown before the email is, and so is the spreadsheet under it — your agent is handed what the document says, not a file and a parsing problem.
Angebot-4471.pdf
Lind Metall GmbH
Industriestraße 14
44536 Lünen
Northwind GmbH
z. Hd. Nora Berg
Angebot AN-4471
31.08.2026
| Pos | Artikel | Menge | Preis |
|---|---|---|---|
| 1 | Blech 3mm | 500 | 4,20 € |
| 2 | Zuschnitt | 500 | 0,35 € |
Lieferzeit: 10 Werktage ab Auftrag.
Zahlung: 30 Tage netto.
Angebot-4471.pdf.md
LLM-ready<!-- Page 1 --> Lind Metall GmbHIndustriestraße 1444536 Lünen Northwind GmbHz. Hd. Nora Berg # Angebot AN-4471 31.08.2026 | Pos | Artikel | Menge | Preis || --- | --------- | ----- | ------ || 1 | Blech 3mm | 500 | 4,20 € || 2 | Zuschnitt | 500 | 0,35 € | Netto 2.275,00 €MwSt. 19 % 432,25 €Gesamt 2.707,25 € Lieferzeit: 10 Werktage ab Auftrag.Zahlung: 30 Tage netto.
Sending hours
Your agent runs at all hours. A company does not, and a Sunday 02:47 timestamp is how people tell the difference.
Set the hours you actually work. Anything your code sends outside them waits, and goes out the moment the window opens — stamped like a person sent it.
Pacing
Send too fast and mail providers mark your domain down for it. Write the caps you want — per sender, per company, across everything — and stack them. Every email clears all the ones that apply to it.
nora@northwind.io
jonas@northwind.io
Both rules live. Warm-up counts Nora and Jonas separately; together they never cross the account cap.
Suppressions
The link and the one-click header go on every send. And when someone just writes “please stop emailing me”, we read that too.
Six ways off your list
Sent
Following up on RFQ 4471
Nora · Northwind
Unsubscribe·List-Unsubscribe header, one click
Reply
Iris Kaplan
iris@overtone.dev
“Please stop emailing me.”
Detected
Since then
Q4 follow-up: any movement?
SuppressedNever reached her. Nobody had to remember.
Mailboxes
Connect Gmail and Outlook accounts and they are just more addresses. Same send call, same threads, categories, hours, pacing and webhooks as your domains — nothing in your code knows the difference.
await aiinbx.emails.send({
from: "nora@gmail.com",
to: "dana@lindmetall.de",
text: draft,
})Spaces
Everything above, handed through. Each customer gets a space: their domain or connected inbox, every thread that went through it, and every event stamped with it. Rules live in a space too, so a customer can set their own hours and caps from inside your product — and only their own mail waits for them.
Their domains, their rules, their mail.
Harbourly is sending; Rheinbau’s mail waits for Monday morning. Neither ever sees a thread of the other’s. The account cap is yours, and counts both.
Developers
One to send. One webhook to hear back.
const email = await aiinbx.emails.send({ from: "nora@northwind.io", to: "dana@lindmetall.de", subject: "RFQ 4471 — 3mm brushed sheets", text: draft, suppression_key: "q4-outbound",}) // Sunday, 02:47. A pacing rule holds it until Monday morning.email.status // "queued"email.pacing.estimated_send_at // "2026-08-31T07:00:00Z"email.pacing.held_by // { kind: "hours", rule_id: "pace_…" }Sent on a Sunday night. The response says which rule held it, and until when.
Platform
The parts every email API needs, done properly so you never think about them.