---
title: "Read a received message"
method: GET
path: "/v1/inbound/{id}"
tags: ["Inbound"]
---

# Read a received message

`GET /v1/inbound/{id}`

## Request

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

The message with its envelope, parties, headers, text, HTML and attachment descriptors; the attachment bytes and the raw message are downloads of their own. Once the stream’s content window has passed, the content fields are null and contentAvailable is false.

## Path parameters

- `id` string, uuid, required

## Response `200`

The received message with everything but the attachment bytes.

- object: The received message with everything but the attachment bytes.
  - `inboundMessageId` string, uuid, required
  - `streamId` string, uuid, required: The inbound stream that received it.
  - `receivedAt` string, date-time, required: When the message was accepted from the sending server.
  - `envelopeRecipient` string, required: The address of yours the message was sent to.
  - `mailboxHash` string, nullable, required: The text after the plus sign in that address, when the sender used one.
  - `sizeBytes` integer, required
  - `attachmentCount` integer, required
  - `hasText` boolean, required
  - `hasHtml` boolean, required
  - `parseIssue` string, nullable, required: What the parser met; null when the message parsed clean. A hard issue empties the parsed parts, and the raw message stays: `no_headers`, `header_block_too_large`, `too_many_headers`, `too_many_parts`, `nesting_too_deep`, `missing_boundary`, `decoded_too_large`, `parse_timeout`, `parser_error`. A soft issue keeps them and says what was changed or dropped: `truncated_multipart`, `too_many_attachments`, `unknown_transfer_encoding`, `undecodable_container`, `filename_sanitised`, `control_chars_stripped`, `multiple_from`, `duplicate_header`, `malformed_header_dropped`, `address_list_truncated`, `header_value_truncated`. A message with several names the hard one, or the first soft one in this order.
  - `authentication` object, required: What Sendora found when it checked the message; unchecked until the checks have run.
    - `spf` 'pass' | 'fail' | 'softfail' | 'neutral' | 'none' | 'temperror' | 'permerror' | 'unchecked', required: SPF for the address in MAIL FROM.
    - `spfHelo` 'pass' | 'fail' | 'softfail' | 'neutral' | 'none' | 'temperror' | 'permerror' | 'unchecked', required: SPF for the name the sending server gave in HELO.
    - `dkim` 'pass' | 'fail' | 'none' | 'temperror' | 'permerror' | 'unchecked', required
    - `dmarc` 'pass' | 'fail' | 'none' | 'temperror' | 'permerror' | 'unchecked', required
    - `dmarcPolicy` 'none' | 'quarantine' | 'reject', nullable, required: What the sender’s domain asks for; told only when DMARC failed.
    - `arc` 'none' | 'pass' | 'fail' | 'unchecked', required
    - `checkedAt` string, date-time, nullable, required: When the checks ran; null until they have.
  - `contentAvailable` boolean, required: False once the stream’s content window has passed; only the reference remains.
  - `contentExpiresAt` string, date-time, required: When the content goes.
  - `from` object, nullable, required: The From header; null without it or once the content is gone.
    - `address` string, required
    - `name` string, nullable, required
  - `subject` string, nullable, required
  - `date` string, date-time, nullable, required: The sender’s Date header as ISO 8601, when it was a real moment.
  - `envelope` object, nullable, required: Null once the content is gone.
    - `sender` string, nullable, required: The MAIL FROM address; null for a bounce.
  - `replyTo` object[], required
    - `address` string, required
    - `name` string, nullable, required
  - `to` object[], required: Up to 100 entries; toCount is the whole number.
    - `address` string, required
    - `name` string, nullable, required
  - `toCount` integer, required
  - `cc` object[], required: Up to 100 entries; ccCount is the whole number.
    - `address` string, required
    - `name` string, nullable, required
  - `ccCount` integer, required
  - `messageIdHeader` string, nullable, required
  - `inReplyTo` string, nullable, required
  - `references` string[], required
  - `headers` object[], nullable, required: Every header in order; null once the content is gone.
    - `name` string, required
    - `value` string, required
  - `text` string, nullable, required: The plain-text body; null without one or once the content is gone.
  - `html` string, nullable, required: The HTML body as received; null without one or once the content is gone.
  - `attachments` object[], required
    - `attachmentId` string, uuid, required
    - `position` integer, required: Its place among the message’s attachments, from 0.
    - `name` string, nullable, required: The filename, sanitised; null once the content is gone.
    - `contentType` string, nullable, required: The type the sender declared; every download is served as application/octet-stream.
    - `contentId` string, nullable, required: The Content-ID an HTML body refers to with cid:.
    - `size` integer, required: Bytes.
    - `inline` boolean, required: True for a part shown in the body rather than offered as a file.

## 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 inbound message of this server.
- `409`: The stored content of this received message cannot be opened. Sendora has been told.

---

[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)
