from, set the recipient, re-type the subject with a Re: prefix, and hand-write the In-Reply-To and References headers from the parent’s message id. Forget any of those and the reply lands as a fresh thread. The reply endpoint does all of it from one input: the id of the message you are answering.
POST /v1/emails/{id}/reply
The {id} in the path is the parent message — typically the inbound message you got from a thread or the inbound_received webhook. The only required content is a body: pass html, text, or both.
202 Accepted
What Drin sets for you
Send nothing but a body and Drin fills the rest in from the parent message:- From defaults to the parent message’s inbox address — the address it was sent to. Your reply comes from the same mailbox the conversation is already on.
- To defaults to the parent message’s sender, so the reply goes back to whoever wrote in.
- Subject defaults to the parent subject with a
Re:prefix — and is not doubled when the subject already starts withRe:. - In-Reply-To and References are set from the parent’s RFC 822 message id and its existing reference chain, so Gmail, Outlook, and Apple Mail collapse the reply into the original conversation instead of starting a new one.
A body is required. At least one of
html or text must be present. Everything else is optional — omit it and the derived default applies.Request body
Every field overrides the value Drin would otherwise derive. Supply only what you want to change.HTML body of the reply. Required unless
text is given.Plain-text body. Required unless
html is given. Provide both for the best deliverability.Override the auto-generated
Re: subject. Omit to keep the threaded default.{ email, name? }. Override the sending address — useful to hand a conversation to a different inbox (e.g. escalate from support@ to billing@). Must be an address on a domain you own.{ email, name? }[]. Override the recipients. Defaults to the parent message’s sender.{ email, name? }[]. Additional copy recipients.{ filename, content, contentType? }[] with content base64-encoded.Overriding the defaults
The defaults cover the common case; pass any field to change it. Here a reply is escalated to a different inbox and CC’d to a supervisor — the threading headers are still derived from the parent, so it stays in the same conversation.Override From + CC
The agent inbox loop
Reply is the closing move of the receive → read → respond loop. Read a thread, let an agent draft an answer from the conversation, and post it — without ever touching a mail header.Receive → reply
Webhooks
Get pushed every
inbound_received event so an agent can reply the moment a message lands.