---
title: "List and search messages in an inbox"
method: GET
path: "/email_inboxes/{inbox_id}/messages"
tags: ["Email Inboxes"]
---

# List and search messages in an inbox

`GET /email_inboxes/{inbox_id}/messages`

Lists inbound messages newest first. All access is scoped to the authenticated
account. `filter[search]` performs PostgreSQL full-text search over the subject,
plain-text body, and HTML body. Filters compose with stable cursor pagination.

## Path parameters

- `inbox_id` string, uuid, required

## Query parameters

- `filter[from]` string
- `filter[subject]` string
- `filter[received_after]` string, date-time
- `filter[received_before]` string, date-time
- `filter[read]` boolean
- `filter[search]` string
- `page[size]` integer
- `page[after]` string

## Response `200`

Paginated inbox messages.

- InboundMessageListResponse
  - `data` InboundMessage[], required
    - `attachments` object[], required
    - `bcc` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `cc` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `created_at` string, date-time, required
    - `direction` 'inbound', required
    - `from` InboundEmailAddress, required
      - `email` string, email, required
      - `name` string
    - `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
    - `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_text` and `has_quoted_text` are computed from the inline plain-text body when present.
    - `id` string, uuid, required
    - `in_reply_to` string, nullable, required
    - `inbox_id` string, uuid, required
    - `inline_files` object[], required
    - `message_id` string, required — RFC Message-ID header.
    - `read_at` string, date-time, nullable, required
    - `received_at` string, date-time, required
    - `record_type` 'email_message', required
    - `references` string[], required — Ordered RFC Message-ID values from the References header.
    - `reply_text` string, nullable, required — Conservatively extracted new-reply content from the available plain-text body. Null means no plain-text body was available because it was absent or offloaded; HTML bodies are not parsed.
    - `reply_to` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `status` 'received', required
    - `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 computed from the inline plain-text body when present.
    - `thread_id` string, uuid, required
    - `to` InboundEmailAddress[], required
      - `email` string, email, required
      - `name` string
    - `updated_at` string, date-time, required
  - `meta` EmailPaginationMeta, required
    - `page_cursor` string — Cursor for the next page, when more results are available.
    - `page_size` integer, required

## Other responses

- `401` — Not authorized (10006).
- `404` — Resource not found (10001).
- `422` — Validation Failed (10015) or changeset validation error.
- `503` — Inbound message storage is temporarily unavailable.

## Changes

- **2026-07-16** `2fb3b617430a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/changes/email_inboxes/:inbox_id/messages/get.md)

---

[API](https://skmtc.dev/team-telnyx/apis/telnyx-api-2.md) · [All operations](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/revisions/eb02d7e7280b?raw)
