---
source_url: https://www.pubnub.com/docs/chat/unreal-chat-sdk/build/features/channels/list
title: List all channels
updated_at: 2026-06-10T11:18:25.256Z
---

> 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


# List all channels

Get a paginated list of all channels with `GetChannels()`. Custom channel metadata is included by default.

:::note Requires App Context
Enable [App Context](https://youtu.be/9UEoSlngpYI) for your keyset in the [Admin Portal](https://admin.pubnub.com/). With [Access Manager](https://www.pubnub.com/docs/chat/unreal-chat-sdk/build/features/users/permissions) enabled, uncheck `Disallow Get All Channel Metadata` in the [App Context configuration](https://www.pubnub.com/docs/general/metadata/basics#configuration) to retrieve all channel metadata without defining permissions in the authentication token.
:::

##### Usage in Blueprints and C++

You can use PubNub's functionality via Blueprints or directly in C++ code.

* In Blueprints, you can access PubNub from any Widget or Actor. Start by [initializing chat](https://www.pubnub.com/docs/chat/unreal-chat-sdk/build/configuration#initialize-pubnub-chat) using `InitChat` on `UPubnubChatSubsystem`. Afterwards, you can use the returned `UPubnubChat` object reference to call all Chat SDK functions.

:::warning Blueprint functions
The Blueprints provided in the documentation show how you can structure your application and may contain utility methods and elements like buttons that are not part of the Unreal Chat SDK and are meant to serve as guidance.
:::

* In C++, you can use UPubnubChatSubsystem as any other Game Instance Subsystem. #include "Kismet/GameplayStatics.h" #include "Engine/GameInstance.h" #include "PubnubChatSubsystem.h" // ACTION REQUIRED: Replace ASample_ChatSubsystem with name of your Actor class void ASample_ChatSubsystem::InitChatSample() { // Get PubnubChatSubsystem from GameInstance UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(this); UPubnubChatSubsystem* PubnubChatSubsystem = GameInstance->GetSubsystem<UPubnubChatSubsystem>(); // Initialize Chat - InitChat may fail under some conditions so make sure to check the Result for errors before using the Chat FPubnubChatInitChatResult InitChatResult = PubnubChatSubsystem->InitChat(TEXT("demo"), TEXT("demo"), TEXT("Player_001")); UPubnubChat* PubnubChat = InitChatResult.Chat; } Chat now allows you to call all Chat SDK functions, for example, Chat->GetChannel("my_channel").

To list channels a user belongs to, use [GetMemberships()](https://www.pubnub.com/docs/chat/unreal-chat-sdk/build/features/channels/membership#get-membership) instead.

### Method signature

```cpp
Chat->GetChannels(
    int Limit = 0,
    FString Filter = "",
    FPubnubGetAllSort Sort = FPubnubGetAllSort(),
    FPubnubPage Page = FPubnubPage()
);
```

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| Limit | int | Optional | `0` | Number of objects to return in response. |
| Filter | FString | Optional |  | Expression used to filter the results. Returns only these channels whose properties satisfy the given expression are returned. The filter language is [defined here](https://www.pubnub.com/docs/general/metadata/filtering). |
| Sort | FPubnubGetAllSort | Optional |  | Key-value pair of a property to sort by, and a sort direction. Available options are `id`, `name`, and `updated`. Use `asc` or `desc` to specify the sorting direction, or specify `null` to take the default sorting direction (ascending). For example: `{name: "asc"}`. By default, the items are sorted by the last updated date. |
| Page | FPubnubPage | Optional |  | Object used for pagination to define which previous or next result page you want to fetch. |
| > Next | FString | Optional |  | Random string returned from the server, indicating a specific position in a data set. Used for forward pagination, it fetches the next page, allowing you to continue from where you left off. |
| > Prev | FString | Optional |  | Random string returned from the server, indicating a specific position in a data set. Used for backward pagination, it fetches the previous page, enabling access to earlier data. Ignored if the `Next` parameter is supplied. |

#### Output

| Parameter | Description |
| --- | --- |
| `FPubnubChatGetChannelsResult`Type: `struct` | Returned object containing these fields: `Result`, `Channels`, `Page`, and `Total`. |
| `> Result`Type: `FPubnubChatOperationResult` | Operation result with `Error` (bool) and `ErrorMessage` (FString). |
| `> Channels`Type: `TArray<UPubnubChatChannel*>` | Array of all matching [Channel](https://www.pubnub.com/docs/chat/unreal-chat-sdk/learn/chat-entities/channel) objects. |
| `> Page`Type: `FPubnubPage` | Struct that lets you either fetch the next (`next`) or previous (`prev`) result page. |
| `>> Next`Type: `FString` | Random string returned from the server, indicating a specific position in a data set. Used for forward pagination, it fetches the next page, allowing you to continue from where you left off. |
| `>> Prev`Type: `FString` | Random string returned from the server, indicating a specific position in a data set. Used for backward pagination, it fetches the previous page, enabling access to earlier data. Ignored if the `Next` parameter is supplied. |
| `> Total`Type: `int` | Total number of [Channel objects](https://www.pubnub.com/docs/chat/unreal-chat-sdk/learn/chat-entities/channel) matching the request query. |

### Sample code

:::tip Reference code
This example is a self-contained code snippet ready to be run. Set up your Unreal project and follow the instructions in the lines marked with `ACTION REQUIRED` before running the code. Use it as a reference when working with other examples in this document.
:::

Retrieve a paginated list of channels asynchronously.

###### Actor.h

```cpp
UFUNCTION(BlueprintCallable, Category = "PubnubChat|Samples|Chat|Channel")
void GetChannelsSample();

UFUNCTION()
void OnGetChannelsResponse(const FPubnubChatGetChannelsResult& Result);
```

###### Actor.cpp

```cpp
// ACTION REQUIRED: Replace ASample_Chat with name of your Actor class
void ASample_Chat::GetChannelsSample()
{
	// snippet.hide
	UPubnubChat* Chat = nullptr;
	// snippet.show

	// Assumes Chat is a valid and initialized instance of UPubnubChat

	// Retrieve a list of channels asynchronously (e.g. for channel browser or server list)
	FOnPubnubChatGetChannelsResponseNative Callback;
	// ACTION REQUIRED: Replace ASample_Chat with name of your Actor class
	Callback.BindUObject(this, &ASample_Chat::OnGetChannelsResponse);
	Chat->GetChannelsAsync(Callback, 20);
}

// ACTION REQUIRED: Replace ASample_Chat with name of your Actor class
void ASample_Chat::OnGetChannelsResponse(const FPubnubChatGetChannelsResult& Result)
{
	if (Result.Result.Error) { return; }
	for (UPubnubChatChannel* Channel : Result.Channels)
	{
		/* show in UI, etc. */
	}
	// Use Result.Page for pagination (Result.Page.Next / Result.Page.Prev)
}
```

### Other examples

#### Pagination

Get the number of 25 channels and then specify that you want to fetch the results from the next page using a string previously returned from the PubNub server.

###### Actor.h

```cpp
UFUNCTION(BlueprintCallable, Category = "PubnubChat|Samples|Chat|Channel")
void GetChannelsPaginationSample();
```

###### Actor.cpp

```cpp
// ACTION REQUIRED: Replace ASample_Chat with name of your Actor class
void ASample_Chat::GetChannelsPaginationSample()
{
	// snippet.hide
	UPubnubChat* Chat = nullptr;
	// snippet.show

	// Assumes Chat is a valid and initialized instance of UPubnubChat

	// Fetch first 25 channels
	FPubnubChatGetChannelsResult Channels = Chat->GetChannels(25);

	for (auto& Channel : Channels.Channels)
	{
		FString ChannelID = Channel->GetChannelID();
	}

	// Fetch next 25 channels using the 'next' page token from the previous response
	if (!Channels.Page.Next.IsEmpty())
	{
		FPubnubPage NextPage;
		NextPage.Next = Channels.Page.Next;

		FPubnubChatGetChannelsResult NextChannels = Chat->GetChannels(25, "", FPubnubGetAllSort(), NextPage);

		for (auto& Channel : NextChannels.Channels)
		{
			FString ChannelID = Channel->GetChannelID();
		}
	}
}
```

#### Archived channels

Get all archived channels. This request will return all channels removed with the `soft` option set to `true`, whose data is still stored in the App Context storage.

###### Actor.h

```cpp
UFUNCTION(BlueprintCallable, Category = "PubnubChat|Samples|Chat|Channel")
void GetChannelsArchivedSample();
```

###### Actor.cpp

```cpp
// ACTION REQUIRED: Replace ASample_Chat with name of your Actor class
void ASample_Chat::GetChannelsArchivedSample()
{
	// snippet.hide
	UPubnubChat* Chat = nullptr;
	// snippet.show

	// Assumes Chat is a valid and initialized instance of UPubnubChat

	// Fetch all archived (soft-deleted) channels
	FPubnubChatGetChannelsResult Channels = Chat->GetChannels(100, "status=='deleted'");

	for (auto& Channel : Channels.Channels)
	{
		FString ChannelID = Channel->GetChannelID();
	}

	// Handle pagination if more results exist
	while (!Channels.Page.Next.IsEmpty())
	{
		Channels = Chat->GetChannels(100, "status=='deleted'", FPubnubGetAllSort(), FPubnubPage{Channels.Page.Next, ""});
		for (auto& Channel : Channels.Channels)
		{
			FString ChannelID = Channel->GetChannelID();
		}
	}
}
```