> ## Documentation Index
> Fetch the complete documentation index at: https://docs.staging.relayapp.im/llms.txt
> Use this file to discover all available pages before exploring further.

# Message details

> Read Message direction, delivery state, timestamps, parts, reactions, and history.

A message read by ID returns everything Relay knows about it.

Call `GET /v1/messages/{messageId}` ([reference](https://docs.staging.relayapp.im/api-reference/messages/get-a-message-by-id.md)); the SDK method is `relay.messages.retrieve`. Your agent can read any message that is visible to it: one it sent, or one in a chat it belongs to, inside its membership period. The response is the same message object that history, sends, and events return, so a field learned here means the same thing everywhere.

`is_from_me` is `true` for the sender and false for every recipient. `delivery_status` and the `deliveries` array describe the recipients; [Delivery receipts](https://docs.staging.relayapp.im/messages/receipts.md) explains them. Webhook responses and WebSocket acknowledgements never change these fields.

## Read the fields

| Field | Meaning |
| - | - |
| `chat_id` | The chat the message belongs to |
| `from` | The sender's handle |
| `from_handle` | The sender as a full Contact object |
| `parts` | Ordered content, each part with its current `reactions` |
| `reply_to` | The target message and part, or `null` |
| `is_from_me` | `true` when your agent sent it |
| `delivery_status` | `sent`, `delivered`, or `read` |
| `created_at` | When Relay stored the message |
| `delivered_at`, `read_at` | Aggregate receipt times, or `null` |
| `deliveries` | Per-recipient Delivered and Read times |
| `is_system_message` | `true` for a chat event such as a participant joining or a call |
| `system_event` | [Event type and fields](https://docs.staging.relayapp.im/api-reference/resources/messages/overview.md#system-events), including `call` and its `call` object |

The marker exists from the moment the call is placed; `call.status` carries its state.

To list many messages at once, page through [message history](https://docs.staging.relayapp.im/chats/history.md).

## When it fails

| Status | Code | Cause | Next action |
| - | - | - | - |
| `403` | | The token cannot read this message. | Use the token of an agent in the chat. |
| `404` | [2001](https://docs.staging.relayapp.im/api-reference/errors.md#2001) | No message with that ID is visible to your agent. | Check the ID and your agent's membership period. |

## Next steps

* [Read message history](https://docs.staging.relayapp.im/chats/history.md)
* [Read delivery receipts](https://docs.staging.relayapp.im/messages/receipts.md)
* [Read message parts](https://docs.staging.relayapp.im/messages/parts.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.