# Read a message

`GET https://api.mailmasker.org/api/v1/mail/messages/:uid`

One message's sender, subject, date and plain-text body.

- Who can use it: Any signed-in account
- Area: Mail
- Answers 200 OK when it works
- Page: https://developer.mailmasker.org/mail-read

The body is the message's plain-text part. A message sent only as HTML comes back with an empty body, and attachments are left out. Reading a message marks it as read, as opening it in an email program does.

## Parameters

| Name | In | Required | What it is | Example |
|---|---|---|---|---|
| `uid` | path | yes | The message's number, from List your recent messages. | `42` |
| `mailbox` | query | no | The folder the message is in. INBOX if you leave it out. |  |

## Good to know

- A number that isn't in that folder answers 404.

## Examples

cURL:

```bash
curl -s 'https://api.mailmasker.org/api/v1/mail/messages/42' \
  -H "Authorization: Bearer $TOKEN"
```

Perl:

```perl
use Mojo::Base -strict;
use Mojo::UserAgent;

my $ua  = Mojo::UserAgent->new;
my $res = $ua->get('https://api.mailmasker.org/api/v1/mail/messages/42',
    { Authorization => "Bearer $ENV{TOKEN}" })->result;
die $res->code, ' ', ($res->json('/error') // $res->message), "\n" unless $res->is_success;
print $res->body, "\n";
```

homelab-cli:

```bash
homelab-cli mail read 42
```

## Response

200 OK:

```json
{
  "from": "billing@example.com",
  "subject": "Your November invoice",
  "date": "Tue, 3 Nov 2026 21:42:10 -0600",
  "body": "Thanks for your order. Your invoice is attached."
}
```
