> ## Documentation Index
> Fetch the complete documentation index at: https://social-b97141fb-feat-user-history-moderation-detail.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Message Read Status

> Mark chat messages as read and inspect read-count fields from SDK message models.

Use message read status when a user views a message and your app needs unread counts to move forward. The SDK exposes `markRead()` on message models across TypeScript, iOS, Android, and Flutter.

## Platform Surface

| Surface | TypeScript | iOS | Android | Flutter |
| - | - | - | - | - |
| Mark read | `message.markRead()` | `message.markRead()` | `message.markRead()` | `message.markRead()` |
| Read count | `message.readCount` | `message.readCount` | `message.getReadCount()` | `message.readCount` |
| Delivered count | `message.deliveredCount` | `message.deliveredCount` | `message.getDeliveredCount()` | `message.deliveredCount` |

## Parameters

| Parameter | Required | Description |
| - | - | - |
| `message` | Yes | Message model returned by `getMessage` or a message query. |
| `messageId` | Yes when fetching first | Message ID used to retrieve a message before marking it read. |
| `subChannelId` | Indirect | The SDK reads this from the message model where needed. |
| `channelSegment` / segment | Indirect | The SDK reads this from the message model to sync the read position. |

## Mark Message Read

Call `markRead()` after your app decides the message has been seen, such as when the message becomes visible in an active chat screen.

```typescript TypeScript theme={null}
message.markRead();

renderResults({
  messageId: message.messageId,
  readCount: message.readCount,
});
```

```swift iOS theme={null}
let liveMessage = messageRepository.getMessage("message-id")

token = liveMessage.observe { liveObject, _ in
    guard let currentMessage = liveObject.snapshot else { return }

    currentMessage.markRead()
    showSuccessMessage(currentMessage.readCount)
}
```

```kotlin Android theme={null}
val currentMessage = message ?: return

currentMessage.markRead()
showSuccessMessage(currentMessage.getReadCount())
```

```dart Flutter theme={null}
final fetchedMessage = await AmityChatClient.newMessageRepository()
    .getMessage(messageId);

fetchedMessage.markRead();
final readCount = fetchedMessage.readCount ?? 0;
```

## Inspect Receipt Counts

Read-count and delivered-count fields are available on message models. Use user-list queries from [Message Delivery Status](./message-delivery-status) when you need the user identities behind the counts.

```typescript TypeScript theme={null}
renderResults({
  readCount: message.readCount,
  deliveredCount: message.deliveredCount,
});
```

```swift iOS theme={null}
let liveMessage = messageRepository.getMessage("message-id")

token = liveMessage.observe { liveObject, _ in
    guard let currentMessage = liveObject.snapshot else { return }

    showSuccessMessage([
        "readCount": currentMessage.readCount,
        "deliveredCount": currentMessage.deliveredCount
    ])
}
```

```kotlin Android theme={null}
val currentMessage = message ?: return

showSuccessMessage(
    mapOf(
        "readCount" to currentMessage.getReadCount(),
        "deliveredCount" to currentMessage.getDeliveredCount(),
    ),
)
```

```dart Flutter theme={null}
final fetchedMessage = await AmityChatClient.newMessageRepository()
    .getMessage(messageId);

final readCount = fetchedMessage.readCount ?? 0;
final deliveredCount = fetchedMessage.deliveredCount ?? 0;
```

## Implementation Notes

> **Message Model**
>
> `markRead()` is a method on the message object, so load or query messages before marking them read.

> **Unread Counts**
>
> Marking messages read is the write path that lets unread count state advance for the current user.

> **Viewport Logic**
>
> Your app decides when a message is considered visible enough to mark as read.

> **Receipt Users**
>
> Use receipt-user APIs where supported when you need identities, not just count fields.

## Related Topics

> **[Channel Unread Count](./channel-unread-count)**
>
> Read per-channel and total unread counts.

> **[Message Delivery Status](./message-delivery-status)**
>
> Mark delivered and query receipt users where supported.

> **[Message Receipt Sync](./message-receipt-sync)**
>
> Keep receipt state current while a chat screen is open.


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