Team Chat API and webhook privacy updates
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_idin direct messages only.