---
source_url: https://www.pubnub.com/docs/chat/unity-chat-sdk/build/features/messages/history
title: Message history
updated_at: 2026-06-19T11:35:22.420Z
---

> Documentation Index
> For a curated overview of PubNub documentation, see: https://www.pubnub.com/docs/llms.txt
> For the full list of all documentation pages, see: https://www.pubnub.com/docs/llms-full.txt


# Message history

PubNub APIs let you effectively fetch historical messages from direct, group, or public conversations.

While [App Context API](https://www.pubnub.com/docs/general/metadata/basics) lets you manage metadata and relationships between users and channels, enabling efficient tracking of which channels are associated with a given user, [Message Persistence API](https://www.pubnub.com/docs/general/storage) lets you retrieve messages from those channels. Together, these APIs enable you to gather all conversations involving a user and easily fetch specific message histories for any interactions between users.

Use `GetMessageHistory()` to fetch past messages from a channel.

:::note API limitation
Results cannot be filtered by message type. All messages within the specified timeframe are returned.
:::

### Method signature

This method takes the following parameters:

```csharp
channel.GetMessageHistory(
    string startTimeToken, 
    string endTimeToken,
    int count
)
```

#### Input

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| startTimetoken | string | Yes |  | [Timetoken](https://www.pubnub.com/docs/sdks/unity/api-reference/misc#time) delimiting the start of a time slice (exclusive) to pull messages from. For details, refer to the [Fetch History section](https://www.pubnub.com/docs/sdks/unity/api-reference/storage-and-playback#fetch-history). |
| endTimetoken | string | Yes |  | Timetoken delimiting the end of a time slice (inclusive) to pull messages from. For details, refer to the [Fetch History section](https://www.pubnub.com/docs/sdks/unity/api-reference/storage-and-playback#fetch-history). |
| count | int | Yes | `25` | Number of historical messages to return for the channel in a single call. Since each call returns all attached [message reactions](https://www.pubnub.com/docs/chat/unity-chat-sdk/build/features/messages/reactions) by default, the maximum number of returned messages is `25`. For more details, refer to the description of the `IncludeMessageActions` parameter in the [Unity SDK docs](https://www.pubnub.com/docs/sdks/unity/api-reference/storage-and-playback#methods). |

#### Output

This method returns an awaitable `Task<ChatOperationResult<List<Message>>>` with messages sent within the given timeframe.

By default, each call returns all message reactions and metadata attached to the retrieved messages.

### Sample code

From the `support` channel, fetch `10` historical messages older than the timetoken `15343325214676133`.

```csharp
using System.Threading.Tasks;
using PubnubApi;
using PubnubChatApi;
using UnityEngine;

// Configuration
PubnubChatConfig chatConfig = new PubnubChatConfig();
        
PNConfiguration pnConfiguration = new PNConfiguration(new UserId("myUniqueUserId"))
{
    SubscribeKey = "demo",
    PublishKey = "demo",
    Secure = true
};

// Initialize Unity Chat
var chatResult = await UnityChat.CreateInstance(chatConfig, pnConfiguration);
if (!chatResult.Error)
{
    chat = chatResult.Result;
}
// reference the "channel" object
var channelResult = await chat.GetChannel("support");
if (channelResult.Error)
{
    Debug.Log("Couldn't find channel!");
    return;
}
var channel = channelResult.Result;

// invoke the method on the "channel" object
var messagesResult = await channel.GetMessageHistory("15343325214676133", null, 10);
var messages = messagesResult.Result;
```