---
title: "Read a message"
method: GET
path: "/v1/messages/{id}"
tags: ["Messages"]
---

# Read a message

`GET /v1/messages/{id}`

## Request

- Base URL: `https://api.sendora.se`
- URL: `https://api.sendora.se/v1/messages/{id}`
- Auth: HTTP bearer

The message as the log holds it, its attachments described but not returned, and every event on its timeline. Bodies are never returned.

## Path parameters

- `id` string, uuid, required

## Response `200`

The message with its attachments described and its timeline.

- object: The message with its attachments described and its timeline.
  - `messageId` string, uuid, required
  - `streamId` string, uuid, required: The stream the message went on.
  - `broadcastId` string, uuid, nullable, required: The broadcast the message belongs to; null for a message sent on its own.
  - `status` 'accepted' | 'injected' | 'failed', required: `accepted` until handed to the mail server, `injected` after; `failed` if that never worked.
  - `from` string, required
  - `subject` string, required
  - `tag` string, nullable, required
  - `metadata` object, required
  - `submittedAt` string, date-time, required
  - `test` boolean, required: True when the message went through a test server: its events were simulated and nobody received it.
  - `recipients` object[], required
    - `address` string, required
    - `kind` 'to' | 'cc' | 'bcc', required
    - `status` 'queued' | 'delivered' | 'deferred' | 'bounced' | 'expired', required: queued until the receiver answers; deferred while it keeps saying try later.
  - `attachments` object[], required
    - `name` string, required
    - `contentType` string, required
    - `contentId` string, nullable, required
    - `size` integer, required: Bytes before encoding.
  - `events` object[], required: Oldest first.
    - `recipient` string, nullable, required: The recipient the event is about; null when it concerns the message as a whole.
    - `type` 'Reception' | 'Delivery' | 'Bounce' | 'TransientFailure' | 'Expiration' | 'AdminBounce' | 'OOB' | 'Feedback' | 'AdminRebind' | 'DeferredInjectionRebind' | 'Rejection' | 'Delayed', required: Reception when the mail server took it, Delivery, TransientFailure, Bounce, OOB for a bounce report received by mail, Feedback for a spam complaint.
    - `at` string, date-time, required
    - `code` integer, nullable, required: The SMTP status code the receiver answered.
    - `details` string, nullable, required: The receiver’s response text.
    - `classification` string, nullable, required: How a bounce was classified, such as InvalidRecipient.

## Other responses

- `401`: The key is missing, malformed or revoked.
- `403`: The key is of the other kind, or a connected app may not do this here: it is not for connections, the connection may only read here, or it is for test servers only.
- `404`: No such message of this server.

---

[API](https://skmtc.dev/sendora/apis/sendora-api.md) · [All operations](https://skmtc.dev/sendora/apis/sendora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sendora/apis/sendora-api/revisions/72efbbb34b64?raw)
