The receipt.
The API says accepted. It does not say delivered. The difference is the whole product.
Every request to Transmit comes back with a receipt. It says one thing: accepted. It does not say delivered, because at that moment nobody could honestly say so. The mail has left your hands and entered ours. That is what accepted means, and it is all it means.
Most APIs blur this. A 200 feels like a promise. It isn't one. A 200 is a courier signing for a package at your door. Whether it arrives is a later fact, and it belongs on a different line of the receipt.
So the receipt keeps filling in after you've stopped looking.
The lines, in plain words
- Accepted. We have it. The credit is taken, the id is yours, and nothing about the message can change now.
- Screened. Every message is checked before a provider ever sees it. Most pass in less time than it takes to read this sentence. The ones that don't are held, with the reason written out, in your dashboard and on your webhook. Nothing disappears silently.
- Handed to provider. Out of our building and into the pipe.
- Delivered. The receiving server took it. This is the line you were waiting for.
- Delayed. The receiving server is slow. We keep trying, and the receipt says so.
- Held. The address is suppressed, because it bounced before or the reader marked you as spam. We don't send to it, and we tell you why.
- Bounced. The address is bad. We stop, and we suppress it so you don't pay to bounce twice.
- Marked as spam. The reader complained. This is the one line we take most seriously, on your account and on ours.
- Expired. It sat too long unsent and we gave up on it. The credit comes back.
Every line reaches your webhook as it happens. You do not poll for it, and you do not read about it on a status page an hour later. The dashboard shows the same receipt, one row per message, the way a ledger does.
Why it matters
When a customer writes to say the reset never came, you don't guess. You open the receipt. It bounced, or it was held because they complained about you last spring, or it was delivered at 09:41 and is sitting in their spam folder. Each of those is a different conversation, and the receipt tells you which one to have.
A receipt is a small thing. It is also the only honest thing an email API can hand you. Everything else is a promise, and you've heard those.