# phone.joinGroupCall

Join any [group call type »](/api/group-calls.md#group-call-types). Conference calls additionally require the [E2E joining flow »](/api/end-to-end/group-calls.md#joining-a-call).

The `params` field must contain a join payload generated by the local tgcalls group-call engine. It contains a random non-zero audio `ssrc`, ICE `ufrag` and `pwd`, DTLS `fingerprints`, and, when publishing video, `ssrc-groups`.

For example, a join payload without published video has the following shape:

```json
{
  "ssrc": 123456789,
  "ufrag": "...",
  "pwd": "...",
  "fingerprints": [{
    "hash": "sha-256",
    "fingerprint": "...",
    "setup": "passive"
  }]
}
```

When joining an RTMP-mode call, generate the payload without published video source groups.

```tl
updatesTooLong#e317af7e = Updates;
updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
updateShort#78d4dec1 update:Update date:int = Updates;
updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
---functions---
phone.joinGroupCall#8fb53057 flags:# muted:flags.0?true video_stopped:flags.2?true call:InputGroupCall join_as:InputPeer invite_hash:flags.1?string public_key:flags.3?int256 block:flags.3?bytes params:DataJSON = Updates;
```

### Parameters

| Name | Type | Description |
| --- | :---: | --- |
| **flags** | [\#](/type/%23) | Flags, see [TL conditional fields](/mtproto/TL-combinators.md#conditional-fields) |
| **muted** | [flags](/mtproto/TL-combinators.md#conditional-fields).0?[true](/constructor/true.md) | Join muted; required for live story listeners and RTMP-mode viewers |
| **video\_stopped** | [flags](/mtproto/TL-combinators.md#conditional-fields).2?[true](/constructor/true.md) | Join with video disabled; required for live story listeners and RTMP-mode viewers |
| **call** | [InputGroupCall](/type/InputGroupCall.md) | Group call to join |
| **join\_as** | [InputPeer](/type/InputPeer.md) | Join the group call, presenting yourself as the specified user/channel; this peer is also used as the author of in-call messages in normal video chats/livestreams. Only video chats/livestreams may use another peer; this field must be equal to [inputPeerSelf](/constructor/inputPeerSelf.md) when joining [live stories »](/api/group-calls.md#live-stories) or [conference calls »](/api/group-calls.md#conference-calls). |
| **invite\_hash** | [flags](/mtproto/TL-combinators.md#conditional-fields).1?[string](/type/string.md) | The invitation hash from the [invite link »](/api/links.md#video-chat-livestream-links), if provided allows speaking in a livestream or muted group call ([video chats/livestreams »](/api/group-calls.md#video-chats-livestreams) only, cannot be used by [live stories »](/api/group-calls.md#live-stories) or [conference calls »](/api/group-calls.md#conference-calls)). |
| **public\_key** | [flags](/mtproto/TL-combinators.md#conditional-fields).3?[int256](/type/int256.md) | For [conference calls »](/api/group-calls.md#conference-calls) only, your public key. |
| **block** | [flags](/mtproto/TL-combinators.md#conditional-fields).3?[bytes](/type/bytes.md) | The [main-chain block that adds the joining user »](/api/end-to-end/group-calls.md#joining-a-call), only for [conference calls »](/api/group-calls.md#conference-calls). |
| **params** | [DataJSON](/type/DataJSON.md) | Join payload generated by the local tgcalls group-call engine, as described above |

### Result
[Updates](/type/Updates.md)

### Only users can use this method

### Possible errors

| Code | Type | Description |
| --- | --- | --- |
| 400 | CHAT\_ADMIN\_REQUIRED | You must be an admin in this chat to do this. |
| 403 | CHAT\_WRITE\_FORBIDDEN | You can't write in this chat. |
| 400 | DATA\_JSON\_INVALID | The provided JSON data is invalid. |
| 403 | GROUPCALL\_FORBIDDEN | The specified group call cannot be used in this context. |
| 400 | GROUPCALL\_INVALID | The specified group call is invalid. |
| 400 | GROUPCALL\_SSRC\_DUPLICATE\_MUCH | The app needs to retry joining the group call with a new SSRC value. |
| 400 | JOIN\_AS\_PEER\_INVALID | The specified peer cannot be used to join a group call. |
| 400 | PUBLIC\_KEY\_INVALID | The specified e2e public key is invalid. |

### Related pages

#### [inputPeerSelf](/constructor/inputPeerSelf.md)
Defines the current user.

#### [Group calls](/api/group-calls.md)
How to start, join and manage group calls and video chats.

#### [Deep links](/api/links.md)
Telegram clients must handle special tg:// and t.me deep links encountered in messages, link entities and in other apps by registering OS handlers.

#### [E2E Group Calls](/api/end-to-end/group-calls.md)
End-to-end encryption used for Telegram group voice and video calls, using a blockchain for state management.