Base URL
https://app.dmu.email/api/v1
Authentication
Bearer dmk_… API key
Rate limit
120 requests a minute per key

Reply or forward

POST/messages/{id}/reply

Starts a reply, a reply to all or a forward, as a draft. Send it with Send a draft, as you would any other.

Needs the permissionmessages:reply

Use it rather than Create a draft for anything that answers a message. It picks the mailbox to answer from and the recipients (a reply to all leaves out your own addresses and repeats), writes one Re: however many the sender stacked up, Greek’s Απ: included, and sets In-Reply-To and References so it threads in the recipient’s mail. It quotes the original and stays in the same conversation; a forward starts a new one.

With no bodyHtml you get the quote and the signature, ready to write into. With one, your text goes above the quote.

A conversation given to the key’s owner by a mention or an assignment, without its mailbox, has to be answered from one of their own mailboxes: pass fromMailboxId. The reply then starts a conversation there, still threaded for the recipient.

Path parameters

idstringrequired
The message to answer or forward.

Body

modestringoptional
reply (the default), reply-all or forward.
bodyHtmlstringoptional
Your text, which goes above the quote.
tolist of stringsoptional
With cc and bcc: recipients to use instead of the ones worked out. A forward has none until you give them.
fromMailboxIdstringoptional
Another mailbox of the key’s owner to reply from.

Returns

The draft:

idstring
The draft. Send it with Send a draft.
threadIdstring
The conversation it’s in. A forward’s is a new one.
mailboxIdstring
The mailbox it will go from, and from, its address.
tolist of strings
With cc and bcc: its recipients.
subjectstring
With one Re: or Fwd:.
bodyHtmlstring
Your text, the signature and the quoted original.
inReplyTostring or null
The Message-ID it answers. Null for a forward.
updatedAtstring
When the draft last changed.

Errors

400unknown_mode
mode isn’t reply, reply-all or forward.
400reply_failed
The draft couldn’t be started. The message says why.
401invalid_key
The key is wrong, expired or revoked. With no Authorization header at all, the code is missing_credentials.
403missing_scope
The key doesn’t have messages:reply. The X-Required-Scope header names what’s missing.
403not_your_mailbox
The conversation was given to the key’s owner without its mailbox. Pass fromMailboxId.
404not_found
There’s no such message, or the key’s owner can’t see it.
404unknown_mailbox
fromMailboxId isn’t a mailbox the key can send from.
429rate_limited
More than 120 requests a minute from this key. Wait for Retry-After seconds.
curl https://app.dmu.email/api/v1/messages/7d2b4e18/reply \
  -X POST \
  -H "Authorization: Bearer dmk_7f3a9c2e1b4d_Xq8v…" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "reply",
    "bodyHtml": "<p>Thank you, received.</p>"
  }'

Response

200 OK

{
  "data": {
    "id": "8c1e2f4a",
    "threadId": "a41c93f0",
    "mailboxId": "9e53e6ba",
    "from": "accounts@aegeanfreight.gr",
    "to": ["maria@example.com"],
    "cc": [],
    "bcc": [],
    "subject": "Re: Invoice INV-2026-0841",
    "bodyHtml": "<p>Thank you, received.</p><p>Aegean Freight</p><blockquote>…</blockquote>",
    "inReplyTo": "CAF3x9q2k@mail.example.com",
    "updatedAt": "2026-09-27T09:01:58.000Z"
  }
}

Every response wraps its result in data. A page of threads adds nextCursor, which is null on the last page.