# List channels

List the connected channels that the current Beacon workspace can use.

This operation requires **Read channels** access.

## List the channels

```ts
const channels = await beacon.channels.list();

for (const channel of channels) {
  console.log({
    channelId: channel.channelId,
    name: channel.displayName,
    provider: channel.provider,
    publishing: channel.publishing,
    status: channel.status,
  });
}
```

## Read the result

`status` describes the account connection. It can show a healthy, expiring, reconnect-required, disabled, or other supported state.

`publishing` describes Beacon publication support. `not_configured` means the channel cannot publish directly through this connection.

Do not treat OAuth success as publication readiness. Check both values before you offer a publish action.

## Read the text limit

`maxCharacters` gives the account limit at its last connection. `xSubscriptionType` is `None`, `Basic`, `Premium`, `PremiumPlus`, or `null` when X did not confirm it. These fields are optional for compatibility with older Beacon servers.

Paid X subscriptions use 25,000 characters. Other X accounts use 280. Reconnect X after a subscription change. Beacon checks the subscription again before it sends long copy.

Call `beacon.posts.check` to validate the actual copy. Its `destinations` include the applicable limit and weighted text count. A check does not publish anything.

When you generate long X copy, pass the channel's `channelId` as the AI destination `id`. This lets Beacon verify the account in your workspace.
