---
title: "Update an inbox message"
method: PATCH
path: "/email_inboxes/{inbox_id}/messages/{message_id}"
tags: ["Email Inboxes"]
---

# Update an inbox message

`PATCH /email_inboxes/{inbox_id}/messages/{message_id}`

Updates the explicit read state of an account-scoped inbound message. Set `read_at`
to `true` to mark the message read at the server's current time, to an ISO 8601
timestamp to use that timestamp, or to `null` to mark the message unread. Repeating
the same update is idempotent.

## Path parameters

- `inbox_id` string, uuid, required
- `message_id` string, uuid, required

## Request body

- UpdateInboundMessageRequest
  - `read_at` union, required — Set to `true` for server time, an ISO 8601 timestamp for an explicit read time, or `null` to mark unread.
    - true
    - string, date-time
    - unknown

## Response `200`

Updated inbox message.

- InboundMessageResponse
  - `data` InboundMessage, required
    - `id` string, uuid, required
    - `record_type` 'email_message', required
    - `direction` 'inbound', required
    - `status` 'received', required — Received for inbound messages; the current send status for outbound messages.
    - `inbox_id` string, uuid, required
    - `thread_id` string, uuid, required
    - `message_id` string, nullable, required — RFC Message-ID header. Null is possible for legacy outbound messages.
    - `in_reply_to` string, nullable, required
    - `references` string[], required — Ordered RFC Message-ID values from the References header.
    - `from` InboundEmailAddress, required
      - `email` string, email, required
      - `name` string
    - `to` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `cc` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `bcc` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `reply_to` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `subject` string, nullable, required
    - `text_body_url` string, uri, nullable, required — URL for an offloaded plain-text body. Null means the body is not offloaded to a URL; an inline plain-text body may still exist but is not returned on list reads. `reply_text` and `has_quoted_text` are persisted during ingest before any body offload.
    - `html_body_url` string, uri, nullable, required — URL for an offloaded HTML body. Null means the body is not offloaded to a URL; an inline HTML body may still exist but is not returned on list reads. Reply extraction uses only the plain-text body during ingest.
    - `reply_text` string, nullable, required — Conservatively extracted new-reply content persisted from the plain-text body during ingest. Null means no plain-text extraction input was available or extraction was skipped or failed; HTML bodies are not parsed.
    - `has_quoted_text` boolean, required — Whether conservative plain-text extraction detected a quoted tail. False does not prove that the source contains no quoted content.
    - `headers` object, required
    - `inline_files` object[], required
    - `attachments` object[], required
    - `labels` string[], required — Mutable message labels used for agent workflow state (for example `spam`, `needs_review`, `processed`). Distinct from the immutable send-time `tags` on outbound messages: labels are never propagated to Email Detail Records or Mission Control reporting. Always empty for outbound messages. Labels on a message are independent of the labels on its thread.
    - `read_at` string, date-time, nullable, required — Time the inbound message was marked read. Null means unread.
    - `received_at` string, date-time, nullable, required — Receipt time for inbound messages; null for outbound messages.
    - `sent_at` string, date-time, nullable, required — Creation/send-acceptance time for outbound messages; null for inbound messages.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `401` — Not authorized (10006).
- `404` — Resource not found (10001).
- `422` — Validation Failed (10015) or changeset validation error.
- `503` — Service unavailable (10016), including an unavailable upstream dependency or unavailable Edge idempotency protection for a keyed request.

---

[API](https://skmtc.net/team-telnyx/apis/telnyx-api-2.md) · [All operations](https://skmtc.net/team-telnyx/apis/telnyx-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/team-telnyx/telnyx-api-2/versions/8f5f4e537994/schema)
