---
title: "Join a channel"
method: PUT
path: "/v3/group_channels/{channel_url}/join"
tags: ["Group channel"]
---

# Join a channel

`PUT /v3/group_channels/{channel_url}/join`

## Request

- Base URL: `https://api-APP_ID.sendbird.com`
- URL: `https://api-APP_ID.sendbird.com/v3/group_channels/{channel_url}/join`
- Auth: none declared

## Join a channel

This API allows a user to join a [public](https://sendbird.com/docs/chat/platform-api/v3/channel/channel-overview#4-group-channel-types) group channel. Users can only join public group channels where the `is_public` property is set to `true` using this API. A single user can join up to 2,000 group channels, and a user who reaches the capacity can’t join a new channel. See [this page](https://sendbird.com/docs/chat/platform-api/v3/channel/channel-overview#2-channel-types-3-open-channel-vs-group-channel-vs-supergroup-channel) to learn more about channel types.

[https://sendbird.com/docs/chat/platform-api/v3/channel/managing-a-channel/join-a-channel#1-join-a-channel](https://sendbird.com/docs/chat/platform-api/v3/channel/managing-a-channel/join-a-channel#1-join-a-channel)

## Path parameters

- `channel_url` string, required

## Headers

- `api-token` string

## Request body

- JoinAChannelRequest
  - `user_id` string, required: Specifies the unique ID of the user to join the public group channel.
  - `access_code` string, nullable: This property should be specified if the public group channel to join requires an access code to users, which means that the is_access_code_required property of the channel resource is true.

## Response `200`

Join a channel

- JoinAChannelResponse
  - `channel` SendbirdGroupChannelDetailChannel
    - `channel_url` string
    - `cover_url` string
    - `created_at` integer
    - `custom_type` string
    - `data` string
    - `max_length_message` integer
    - `member_count` integer
    - `name` string
  - `channel_url` string, required
  - `cover_url` string
  - `created_at` integer
  - `created_by` SendbirdBasicUserInfo
    - `require_auth_for_profile_image` boolean
    - `is_active` boolean
    - `is_blocked_by_me` boolean
    - `role` '' | 'none' | 'operator'
    - `nickname` string, nullable
    - `user_id` string, required
    - `profile_url` string
    - `metadata` object, nullable
  - `custom_type` string
  - `data` string
  - `delivery_receipt` object
  - `disappearing_message` SendbirdDisappearingMessage
    - `message_survival_seconds` integer
    - `is_triggered_by_message_read` boolean
  - `freeze` boolean
  - `has_ai_bot` boolean
  - `has_bot` boolean
  - `id` integer
  - `ignore_profanity_filter` boolean
  - `is_access_code_required` boolean
  - `is_broadcast` boolean
  - `is_discoverable` boolean
  - `is_distinct` boolean
  - `is_ephemeral` boolean
  - `is_public` boolean
  - `is_super` boolean
  - `joined_member_count` integer
  - `last_message` SendbirdMessageResponse
    - `require_auth` boolean
    - `message_survival_seconds` integer
    - `custom_type` string
    - `mentioned_users` SendbirdBasicUserInfo[]
      - `require_auth_for_profile_image` boolean
      - `is_active` boolean
      - `is_blocked_by_me` boolean
      - `role` '' | 'none' | 'operator'
      - `nickname` string, nullable
      - `user_id` string, required
      - `profile_url` string
      - `metadata` object, nullable
    - `translations` object
    - `updated_at` integer
    - `is_op_msg` boolean
    - `reactions` SendbirdReaction[]
      - `key` string
      - `updated_at` integer
      - `user_ids` string[]
    - `is_removed` boolean
    - `user` SendbirdBasicUserInfo
      - `require_auth_for_profile_image` boolean
      - `is_active` boolean
      - `is_blocked_by_me` boolean
      - `role` '' | 'none' | 'operator'
      - `nickname` string, nullable
      - `user_id` string, required
      - `profile_url` string
      - `metadata` object, nullable
    - `file` object
    - `files` SendbirdFile[]
      - `url` string
      - `file_name` string
      - `file_size` integer
      - `file_type` string
      - `thumbnails` SendbirdThumbnail[]
        - `height` integer
        - `plain_url` string
        - `real_height` integer
        - `real_width` integer
        - `url` string
        - `width` integer
      - `require_auth` boolean
    - `message` string
    - `data` string
    - `message_retention_hour` integer
    - `silent` boolean
    - `type` string
    - `created_at` integer
    - `channel_type` string
    - `req_id` string
    - `mention_type` string
    - `channel_url` string
    - `message_id` integer
    - `sorted_metaarray` SendbirdSortedMetaarrayInner[]
      - `key` string
      - `value` string[]
    - `thread_info` object
    - `parent_message_id` integer
    - `parent_message_info` SendbirdParentMessageInfo
      - `custom_type` string
      - `message` string
      - `type` string
      - `ts` integer
      - `user` SendbirdUser: User
        - `access_token` string
        - `created_at` integer
        - `discovery_keys` string[], nullable
        - `has_ever_logged_in` boolean
        - `is_active` boolean
        - `is_hide_me_from_friends` boolean
        - `is_online` boolean
        - `is_shadow_blocked` boolean
        - `last_seen_at` integer
        - `locale` string
        - `metadata` object, nullable
        - `nickname` string, nullable
        - `preferred_languages` string[], nullable
        - `profile_url` string
        - `require_auth_for_profile_image` boolean
        - `user_id` string, required
        - `state` '' | 'invited' | 'joined', nullable
        - `unread_channel_count` integer
        - `unread_message_count` integer
        - `phone_number` string
        - `is_created` boolean
      - `file` SendbirdFile
        - `url` string
        - `file_name` string
        - `file_size` integer
        - `file_type` string
        - `thumbnails` SendbirdThumbnail[]
          - `height` integer
          - `plain_url` string
          - `real_height` integer
          - `real_width` integer
          - `url` string
          - `width` integer
        - `require_auth` boolean
      - `files` SendbirdFile[]
        - `url` string
        - `file_name` string
        - `file_size` integer
        - `file_type` string
        - `thumbnails` SendbirdThumbnail[]
          - `height` integer
          - `plain_url` string
          - `real_height` integer
          - `real_width` integer
          - `url` string
          - `width` integer
        - `require_auth` boolean
    - `is_reply_to_channel` boolean
    - `message_events` SendbirdMessageResponseMessageEvents, nullable
      - `send_push_notification` string
      - `update_unread_count` boolean
      - `update_mention_count` boolean
      - `update_last_message` boolean
    - `extended_message_payload` SendbirdMessageResponseExtendedMessagePayload: Specifies the extended message payload which is used to send a message with a custom message type.
      - `custom_view` object: JSON format you want to embed in message, eq : {"title": "title", "image": "https://link.to/image.jpg"}
      - `suggested_replies` string[]: Specifies an array of suggested replies to be sent with the message.
  - `max_length_message` integer
  - `member_count` integer
  - `members` SendbirdMember[]
    - `delivered_ts` integer
    - `do_not_disturb` boolean
    - `friend_discovery_key` string[], nullable
    - `friend_name` string, nullable
    - `is_active` boolean
    - `is_blocked_by_me` boolean
    - `is_blocking_me` boolean
    - `is_muted` boolean
    - `is_online` boolean
    - `last_seen_at` integer
    - `metadata` object, nullable
    - `muted_description` string
    - `muted_end_at` integer
    - `nickname` string, nullable
    - `push_enabled` boolean
    - `push_trigger_option` 'all' | 'mention_only' | 'off'
    - `profile_url` string
    - `require_auth_for_profile_image` boolean
    - `read_ts` integer
    - `role` '' | 'none' | 'operator', nullable
    - `state` '' | 'invited' | 'joined', nullable
    - `user_id` string, required
  - `message_survival_seconds` integer
  - `name` string
  - `operators` SendbirdUser[]
    - `access_token` string
    - `created_at` integer
    - `discovery_keys` string[], nullable
    - `has_ever_logged_in` boolean
    - `is_active` boolean
    - `is_hide_me_from_friends` boolean
    - `is_online` boolean
    - `is_shadow_blocked` boolean
    - `last_seen_at` integer
    - `locale` string
    - `metadata` object, nullable
    - `nickname` string, nullable
    - `preferred_languages` string[], nullable
    - `profile_url` string
    - `require_auth_for_profile_image` boolean
    - `user_id` string, required
    - `state` '' | 'invited' | 'joined', nullable
    - `unread_channel_count` integer
    - `unread_message_count` integer
    - `phone_number` string
    - `is_created` boolean
  - `read_receipt` object
  - `sms_fallback` SendbirdSmsFallback
    - `wait_seconds` integer
    - `exclude_user_ids` string[]
  - `unread_mention_count` integer
  - `unread_message_count` integer

## Changes

- **2025-10-17** `b05d4e3c6329`: 1 info
  - the request property `access_code` became nullable
- **2025-07-27** `7a85bad03e90`: 2 warning, 4 info
  - deleted the `header` request parameter `Api-Token`
  - removed the request property `channel_url`
  - api operation id `gcJoinChannel` removed and replaced with `joinAChannel`
  - added the new optional `header` request parameter `api-token`
  - …2 more
- **2023-11-10** `135d8b0705d4`: 1 info
  - the `header` request parameter `Api-Token` became optional
- **2022-02-16** `c42164095c7c`: 1 breaking
  - the `header` request parameter `Api-Token` became required

[Operation history](https://skmtc.dev/sendbird/apis/sendbird-platform-sdk/changes/v3/group_channels/:channel_url/join/put.md)

---

[API](https://skmtc.dev/sendbird/apis/sendbird-platform-sdk.md) - [All operations](https://skmtc.dev/sendbird/apis/sendbird-platform-sdk/llms.txt) - [OpenAPI document](https://skmtc.dev/sendbird/apis/sendbird-platform-sdk/revisions/9e53a5288df0?raw)
