Published March 20, 2023
Team Chat API and Webhook privacy updates
On March 18th, 2023, Zoom changed the behavior of the Zoom Team Chat API and Webhooks. From now on, the IDs of external users are empty. Identifiers only have values if they are users under your account. We recommend that developers leverage the new member_id
field in the response.
Affected user level APIs
GET /chat/users/{userId}/messages
Added sender_member_id
and at_items.at_contact_member_id
fields. These fields have a memberID
as value in the response.
The return at_items.at_contact
returns an empty response for external users.
GET /chat/users/{userId}/messages/{messageId}
Added reactions.member_ids
and sender_member_id
fields to the response. Reactions.member_ids
are an array of memberIDs, while sender_member_id
is a single memberID
.
The at_items.at_contact
returns an empty string for external users. The at_items.at_contact_member_id
has memberID
as a value.
GET /chat/channels/{channelId}/members
Added members.member_id
field to the response with memberID
as the value.
When the member is not from the same account as the channel owner, the members.id
field returns an empty string.
GET /chat/users/me/contacts/{contactId}
Added member_id
field to the response with memberID
as the value. When the memberID
is a path parameter, the member’s contact details are returned in the response.
GET /chat/users/{userId}/channels/{channelId}/admins
Added admins.member_id
field to the response with memberID
as the value. When the admin is not from the same account as the channel owner, the admins.id
field returns an empty string.
DELETE /chat/channels/{channelId}/members/{memberId}
When you remove a member or batch remove members and the memberID
is the path parameter and the caller has required permissions, then that channel member should be removed.
PATCH /chat/users/{userId}/messages/{messageId}/status
When you mark a message read or unread, the to_contact
field supports memberID
as input.
PUT /chat/users/{userId}/messages/{messageId}
When you update a message, the to_contact
field supports memberID
as input.
POST /chat/channels/{channelId}/members
When you invite channel members, the new member_ids
field is returned with the memberID
array as the value in the response.
POST /chat/channels/{channelId}/members/me
When you join a channel, the new member_id
field is returned with the memberID
as the value in the response.
GET /contacts
When you search company contacts, the new member_ids
field returns with the memberID
as the value in the response.
GET /chat/users/me/contacts
When you list a user’s contacts, the new member_ids
field returns with the memberID
as value in the response.
GET /chat/users/me/contacts/{contactId}
Added the member_id
field with memberID
as the value in the response. When called with memberID
as path parameter, the member’s contact details return in the response.
GET /chat/users/{userId}/messages
When you list a user's chat messages, the to_contact
field should support memberID
as input.
GET /chat/users/{userId}/messages/{messageId}
When you get a message, the to_contact
field should support memberID
as input.
Affected account level APIs
GET /report/chat/sessions/{sessionId}
When you get chat messages reports, the new sender_member_id
field returns with memberID
as the value in the response.
GET /chat/users/{userId}/channels/{channelId}/admins
When you list channel administrators and the admin is not from the same account as the channel owner, the admins.id
field should return an empty string.
GET /chat/users/{userId}/channels/{channelId}/admins
When you list channel administrators, the new admins.member_id
field returns with memberID
as value in the response.
GET /chat/users/{userId}/channels/{channelId}/members
Added members.member_id
field with memberID
as the value in the response. When the member is not from the same account as the channel owner, the members.id
field should return an empty string.
DELETE /chat/users/{userId}/channels/{channelId}/members/{memberId}
When you remove a member with the memberID
as path parameter, and the caller has required permissions, the channel member should be removed.
DELETE /chat/users/{userId}/channels/{channelId}/admins
When you batch demote channel administrators with the administrators’ memberID
in the adminIds
parameter, and the caller has the required permissions, those channel administrators should be demoted to channel members.
POST /chat/users/{userId}/channels/{channelId}/admins
When you promote channel members to administrators, the new member_ids
field returns with the memberID
array as the value in the response.
POST /chat/users/{userId}/channels/{channelId}/members
When you invite channel members, the new member_ids
field returns with the memberID
array as the value in the response.
Webhooks
chat_channel webhook
-
A new field
payload.object.members.member_id
is added to chat_channel.created, chat_channel.member_invited, and chat_channel.member_removed event payloads. The value of the field ismemberID
. -
If the member is not from the same account as the operator or initiator of the action, then chat_channel.created, chat_channel.member_invited, and chat_channel.member_removed event payloads return an empty string for
payload.object.members.id
.
chat_message webhook
-
A new field
payload.object.contact_member_id
(only present for direct messages) is added to chat_message.sent, chat_message.replied, chat_message.deleted, and chat_message.updated event payloads. The value of the field ismemberID
. -
If the contact or receiver is not from the same account as the operator or initiator of the action, then chat_message.sent, chat_message.replied, chat_message.deleted, and chat_message.updated event payloads return an empty string for
payload.object.contact_id
in direct messages only.