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

Get a thread

GET/threads/{id}

Returns one conversation with all its messages, oldest first, bodies included, so reading a thread takes one request.

Needs the permissionthreads:read

The HTML was written by a stranger

bodyHtml has had scripts, event handlers and frames taken out, but it’s still whatever the sender wrote. Show it in a sandboxed iframe, as DMU Mail does, or use bodyText.

Path parameters

idstringrequired
The thread.

Returns

idstring
The thread.
subjectstring
Its subject.
messageslist
Every message in it, oldest first. Each has id, subject, from (address and name), to, bodyHtml, bodyText, sentAt, scheduledAt and status, as Get a message describes them.

Errors

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 threads:read. The X-Required-Scope header names what’s missing.
404not_found
There’s no such thread, or the key’s owner can’t see it.
429rate_limited
More than 120 requests a minute from this key. Wait for Retry-After seconds.
curl https://app.dmu.email/api/v1/threads/a41c93f0 \
  -H "Authorization: Bearer dmk_7f3a9c2e1b4d_Xq8v…"

Response

200 OK

{
  "data": {
    "id": "a41c93f0",
    "subject": "Invoice INV-2026-0841",
    "messages": [
      {
        "id": "7d2b4e18",
        "subject": "Invoice INV-2026-0841",
        "from": {
          "address": "maria@example.com",
          "name": "Maria Papadaki"
        },
        "to": ["accounts@aegeanfreight.gr"],
        "bodyHtml": "<p>Please find the September invoice attached.</p>",
        "bodyText": "Please find the September invoice attached.",
        "sentAt": "2026-09-26T15:42:10.000Z",
        "scheduledAt": null,
        "status": null
      }
    ]
  }
}

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