# Get an email body and its thread

Source: https://docs.maylee.app/api-reference/emails/get-email-body

`GET https://api.maylee.app/api/v1/emails/{emailId}/body`

Scope: `read`.

Returns the rendered body plus every message of the conversation, oldest first.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `emailId` | path | string | yes |  |

## Example request

```bash
curl -X GET "https://api.maylee.app/api/v1/emails/<emailId>/body" \
  -H "Authorization: Bearer $MAYLEE_KEY"
```

## Responses

### 200

Body and thread.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `emailId` | string | yes |  |
| `thread` | array of ThreadMessage | yes | Every message of the conversation, oldest first, including messages you sent and any draft in progress. Bounded to the mailbox the email lives in. |
| `thread[].date` | string (date-time) | yes |  |
| `thread[].fromAddress` | string | yes |  |
| `thread[].id` | string | yes | Maylee id. Use it with `GET /emails/{emailId}` for the full metadata. |
| `thread[].isMe` | boolean | yes | `true` when the message was sent from the mailbox itself. |
| `thread[].messageId` | string | yes | RFC `Message-ID` header. |
| `thread[].subject` | string | yes |  |
| `thread[].toAddresses` | array of EmailAddress | yes |  |
| `thread[].bccAddresses` | array of EmailAddress | no | Only on messages you sent and on drafts. May be absent. |
| `thread[].ccAddresses` | array of EmailAddress | no | May be absent. |
| `thread[].fromName` | string | no | May be absent. |
| `thread[].html` | string | no | HTML body. May be absent. |
| `thread[].isAutoForward` | boolean | no | Present only when `true`. |
| `thread[].isAutoReply` | boolean | no | Present only when `true`. |
| `thread[].isDraft` | boolean | no | A draft in progress in this conversation. Present only when `true`. |
| `thread[].mailboxId` | string | no |  |
| `thread[].references` | array of string | no |  |
| `thread[].text` | string | no | Plain-text body. May be absent. |
| `html` | string | no | HTML body of the requested email. May be absent. |
| `text` | string | no | Plain-text body of the requested email. May be absent. |

```json
{
  "emailId": "cmemx1a2b3c4d5e6f7g8h9i0",
  "html": "<p>Hello, could you send us a quote for the annual plan?</p>",
  "text": "Hello, could you send us a quote for the annual plan?",
  "thread": [
    {
      "date": "2026-08-25T13:47:02.000Z",
      "fromAddress": "client@acme.com",
      "fromName": "Jane Client",
      "html": "<p>Hello, could you send us a quote for the annual plan?</p>",
      "id": "cmemx1a2b3c4d5e6f7g8h9i0",
      "isMe": false,
      "mailboxId": "cmbx1a2b3c4d5e6f7g8h9i0j",
      "messageId": "<CAF3k9x1@mail.example.com>",
      "references": [],
      "subject": "Quote request",
      "text": "Hello, could you send us a quote for the annual plan?",
      "toAddresses": [
        {
          "email": "contact@your-company.com"
        }
      ]
    }
  ]
}
```

### 401

Missing, malformed, revoked or expired API key.

### 403

Key lacks the required scope, or outbound sending is not enabled on it.

### 404

Not found in this workspace.

### 429

Per-minute rate limit (`RATE_LIMIT_EXCEEDED`) or monthly quota (`QUOTA_EXCEEDED`) exhausted.

Errors use the format `{ "code", "error", "details" }`: see [Errors](/errors.md).
