diff --git a/docs/.vuepress/sidebar/document.ts b/docs/.vuepress/sidebar/document.ts
index 0f9ca48a..8050d473 100644
--- a/docs/.vuepress/sidebar/document.ts
+++ b/docs/.vuepress/sidebar/document.ts
@@ -353,7 +353,17 @@ const documentSidebar = [
children: [
{ text: '管理群组', link: 'group_manage.html' },
{ text: '管理群组文件', link: 'group_file.html' },
- { text: '管理群组成员', link: 'group_member.html' },
+ { text: '管理群组成员',
+ children: [
+ { text: '获取成员列表', link: 'group_member_obtain.html' },
+ { text: '添加/移除成员', link: 'group_member_add_delete.html' },
+ { text: '管理群成员自定义属性', link: 'group_member_attribute.html' },
+ { text: '管理群主/管理员', link: 'group_member_admin.html' },
+ { text: '管理禁言', link: 'group_member_mutelist.html' },
+ { text: '管理白名单', link: 'group_member_allowlist.html' },
+ { text: '管理黑名单', link: 'group_member_blocklist.html' }
+ ]
+ },
{ text: '管理子区', link: 'group_thread.html' }
]
},
@@ -363,7 +373,17 @@ const documentSidebar = [
{ text: '管理超级管理员', link: 'chatroom_superadmin.html' },
{ text: '管理聊天室', link: 'chatroom_manage.html' },
{ text: '管理聊天室属性', link: 'chatroom_attribute.html' },
- { text: '管理聊天室成员', link: 'chatroom_member.html' }
+ { text: '管理聊天室成员',
+ children: [
+ { text: '获取成员列表', link: 'chatroom_member_obtain.html' },
+ { text: '添加/移除成员', link: 'chatroom_member_add_delete.html' },
+ { text: '管理聊天室所有者/管理员', link: 'chatroom_member_admin.html' },
+ { text: '管理禁言', link: 'chatroom_member_mutelist.html' },
+ { text: '管理用户标签及禁言', link: 'chatroom_label_mute.html' },
+ { text: '管理白名单', link: 'chatroom_member_allowlist.html' },
+ { text: '管理黑名单', link: 'chatroom_member_blocklist.html' }
+ ]
+ }
]
},
{
@@ -372,7 +392,8 @@ const documentSidebar = [
{ text: '用户体系管理', link: 'account_system.html' },
{ text: '用户属性', link: 'userprofile.html' },
{ text: '用户状态订阅', link: 'presence.html' },
- // { text: '用户收藏', link: 'favorite.html'},
+ { text: '用户全局禁言', link: 'user_global_mute.html' },
+ { text: '用户收藏', link: 'user_favorite.html'},
{ text: '用户关系管理', link: 'user_relationship.html' }
]
},
diff --git a/docs/README.md b/docs/README.md
index 5ad4b691..bb9fc81f 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -816,7 +816,7 @@ projects:
link: /document/electron/group.html#群成员管理
- icon: /sdk/rest.svg
text: REST
- link: /document/server-side/group_member.html#管理群组成员
+ link: /document/server-side/group_member_obtain.html#管理群组成员
- text: 管理群组属性
desc: 支持修改群组名称及描述、获取和更新群组公告、管理群共享文件和更新群扩展字段。
sdks:
@@ -924,7 +924,7 @@ projects:
link: /document/electron/chatroom.html#加入聊天室
- icon: /sdk/rest.svg
text: REST
- link: /document/server-side/chatroom_member.html#管理聊天室成员
+ link: /document/server-side/chatroom_member_obtain.html#管理聊天室成员
- text: 管理聊天室属性
desc: 管理聊天室基本属性,包括聊天室名称、描述和公告,以及自定义属性。
sdks:
@@ -1126,6 +1126,18 @@ projects:
- icon: /sdk/rest.svg
text: REST
link: /document/server-side/presence.html
+ - text: 用户全局禁言
+ desc: 设置单个用户 ID 的单聊、群组或聊天室消息的全局禁言。设置成功后,该用户将无法在对应的单聊、群组或聊天室中发送消息。
+ sdks:
+ - icon: /sdk/rest.svg
+ text: REST
+ link: /document/server-side/user_global_mute.html
+ - text: 用户收藏
+ desc: 支持收藏聊天过程中发送成功的各类消息或你的其他自定义内容。这些收藏的内容永久保存,你可以随时查看。
+ sdks:
+ - icon: /sdk/rest.svg
+ text: REST
+ link: /document/server-side/user_favorite.html
- text: 多设备登录
desc: 同一账号在多个设备上登录,所有已登录的设备之间可以同步消息、好友和群组相关操作、子区操作以及会话操作。
sdks:
diff --git a/docs/document/server-side/account_system.md b/docs/document/server-side/account_system.md
index de14e4d6..b8b58a32 100644
--- a/docs/document/server-side/account_system.md
+++ b/docs/document/server-side/account_system.md
@@ -1489,318 +1489,4 @@ curl -L -X GET 'http://XXXX/XXXX/XXXX/users/XXXX/resources' \
| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 |
-关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
-
-## 用户全局禁言
-
-随着监管机制日益完善,对 app 的监管不断加强,安全合规逐渐成为 app 的生命线。
-
-为加强 app 管理,环信即时通讯提供全局禁言功能,对 app 提供用户 ID 级别的禁言管理,支持在管理员发现用户违规后进行全局禁言,以维护 app 良好的内容生态环境。禁言到期后,服务器会自动解除禁言,恢复该用户发送消息的权限。
-
-你可以对单个用户 ID 设置单聊、群组或聊天室消息全局禁言。禁言后,该用户无论通过调用客户端 API,还是使用服务端 RESTful API 都将无法在对应的单聊、群组或聊天室发送消息。
-
-该功能可广泛用于实时互动 app 中,例如发现某用户频繁向多个聊天室发送违规广告,则可以对该用户开启全局聊天室禁言 15 天;发现某用户发表触犯红线的政治言论,则可以全局永久禁言,用户申诉通过后可以解禁。
-
-使用该功能前,你需先查看你的 IM 套餐版本是否开通了该功能。该功能与 IM 套餐包版本之间的开通关系,详见[产品计费](/product/pricing.html#套餐包功能详情)。
-
-### 设置用户全局禁言
-
-设置单个用户 ID 的单聊、群组或聊天室消息的全局禁言。设置成功后,该用户将无法在对应的单聊、群组或聊天室中发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/mutes
-```
-
-##### 路径参数
-
-参数及说明详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :---------- | :----- | :------- | :----------------------- |
-| `username` | String | 是 | 设置全局禁言的用户 ID。 |
-| `chat` | Int | 否 | 单聊禁言时长,单位为秒,最大值为 `2147483647`。
- > `0`:该用户 ID 的单聊禁言时长。
- `0`:取消该用户的单聊禁言。
- `-1`:该用户被设置永久单聊禁言。
- 其他负值无效。 |
-| `groupchat` | Int | 否 | 群组禁言时长,单位为秒,规则同单聊禁言。 |
-| `chatroom` | Int | 否 | 聊天室禁言时长,单位为秒,规则同单聊禁言。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :----- | :-------------------------------------------- |
-| `data.result` | String | 是否成功设置用户全局禁言。`ok` 表示设置成功。 |
-
-其他字段及说明详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -L -X POST 'https://XXXX/XXXX/XXXX/mutes' \
--H 'Authorization: Bearer ' \
--H 'Content-Type: application/json' \
---data-raw '{
- "username": "zs1",
- "chat": 100,
- "groupchat": 100,
- "chatroom": 100
-}'
-```
-
-##### 响应示例
-
-```json
-{
- "path": "/mutes",
- "uri": "https://XXXX/XXXX/XXXX/mutes",
- "timestamp": 1631609754727,
- "organization": "XXXX",
- "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d",
- "action": "post",
- "data": {
- "result": "ok"
- },
- "duration": 74,
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----- | :---------- | :-------- | :------------------| :------------------------|
-| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 |
-
-关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
-
-### 查询单个用户 ID 全局禁言
-
-查询单个用户的单聊、群聊和聊天室的全局禁言详情。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/mutes/{username}
-```
-
-##### 路径参数
-
-参数及说明详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------------------------------------------------------------------------------------------------------- |
-| `Content-Type` | String | 是 | 内容类型,请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :--------------- | :----- | :------------------ |
-| `data.userid` | String | 设置禁言的用户 ID。 |
-| `data.chat` | Int | 单聊剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 剩余的单聊禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 |
-| `data.groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同单聊禁言。 |
-| `data.chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同单聊禁言。 |
-| `data.unixtime` | Int | 当前操作的 Unix 时间戳。 |
-
-其他字段及说明详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes/zs1' \
--H 'Authorization: Bearer ' \
--H 'Content-Type: application/json'
-```
-
-##### 响应示例
-
-```json
-{
- "path": "/mutes",
- "uri": "https://XXXX/XXXX/XXXX/mutes",
- "timestamp": 1631609831800,
- "organization": "XXXX",
- "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d",
- "action": "get",
- "data": {
- "userid": "XXXX#restys_zs1",
- "chat": 96,
- "groupchat": 96,
- "chatroom": 96,
- "unixtime": 1631609831
- },
- "duration": 13,
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :---------- | :------------------| :-------------------| :-----------| :------------|
-| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。|
-
-关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
-
-### 查询 app 下的所有全局禁言的用户
-
-该方法查询 app 下所有全局禁言的用户及其禁言剩余时间。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/mutes
-```
-
-##### 路径参数
-
-参数及说明详见[公共参数](#公共参数)。
-
-##### 查询参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :--- | :------- | :---------------------------------------------------- |
-| `pageNum` | Int | 否 | 请求查询的页码。 |
-| `pageSize` | Int | 否 | 请求查询每页显示的禁言用户的数量。取值范围为 [1,50]。 |
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------------------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中的 `data` 字段描述如下:
-
-| 字段 | 类型 | 描述 |
-| :-------------------- | :-------- | :---------------------- |
-| `data` | JSON Array | 获取的所有全局禁言的用户的信息。 |
-| - `username` | String | 设置禁言的用户 ID。 |
-| - `chat` | Int | 单聊消息剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 具体的单聊消息禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 |
-| - `groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同上。|
-| - `chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同上。 |
-| - `unixtime` | Long | 当前操作的 Unix 时间戳,单位为毫秒。 |
-
-其他字段及说明详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes?pageNum=1&pageSize=10' \
--H 'Authorization: Bearer ' \
--H 'Content-Type: application/json'
-```
-
-##### 响应示例
-
-```json
-{
- "path": "/mutes",
- "uri": "https://XXXX/XXXX/XXXX/mutes",
- "timestamp": 1631609858771,
- "organization": "XXXX",
- "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d",
- "action": "get",
- "data": {
- "data": [
- {
- "username": "zs2",
- "chatroom": 0
- },
- {
- "username": "zs1",
- "groupchat": 69
- },
- {
- "username": "zs1",
- "chat": 69
- },
- {
- "username": "zs1",
- "chatroom": 69
- },
- {
- "username": "h2",
- "chatroom": 0
- },
- {
- "username": "h2",
- "groupchat": 0
- },
- {
- "username": "h2",
- "chat": 0
- }
- ],
- "unixtime": 1631609858
- },
- "duration": 17,
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :---------- | :------------------| :--------------------| :------------------| :----------------|
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 |
-
-关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
-
-
-
-
-
-
-
+关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
\ No newline at end of file
diff --git a/docs/document/server-side/chatroom_label_mute.md b/docs/document/server-side/chatroom_label_mute.md
new file mode 100644
index 00000000..0a48d61f
--- /dev/null
+++ b/docs/document/server-side/chatroom_label_mute.md
@@ -0,0 +1,334 @@
+# 聊天室用户标签禁言
+
+
+
+环信即时通讯 IM 支持设置用户在聊天室中的标签,并按标签用户禁言。**要使用这些 RESTful API,需联系商务开通功能。**
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
+- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `chatroom_id` | String | 是 | 聊天室 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :------------ |
+| `action` | String | 请求方法。 |
+| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 数据详情。 |
+| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 按聊天室用户标签禁言
+
+可以控制标签下的用户是否可以在聊天室中发言。
+
+**调用频率上限**:100 次/秒/App Key
+
+#### HTTP 请求
+
+```http
+PUT https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/tag/mute
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------------------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------------------------------------- |
+| `mute_duration` | Long | 是 | 禁言时长,从当前时间开始计算。单位为秒。`0` 表示取消禁言,`-1` 表示永久禁言。 |
+| `tag` | String | 是 | 标签名称,标签名称长度不能超过32字符。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :--- | :------------------------------------------------------ |
+| `data.result` | Bool | 是否成功禁言:
- `true`:是;
- `false`:否。 |
+| `properties` | JSON | 开发者无需关注该字段。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X PUT 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/tag/mute' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "tag": "t1",
+ "mute_duration": 30
+}
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "put",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/tag/mute",
+ "entities":[],
+ "data": {
+ "result": true
+ },
+ "timestamp": 1489072189508,
+ "duration": 0,
+ "properties":{},
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :---------- | :----------------- | :--------- | :------------------------------------ | :----------------------------------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
+| 403 | forbidden_op | Group tag mute is disabled | 聊天室标签禁言功能没有开通。 | 联系环信商务开通聊天室标签禁言功能。 |
+| 404 | resource_not_found | group tag not found | 聊天室标签不存在。 | 先为用户设置聊天室标签再进行操作。 |
+| 403 | exceed_limit | tag length exceeds limit! | 标签名称长度超过限制。 | 控制标签名称长度。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 设置用户在聊天室中的标签
+
+设置用户在聊天室中的标签,一次最多设置 10 个,新设置的标签会覆盖原有标签。
+
+**调用频率上限**:100 次/秒/App Key
+
+#### HTTP 请求
+
+```http
+PUT https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 描述 | 是否必填 |
+| :-------------- | :----- | :--------------------- | :------- |
+| `chatroom_id` | String | 聊天室 ID。 | 是 |
+| `username` | String | 为哪个用户添加在该聊天室中的标签。 | 是 |
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------------------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :----- | :---- | :------- | :----------------------------------------------------------- |
+| `tags` | Array | 是 | 设置用户在聊天室中的标签列表。最多可设置 10 个标签。传 "tags":[] 会删除用户的聊天室标签。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :--- | :------------------------------------------------------ |
+| `data.result` | Bool | 是否修改成功:
- `true`:是;
- `false`:否。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X PUT -H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "tags": ["t1", "t2"]
+}'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "put",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag",
+ "entities":[],
+ "data": {
+ "result": true
+ },
+ "timestamp": 1489072189508,
+ "properties":{},
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :---------- | :----------------- | :---------------- | :-------------------- | :------------------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
+| 403 | forbidden_op | Group tag mute is disabled | 聊天室标签禁言功能没有开通。 | 联系环信商务开通聊天室标签禁言功能。 |
+| 403 | exceed_limit | user group tag count exceed limit | 用户聊天室标签设置的数量超过限制。 | 控制一次请求 `tags` 的标签个数不要超过限制(10 个)。 |
+| 400 | invalid_parameter | tags should be type of List | 请求 body 中 `tags` 的类型错误。 | 请求 body 中的 `tags` 请使用数组类型 。|
+| 403 | exceed_limit | tag length exceeds limit! | 标签名称长度超过限制。 | 控制标签名称长度不要超过32字符。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 获取用户聊天室标签
+
+获取某个用户在指定聊天室中的标签。
+
+**调用频率上限**:100 次/秒/App Key
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 描述 | 是否必填 |
+| :-------------- | :----- | :--------------------- | :------- |
+| `chatroom_id` | String | 聊天室 ID。 | 是 |
+| `username` | String | 获取哪个用户在该聊天室中的标签。 | 是 |
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------------------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :--- | :----------------------------------------------------------- |
+| `data` | JSON | 响应数据,格式为<标签名称>:<标签过期时间戳(毫秒)>。`-1` 表示对该用户永久禁言。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET -H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag",
+ "entities":[],
+ "data": {
+ "t2":"1730790248255"
+ },
+ "timestamp": 1489072189508,
+ "properties":{},
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :---------- | :----------------- | :---------------------------------------- | :------------------------------------ | :----------------------------------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
+| 403 | forbidden_op | Group tag mute is disabled | 聊天室标签禁言功能没有开通。 | 联系环信商务开通聊天室标签禁言功能。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
diff --git a/docs/document/server-side/chatroom_member.md b/docs/document/server-side/chatroom_member.md
deleted file mode 100644
index 85d94435..00000000
--- a/docs/document/server-side/chatroom_member.md
+++ /dev/null
@@ -1,1977 +0,0 @@
-# 聊天室成员管理
-
-
-
-环信即时通讯 IM 提供多个接口实现聊天室成员管理,包括添加和移除聊天室成员、转让聊天室所有权以及聊天室黑名单、白名单和禁言列表相关操作。
-
-## 前提条件
-
-要调用环信即时通讯 RESTful API,请确保满足以下要求:
-
-- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
-- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
-- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
-
-## 聊天室成员角色
-
-| 成员角色 | 描述 | 管理权限 |
-| :----------- | :------------------------------------------------- | :--------------------------------- |
-| 普通成员 | 不具备管理权限的聊天室成员。 | 普通成员可以修改自己的聊天室信息。 |
-| 聊天室管理员 | 由聊天室创建者授权,协助聊天室管理,具有管理权限。 | 管理员可以管理聊天室内的普通成员。 最多支持添加 99 个管理员。 |
-| 聊天室所有者 | 聊天室的创建者,具有聊天室最高权限。 | 聊天室所有者可以指定聊天室管理员、解散聊天室、更改聊天室信息、管理聊天室成员。 |
-
-## 公共参数
-
-#### 请求参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :------------ | :----- | :------- | :---------------- |
-| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
-| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
-| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
-| `chatroom_id` | String | 是 | 聊天室 ID。 |
-| `username` | String | 是 | 用户 ID。 |
-| `name` | String | 是 | 聊天室名称,最大长度为 128 个字符。 |
-| `description` | String | 是 | 聊天室描述,最大长度为 512 个字符。 |
-| `maxusers` | Int | 否 | 聊天室成员数上限,创建聊天室时设置。该参数的默认最大值为 10,000,如需调整请联系商务。 |
-
-#### 响应参数
-
-| 参数 | 类型 | 描述 |
-| :------------------- | :----- | :------------ |
-| `action` | String | 请求方法。 |
-| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 |
-| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
-| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
-| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
-| `uri` | String | 请求 URL。 |
-| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
-| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 |
-| `entities` | JSON | 响应实体。 |
-| `data` | JSON | 数据详情。 |
-| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 |
-| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 |
-| `username` | String | 用户 ID。 |
-| `affiliations_count` | Int | 聊天室现有成员总数。 |
-| `affiliations` | Array | 聊天室现有成员列表,数组类型,包含 `owner` 和 `member` 元素,即聊天室所有者和聊天室成员(包括聊天室管理员)。例如: “affiliations”:[{“owner”: “13800138001”},{“member”:”v3y0kf9arx”},{“member”:”xc6xrnbzci”}]。 |
-| `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “13800138001”}。 |
-| `member` | String | 聊天室成员的用户 ID,包括聊天室管理员和普通成员的用户 ID。例如:{“member”:”xc6xrnbzci”}。 |
-| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
-| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
-
-## 认证方式
-
-环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
-
-`Authorization: Bearer YourAppToken`
-
-为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
-
-## 分页获取聊天室成员列表
-
-可以分页获取聊天室成员列表。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users?pagenum={N}&pagesize={N}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 查询参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :--- | :------- | :------------------------------------------------------------- |
-| `pagenum` | Int | 否 | 查询页码。默认值为 1。 |
-| `pagesize` | Int | 否 | 每页显示的聊天室成员数量。默认值为 1000。取值范围为 [0,1000]。若传入的值超过了 1000,则返回 1000 个聊天室成员。 |
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------------------------------------------------------------------------------------------------------- |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 参数 | 类型 | 描述 |
-| :------------ | :----- | :-------------- |
-| `data` | JSON Array | 聊天室成员信息。 |
-| - `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “user1”}。 |
-| - `member` | String | 普通聊天室成员或聊天室管理员的用户 ID。例如:{“member”:“user2”}。 |
-| `count` | Number | 本次调用获取的聊天室成员数量。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users?pagenum=2&pagesize=2 -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "52XXXXf0",
- "params": {
- "pagesize": ["2"],
- "pagenum": ["2"]
- },
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users",
- "entities": [],
- "data": [
- {
- "owner": "user1"
- },
- {
- "member": "user2"
- }
- ],
- "timestamp": 1489074511416,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp",
- "count": 2
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | service_resource_not_found | do not find this group:XX | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 添加单个聊天室成员
-
-向聊天室添加一个成员。如果待添加的用户在 app 中不存在或已经在聊天室中,则请求失败并返回错误码 400。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 参数 | 类型 | 描述 |
-| :------------ | :----- | :---------------------------------------------------------- |
-| `data.result` | Bool | 是否添加成功:
- `true`:是;
- `false`:否。 |
-| `data.action` | String | 执行的操作,`add_member` 表示向聊天室添加成员。 |
-| `data.id` | String | 聊天室 ID,聊天室唯一标识符,由环信即时通讯 IM 服务器生成。 |
-| `data.user` | String | 添加到聊天室的用户。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1",
- "entities": [],
- "data": {
- "result": true,
- "action": "add_member",
- "id": "66XXXX33",
- "user": "user1"
- },
- "timestamp": 1542554038353,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 |
-| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 批量添加聊天室成员
-
-向聊天室添加多位用户,一次性最多可添加 60 位用户。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :---------- | :---- | :------- | :------------------- |
-| `usernames` | Array | 是 | 添加的用户 ID 数组,每次最多可传 60 个用户 ID。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 参数 | 类型 | 描述 |
-| :---------------- | :----- | :-------------------------------------------------------------------- |
-| `data.newmembers` | Array | 添加成功的用户 ID 数组。 |
-| `data.action` | String | 执行的操作内容。在该响应中,该字段的值为 `add_member`,表示添加用户。 |
-| `data.id` | String | 聊天室 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
- "usernames": [
- "user1","user2"
- ]
- }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users",
- "entities": [],
- "data": {
- "newmembers": ["user1", "user2"],
- "action": "add_member",
- "id": "66XXXX33"
- },
- "timestamp": 1542554537237,
- "duration": 9,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | addMembers: addMembers number more than maxSize : 60 | 批量添加数量达到限制(60)。 | 将添加的成员数量调整在限制(60)以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 |
-| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 移除单个聊天室成员
-
-从聊天室移除一个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 参数 | 类型 | 描述 |
-| :------------ | :----- | :------------------------------------- |
-| `data.result` | Bool | 是否成功移出聊天室成员:
- `true`:是;
- `false`:否。 |
-| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除聊天室成员。 |
-| `data.user` | String | 用户 ID。 |
-| `data.id` | String | 聊天室 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1",
- "entities": [],
- "data": {
- "result": true,
- "action": "remove_member",
- "user": "user1",
- "id": "66XXXX33"
- },
- "timestamp": 1542555744726,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 批量移除聊天室成员
-
-从聊天室移除多个成员,单次请求最多可移除 100 个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{usernames}
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :----- | :------- | :------------------ |
-| `username` | String | 是 | 要移除的一个或多个用户 ID。每次最多可传 100 个用户 ID,用户 ID 之间用英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。|
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------------------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 参数 | 类型 | 描述 |
-| :------------ | :----- | :--------------------------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 是否成功批量移除聊天室成员:
- `true`:是;
- `false`:否。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除成员。 |
-| - `reason` | String | 移除失败的原因。 |
-| - `user` | String | 已删除成员的用户 ID 列表。 |
-| - `id` | String | 聊天室 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2",
- "entities": [],
- "data": [
- {
- "result": false,
- "action": "remove_member",
- "reason": "user: user1 doesn't exist in group: 66XXXX33",
- "user": "user1",
- "id": "66XXXX33"
- },
- {
- "result": true,
- "action": "remove_member",
- "user": "user2",
- "id": "66XXXX33"
- }
- ],
- "timestamp": 1542556177147,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量删除数量达到限制(60)。 | 将传入的成员数量调整到限制(60)以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 获取聊天室管理员列表
-
-获取聊天室管理员列表的接口。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 参数 | 类型 | 描述 |
-| :----- | :---- | :------------------------- |
-| `data` | Array | 聊天室管理员用户 ID 数组。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin",
- "entities": [],
- "data": ["user1"],
- "timestamp": 1489073361210,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp",
- "count": 1
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 添加聊天室管理员
-
-将一个聊天室成员设置为聊天室管理员。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-#### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------------------- |
-| `Content-Type` | String | 是 | 内容类型。填入 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。填入 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 描述 |
-| :--------- | :---------------------------------- |
-| `newadmin` | 要添加为聊天室管理员的成员用户 ID。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 参数 | 类型 | 描述 |
-| :-------------- | :----- | :----------------------------------------------------------------- |
-| `data.result` | Bool | 操作结果:
- `success`:添加成功;
- `false`:添加失败。 |
-| `data.newadmin` | String | 添加为聊天室管理员的成员用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -d '{"newadmin":"user1"}' -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin",
- "entities": [],
- "data": {
- "result": "success",
- "newadmin": "user1"
- },
- "timestamp": 1489073130083,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-| 404 | resource_not_found | username XXX doesn't exist! | 要添加聊天室管理员的用户 ID 不存在。 | 传入聊天室中普通成员的用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 移除聊天室管理员
-
-将用户的角色从聊天室管理员降为普通聊天室成员。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin/{oldadmin}
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :----- | :------- | :------------------------------ |
-| `oldadmin` | String | 是 | 被撤销管理权限的管理员用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------------------------- |
-| `Accept` | String | 是 | 内容类型。填入 `application/json` |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :-------------- | :----- | :---------------------------------------------------------------------------- |
-| `data.result` | Bool | 是否成功撤销聊天室管理员的管理权限:
- `true`:是;
- `false`:否。 |
-| `data.oldadmin` | String | 被撤销管理权限的管理员用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1 -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1",
- "entities": [],
- "data": {
- "result": "success",
- "oldadmin": "user1"
- },
- "timestamp": 1489073432732,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-| 404 | resource_not_found | username XXX doesn't exist! | 要移除聊天室管理员的用户 ID 不存在。 | 传入聊天室管理员的用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 管理黑名单
-
-环信即时通讯 IM 提供多个接口实现聊天室黑名单管理,包括查看黑名单中的用户以及将用户添加至和移出黑名单等操作。
-
-### 查询聊天室黑名单
-
-查询一个聊天室黑名单中的用户列表。黑名单中的用户无法查看或收到该聊天室的信息。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :---- | :------------------------ |
-| `data` | Array | 聊天室黑名单中的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users",
- "entities": [],
- "data": ["user2", "user3"],
- "timestamp": 1543466293681,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp",
- "count": 2
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 添加单个用户至聊天室黑名单
-
-将单个用户加入指定聊天室的黑名单。聊天室所有者无法被加入聊天室的黑名单。
-
-用户进入聊天室黑名单后,无法查看和收发该聊天室的信息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------ |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :------------------ |
-| `data.result` | Bool | 是否成功将用户添加至聊天室黑名单:
- `true`:是;
- `false`:否。 |
-| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示向聊天室黑名单中添加用户。 |
-| `data.user` | String | 添加的用户 ID。 |
-| `data.chatroomid` | String | 聊天室 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1",
- "entities": [],
- "data": {
- "result": true,
- "action": "add_blocks",
- "user": "user1",
- "chatroomid": "66XXXX33"
- },
- "timestamp": 1542539577124,
- "duration": 27,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要添加的用户不在聊天室中。 | 传入聊天室成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 批量添加用户至聊天室黑名单
-
-将多个用户加入指定聊天室的黑名单。你一次最多可以添加 60 个用户至聊天室黑名单。聊天室所有者无法被加入聊天室的黑名单。
-
-用户进入聊天室黑名单后,无法查看和收发该聊天室的信息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 描述 |
-| :---------- | :---- | :------------------------------------------------------------------ |
-| `usernames` | Array | 待添加到聊天室黑名单的用户 ID,最多可添加 60 个。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :-------------------------------------------------------------------------------- |
-| `data` | JSON Array | 响应数据。 |
-| - `result` | Bool | 是否成功批量添加用户至聊天室黑名单:
- `true`:是;
- `false`:否。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示向聊天室黑名单中添加用户。 |
-| - `reason` | String | 添加失败的原因。 |
-| - `user` | String | 添加的用户 ID。 |
-| - `chatroomid` | String | 聊天室 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
- "usernames": [
- "user3",
- "user4"
- ]
- }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users",
- "entities": [],
- "data": [
- {
- "result": false,
- "action": "add_blocks",
- "reason": "user: user3 doesn't exist in chatroom: 66XXXX33",
- "user": "user3",
- "chatroomid": "66XXXX33"
- },
- {
- "result": true,
- "action": "add_blocks",
- "user": "user4",
- "chatroomid": "66XXXX33"
- }
- ],
- "timestamp": 1542540095540,
- "duration": 16,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | userNames is more than max limit : 60 | 批量添加超过上限(60)。 | 调整要添加的数量在限制以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要添加的用户不在聊天室中。 | 传入聊天室成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 从聊天室黑名单移出单个用户
-
-将指定用户移出聊天室黑名单。对于聊天室黑名单中的用户,如果需要将其再次加入聊天室,需要先将其从聊天室黑名单中移除。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :--------------------------------------- |
-| `data.result` | Bool | 是否成功将该用户移出聊天室黑名单:
- `true`:是;
- `false`:否。 |
-| `data.chatroomid` | String | 聊天室 ID。 |
-| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户移出聊天室黑名单。 |
-| `data.user` | String | 被移除的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1",
- "entities": [],
- "data": {
- "result": true,
- "action": "remove_blocks",
- "user": "user1",
- "chatroomid": "66XXXX33"
- },
- "timestamp": 1542540470679,
- "duration": 45,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在聊天室中。 | 传入聊天室黑名单中的成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 从聊天室黑名单批量移除用户
-
-将多名指定用户从聊天室黑名单中移除。你每次最多可移除 60 个用户。对于聊天室黑名单中的用户,如果需要将其再次加入聊天室,需要先将其从聊天室黑名单中移除。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users/{usernames}
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :----- | :------- | :------------------------------------------------------------ |
-| `username` | String | 是 | 要移出聊天室黑名单的用户 ID,每次最多可传 60 个。用户 ID 之间以英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :------------------------------------------ |
-| `data` | JSON Array | 响应数据。 |
-| - `result` | Bool | 是否成功将用户批量移出聊天室黑名单:
- `true`:是;
- `false`:否。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户移出聊天室黑名单。 |
-| - `user` | String | 被移除的用户 ID。 |
-| - `chatroomid` | String | 聊天室 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1%2Cuser2'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "8beXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1%2Cuser2",
- "entities": [],
- "data": [
- {
- "result": true,
- "action": "remove_blocks",
- "user": "user1",
- "chatroomid": "66XXXX33"
- },
- {
- "result": true,
- "action": "remove_blocks",
- "user": "user2",
- "chatroomid": "66XXXX33"
- }
- ],
- "timestamp": 1542541014655,
- "duration": 29,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | removeBlacklist: list size more than max limit : 60 | 批量删除超过上限(60)。 | 调整要移除的数量在限制(60)以下. |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在聊天室中。 | 传入聊天室黑名单中的成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 管理白名单
-
-环信即时通讯 IM 提供多个接口实现聊天室白名单管理,包括查看白名单中的用户以及将用户添加至和移出白名单等。
-
-聊天室白名单中的成员在聊天室中发送的消息为高优先级,会优先送达,但不保证必达。当负载较高时,服务器会优先丢弃低优先级的消息。若即便如此负载仍很高,服务器也会丢弃高优先级消息。
-
-### 查询聊天室白名单
-
-查询一个聊天室白名单中的用户列表。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :---- | :------------------------ |
-| `data` | Array | 聊天室白名单中的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "5cXXXX75d",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users",
- "entities": [],
- "data": ["wzy_test", "wzy_vivo", "wzy_huawei", "wzy_xiaomi", "wzy_meizu"],
- "timestamp": 1594724947117,
- "duration": 3,
- "organization": "XXXX",
- "applicationName": "testapp",
- "count": 5
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 添加单个用户至聊天室白名单
-
-将单个用户添加至聊天室白名单。用户添加至聊天室白名单后,当聊天室全员禁言时,仍可以在聊天室中发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :-------------------- |
-| `data.result` | Bool | 是否成功将单个用户添加至聊天室白名单:
- `true`:是;
- `false`:否。 |
-| `data.chatroomid` | String | 聊天室 ID。 |
-| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将用户添加至聊天室白名单中。 |
-| `data.user` | String | 添加的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "5cXXXX75d",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_xiaomi",
- "entities": [],
- "data": {
- "result": true,
- "action": "add_user_whitelist",
- "user": "wzy_xiaomi",
- "chatroomid": "66XXXX33"
- },
- "timestamp": 1594724293063,
- "duration": 4,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 批量添加用户至聊天室白名单
-
-添加多个用户至聊天室白名单。你一次最多可添加 60 个用户。用户添加至聊天室白名单后,在聊天室全员禁言时,仍可以在聊天室中发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------------------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### 请求 body
-
-| 参数 | 类型 | 描述 |
-| :---------- | :---- | :------------------- |
-| `usernames` | Array | 待添加至聊天室白名单中的用户 ID,每次最多可传 60 个。|
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :--------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 是否成功将用户批量添加至聊天室白名单:
- `true`:是;
- `false`:否。 |
-| - `reason` | String | 添加失败的原因。 |
-| - `chatroomid` | String | 聊天室 ID。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示添加用户至聊天室白名单。 |
-| - `user` | String | 添加至聊天室白名单中的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatrooms/{chatroomid}/white/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "5cXXXX75d",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users",
- "entities": [],
- "data": [
- {
- "result": true,
- "action": "add_user_whitelist",
- "user": "wzy_test",
- "chatroomid": "66XXXX33"
- },
- {
- "result": true,
- "action": "add_user_whitelist",
- "user": "wzy_meizu",
- "chatroomid": "66XXXX33"
- }
- ],
- "timestamp": 1594724634191,
- "duration": 2,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单超过上限(60)。 | 调整要添加的数量在限制(60)以下. |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 将用户移出聊天室白名单
-
-将指定用户从聊天室白名单移除。你每次最多可移除 60 个用户。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username}
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 描述 | 是否必填 |
-| :---------- | :----- | :------------------------- | :------- |
-| `usernames` | String | 要从聊天室白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 | 是 |
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :-------------- |
-| `data` | JSON Array | 响应数据。 |
-| - `result` | Bool | 是否成功将用户移出聊天室白名单:
- `true`:是;
- `false`:否。 |
-| - `chatroomid` | String | 聊天室 ID。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将用户移出聊天室白名单。 |
-| - `user` | String | 移除聊天室白名单的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "5cXXXX75d",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_huawei,wzy_meizu",
- "entities": [],
- "data": [
- {
- "result": true,
- "action": "remove_user_whitelist",
- "user": "wzy_huawei",
- "chatroomid": "66XXXX33"
- },
- {
- "result": true,
- "action": "remove_user_whitelist",
- "user": "wzy_meizu",
- "chatroomid": "66XXXX33"
- }
- ],
- "timestamp": 1594725137704,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单超过上限(60)。 | 调整要移除的数量在限制(60)以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要加入白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 管理禁言
-
-环信即时通讯 IM 提供多个管理聊天室禁言列表的接口,包括获取禁言列表以及将用户添加至或移出禁言列表等。
-
-### 获取禁言列表
-
-获取当前聊天室的禁言用户列表。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :----- | :----------------------------------- |
-| `data` | JSON Array | 响应数据。 |
-| - `expire` | Long | 禁言到期的 Unix 时间戳,单位为毫秒。 |
-| - `user` | String | 被禁言的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute",
- "entities": [],
- "data": [
- {
- "expire": 1489158589481,
- "user": "user1"
- },
- {
- "expire": 1489158589481,
- "user": "user2"
- }
- ],
- "timestamp": 1489072802179,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 禁言聊天室成员
-
-禁言单个或多个聊天室成员。你一次最多可禁言 60 个成员。
-
-用户被禁言后,将无法在聊天室中发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------- |
-| `mute_duration` | Long | 是 | 禁言时长,从当前时间开始计算。单位为毫秒。`-1` 表示永久禁言。 |
-| `usernames` | Array | 是 | 要被禁言的用户 ID,一次最多可传 60 个。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :----- | :------------------- |
-| `data` | JSON Array | 响应数据。 |
-| - `result` | Bool | 是否成功禁言用户:
- `true`:是;
- `false`:否。 |
-| - `expire` | Long | 禁言到期时间,Unix 时间戳,单位为毫秒。 |
-| - `user` | String | 被禁言的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d
-'{
- "usernames": [
- "user1",
- "user2"
- ],
- "mute_duration": 86400000
-}'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute",
- "entities": [],
- "data": [
- {
- "result": true,
- "expire": 1642148173726,
- "user": "user1"
- },
- {
- "result": true,
- "expire": 1642148173726,
- "user": "user2"
- }
- ],
- "timestamp": 1489072189508,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 400 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
-| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定聊天室成员数量超过60 | 控制禁言指定聊天室成员数量在 60 以内。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 禁言聊天室全体成员
-
-对所有聊天室成员一键禁言。该操作不影响聊天室禁言列表,即一键禁言不会将聊天室所有成员加入聊天室禁言列表。
-
-设置聊天室全员禁言后,仅聊天室白名单中的用户可在聊天室内发消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------------------------------------ |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------- | :--- | :------------ |
-| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "put",
- "application": "5cXXXX75d",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban",
- "entities": [],
- "data": {
- "mute": true
- },
- "timestamp": 1594628861058,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
-
-### 解除聊天室禁言成员
-
-解除对一个或多个聊天室成员的禁言。你一次最多可对 60 个成员解除禁言。
-
-解除禁言后,该成员可以正常在聊天室中发送消息。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute/{member1}(,{member2},…)
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------- | :----- | :------- | :------- |
-| `member1` | String | 是 | 待被移出禁言列表的聊天室成员的用户 ID。
一次最多可传 60 个用户 ID,用户 ID 之间用英文逗号(",")隔开,逗号在 URL 中转义为 "%2C"。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------- |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :------ | :------------------------------------------------------------------------- |
-| `data` | JSON Array | 响应数据。 |
-| - `result` | Boolean | 是否成功将指定用户移出禁言列表:
- `true`:是;
- `false`:否。 |
-| - `user` | String | 被解除禁言的聊天室成员的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1 -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1",
- "entities": [],
- "data": [
- {
- "result": true,
- "user": "user1"
- }
- ],
- "timestamp": 1489072695859,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言超过上限(60)。 | 调整要移除的数量在限制(60)以下. |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
-
-### 解除聊天室全员禁言
-
-一键取消对聊天室全体成员的禁言。解除禁言后,聊天室成员可以在聊天室中正常发送消息。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------ |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------- | :--- | :--------------- |
-| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "5cXXXX75d",
- "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban",
- "entities": [],
- "data": {
- "mute": false
- },
- "timestamp": 1594628899502,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
diff --git a/docs/document/server-side/chatroom_member_add_delete.md b/docs/document/server-side/chatroom_member_add_delete.md
new file mode 100644
index 00000000..dc8967b9
--- /dev/null
+++ b/docs/document/server-side/chatroom_member_add_delete.md
@@ -0,0 +1,413 @@
+# 添加/移除聊天室成员
+
+
+
+环信即时通讯 IM 提供多个接口实现聊天室成员的添加和移除。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
+- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `chatroom_id` | String | 是 | 聊天室 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :------------ |
+| `action` | String | 请求方法。 |
+| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 数据详情。 |
+| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 |
+| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 添加单个聊天室成员
+
+向聊天室添加一个成员。如果待添加的用户在 app 中不存在或已经在聊天室中,则请求失败并返回错误码 400。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `username` | String | 是 | 要添加的用户 ID。 |
+
+其它参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :------------ | :----- | :---------------------------------------------------------- |
+| `data.result` | Bool | 是否添加成功:
- `true`:是;
- `false`:否。 |
+| `data.action` | String | 执行的操作,`add_member` 表示向聊天室添加成员。 |
+| `data.id` | String | 聊天室 ID,聊天室唯一标识符,由环信即时通讯 IM 服务器生成。 |
+| `data.user` | String | 添加到聊天室的用户。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "add_member",
+ "id": "66XXXX33",
+ "user": "user1"
+ },
+ "timestamp": 1542554038353,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 |
+| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量添加聊天室成员
+
+向聊天室添加多位用户,一次性最多可添加 60 位用户。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---------- | :---- | :------- | :------------------- |
+| `usernames` | Array | 是 | 添加的用户 ID 数组,每次最多可传 60 个用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :-------------------------------------------------------------------- |
+| `data.newmembers` | Array | 添加成功的用户 ID 数组。 |
+| `data.action` | String | 执行的操作内容。在该响应中,该字段的值为 `add_member`,表示添加用户。 |
+| `data.id` | String | 聊天室 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
+ "usernames": [
+ "user1","user2"
+ ]
+ }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users",
+ "entities": [],
+ "data": {
+ "newmembers": ["user1", "user2"],
+ "action": "add_member",
+ "id": "66XXXX33"
+ },
+ "timestamp": 1542554537237,
+ "duration": 9,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | addMembers: addMembers number more than maxSize : 60 | 批量添加数量达到限制(60)。 | 将添加的成员数量调整在限制(60)以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 |
+| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 移除单个聊天室成员
+
+从聊天室移除一个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `username` | String | 是 | 要移除的用户 ID。 |
+
+其它参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :------------ | :----- | :------------------------------------- |
+| `data.result` | Bool | 是否成功移出聊天室成员:
- `true`:是;
- `false`:否。 |
+| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除聊天室成员。 |
+| `data.user` | String | 用户 ID。 |
+| `data.id` | String | 聊天室 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "remove_member",
+ "user": "user1",
+ "id": "66XXXX33"
+ },
+ "timestamp": 1542555744726,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量移除聊天室成员
+
+从聊天室移除多个成员,单次请求最多可移除 100 个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{usernames}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :------------------ |
+| `username` | String | 是 | 要移除的一个或多个用户 ID。每次最多可传 100 个用户 ID,用户 ID 之间用英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。|
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :------------ | :----- | :--------------------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 是否成功批量移除聊天室成员:
- `true`:是;
- `false`:否。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除成员。 |
+| - `reason` | String | 移除失败的原因。 |
+| - `user` | String | 已删除成员的用户 ID 列表。 |
+| - `id` | String | 聊天室 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2",
+ "entities": [],
+ "data": [
+ {
+ "result": false,
+ "action": "remove_member",
+ "reason": "user: user1 doesn't exist in group: 66XXXX33",
+ "user": "user1",
+ "id": "66XXXX33"
+ },
+ {
+ "result": true,
+ "action": "remove_member",
+ "user": "user2",
+ "id": "66XXXX33"
+ }
+ ],
+ "timestamp": 1542556177147,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量删除数量达到限制(60)。 | 将传入的成员数量调整到限制(60)以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
\ No newline at end of file
diff --git a/docs/document/server-side/chatroom_member_admin.md b/docs/document/server-side/chatroom_member_admin.md
new file mode 100644
index 00000000..eec9fcb4
--- /dev/null
+++ b/docs/document/server-side/chatroom_member_admin.md
@@ -0,0 +1,296 @@
+# 管理聊天室管理员
+
+
+
+环信即时通讯 IM 提供多个接口管理聊天室管理员,包括获取、添加和移除聊天室管理员。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
+- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
+
+## 聊天室成员角色
+
+| 成员角色 | 描述 | 管理权限 |
+| :----------- | :------------------------------------------------- | :--------------------------------- |
+| 普通成员 | 不具备管理权限的聊天室成员。 | 普通成员可以修改自己的聊天室信息。 |
+| 聊天室管理员 | 由聊天室创建者授权,协助聊天室管理,具有管理权限。 | 管理员可以管理聊天室内的普通成员。 最多支持添加 99 个管理员。 |
+| 聊天室所有者 | 聊天室的创建者,具有聊天室最高权限。 | 聊天室所有者可以指定聊天室管理员、解散聊天室、更改聊天室信息、管理聊天室成员。 |
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `chatroom_id` | String | 是 | 聊天室 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :------------ |
+| `action` | String | 请求方法。 |
+| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 数据详情。 |
+| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 获取聊天室管理员列表
+
+获取聊天室管理员列表的接口。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :----- | :---- | :------------------------- |
+| `data` | Array | 聊天室管理员用户 ID 数组。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -H 'Accept: application/json' -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin",
+ "entities": [],
+ "data": ["user1"],
+ "timestamp": 1489073361210,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp",
+ "count": 1
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 添加聊天室管理员
+
+将一个聊天室成员设置为聊天室管理员。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+#### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------------------- |
+| `Content-Type` | String | 是 | 内容类型。填入 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。填入 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 描述 |
+| :--------- | :---------------------------------- |
+| `newadmin` | 要添加为聊天室管理员的成员用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----------------------------------------------------------------- |
+| `data.result` | Bool | 操作结果:
- `success`:添加成功;
- `false`:添加失败。 |
+| `data.newadmin` | String | 添加为聊天室管理员的成员用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -d '{"newadmin":"user1"}' -H 'Accept: application/json' -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin",
+ "entities": [],
+ "data": {
+ "result": "success",
+ "newadmin": "user1"
+ },
+ "timestamp": 1489073130083,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要添加聊天室管理员的用户 ID 不存在。 | 传入聊天室中普通成员的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 移除聊天室管理员
+
+将用户的角色从聊天室管理员降为普通聊天室成员。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin/{oldadmin}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :------------------------------ |
+| `oldadmin` | String | 是 | 被撤销管理权限的管理员用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------------- |
+| `Accept` | String | 是 | 内容类型。填入 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :-------------- | :----- | :---------------------------------------------------------------------------- |
+| `data.result` | Bool | 是否成功撤销聊天室管理员的管理权限:
- `true`:是;
- `false`:否。 |
+| `data.oldadmin` | String | 被撤销管理权限的管理员用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1 -H 'Accept: application/json' -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1",
+ "entities": [],
+ "data": {
+ "result": "success",
+ "oldadmin": "user1"
+ },
+ "timestamp": 1489073432732,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要移除聊天室管理员的用户 ID 不存在。 | 传入聊天室管理员的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/chatroom_member_allowlist.md b/docs/document/server-side/chatroom_member_allowlist.md
new file mode 100644
index 00000000..6898ae55
--- /dev/null
+++ b/docs/document/server-side/chatroom_member_allowlist.md
@@ -0,0 +1,403 @@
+# 聊天室白名单管理
+
+
+
+环信即时通讯 IM 提供多个接口实现聊天室白名单管理,包括查看白名单中的用户以及将用户添加至和移出白名单等。
+
+聊天室白名单中的成员在聊天室中发送的消息为高优先级,会优先送达,但不保证必达。当负载较高时,服务器会优先丢弃低优先级的消息。若即便如此负载仍很高,服务器也会丢弃高优先级消息。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
+- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `chatroom_id` | String | 是 | 聊天室 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :------------ |
+| `action` | String | 请求方法。 |
+| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 数据详情。 |
+| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 |
+| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 查询聊天室白名单
+
+查询一个聊天室白名单中的用户列表。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `data` | Array | 聊天室白名单中的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "5cXXXX75d",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users",
+ "entities": [],
+ "data": ["wzy_test", "wzy_vivo", "wzy_huawei", "wzy_xiaomi", "wzy_meizu"],
+ "timestamp": 1594724947117,
+ "duration": 3,
+ "organization": "XXXX",
+ "applicationName": "testapp",
+ "count": 5
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 添加单个用户至聊天室白名单
+
+将单个用户添加至聊天室白名单。用户添加至聊天室白名单后,当聊天室全员禁言时,仍可以在聊天室中发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :---------------- | :----- | :-------------------- |
+| `data.result` | Bool | 是否成功将单个用户添加至聊天室白名单:
- `true`:是;
- `false`:否。 |
+| `data.chatroomid` | String | 聊天室 ID。 |
+| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将用户添加至聊天室白名单中。 |
+| `data.user` | String | 添加的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "5cXXXX75d",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_xiaomi",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "add_user_whitelist",
+ "user": "wzy_xiaomi",
+ "chatroomid": "66XXXX33"
+ },
+ "timestamp": 1594724293063,
+ "duration": 4,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量添加用户至聊天室白名单
+
+添加多个用户至聊天室白名单。你一次最多可添加 60 个用户。用户添加至聊天室白名单后,在聊天室全员禁言时,仍可以在聊天室中发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 描述 |
+| :---------- | :---- | :------------------- |
+| `usernames` | Array | 待添加至聊天室白名单中的用户 ID,每次最多可传 60 个。|
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :---------------- | :----- | :--------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 是否成功将用户批量添加至聊天室白名单:
- `true`:是;
- `false`:否。 |
+| - `reason` | String | 添加失败的原因。 |
+| - `chatroomid` | String | 聊天室 ID。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示添加用户至聊天室白名单。 |
+| - `user` | String | 添加至聊天室白名单中的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatrooms/{chatroomid}/white/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "5cXXXX75d",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "action": "add_user_whitelist",
+ "user": "wzy_test",
+ "chatroomid": "66XXXX33"
+ },
+ {
+ "result": true,
+ "action": "add_user_whitelist",
+ "user": "wzy_meizu",
+ "chatroomid": "66XXXX33"
+ }
+ ],
+ "timestamp": 1594724634191,
+ "duration": 2,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单超过上限(60)。 | 调整要添加的数量在限制(60)以下. |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 将用户移出聊天室白名单
+
+将指定用户从聊天室白名单移除。你每次最多可移除 60 个用户。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 描述 | 是否必填 |
+| :---------- | :----- | :------------------------- | :------- |
+| `usernames` | String | 要从聊天室白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 | 是 |
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :---------------- | :----- | :-------------- |
+| `data` | JSON Array | 响应数据。 |
+| - `result` | Bool | 是否成功将用户移出聊天室白名单:
- `true`:是;
- `false`:否。 |
+| - `chatroomid` | String | 聊天室 ID。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将用户移出聊天室白名单。 |
+| - `user` | String | 移除聊天室白名单的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "5cXXXX75d",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_huawei,wzy_meizu",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "action": "remove_user_whitelist",
+ "user": "wzy_huawei",
+ "chatroomid": "66XXXX33"
+ },
+ {
+ "result": true,
+ "action": "remove_user_whitelist",
+ "user": "wzy_meizu",
+ "chatroomid": "66XXXX33"
+ }
+ ],
+ "timestamp": 1594725137704,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单超过上限(60)。 | 调整要移除的数量在限制(60)以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 要加入白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
\ No newline at end of file
diff --git a/docs/document/server-side/chatroom_member_blocklist.md b/docs/document/server-side/chatroom_member_blocklist.md
new file mode 100644
index 00000000..91f187aa
--- /dev/null
+++ b/docs/document/server-side/chatroom_member_blocklist.md
@@ -0,0 +1,495 @@
+# 聊天室黑名单管理
+
+
+
+环信即时通讯 IM 提供多个接口实现聊天室黑名单管理,包括查询聊天室黑名单、将成员添加和移除聊天室黑名单。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
+- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `chatroom_id` | String | 是 | 聊天室 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+| `name` | String | 是 | 聊天室名称,最大长度为 128 个字符。 |
+| `description` | String | 是 | 聊天室描述,最大长度为 512 个字符。 |
+| `maxusers` | Int | 否 | 聊天室成员数上限,创建聊天室时设置。该参数的默认最大值为 10,000,如需调整请联系商务。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :------------ |
+| `action` | String | 请求方法。 |
+| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 数据详情。 |
+| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 |
+| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 |
+| `username` | String | 用户 ID。 |
+| `affiliations_count` | Int | 聊天室现有成员总数。 |
+| `affiliations` | Array | 聊天室现有成员列表,数组类型,包含 `owner` 和 `member` 元素,即聊天室所有者和聊天室成员(包括聊天室管理员)。例如: “affiliations”:[{“owner”: “13800138001”},{“member”:”v3y0kf9arx”},{“member”:”xc6xrnbzci”}]。 |
+| `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “13800138001”}。 |
+| `member` | String | 聊天室成员的用户 ID,包括聊天室管理员和普通成员的用户 ID。例如:{“member”:”xc6xrnbzci”}。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 添加单个聊天室成员
+
+向聊天室添加一个成员。如果待添加的用户在 app 中不存在或已经在聊天室中,则请求失败并返回错误码 400。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `username` | String | 是 | 要加入聊天室黑名单的用户 ID。 |
+
+其它参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :------------ | :----- | :---------------------------------------------------------- |
+| `data.result` | Bool | 是否添加成功:
- `true`:是;
- `false`:否。 |
+| `data.action` | String | 执行的操作,`add_member` 表示向聊天室添加成员。 |
+| `data.id` | String | 聊天室 ID,聊天室唯一标识符,由环信即时通讯 IM 服务器生成。 |
+| `data.user` | String | 添加到聊天室的用户。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "add_member",
+ "id": "66XXXX33",
+ "user": "user1"
+ },
+ "timestamp": 1542554038353,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 |
+| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量添加聊天室成员
+
+向聊天室添加多位用户,一次性最多可添加 60 位用户。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---------- | :---- | :------- | :------------------- |
+| `usernames` | Array | 是 | 添加的用户 ID 数组,每次最多可传 60 个用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :-------------------------------------------------------------------- |
+| `data.newmembers` | Array | 添加成功的用户 ID 数组。 |
+| `data.action` | String | 执行的操作内容。在该响应中,该字段的值为 `add_member`,表示添加用户。 |
+| `data.id` | String | 聊天室 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
+ "usernames": [
+ "user1","user2"
+ ]
+ }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users",
+ "entities": [],
+ "data": {
+ "newmembers": ["user1", "user2"],
+ "action": "add_member",
+ "id": "66XXXX33"
+ },
+ "timestamp": 1542554537237,
+ "duration": 9,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | addMembers: addMembers number more than maxSize : 60 | 批量添加数量达到限制(60)。 | 将添加的成员数量调整在限制(60)以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 |
+| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 移除单个聊天室成员
+
+从聊天室移除一个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `username` | String | 是 | 要移出聊天室黑名单的用户 ID。 |
+
+其它参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :------------ | :----- | :------------------------------------- |
+| `data.result` | Bool | 是否成功移出聊天室成员:
- `true`:是;
- `false`:否。 |
+| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除聊天室成员。 |
+| `data.user` | String | 用户 ID。 |
+| `data.id` | String | 聊天室 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "remove_member",
+ "user": "user1",
+ "id": "66XXXX33"
+ },
+ "timestamp": 1542555744726,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量移除聊天室成员
+
+从聊天室移除多个成员,单次请求最多可移除 100 个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{usernames}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :------------------ |
+| `username` | String | 是 | 要移除的一个或多个用户 ID。每次最多可传 100 个用户 ID,用户 ID 之间用英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。|
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :------------ | :----- | :--------------------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 是否成功批量移除聊天室成员:
- `true`:是;
- `false`:否。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除成员。 |
+| - `reason` | String | 移除失败的原因。 |
+| - `user` | String | 已删除成员的用户 ID 列表。 |
+| - `id` | String | 聊天室 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8beXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2",
+ "entities": [],
+ "data": [
+ {
+ "result": false,
+ "action": "remove_member",
+ "reason": "user: user1 doesn't exist in group: 66XXXX33",
+ "user": "user1",
+ "id": "66XXXX33"
+ },
+ {
+ "result": true,
+ "action": "remove_member",
+ "user": "user2",
+ "id": "66XXXX33"
+ }
+ ],
+ "timestamp": 1542556177147,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量删除数量达到限制(60)。 | 将传入的成员数量调整到限制(60)以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 获取聊天室管理员列表
+
+获取聊天室管理员列表的接口。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :----- | :---- | :------------------------- |
+| `data` | Array | 聊天室管理员用户 ID 数组。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin",
+ "entities": [],
+ "data": ["user1"],
+ "timestamp": 1489073361210,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp",
+ "count": 1
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
\ No newline at end of file
diff --git a/docs/document/server-side/chatroom_member_mutelist.md b/docs/document/server-side/chatroom_member_mutelist.md
new file mode 100644
index 00000000..0f5bf2b2
--- /dev/null
+++ b/docs/document/server-side/chatroom_member_mutelist.md
@@ -0,0 +1,470 @@
+# 聊天室成员禁言管理
+
+
+
+环信即时通讯 IM 提供多个接口实现聊天室成员禁言,包括添加和移除聊天室成员、转让聊天室所有权以及聊天室黑名单、白名单和禁言列表相关操作。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
+- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `chatroom_id` | String | 是 | 聊天室 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :------------ |
+| `action` | String | 请求方法。 |
+| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 数据详情。 |
+| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 获取禁言列表
+
+获取当前聊天室的禁言用户列表。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :----- | :----------------------------------- |
+| `data` | JSON Array | 响应数据。 |
+| - `expire` | Long | 禁言到期的 Unix 时间戳,单位为毫秒。 |
+| - `user` | String | 被禁言的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute",
+ "entities": [],
+ "data": [
+ {
+ "expire": 1489158589481,
+ "user": "user1"
+ },
+ {
+ "expire": 1489158589481,
+ "user": "user2"
+ }
+ ],
+ "timestamp": 1489072802179,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。|
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 禁言聊天室成员
+
+禁言单个或多个聊天室成员。你一次最多可禁言 60 个成员。
+
+用户被禁言后,将无法在聊天室中发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------- |
+| `mute_duration` | Long | 是 | 禁言时长,从当前时间开始计算。单位为毫秒。`-1` 表示永久禁言。 |
+| `usernames` | Array | 是 | 要被禁言的用户 ID,一次最多可传 60 个。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :----- | :------------------- |
+| `data` | JSON Array | 响应数据。 |
+| - `result` | Bool | 是否成功禁言用户:
- `true`:是;
- `false`:否。 |
+| - `expire` | Long | 禁言到期时间,Unix 时间戳,单位为毫秒。 |
+| - `user` | String | 被禁言的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d
+'{
+ "usernames": [
+ "user1",
+ "user2"
+ ],
+ "mute_duration": 86400000
+}'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "expire": 1642148173726,
+ "user": "user1"
+ },
+ {
+ "result": true,
+ "expire": 1642148173726,
+ "user": "user2"
+ }
+ ],
+ "timestamp": 1489072189508,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
+| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定聊天室成员数量超过60 | 控制禁言指定聊天室成员数量在 60 以内。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 禁言聊天室全体成员
+
+对所有聊天室成员一键禁言。该操作不影响聊天室禁言列表,即一键禁言不会将聊天室所有成员加入聊天室禁言列表。
+
+设置聊天室全员禁言后,仅聊天室白名单中的用户可在聊天室内发消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------------------------------------------ |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :---------- | :--- | :------------ |
+| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "put",
+ "application": "5cXXXX75d",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban",
+ "entities": [],
+ "data": {
+ "mute": true
+ },
+ "timestamp": 1594628861058,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
+
+## 解除聊天室禁言成员
+
+解除对一个或多个聊天室成员的禁言。你一次最多可对 60 个成员解除禁言。
+
+解除禁言后,该成员可以正常在聊天室中发送消息。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute/{member1}(,{member2},…)
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------- | :----- | :------- | :------- |
+| `member1` | String | 是 | 待被移出禁言列表的聊天室成员的用户 ID。
一次最多可传 60 个用户 ID,用户 ID 之间用英文逗号(",")隔开,逗号在 URL 中转义为 "%2C"。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :------ | :------------------------------------------------------------------------- |
+| `data` | JSON Array | 响应数据。 |
+| - `result` | Boolean | 是否成功将指定用户移出禁言列表:
- `true`:是;
- `false`:否。 |
+| - `user` | String | 被解除禁言的聊天室成员的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1 -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "user": "user1"
+ }
+ ],
+ "timestamp": 1489072695859,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言超过上限(60)。 | 调整要移除的数量在限制(60)以下. |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
+
+## 解除聊天室全员禁言
+
+一键取消对聊天室全体成员的禁言。解除禁言后,聊天室成员可以在聊天室中正常发送消息。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------------ |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :---------- | :--- | :--------------- |
+| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "5cXXXX75d",
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban",
+ "entities": [],
+ "data": {
+ "mute": false
+ },
+ "timestamp": 1594628899502,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 |
diff --git a/docs/document/server-side/chatroom_member_obtain.md b/docs/document/server-side/chatroom_member_obtain.md
new file mode 100644
index 00000000..e65a6836
--- /dev/null
+++ b/docs/document/server-side/chatroom_member_obtain.md
@@ -0,0 +1,138 @@
+# 获取聊天室成员列表
+
+
+
+环信即时通讯 IM 提供 RESTful API 接口用于分页获取聊天室成员列表。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。
+- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。
+
+## 聊天室成员角色
+
+| 成员角色 | 描述 | 管理权限 |
+| :----------- | :----------------------- | :----------------- |
+| 普通成员 | 不具备管理权限的聊天室成员。 | 普通成员可以修改自己的聊天室信息。 |
+| 聊天室管理员 | 由聊天室创建者授权,协助聊天室管理,具有管理权限。 | 管理员可以管理聊天室内的普通成员。 最多支持添加 99 个管理员。 |
+| 聊天室所有者 | 聊天室的创建者,具有聊天室最高权限。 | 聊天室所有者可以指定聊天室管理员、解散聊天室、更改聊天室信息、管理聊天室成员。 |
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 分页获取聊天室成员列表
+
+可以分页获取聊天室成员列表。
+
+### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users?pagenum={N}&pagesize={N}
+```
+
+#### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `chatroom_id` | String | 是 | 聊天室 ID。 |
+
+#### 查询参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :--- | :------- | :-------------------- |
+| `pagenum` | Int | 否 | 查询页码。默认值为 `1`。 |
+| `pagesize` | Int | 否 | 每页显示的聊天室成员数量。默认值为 1000。取值范围为 [0,1000]。若传入的值超过了 1000,则返回 1000 个聊天室成员。 |
+
+#### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------------------------- |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+### HTTP 响应
+
+#### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :------------ |
+| `action` | String | 请求方法。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `params` | JSON | 查询参数。 |
+| - `pagesize` | Array | 每页期望显示的聊天室成员数量。 |
+| - `pagenum` | Array | 当前页码。 |
+| `uri` | String | 请求 URL。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON Array | 聊天室成员信息。 |
+| - `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “user1”}。 |
+| - `member` | String | 普通聊天室成员或聊天室管理员的用户 ID。例如:{“member”:“user2”}。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `count` | Number | 本次调用实际获取的聊天室成员数量。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+### 示例
+
+#### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users?pagenum=2&pagesize=2 -H 'Authorization: Bearer '
+```
+
+#### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "params": {
+ "pagesize": ["2"],
+ "pagenum": ["2"]
+ },
+ "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users",
+ "entities": [],
+ "data": [
+ {
+ "owner": "user1"
+ },
+ {
+ "member": "user2"
+ }
+ ],
+ "timestamp": 1489074511416,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp",
+ "count": 2
+}
+```
+
+### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | service_resource_not_found | do not find this group:XX | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/error.md b/docs/document/server-side/error.md
index 3c9b3b02..3ef2fb83 100644
--- a/docs/document/server-side/error.md
+++ b/docs/document/server-side/error.md
@@ -47,8 +47,8 @@
| 用户属性 | 设置/删除/获取用户属性、获取 app 下用户属性总大小。 | 关于错误码,详见[用户属性模块](userprofile.html)中各接口对应的错误码列表。 |
| 用户关系 | 添加/移除好友、设置好友备注、获取好友列表和导入好友列表。 | 关于错误码,详见[用户关系管理模块](user_relationship.html)中各接口对应的错误码列表。|
| 消息 | 消息相关功能,包括发送消息、上传/下载文件、撤回消息、删除漫游消息、修改/导入消息。 | 详见以下 API 对应的错误码列表:
- [发送单聊消息](message_single.html)
- [发送群聊消息](message_group.html)
- [发送聊天室消息](message_chatroom.html)
- [上传和下载文件](message_download.html)
- [撤回消息和单向删除会话](message_recall.html)
- [单向删除漫游消息](message_delete.html)
- [修改文本或自定义消息](message_modify_text_custom.html)
- [导入消息](message_import.html) |
-| 群组 | 群组管理、群成员管理、子区管理。 | 关于错误码,详见[群组管理](group_manage.html)、[群组文件管理](group_file.html)、[群成员管理](group_member.html)和[子区管理](group_thread.html)中各接口对应的错误码列表。 |
-| 聊天室 | 聊天室管理、聊天室属性管理、聊天室成员管理。 | 关于错误码,详见[超级管理员管理](chatroom_superadmin.html)、[聊天室管理](chatroom_manage.html)、[聊天室属性管理](chatroom_attribute.html)和[聊天室成员管理](chatroom_member.html)中各接口对应的错误码列表。 |
+| 群组 | 群组管理、群成员管理、子区管理。 | 关于错误码,详见[群组管理](group_manage.html)、[群组文件管理](group_file.html)、[群成员管理](group_member_obtain.html)和[子区管理](group_thread.html)中各接口对应的错误码列表。 |
+| 聊天室 | 聊天室管理、聊天室属性管理、聊天室成员管理。 | 关于错误码,详见[超级管理员管理](chatroom_superadmin.html)、[聊天室管理](chatroom_manage.html)、[聊天室属性管理](chatroom_attribute.html)和[聊天室成员管理](chatroom_member_obtain.html)中各接口对应的错误码列表。 |
| 在线状态订阅 | 设置用户在线状态、订阅/取消订阅/查询用户在线状态、查询单个群组的在线成员数量。 | 关于错误码,详见[在线状态订阅](presence.html)中各接口对应的错误码列表。 |
| 消息表情回复(Reaction) | 创建/追加/删除 Reaction、根据消息 ID 获取 Reaction、根据消息 ID 和表情 ID 获取 Reaction 信息。 | 关于错误码,详见[消息表情回复](reaction.html)中各接口对应的错误码列表。 |
| 离线推送 | 绑定/解除绑定推送信息、查询推送绑定信息、设置离线推送时显示的昵称、展示方式、免打扰、通知首选语言、使用推送模板。| 关于错误码,详见[离线推送](push.html)中各接口对应的错误码列表。 |
diff --git a/docs/document/server-side/group_member.md b/docs/document/server-side/group_member.md
deleted file mode 100644
index 1c30d0e2..00000000
--- a/docs/document/server-side/group_member.md
+++ /dev/null
@@ -1,2411 +0,0 @@
-# 群成员管理
-
-
-
-环信即时通讯 IM 提供了 RESTful API 管理 App 中群组的成员,包括添加和移除群组成员、转让群组所有权以及群组黑名单、白名单和禁言列表相关操作。
-
-## 前提条件
-
-要调用环信即时通讯 RESTful API,请确保满足以下要求:
-
-- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
-- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
-- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
-
-## 公共参数
-
-#### 请求参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :----- | :------- | :--------------- |
-| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
-| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
-| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
-| `group_id` | String | 是 | 群组 ID。 |
-| `username` | String | 是 | 用户 ID。 |
-
-#### 响应参数
-
-| 参数 | 类型 | 描述 |
-| :---------------- | :----- | :----------------------------------------------------------------------------- |
-| `action` | String | 请求方法。 |
-| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
-| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
-| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
-| `uri` | String | 请求 URL。 |
-| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
-| `entities` | JSON | 响应实体。 |
-| `data` | JSON | 实际获取的数据详情。 |
-| `uuid` | String | 用户在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
-| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 |
-| `timestamp` | Long | Unix 时间戳,单位为毫秒。 |
-| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 |
-| `properties` | String | 响应属性。 |
-
-## 群组角色
-
-群组角色包含群主、群管理员和普通群成员,三个角色权限范围依次递减。
-
-- 群主拥有群的所有权限;
-- 群管理员拥有管理黑名单、白名单和禁言等权限;
-- 群主加管理员数量共 100 个,即管理员最多可添加 99 个。
-
-## 认证方式
-
-环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
-
-`Authorization: Bearer YourAppToken`
-
-为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
-
-## 分页获取群成员列表
-
-可以分页获取群组成员列表。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users?pagenum={N}&pagesize={N}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 查询参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :--- | :------- | :------------------- |
-| `pagenum` | Int | 否 | 当前页码。默认从第 1 页开始获取。 |
-| `pagesize` | Int | 否 | 每页期望返回的群组成员数量。取值范围为 [1,1000]。默认为 `1000`。若传入的值大于 `1000`,则获取 1000 个群组成员。 |
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------------------------- |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :----- | :------------------------------------------ |
-| `data.owner` | String | 群主的用户 ID。例如:{“owner”: “user1”}。 |
-| `data.member` | String | 普通群成员或群管理员的用户 ID。例如:{“member”:“user2”}。 |
-| `count` | Number | 本次调用获取的群成员数量。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users?pagenum=2&pagesize=2 -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "52XXXXf0",
- "params": {
- "pagesize": ["2"],
- "pagenum": ["2"]
- },
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users",
- "entities": [],
- "data": [
- {
- "owner": "user1"
- },
- {
- "member": "user2"
- }
- ],
- "timestamp": 1489074511416,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp",
- "count": 2
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | service_resource_not_found | do not find this group:XX | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 添加单个群组成员
-
-每次添加一个群成员。若添加的用户已是群成员,则添加失败,返回错误。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------ |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :-------------------------------------------------------------------- |
-| `data.result` | Bool | 添加结果:
- `true`:成功。
- `false`:失败。 |
-| `data.groupid` | String | 群组 ID。 |
-| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群组成员。 |
-| `data.user` | String | 添加的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4",
- "entities": [],
- "data": {
- "result": true,
- "groupid": "66XXXX85",
- "action": "add_member",
- "user": "user4"
- },
- "timestamp": 1542364958405,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | can not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在 | 使用合法的用户,即 `username` 传入存在的用户 ID。|
-| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 批量添加群组成员
-
-一次为群组添加多个成员,每次最多可以添加 60 位成员。如果所有用户均已是群成员,添加失败,返回错误。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :---------- | :---- | :------- | :---------- |
-| `usernames` | Array | 是 | 要添加为群组成员的用户 ID 数组,每次最多可传 60 个用户 ID。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------------- | :----- | :----------------- |
-| `data.newmembers` | Array | 添加的群组成员的用户 ID。 |
-| `data.groupid` | String | 群组 ID。 |
-| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群成员。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
- "usernames": [
- "user4","user5"
- ]
- }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users",
- "entities": [],
- "data": {
- "newmembers": ["user5", "user4"],
- "groupid": "66XXXX85",
- "action": "add_member"
- },
- "timestamp": 1542365557942,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | an not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。|
-| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 |
-| 403 | exceed_limit | members size is greater than max user size ! | 加入群成员的人数超过最大限制。每次最多可以添加 60 位成员。 | 调整创建群的加群人数。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在。 | 使用合法的用户,即 `username` 传入存在的用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 移除单个群组成员
-
-从群中移除指定成员。如果被移除用户不是群成员,将移除失败,并返回错误。移除后,该成员也会被移除其在该群组中加入的子区。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :----------------------------------------------------------------------- |
-| `data.result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
-| `data.groupid` | String | 群组 ID。 |
-| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 |
-| `data.user` | String | 被移除的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3",
- "entities": [],
- "data": {
- "result": true,
- "action": "remove_member",
- "user": "user3",
- "groupid": "66XXXX85"
- },
- "timestamp": 1542365943067,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。|
-| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 不要将群主移出群组。 |
-| 403 | exceed_limit | user XX has joined too many groups! | 用户加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 批量移除群组成员
-
-一次移除多名群成员。如果所有被移除用户均不是群成员,将移除失败,并返回错误。移除后,这些成员也会被移除其在该群组中加入的子区。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{members}
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------- | :----- | :------- | :-------------------------------------------------------------------------------------------------------------- |
-| `members` | String | 是 | 要移除的群成员的用户 ID,用户 ID 之间用英文逗号(",")分隔。建议每次最多传 60 个用户 ID,并且 URL 的长度不超过 4 KB。 |
-
-其他参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 操作结果:
- `true`:移除成功;
- `false`:移除失败。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 |
-| - `reason` | String | 操作失败的原因。 |
-| - `user` | String | 被移除成员的用户 ID。 |
-| - `groupid` | String | 操作的群组 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/ttXXXX81,user2,user3'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "9bXXXXf7",
- "uri": "https://XXXX/XXXX/XXXX",
- "entities": [],
- "data": [
- {
- "result": false,
- "action": "remove_member",
- "reason": "user ttXXXX81 doesn't exist.",
- "user": "user1",
- "groupid": "14XXXX79"
- },
- {
- "result": true,
- "action": "remove_member",
- "user": "user2",
- "groupid": "14XXXX79"
- },
- {
- "result": true,
- "action": "remove_member",
- "user": "user3",
- "groupid": "14XXXX79"
- }
- ],
- "timestamp": 1433492935318,
- "duration": 84,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。 |
-| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 无。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量移除群成员数量超过 60 人。 | 控制批量移除群成员数量在 60 以内。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 设置群成员自定义属性
-
-设置群成员的自定义属性(key-value),例如在群组中的昵称和头像等。
-
-#### HTTP 请求
-
-```http
-PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :--- | :------- | :----------------------------------------- |
-| `metaData` | JSON | 是 | 要设置的群成员自定义属性,为 key-value 键值对。对于单个键值对:
- key 表示属性名称,不能超过 16 字节。
- value 表示属性值,不能超过 512 个字节。若 value 设置为空字符串即删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :--- | :----------------------- |
-| `data` | JSON | 设置的群成员自定义属性。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-curl -L -X PUT 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/user/XXXX' \
--H 'Content-Type: application/json' \
--H 'Accept: application/json' \
--H 'Authorization: Bearer ' \
--d '{
- "metaData": {
- "key1": "value1"
- }
-}'
-```
-
-##### 响应示例
-
-```json
-{
- "timestamp": 1678674135533,
- "data": {
- "key1": "value1"
- },
- "duration": 53
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性 key 的长度。属性 key 不能超过 16 字节。 |
-| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性 value 的长度。value 不能超过 512 个字节。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 批量设置群成员自定义属性
-
-批量设置群成员的自定义属性(key-value),例如,在群组中的昵称和头像等。每次请求最多可为 20 个群成员设置多个属性,而且可对不同群成员设置不同属性。传入相同用户 ID 时,若其属性名称不同,则添加,相同则更新。
-
-**调用频率上限**:100 次/秒/App Key
-
-#### HTTP 请求
-
-```http
-PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/users/batch
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。|
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :--- | :------- | :-------------- |
-| `username` | JSON | 是 | 要设置自定义属性的群成员用户 ID,为 key-value 键值对。对于单个键值对:
- key 为固定字段,固定为 `username` 。
- value 填写要设置自定义属性的单个用户 ID,不可为空。 |
-| `metadata` | JSON | 是 | 要为该用户设置的群自定义属性,可包含多个 key-value 键值对。对于单个键值对:
- key 为要为该用户设置的属性名称,不能超过 16 字节,且不能为空。
- value 为要设置的属性的值,不能超过 512 个字节。若 value 设置为空字符串则删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :--- | :----------------------- |
-| `data` | JSON | 设置的群成员自定义属性,包含更新成功和失败的信息。 |
-| `updateMetadataFailed` | JSON Array | 失败的更新记录,包含更新失败的用户 ID 和对应的错误信息。 |
-| `updateMetadataSucceeded` | JSON Array | 成功的更新记录,包含用户 ID 及其在当前群中的自定义属性。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-curl -L -X PUT 'http://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/users/batch' \
--H 'Content-Type: application/json' \
--H 'Accept: application/json' \
--H 'Authorization: Bearer ' \
--d '[
- {
- "username": "user1",
- "metadata": {
- "metadataKey1": "value1",
- "metadataKey2": "value2"
- }
- },
- {
- "username": "user2",
- "metadata": {
- "metadataKey3": "value3",
- "metadataKey4": ""
- }
- }
-]'
-```
-
-##### 响应示例
-
-```json
-{
- "timestamp": 1727593257722,
- "data": {
- "updateMetadataFailed:": [],
- "updateMetadataSucceeded:": [
- {
- "username": "user1",
- "metadata": {
- "metadataKey1": "value1",
- "metadataKey2": "value2"
- }
- },
- {
- "username": "user2",
- "metadata": {
- "metadataKey3": "value3"
- }
- }
- ]
- },
- "duration": 483
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性名称的长度。属性 key 不能超过 16 字节。 |
-| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性值的长度。属性 value 不能超过 512 个字节。 |
-| 400 | metadata_error | Some users are not in the group: user99 | 部分用户不在群内 | 验证返回的用户是否在群内,如不在群内,请先添加至群聊或从请求中移除。 |
-| 400 | metadata_error | exceeds chatgroup metadata batch put users limit | 批量修改的群成员数量达到上限。 | 调整批量设置自定义属性的群成员数量,单次请求修改不能超过 20 个群成员。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | metadata_error | chatgroup user metadata service not allow | 自定义群成员属性功能未开通。 | 请联系商务开通。 |
-| 404 | metadata_error | group not exists | 群聊不存在。 | 请检查请求中的group_id 是否存在。 |
-| 409 | metadata_error | Failed to operate user metadata. Concurrent operation not allowed | 对相同用户并发请求操作其 metadata | 由于该接口为批量接口,尽量避免对相同用户并发操作的使用场景,可以通过一次性传入用户所需的全部 metadata 进行设置。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 获取单个群成员的所有自定义属性
-
-获取单个群成员的所有自定义属性。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :--- | :----------------------- |
-| `data` | JSON | 获取的群成员自定义属性。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-curl -L -X GET 'https://a1-hsb.easemob.com/easemob-demo/testy/metadata/chatgroup/207059303858177/user/test2' \
--H 'Content-Type: application/json' \
--H 'Accept: application/json'
--H 'Authorization: Bearer YWMtozZwfsFFEe2oQTE6aob5eQAAAAAAAAAAAAAAAAAAAAExCXvf5bRGAJBgXNYFJVQ9AQMAAAGG2MUClwBPGgDsI1GYg1QtapTEdGyrm29Eu6L8qx60lDZ9TJRDOQjEsw' \
---data-raw ''
-```
-
-##### 响应示例
-
-```json
-{
- "timestamp": 1678674211840,
- "data": {
- "key1": "value1"
- },
- "duration": 6
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | MetadataException | user not in group | 用户不在群组内。 | 使用正确的群组成员的用户 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 根据属性 key 获取多个群成员的自定义属性
-
-根据指定的属性 key 获取多个群成员的自定义属性。每次最多可获取 10 个群成员的自定义属性。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/get
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :----------- | :--------- | :------- | :--------------------------------- |
-| `targets` | JSON Array | 是 | 要获取自定义属性的群成员的用户 ID。一次最多可传 10 个用户 ID。 |
-| `properties` | JSON Array | 是 | 要获取自定义属性的 key 的数组。若该参数设置为空数组或不传,则获取这些群成员的所有自定义属性。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :--- | :------------------ |
-| `data` | JSON | 获取的群成员的自定义属性。如下响应示例中的 `test1` 和 `test2` 为自定义属性所属的群成员的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-curl -L -X POST 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/get'\
--H'Content-Type: application/json'\
--H'Accept: application/json'\
--H'Authorization: Bearer '\
--d '{
- "targets":["test1","test2"],
- "properties":["key1","key2"]
-}'
-```
-
-##### 响应示例
-
-```json
-{
- "timestamp": 1678674292783,
- "data": {
- "test1": {
- "key1": "value1"
- },
- "test2": {
- "key1": "value1"
- }
- },
- "duration": 2
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | metadata_error | query param reaches limit. | 批量查询数量达到限制。 | 减少要查询的用户 ID。每次最多可获取 10 个群成员的自定义属性。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 获取群管理员列表
-
-获取群组管理员列表。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------------------------------- |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :---- | :------------------------- |
-| `data` | Array | 群组管理员的用户 ID 列表。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin",
- "entities": [],
- "data": ["user1"],
- "timestamp": 1489073361210,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp",
- "count": 1
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 添加群管理员
-
-将一个普通群成员设为为群管理员。群管理员有管理黑名单、禁言等权限。最多可以添加 99 个群管理员。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------- |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :----- | :------- | :-------------------------- |
-| `newadmin` | String | 是 | 要添加的新管理员的用户 ID。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :-------------- | :----- | :---------------------- |
-| `data` | JSON | 群管理员添加结果。 |
-| `data.result` | String | 群管理员是否添加成功。 |
-| `data.newadmin` | String | 添加的管理员的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -d '{"newadmin":"user1"}' -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "52XXXXf0",
- "applicationName": "demo",
- "data": {
- "result": "success",
- "newadmin": "man"
- },
- "duration": 0,
- "entities": [],
- "organization": "XXXX",
- "properties": {},
- "timestamp": 1680074570600,
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/190141728620545/admin"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | user: XX doesn't exist in group: XXX | 用户不在群组中。 | 传入群组成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。|
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 移除群管理员
-
-将用户的角色从群管理员降为群普通成员。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------- |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :-------------- | :----- | :--------------------------------------------------------------------------- |
-| `data.result` | Bool | 操作结果:
- `success`:表示移除成功;
- `failure`:表示移除失败。 |
-| `data.oldadmin` | String | 被移除的管理员用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1 -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1",
- "entities": [],
- "data": {
- "result": "success",
- "oldadmin": "user1"
- },
- "timestamp": 1489073432732,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | user:XX is not admin of group:XX | 用户不是这个群的管理员。 | 传入在群组中管理员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 转让群组
-
-修改群主为同一群组中的其他成员。
-
-#### HTTP 请求
-
-```http
-PUT https://{host}/{org_name}/{app_name}/chatgroups/{group_id}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 描述 |
-| :--------- | :----- | :------------------------ |
-| `newowner` | String | 群组的新群主的用户 ID。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :-------------- | :--- | :-------------------------------------------------------------- |
-| `data.newowner` | Bool | 操作结果:
- `true`:转让成功。
- `false`:转让失败。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X PUT -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ "newowner": "user2" }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "put",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85",
- "entities": [],
- "data": {
- "newowner": true
- },
- "timestamp": 1542537813420,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | user: XX doesn't exist in group: XXX | 要转让的新群主不在群组中。 | 传入群组成员的用户 ID。 |
-| 403 | forbidden_op | new owner and old owner are the same | 新群主和旧群主不能是同一群成员。 | 传入的新群主的用户 ID 不能与旧群主的用户 ID 相同。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 管理黑名单
-
-环信即时通讯 IM 提供多个接口完成群组黑名单管理,包括查看黑名单中的用户以及将用户加入和移除黑名单等。
-
-### 查询群组黑名单
-
-查询一个群组黑名单中的用户列表。黑名单中的用户无法查看该群组的信息,也无法收到该群组的消息。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------ | :---- | :----------------------- |
-| `count` | Int | 群组黑名单中的用户数量。 |
-| `data` | Array | 群组黑名单上的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/67178793598977/blocks/users",
- "entities": [],
- "data": ["user2", "user3"],
- "timestamp": 1543466293681,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp",
- "count": 2
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 添加单个用户至群组黑名单
-
-将单个用户添加至群组黑名单。群主无法被加入群组的黑名单。
-
-用户进入群组黑名单后会收到加入黑名单的回调。之后,该用户无法查看该群组的信息,也收不到该群组的消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :---------------------------------------------------------------------------- |
-| `data.result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
-| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_blocks`,表示将成员添加至群组黑名单。 |
-| `data.user` | String | 添加的用户 ID。 |
-| `data.groupid` | String | 群组 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1",
- "entities": [],
- "data": {
- "result": true,
- "action": "add_blocks",
- "user": "user1",
- "groupid": "66XXXX85"
- },
- "timestamp": 1542539577124,
- "duration": 27,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-| 403 | forbidden_op | forbidden operation on group owner! | 无法将群主加入群组黑名单。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 批量添加用户至群组黑名单
-
-将多个用户添加至群组黑名单,一次最多可以添加 60 个用户。群主无法被加入群组的黑名单。
-
-用户进入群组黑名单后会收到加入黑名单的回调。黑名单上的用户无法查看该群组的信息,也收不到该群组的消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :---------- | :---- | :------- | :--------------------------------- |
-| `usernames` | Array | 是 | 要添加至群组黑名单的用户 ID 数组,每次最多可传 60 个用户 ID。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :-------------------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示将群成员加入群组黑名单。 |
-| - `reason` | String | 添加失败的原因。 |
-| - `user` | String | 添加的用户 ID。 |
-| - `groupid` | String | 群组 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
- "usernames": [
- "user3","user4"
- ]
- }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users",
- "entities": [],
- "data": [
- {
- "result": false,
- "action": "add_blocks",
- "reason": "user: user3 doesn't exist in group: 66XXXX85",
- "user": "user3",
- "groupid": "66XXXX85"
- },
- {
- "result": true,
- "action": "add_blocks",
- "user": "user4",
- "groupid": "66XXXX85"
- }
- ],
- "timestamp": 1542540095540,
- "duration": 16,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | userNames is more than max limit : 60 | 批量添加的用户数超过了上限 60。 | 调整要移除的数量在限制以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。|
-| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 从群组黑名单移除单个用户
-
-将指定用户移出群组黑名单。对于群组黑名单中的用户,如果需要将其再次加入群组,需要先将其从群组黑名单中移除。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :-------- | :----- | :-------------------- |
-| `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
-| `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将群成员移出群组黑名单。 |
-| `user` | String | 添加的用户 ID。 |
-| `groupid` | String | 群组 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1",
- "entities": [],
- "data": {
- "result": true,
- "action": "remove_blocks",
- "user": "user1",
- "groupid": "66XXXX85"
- },
- "timestamp": 1542540470679,
- "duration": 45,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 从群组黑名单批量移除用户
-
-将多名指定用户从群组黑名单中移除。你一次最多可移除 60 个用户。
-
-对于群组黑名单中的用户,如果要将其再次加入群组,需先将其从群组黑名单中移除。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{usernames}
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :---------- | :----- | :------- | :-------------------------- |
-| `usernames` | String | 是 | 要移除群组黑名单的用户 ID,一次最多可传 60 个,用户 ID 之间以英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。 |
-
-其他参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :-------------------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :-------------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户从群组黑名单批量移除。 |
-| - `user` | String | 被移除的用户 ID。 |
-| - `groupid` | String | 群组 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "8bXXXX02",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2",
- "entities": [],
- "data": [
- {
- "result": true,
- "action": "remove_blocks",
- "user": "user1",
- "groupid": "66XXXX85"
- },
- {
- "result": true,
- "action": "remove_blocks",
- "user": "user2",
- "groupid": "66XXXX85"
- }
- ],
- "timestamp": 1542541014655,
- "duration": 29,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | removeBlacklist: list size more than max limit : 60 | 批量删除超过上限 60。 | 调整要移除的数量在限制以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 管理白名单
-
-环信即时通讯 IM 提供多个接口实现群组白名单管理,包括查看群组白名单中的用户以及将用户添加至或移除白名单等。
-
-### 查询群组白名单
-
-查询群组白名单中的用户列表。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :----- | :---- | :--------------------------- |
-| `data` | Array | 群组白名单中的用户 ID 列表。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "XXXX",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users",
- "entities": [],
- "data": [
- "wzy_test",
- "wzy_vivo",
- "wzy_huawei",
- "wzy_xiaomi",
- "wzXXXXzu"
- ],
- "timestamp": 1594724947117,
- "duration": 3,
- "organization": "XXXX",
- "applicationName": "XXXX",
- "count": 5
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 添加单个用户至群组白名单
-
-将指定的单个用户添加至群组白名单。用户添加至群组白名单后,当群组全员被禁言时,仍可以在群组中发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username}
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------------ |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 描述 |
-| :------------- | :----------------------- |
-| `data.result` | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
-| `data.action` | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 |
-| `data.user` | 添加的用户 ID。 |
-| `data.groupid` | 群组 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "XXXX",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_xiaomi",
- "entities": [],
- "data": {
- "result": true,
- "action": "add_user_whitelist",
- "user": "wzy_xiaomi",
- "groupid": "12XXXX53"
- },
- "timestamp": 1594724293063,
- "duration": 4,
- "organization": "XXXX",
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 批量添加用户至群组白名单
-
-添加多个用户至群组白名单。你一次最多可添加 60 个用户。
-
-用户添加至白名单后在群组全员禁言时仍可以在群组中发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------------------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 描述 |
-| :---------- | :---- | :----------------- |
-| `usernames` | Array | 待添加至群组白名单中的用户 ID 数组,每次最多可传 60 个用户 ID。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :--------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 |
-| - `user` | String | 添加的用户 ID。 |
-| - `groupid` | String | 群组 ID。 |
-| - `reason` | String | 添加失败的原因。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "XXXX",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users",
- "entities": [],
- "data": [
- {
- "result": true,
- "action": "add_user_whitelist",
- "user": "wzy_test",
- "groupid": "12XXXX53"
- },
- {
- "result": true,
- "action": "add_user_whitelist",
- "user": "wzXXXXzu",
- "groupid": "12XXXX53"
- }
- ],
- "timestamp": 1594724634191,
- "duration": 2,
- "organization": "XXXX",
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单的群成员超过了上限 60。 | 调整要添加的数量在限制(60)以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 从群组白名单移除用户
-
-将指定用户从群组白名单中移除。你每次最多可移除 60 个用户。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username}
-```
-
-##### 路径参数
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------- | :----- | :------- | :----- |
-| `username` | String | 是 | 要从群组白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 |
-
-其他参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------- | :----- | :------- | :----- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------- | :----- | :--------------------------------------------------------------------------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
-| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将成员移出群组白名单。 |
-| - `user` | String | 移除群组白名单的用户 ID。 |
-| - `groupid` | String | 群组 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "XXXX",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_huawei,wzXXXXzu",
- "entities": [],
- "data": [
- {
- "result": true,
- "action": "remove_user_whitelist",
- "user": "wzy_huawei",
- "groupid": "12XXXX53"
- },
- {
- "result": true,
- "action": "remove_user_whitelist",
- "user": "wzXXXXzu",
- "groupid": "12XXXX53"
- }
- ],
- "timestamp": 1594725137704,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单的群成员数量超过了上限 60。 | 调整要移除的数量在限制(60)以下。 |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。|
-| 403 | forbidden_op | users [XX] are not members of this group! | 要移除白名单的用户 ID 不在群组中。 | 传入在群组白名单中的用户 ID。|
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-## 管理禁言
-
-环信即时通讯 IM 提供多个接口进行群组禁言列表管理,包括查看禁言列表以及将用户添加至或移出禁言列表等。
-
-### 获取禁言列表
-
-获取当前群组的禁言用户列表。
-
-#### HTTP 请求
-
-```http
-GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :--------------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :----- | :--------------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `expire` | Long | 禁言到期的时间,单位为毫秒。 |
-| - `user` | String | 被禁言用户的 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "get",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute",
- "entities": [],
- "data": [
- {
- "expire": 1489158589481,
- "user": "user1"
- }
- ],
- "timestamp": 1489072802179,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群组 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 禁言指定群成员
-
-对一个或多个群成员禁言。你一次最多可禁言 60 个群组成员。
-
-群成员被禁言后,将无法在群组中发送消息,也无法在该群组下的子区中发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :----------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-##### 请求 body
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :---- | :------- | :--------------------------------------------------------- |
-| `mute_duration` | Long | 是 | 禁言时长,单位为毫秒。 |
-| `usernames` | Array | 是 | 要添加到禁言列表的用户 ID 列表,每次最多可添加 60 个。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :----- | :-------------------------------------------------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 操作结果:
- `true`:添加成功;
- `false`:添加失败。 |
-| - `expire` | Long | 禁言到期的时间。该时间为 Unix 时间戳,单位为毫秒。 |
-| - `user` | String | 被禁言用户的 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -d '{"usernames":["user1"], "mute_duration":86400000}' -H 'Authorization: Bearer '
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute",
- "entities": [],
- "data": [
- {
- "result": true,
- "expire": 1489158589481,
- "user": "user1"
- }
- ],
- "timestamp": 1489072189508,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 403 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在群组中。 | 传入群组中的用户 ID。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定群成员数量超过60 | 控制禁言指定群成员数量在 60 以内。 |
-| 403 | forbidden_op | "forbidden operation on group owner!" | 无法对群主禁言。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 禁言全体群成员
-
-对所有群组成员一键禁言,即将群组的所有成员加入禁言列表。设置群组全员禁言后,仅群组白名单中的用户可在群组以及该群组下的子区内发送消息。
-
-#### HTTP 请求
-
-```http
-POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :---------- |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :--- | :-------------------------------------------------------------- |
-| `data.mute` | Bool | 操作结果:
- `true`:禁言成功;
- `false`:禁言失败。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "post",
- "application": "XXXX",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban",
- "entities": [],
- "data": {
- "mute": true
- },
- "timestamp": 1594628861058,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 解除成员禁言
-
-将一个或多个群成员移出禁言列表。你一次最多可对 60 个成员解除禁言。
-
-移除后,群成员可以在群组中正常发送消息,同时也可以在该群组下的子区中发送消息。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute/{member1}(,{member2},…)
-```
-
-##### 路径参数
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :------- | :----- | :------- | :---------------------------------------------------------------------------------------- |
-| `member` | String | 是 | 要解除禁言的成员的用户 ID,每次最多可传 60 个,多个用户 ID 之间以英文逗号(",")分隔,例如 `{member1},{member2}`。 |
-
-其他参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------- |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :------------ | :---- | :-------------------------------------------------------------- |
-| `data` | JSON Array | 响应数据。|
-| - `result` | Bool | 操作结果:
- `true`:解除成功;
- `false`:解除失败。 |
-| - `user` | Array | 被移出禁言列表的用户 ID。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/10130212061185/mute/user1'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "52XXXXf0",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute/user1",
- "entities": [],
- "data": [
- {
- "result": true,
- "user": "user1"
- }
- ],
- "timestamp": 1489072695859,
- "duration": 0,
- "organization": "XXXX",
- "applicationName": "testapp"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言列表的用户数超过上限 60。 | 控制解除成员禁言数量在 60 以内。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
-### 解除全员禁言
-
-一键取消对群组全体成员的禁言。解除禁言后,群成员可以在群组和该群组下的子区中正常发送消息。
-
-#### HTTP 请求
-
-```http
-DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban
-```
-
-##### 路径参数
-
-参数及描述详见 [公共参数](#公共参数)。
-
-##### 请求 header
-
-| 参数 | 类型 | 是否必需 | 描述 |
-| :-------------- | :----- | :------- | :------------------------------ |
-| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
-| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
-
-#### HTTP 响应
-
-##### 响应 body
-
-如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
-
-| 字段 | 类型 | 描述 |
-| :---------- | :--- | :--------------------------------------------------------------- |
-| `data.mute` | Bool | 是否处于全员禁言状态。
- `true`:是;
- `false`:否。 |
-
-其他字段及描述详见 [公共参数](#公共参数)。
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
-
-#### 示例
-
-##### 请求示例
-
-```shell
-# 将 替换为你在服务端生成的 App Token
-
-curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban'
-```
-
-##### 响应示例
-
-```json
-{
- "action": "delete",
- "application": "XXXX",
- "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban",
- "entities": [],
- "data": {
- "mute": false
- },
- "timestamp": 1594628899502,
- "duration": 1,
- "organization": "XXXX",
- "applicationName": "XXXX"
-}
-```
-
-#### 错误码
-
-如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
-
-| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
-| :----------- | :--- | :------------- | :----------- | :----------- |
-| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
-| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
-
-关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
-
diff --git a/docs/document/server-side/group_member_add_delete.md b/docs/document/server-side/group_member_add_delete.md
new file mode 100644
index 00000000..9f5efa91
--- /dev/null
+++ b/docs/document/server-side/group_member_add_delete.md
@@ -0,0 +1,413 @@
+# 添加/移除群组成员
+
+
+
+环信即时通讯 IM 提供了多个 RESTful API 接口实现群组成员的添加和移除,包括添加单个或批量添加成员和移除单个或批量移除成员。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `group_id` | String | 是 | 群组 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :----------------------------------------------------------------------------- |
+| `action` | String | 请求方法。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 实际获取的数据详情。 |
+| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | Unix 时间戳,单位为毫秒。 |
+| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 |
+| `properties` | String | 响应属性。 |
+
+## 认证方式
+
+环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 添加单个群组成员
+
+每次添加一个群成员。若添加的用户已是群成员,则添加失败,返回错误。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------ |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :-------------------------------------------------------------------- |
+| `data.result` | Bool | 添加结果:
- `true`:成功。
- `false`:失败。 |
+| `data.groupid` | String | 群组 ID。 |
+| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群组成员。 |
+| `data.user` | String | 添加的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4",
+ "entities": [],
+ "data": {
+ "result": true,
+ "groupid": "66XXXX85",
+ "action": "add_member",
+ "user": "user4"
+ },
+ "timestamp": 1542364958405,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | can not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在 | 使用合法的用户,即 `username` 传入存在的用户 ID。|
+| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量添加群组成员
+
+一次为群组添加多个成员,每次最多可以添加 60 位成员。如果所有用户均已是群成员,添加失败,返回错误。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---------- | :---- | :------- | :---------- |
+| `usernames` | Array | 是 | 要添加为群组成员的用户 ID 数组,每次最多可传 60 个用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :---------------- | :----- | :----------------- |
+| `data.newmembers` | Array | 添加的群组成员的用户 ID。 |
+| `data.groupid` | String | 群组 ID。 |
+| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群成员。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
+ "usernames": [
+ "user4","user5"
+ ]
+ }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users",
+ "entities": [],
+ "data": {
+ "newmembers": ["user5", "user4"],
+ "groupid": "66XXXX85",
+ "action": "add_member"
+ },
+ "timestamp": 1542365557942,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | an not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。|
+| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 |
+| 403 | exceed_limit | members size is greater than max user size ! | 加入群成员的人数超过最大限制。每次最多可以添加 60 位成员。 | 调整创建群的加群人数。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在。 | 使用合法的用户,即 `username` 传入存在的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 移除单个群组成员
+
+从群中移除指定成员。如果被移除用户不是群成员,将移除失败,并返回错误。移除后,该成员也会被移除其在该群组中加入的子区。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :----------------------------------------------------------------------- |
+| `data.result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
+| `data.groupid` | String | 群组 ID。 |
+| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 |
+| `data.user` | String | 被移除的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "remove_member",
+ "user": "user3",
+ "groupid": "66XXXX85"
+ },
+ "timestamp": 1542365943067,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。|
+| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 不要将群主移出群组。 |
+| 403 | exceed_limit | user XX has joined too many groups! | 用户加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量移除群组成员
+
+一次移除多名群成员。如果所有被移除用户均不是群成员,将移除失败,并返回错误。移除后,这些成员也会被移除其在该群组中加入的子区。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{members}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------- | :----- | :------- | :-------------------------------------------------------------------------------------------------------------- |
+| `members` | String | 是 | 要移除的群成员的用户 ID,用户 ID 之间用英文逗号(",")分隔。建议每次最多传 60 个用户 ID,并且 URL 的长度不超过 4 KB。 |
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 操作结果:
- `true`:移除成功;
- `false`:移除失败。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 |
+| - `reason` | String | 操作失败的原因。 |
+| - `user` | String | 被移除成员的用户 ID。 |
+| - `groupid` | String | 操作的群组 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/ttXXXX81,user2,user3'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "9bXXXXf7",
+ "uri": "https://XXXX/XXXX/XXXX",
+ "entities": [],
+ "data": [
+ {
+ "result": false,
+ "action": "remove_member",
+ "reason": "user ttXXXX81 doesn't exist.",
+ "user": "user1",
+ "groupid": "14XXXX79"
+ },
+ {
+ "result": true,
+ "action": "remove_member",
+ "user": "user2",
+ "groupid": "14XXXX79"
+ },
+ {
+ "result": true,
+ "action": "remove_member",
+ "user": "user3",
+ "groupid": "14XXXX79"
+ }
+ ],
+ "timestamp": 1433492935318,
+ "duration": 84,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。 |
+| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 无。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量移除群成员数量超过 60 人。 | 控制批量移除群成员数量在 60 以内。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/group_member_admin.md b/docs/document/server-side/group_member_admin.md
new file mode 100644
index 00000000..a1317106
--- /dev/null
+++ b/docs/document/server-side/group_member_admin.md
@@ -0,0 +1,378 @@
+# 管理群组主和群管理员
+
+
+
+环信即时通讯 IM 提供了多个 RESTful API 管理群主和管理员,包括转让群组、查询管理员和添加和移除单个群组管理员。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `group_id` | String | 是 | 群组 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :----------------------------------------------------------------------------- |
+| `action` | String | 请求方法。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 实际获取的数据详情。 |
+| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | Unix 时间戳,单位为毫秒。 |
+| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 |
+| `properties` | String | 响应属性。 |
+
+## 群组角色
+
+群组角色包含群主、群管理员和普通群成员,三个角色权限范围依次递减。
+
+- 群主拥有群的所有权限;
+- 群管理员拥有管理黑名单、白名单和禁言等权限;
+- 群主加管理员数量共 100 个,即管理员最多可添加 99 个。
+
+## 认证方式
+
+环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 转让群组
+
+修改群主为同一群组中的其他成员。
+
+#### HTTP 请求
+
+```http
+PUT https://{host}/{org_name}/{app_name}/chatgroups/{group_id}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 描述 |
+| :--------- | :----- | :------------------------ |
+| `newowner` | String | 群组的新群主的用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :-------------- | :--- | :-------------------------------------------------------------- |
+| `data.newowner` | Bool | 操作结果:
- `true`:转让成功。
- `false`:转让失败。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X PUT -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ "newowner": "user2" }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "put",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85",
+ "entities": [],
+ "data": {
+ "newowner": true
+ },
+ "timestamp": 1542537813420,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | user: XX doesn't exist in group: XXX | 要转让的新群主不在群组中。 | 传入群组成员的用户 ID。 |
+| 403 | forbidden_op | new owner and old owner are the same | 新群主和旧群主不能是同一群成员。 | 传入的新群主的用户 ID 不能与旧群主的用户 ID 相同。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 获取群管理员列表
+
+获取群组管理员列表。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------------------- |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------- |
+| `data` | Array | 群组管理员的用户 ID 列表。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin",
+ "entities": [],
+ "data": ["user1"],
+ "timestamp": 1489073361210,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp",
+ "count": 1
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 添加群管理员
+
+将一个普通群成员设为群管理员。群管理员有管理黑名单、禁言等权限。最多可以添加 99 个群管理员。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------- |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :-------------------------- |
+| `newadmin` | String | 是 | 要添加的新管理员的用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :-------------- | :----- | :---------------------- |
+| `data` | JSON | 群管理员添加结果。 |
+| `data.result` | String | 群管理员是否添加成功。 |
+| `data.newadmin` | String | 添加的管理员的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -d '{"newadmin":"user1"}' -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "52XXXXf0",
+ "applicationName": "demo",
+ "data": {
+ "result": "success",
+ "newadmin": "man"
+ },
+ "duration": 0,
+ "entities": [],
+ "organization": "XXXX",
+ "properties": {},
+ "timestamp": 1680074570600,
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/190141728620545/admin"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | user: XX doesn't exist in group: XXX | 用户不在群组中。 | 传入群组成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。|
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 移除群管理员
+
+将用户的角色从群管理员降为群普通成员。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin/{username}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `username` | String | 是 | 要移出群组管理员列表的管理员的用户 ID。 |
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------- |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :-------------- | :----- | :--------------------------------------------------------------------------- |
+| `data.result` | Bool | 操作结果:
- `success`:表示移除成功;
- `failure`:表示移除失败。 |
+| `data.oldadmin` | String | 被移除的管理员用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1 -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1",
+ "entities": [],
+ "data": {
+ "result": "success",
+ "oldadmin": "user1"
+ },
+ "timestamp": 1489073432732,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | user:XX is not admin of group:XX | 用户不是这个群的管理员。 | 传入在群组中管理员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+
diff --git a/docs/document/server-side/group_member_allowlist.md b/docs/document/server-side/group_member_allowlist.md
new file mode 100644
index 00000000..c4fbbf61
--- /dev/null
+++ b/docs/document/server-side/group_member_allowlist.md
@@ -0,0 +1,410 @@
+# 群组白名单管理
+
+
+
+环信即时通讯 IM 提供多个接口实现群组白名单管理,包括查看白名单中的用户以及将用户添加至和移出白名单等。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `group_id` | String | 是 | 群组 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :----------------------------------------------------------------------------- |
+| `action` | String | 请求方法。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 实际获取的数据详情。 |
+| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | Unix 时间戳,单位为毫秒。 |
+| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 |
+| `properties` | String | 响应属性。 |
+
+## 认证方式
+
+环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 查询群组白名单
+
+查询群组白名单中的用户列表。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :--------------------------- |
+| `data` | Array | 群组白名单中的用户 ID 列表。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "XXXX",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users",
+ "entities": [],
+ "data": [
+ "wzy_test",
+ "wzy_vivo",
+ "wzy_huawei",
+ "wzy_xiaomi",
+ "wzXXXXzu"
+ ],
+ "timestamp": 1594724947117,
+ "duration": 3,
+ "organization": "XXXX",
+ "applicationName": "XXXX",
+ "count": 5
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 添加单个用户至群组白名单
+
+将指定的单个用户添加至群组白名单。用户添加至群组白名单后,当群组全员被禁言时,仍可以在群组中发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `username` | String | 是 | 要加入群组白名单的用户 ID。 |
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------------------ |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 描述 |
+| :------------- | :----------------------- |
+| `data.result` | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
+| `data.action` | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 |
+| `data.user` | 添加的用户 ID。 |
+| `data.groupid` | 群组 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "XXXX",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_xiaomi",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "add_user_whitelist",
+ "user": "wzy_xiaomi",
+ "groupid": "12XXXX53"
+ },
+ "timestamp": 1594724293063,
+ "duration": 4,
+ "organization": "XXXX",
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量添加用户至群组白名单
+
+添加多个用户至群组白名单。你一次最多可添加 60 个用户。
+
+用户添加至白名单后在群组全员禁言时仍可以在群组中发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 描述 |
+| :---------- | :---- | :----------------- |
+| `usernames` | Array | 待添加至群组白名单中的用户 ID 数组,每次最多可传 60 个用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :--------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 |
+| - `user` | String | 添加的用户 ID。 |
+| - `groupid` | String | 群组 ID。 |
+| - `reason` | String | 添加失败的原因。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "XXXX",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "action": "add_user_whitelist",
+ "user": "wzy_test",
+ "groupid": "12XXXX53"
+ },
+ {
+ "result": true,
+ "action": "add_user_whitelist",
+ "user": "wzXXXXzu",
+ "groupid": "12XXXX53"
+ }
+ ],
+ "timestamp": 1594724634191,
+ "duration": 2,
+ "organization": "XXXX",
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单的群成员超过了上限 60。 | 调整要添加的数量在限制(60)以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 从群组白名单移除用户
+
+将指定用户从群组白名单中移除。你每次最多可移除 60 个用户。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username}
+```
+
+##### 路径参数
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------- | :----- | :------- | :----- |
+| `username` | String | 是 | 要从群组白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 |
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------- | :----- | :------- | :----- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :--------------------------------------------------------------------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将成员移出群组白名单。 |
+| - `user` | String | 移除群组白名单的用户 ID。 |
+| - `groupid` | String | 群组 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "XXXX",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_huawei,wzXXXXzu",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "action": "remove_user_whitelist",
+ "user": "wzy_huawei",
+ "groupid": "12XXXX53"
+ },
+ {
+ "result": true,
+ "action": "remove_user_whitelist",
+ "user": "wzXXXXzu",
+ "groupid": "12XXXX53"
+ }
+ ],
+ "timestamp": 1594725137704,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单的群成员数量超过了上限 60。 | 调整要移除的数量在限制(60)以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。|
+| 403 | forbidden_op | users [XX] are not members of this group! | 要移除白名单的用户 ID 不在群组中。 | 传入在群组白名单中的用户 ID。|
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
diff --git a/docs/document/server-side/group_member_attribute.md b/docs/document/server-side/group_member_attribute.md
new file mode 100644
index 00000000..7787c32f
--- /dev/null
+++ b/docs/document/server-side/group_member_attribute.md
@@ -0,0 +1,412 @@
+# 群成员属性管理
+
+
+
+环信即时通讯 IM 提供了 RESTful API 管理 App 中群组的成员的属性,包括设置和获取单个或多个群成员的属性。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `group_id` | String | 是 | 群组 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :----------------------------------------------------------------------------- |
+| `action` | String | 请求方法。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 实际获取的数据详情。 |
+| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | Unix 时间戳,单位为毫秒。 |
+| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 |
+| `properties` | String | 响应属性。 |
+
+## 认证方式
+
+环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 设置群成员自定义属性
+
+设置群成员的自定义属性(key-value),例如在群组中的昵称和头像等。
+
+#### HTTP 请求
+
+```http
+PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :--- | :------- | :----------------------------------------- |
+| `metaData` | JSON | 是 | 要设置的群成员自定义属性,为 key-value 键值对。对于单个键值对:
- key 表示属性名称,不能超过 16 字节。
- value 表示属性值,不能超过 512 个字节。若 value 设置为空字符串即删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :--- | :----------------------- |
+| `data` | JSON | 设置的群成员自定义属性。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+curl -L -X PUT 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/user/XXXX' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "metaData": {
+ "key1": "value1"
+ }
+}'
+```
+
+##### 响应示例
+
+```json
+{
+ "timestamp": 1678674135533,
+ "data": {
+ "key1": "value1"
+ },
+ "duration": 53
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性 key 的长度。属性 key 不能超过 16 字节。 |
+| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性 value 的长度。value 不能超过 512 个字节。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量设置群成员自定义属性
+
+批量设置群成员的自定义属性(key-value),例如,在群组中的昵称和头像等。每次请求最多可为 20 个群成员设置多个属性,而且可对不同群成员设置不同属性。传入相同用户 ID 时,若其属性名称不同,则添加,相同则更新。
+
+**调用频率上限**:100 次/秒/App Key
+
+#### HTTP 请求
+
+```http
+PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/users/batch
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。|
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :--- | :------- | :-------------- |
+| `username` | JSON | 是 | 要设置自定义属性的群成员用户 ID,为 key-value 键值对。对于单个键值对:
- key 为固定字段,固定为 `username` 。
- value 填写要设置自定义属性的单个用户 ID,不可为空。 |
+| `metadata` | JSON | 是 | 要为该用户设置的群自定义属性,可包含多个 key-value 键值对。对于单个键值对:
- key 为要为该用户设置的属性名称,不能超过 16 字节,且不能为空。
- value 为要设置的属性的值,不能超过 512 个字节。若 value 设置为空字符串则删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :--- | :----------------------- |
+| `data` | JSON | 设置的群成员自定义属性,包含更新成功和失败的信息。 |
+| `updateMetadataFailed` | JSON Array | 失败的更新记录,包含更新失败的用户 ID 和对应的错误信息。 |
+| `updateMetadataSucceeded` | JSON Array | 成功的更新记录,包含用户 ID 及其在当前群中的自定义属性。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+curl -L -X PUT 'http://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/users/batch' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '[
+ {
+ "username": "user1",
+ "metadata": {
+ "metadataKey1": "value1",
+ "metadataKey2": "value2"
+ }
+ },
+ {
+ "username": "user2",
+ "metadata": {
+ "metadataKey3": "value3",
+ "metadataKey4": ""
+ }
+ }
+]'
+```
+
+##### 响应示例
+
+```json
+{
+ "timestamp": 1727593257722,
+ "data": {
+ "updateMetadataFailed:": [],
+ "updateMetadataSucceeded:": [
+ {
+ "username": "user1",
+ "metadata": {
+ "metadataKey1": "value1",
+ "metadataKey2": "value2"
+ }
+ },
+ {
+ "username": "user2",
+ "metadata": {
+ "metadataKey3": "value3"
+ }
+ }
+ ]
+ },
+ "duration": 483
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性名称的长度。属性 key 不能超过 16 字节。 |
+| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性值的长度。属性 value 不能超过 512 个字节。 |
+| 400 | metadata_error | Some users are not in the group: user99 | 部分用户不在群内 | 验证返回的用户是否在群内,如不在群内,请先添加至群聊或从请求中移除。 |
+| 400 | metadata_error | exceeds chatgroup metadata batch put users limit | 批量修改的群成员数量达到上限。 | 调整批量设置自定义属性的群成员数量,单次请求修改不能超过 20 个群成员。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | metadata_error | chatgroup user metadata service not allow | 自定义群成员属性功能未开通。 | 请联系商务开通。 |
+| 404 | metadata_error | group not exists | 群聊不存在。 | 请检查请求中的group_id 是否存在。 |
+| 409 | metadata_error | Failed to operate user metadata. Concurrent operation not allowed | 对相同用户并发请求操作其 metadata | 由于该接口为批量接口,尽量避免对相同用户并发操作的使用场景,可以通过一次性传入用户所需的全部 metadata 进行设置。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 获取单个群成员的所有自定义属性
+
+获取单个群成员的所有自定义属性。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :--- | :----------------------- |
+| `data` | JSON | 获取的群成员自定义属性。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+curl -L -X GET 'https://a1-hsb.easemob.com/easemob-demo/testy/metadata/chatgroup/207059303858177/user/test2' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json'
+-H 'Authorization: Bearer YWMtozZwfsFFEe2oQTE6aob5eQAAAAAAAAAAAAAAAAAAAAExCXvf5bRGAJBgXNYFJVQ9AQMAAAGG2MUClwBPGgDsI1GYg1QtapTEdGyrm29Eu6L8qx60lDZ9TJRDOQjEsw' \
+--data-raw ''
+```
+
+##### 响应示例
+
+```json
+{
+ "timestamp": 1678674211840,
+ "data": {
+ "key1": "value1"
+ },
+ "duration": 6
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | MetadataException | user not in group | 用户不在群组内。 | 使用正确的群组成员的用户 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 根据属性 key 获取多个群成员的自定义属性
+
+根据指定的属性 key 获取多个群成员的自定义属性。每次最多可获取 10 个群成员的自定义属性。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/get
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :----------- | :--------- | :------- | :--------------------------------- |
+| `targets` | JSON Array | 是 | 要获取自定义属性的群成员的用户 ID。一次最多可传 10 个用户 ID。 |
+| `properties` | JSON Array | 是 | 要获取自定义属性的 key 的数组。若该参数设置为空数组或不传,则获取这些群成员的所有自定义属性。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :--- | :------------------ |
+| `data` | JSON | 获取的群成员的自定义属性。如下响应示例中的 `test1` 和 `test2` 为自定义属性所属的群成员的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+curl -L -X POST 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/get'\
+-H'Content-Type: application/json'\
+-H'Accept: application/json'\
+-H'Authorization: Bearer '\
+-d '{
+ "targets":["test1","test2"],
+ "properties":["key1","key2"]
+}'
+```
+
+##### 响应示例
+
+```json
+{
+ "timestamp": 1678674292783,
+ "data": {
+ "test1": {
+ "key1": "value1"
+ },
+ "test2": {
+ "key1": "value1"
+ }
+ },
+ "duration": 2
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | metadata_error | query param reaches limit. | 批量查询数量达到限制。 | 减少要查询的用户 ID。每次最多可获取 10 个群成员的自定义属性。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
diff --git a/docs/document/server-side/group_member_blocklist.md b/docs/document/server-side/group_member_blocklist.md
new file mode 100644
index 00000000..10af6f9e
--- /dev/null
+++ b/docs/document/server-side/group_member_blocklist.md
@@ -0,0 +1,493 @@
+# 群组黑名单管理
+
+
+
+环信即时通讯 IM 提供多个接口实现群组黑名单管理,包括查询群组黑名单、将成员添加和移除聊天室黑名单。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `group_id` | String | 是 | 群组 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :----------------------------------------------------------------------------- |
+| `action` | String | 请求方法。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 实际获取的数据详情。 |
+| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | Unix 时间戳,单位为毫秒。 |
+| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 |
+| `properties` | String | 响应属性。 |
+
+## 认证方式
+
+环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 查询群组黑名单
+
+查询一个群组黑名单中的用户列表。黑名单中的用户无法查看该群组的信息,也无法收到该群组的消息。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------ | :---- | :----------------------- |
+| `count` | Int | 群组黑名单中的用户数量。 |
+| `data` | Array | 群组黑名单上的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/67178793598977/blocks/users",
+ "entities": [],
+ "data": ["user2", "user3"],
+ "timestamp": 1543466293681,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp",
+ "count": 2
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 添加单个用户至群组黑名单
+
+将单个用户添加至群组黑名单。群主无法被加入群组的黑名单。
+
+用户进入群组黑名单后会收到加入黑名单的回调。之后,该用户无法查看该群组的信息,也收不到该群组的消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :---------------------------------------------------------------------------- |
+| `data.result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
+| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_blocks`,表示将成员添加至群组黑名单。 |
+| `data.user` | String | 添加的用户 ID。 |
+| `data.groupid` | String | 群组 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "add_blocks",
+ "user": "user1",
+ "groupid": "66XXXX85"
+ },
+ "timestamp": 1542539577124,
+ "duration": 27,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+| 403 | forbidden_op | forbidden operation on group owner! | 无法将群主加入群组黑名单。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 批量添加用户至群组黑名单
+
+将多个用户添加至群组黑名单,一次最多可以添加 60 个用户。群主无法被加入群组的黑名单。
+
+用户进入群组黑名单后会收到加入黑名单的回调。黑名单上的用户无法查看该群组的信息,也收不到该群组的消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---------- | :---- | :------- | :--------------------------------- |
+| `usernames` | Array | 是 | 要添加至群组黑名单的用户 ID 数组,每次最多可传 60 个用户 ID。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :-------------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示将群成员加入群组黑名单。 |
+| - `reason` | String | 添加失败的原因。 |
+| - `user` | String | 添加的用户 ID。 |
+| - `groupid` | String | 群组 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
+ "usernames": [
+ "user3","user4"
+ ]
+ }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users",
+ "entities": [],
+ "data": [
+ {
+ "result": false,
+ "action": "add_blocks",
+ "reason": "user: user3 doesn't exist in group: 66XXXX85",
+ "user": "user3",
+ "groupid": "66XXXX85"
+ },
+ {
+ "result": true,
+ "action": "add_blocks",
+ "user": "user4",
+ "groupid": "66XXXX85"
+ }
+ ],
+ "timestamp": 1542540095540,
+ "duration": 16,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | userNames is more than max limit : 60 | 批量添加的用户数超过了上限 60。 | 调整要移除的数量在限制以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。|
+| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 从群组黑名单移除单个用户
+
+将指定用户移出群组黑名单。对于群组黑名单中的用户,如果需要将其再次加入群组,需要先将其从群组黑名单中移除。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username}
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :-------- | :----- | :-------------------- |
+| `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
+| `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将群成员移出群组黑名单。 |
+| `user` | String | 添加的用户 ID。 |
+| `groupid` | String | 群组 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1",
+ "entities": [],
+ "data": {
+ "result": true,
+ "action": "remove_blocks",
+ "user": "user1",
+ "groupid": "66XXXX85"
+ },
+ "timestamp": 1542540470679,
+ "duration": 45,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 从群组黑名单批量移除用户
+
+将多名指定用户从群组黑名单中移除。你一次最多可移除 60 个用户。
+
+对于群组黑名单中的用户,如果要将其再次加入群组,需先将其从群组黑名单中移除。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{usernames}
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---------- | :----- | :------- | :-------------------------- |
+| `usernames` | String | 是 | 要移除群组黑名单的用户 ID,一次最多可传 60 个,用户 ID 之间以英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。 |
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------- | :----- | :-------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 |
+| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户从群组黑名单批量移除。 |
+| - `user` | String | 被移除的用户 ID。 |
+| - `groupid` | String | 群组 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8bXXXX02",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "action": "remove_blocks",
+ "user": "user1",
+ "groupid": "66XXXX85"
+ },
+ {
+ "result": true,
+ "action": "remove_blocks",
+ "user": "user2",
+ "groupid": "66XXXX85"
+ }
+ ],
+ "timestamp": 1542541014655,
+ "duration": 29,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 400 | invalid_parameter | removeBlacklist: list size more than max limit : 60 | 批量删除超过上限 60。 | 调整要移除的数量在限制以下。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/group_member_mutelist.md b/docs/document/server-side/group_member_mutelist.md
new file mode 100644
index 00000000..fcf7873c
--- /dev/null
+++ b/docs/document/server-side/group_member_mutelist.md
@@ -0,0 +1,461 @@
+# 群组成员禁言管理
+
+
+
+环信即时通讯 IM 提供多个接口实现聊天室成员禁言,包括获取禁言列表、将成员添加或移出禁言列表,以及全员禁言和解除全员禁言。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
+
+## 公共参数
+
+#### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `group_id` | String | 是 | 群组 ID。 |
+| `username` | String | 是 | 用户 ID。 |
+
+#### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :---------------- | :----- | :----------------------------------------------------------------------------- |
+| `action` | String | 请求方法。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON | 实际获取的数据详情。 |
+| `uuid` | String | 用户在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 |
+| `timestamp` | Long | Unix 时间戳,单位为毫秒。 |
+| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 |
+| `properties` | String | 响应属性。 |
+
+## 认证方式
+
+环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 获取禁言列表
+
+获取当前群组的禁言用户列表。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :----- | :--------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `expire` | Long | 禁言到期的时间,单位为毫秒。 |
+| - `user` | String | 被禁言用户的 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute",
+ "entities": [],
+ "data": [
+ {
+ "expire": 1489158589481,
+ "user": "user1"
+ }
+ ],
+ "timestamp": 1489072802179,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群组 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 禁言指定群成员
+
+对一个或多个群成员禁言。你一次最多可禁言 60 个群组成员。
+
+群成员被禁言后,将无法在群组中发送消息,也无法在该群组下的子区中发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :---- | :------- | :--------------------------------------------------------- |
+| `mute_duration` | Long | 是 | 禁言时长,单位为毫秒。 |
+| `usernames` | Array | 是 | 要添加到禁言列表的用户 ID 列表,每次最多可添加 60 个。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :----- | :-------------------------------------------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 操作结果:
- `true`:添加成功;
- `false`:添加失败。 |
+| - `expire` | Long | 禁言到期的时间。该时间为 Unix 时间戳,单位为毫秒。 |
+| - `user` | String | 被禁言用户的 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -d '{"usernames":["user1"], "mute_duration":86400000}' -H 'Authorization: Bearer '
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "expire": 1489158589481,
+ "user": "user1"
+ }
+ ],
+ "timestamp": 1489072189508,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 403 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在群组中。 | 传入群组中的用户 ID。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定群成员数量超过60 | 控制禁言指定群成员数量在 60 以内。 |
+| 403 | forbidden_op | "forbidden operation on group owner!" | 无法对群主禁言。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 禁言全体群成员
+
+对所有群组成员一键禁言,即将群组的所有成员加入禁言列表。设置群组全员禁言后,仅群组白名单中的用户可在群组以及该群组下的子区内发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :---------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :--- | :-------------------------------------------------------------- |
+| `data.mute` | Bool | 操作结果:
- `true`:禁言成功;
- `false`:禁言失败。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "XXXX",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban",
+ "entities": [],
+ "data": {
+ "mute": true
+ },
+ "timestamp": 1594628861058,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 解除成员禁言
+
+将一个或多个群成员移出禁言列表。你一次最多可对 60 个成员解除禁言。
+
+移除后,群成员可以在群组中正常发送消息,同时也可以在该群组下的子区中发送消息。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute/{member1}(,{member2},…)
+```
+
+##### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------- | :----- | :------- | :---------------------------------------------------------------------------------------- |
+| `member` | String | 是 | 要解除禁言的成员的用户 ID,每次最多可传 60 个,多个用户 ID 之间以英文逗号(",")分隔,例如 `{member1},{member2}`。 |
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------- |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :---- | :-------------------------------------------------------------- |
+| `data` | JSON Array | 响应数据。|
+| - `result` | Bool | 操作结果:
- `true`:解除成功;
- `false`:解除失败。 |
+| - `user` | Array | 被移出禁言列表的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/10130212061185/mute/user1'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "52XXXXf0",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute/user1",
+ "entities": [],
+ "data": [
+ {
+ "result": true,
+ "user": "user1"
+ }
+ ],
+ "timestamp": 1489072695859,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言列表的用户数超过上限 60。 | 控制解除成员禁言数量在 60 以内。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+## 解除全员禁言
+
+一键取消对群组全体成员的禁言。解除禁言后,群成员可以在群组和该群组下的子区中正常发送消息。
+
+#### HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban
+```
+
+##### 路径参数
+
+参数及描述详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------------------------ |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :---------- | :--- | :--------------------------------------------------------------- |
+| `data.mute` | Bool | 是否处于全员禁言状态。
- `true`:是;
- `false`:否。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban'
+```
+
+##### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "XXXX",
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban",
+ "entities": [],
+ "data": {
+ "mute": false
+ },
+ "timestamp": 1594628899502,
+ "duration": 1,
+ "organization": "XXXX",
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
diff --git a/docs/document/server-side/group_member_obtain.md b/docs/document/server-side/group_member_obtain.md
new file mode 100644
index 00000000..8ec06894
--- /dev/null
+++ b/docs/document/server-side/group_member_obtain.md
@@ -0,0 +1,141 @@
+# 获取群组成员列表
+
+
+
+环信即时通讯 IM 提供 RESTful API 接口用于分页获取群组成员列表。
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。
+
+## 群组角色
+
+群组角色包含群主、群管理员和普通群成员,三个角色权限范围依次递减。
+
+- 群主拥有群的所有权限;
+- 群管理员拥有管理黑名单、白名单和禁言等权限;
+- 群主加管理员数量共 100 个,即管理员最多可添加 99 个。
+
+## 认证方式
+
+环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+## 分页获取群成员列表
+
+可以分页获取群组成员列表。
+
+### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users?pagenum={N}&pagesize={N}&joined_time={true/false}
+```
+
+#### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :--------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `group_id` | String | 是 | 群组 ID。 |
+
+#### 查询参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :--- | :------- | :------------------- |
+| `pagenum` | Int | 否 | 当前页码。默认从第 1 页开始获取。 |
+| `pagesize` | Int | 否 | 每页期望返回的群组成员数量。取值范围为 [1,1000]。默认为 `1000`。若传入的值大于 `1000`,则获取 1000 个群组成员。 |
+| `joined_time` | Bool | 否 | 是否需返回用户加入群组的时间:
- `true`:返回
- `false`:不返回 |
+
+#### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :-------------------------- |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+### HTTP 响应
+
+#### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :----- | :------------------------------------------ |
+| `action` | String | 请求方法。 |
+| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
+| `params` | JSON | 查询参数。 |
+| - `joined_time` | Bool | 是否需返回用户加入群组的时间:
- `true`:返回
- `false`:不返回 |
+| - `pagesize` | Array | 每页期望显示的群组成员数量。 |
+| - `pagenum` | Array | 当前页码。 |
+| `uri` | String | 请求 URL。 |
+| `entities` | JSON | 响应实体。 |
+| `data` | JSON Array | 群组成员信息。 |
+| `data.owner` | String | 群主的用户 ID。例如:{“owner”: “user1”}。 |
+| `data.joined_time` | String | 加入群组的时间。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `count` | Int | 本次调用实际获取的群成员数量。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+### 示例
+
+#### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users?pagesize=1000&pagenum=1&joined_time=true' \
+-H 'Authorization: Bearer '
+```
+
+#### 响应示例
+
+```json
+{
+ "action": "get",
+ "application": "52XXXXf0",
+ "params": {
+ "pagesize": ["2"],
+ "pagenum": ["2"]
+ },
+ "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users",
+ "entities": [],
+ "data": [
+ {
+ "owner": "user1"
+ },
+ {
+ "member": "user2"
+ }
+ ],
+ "timestamp": 1489074511416,
+ "duration": 0,
+ "organization": "XXXX",
+ "applicationName": "testapp",
+ "count": 2
+}
+```
+
+### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | service_resource_not_found | do not find this group:XX | 群组不存在。 | 使用合法的群 ID。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
\ No newline at end of file
diff --git a/docs/document/server-side/favorite.md b/docs/document/server-side/user_favorite.md
similarity index 98%
rename from docs/document/server-side/favorite.md
rename to docs/document/server-side/user_favorite.md
index d67523f1..61a61c90 100644
--- a/docs/document/server-side/favorite.md
+++ b/docs/document/server-side/user_favorite.md
@@ -197,8 +197,8 @@ POST https://{host}/{org_name}/{app_name}/users/{username}/collections
| `type` | Int | 收藏类型。 |
| `data` | String | 收藏内容。 |
| `ext` | String | 收藏的扩展信息。 |
-| `createdAt` | Int | 收藏创建时间。 |
-| `updatedAt` | Int | 收藏更新时间。 |
+| `createdAt` | Long | 收藏创建时间。 |
+| `updatedAt` | Long | 收藏更新时间。 |
响应字段及说明详见 [公共参数](#公共参数)。
@@ -280,7 +280,7 @@ POST https://{host}/{org_name}/{app_name}/collections
| - `data` | String | 是 | 收藏内容。 |
| - `type` | Int | 是 | 收藏类型。 |
| - `ext` | String | 是 | 收藏的扩展信息。 |
-| - `createdAt` | Int | 是 | 收藏的添加时间。 |
+| - `createdAt` | Long | 是 | 收藏的添加时间。 |
| `username` | String | 是 | 为哪个用户添加收藏。 |
#### HTTP 响应
@@ -397,8 +397,8 @@ PUT https://{host}/{org_name}/{app_name}/users/{username}/collections/{collectio
| `type` | Int | 收藏类型。 |
| `data` | String | 收藏内容。 |
| `ext` | String | 收藏的扩展信息。 |
-| `createdAt` | Int | 收藏创建时间。 |
-| `updatedAt` | Int | 收藏更新时间。 |
+| `createdAt` | Long | 收藏创建时间。 |
+| `updatedAt` | Long | 收藏更新时间。 |
响应字段及说明详见 [公共参数](#公共参数)。
diff --git a/docs/document/server-side/user_global_mute.md b/docs/document/server-side/user_global_mute.md
new file mode 100644
index 00000000..dc615184
--- /dev/null
+++ b/docs/document/server-side/user_global_mute.md
@@ -0,0 +1,357 @@
+# 用户全局禁言
+
+随着监管机制日益完善,对 app 的监管不断加强,安全合规逐渐成为 app 的生命线。
+
+为加强 app 管理,环信即时通讯提供全局禁言功能,对 app 提供用户 ID 级别的禁言管理,支持在管理员发现用户违规后进行全局禁言,以维护 app 良好的内容生态环境。禁言到期后,服务器会自动解除禁言,恢复该用户发送消息的权限。
+
+你可以对单个用户 ID 设置单聊、群组或聊天室消息全局禁言。禁言后,该用户无论通过调用客户端 API,还是使用服务端 RESTful API 都将无法在对应的单聊、群组或聊天室发送消息。
+
+该功能可广泛用于实时互动 app 中,例如发现某用户频繁向多个聊天室发送违规广告,则可以对该用户开启全局聊天室禁言 15 天;发现某用户发表触犯红线的政治言论,则可以全局永久禁言,用户申诉通过后可以解禁。
+
+使用该功能前,你需先查看你的 IM 套餐版本是否开通了该功能。该功能与 IM 套餐包版本之间的开通关系,详见[产品计费](/product/pricing.html#套餐包功能详情)。
+
+## 公共参数
+
+以下表格列举了环信 IM 的 RESTful 接口的公共请求参数和响应参数:
+
+### 请求参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :------------------------- |
+| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
+
+### 响应参数
+
+| 参数 | 类型 | 描述 |
+| :------------------- | :----- | :-------------------------------------------- |
+| `action` | String | 请求方法。 |
+| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 |
+| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 |
+| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 |
+| `uri` | String | 请求 URL。 |
+| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 |
+| `data` | JSON | 实际获取的数据详情。 |
+| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 |
+| `duration` | Long | 从发送 HTTP 请求到响应的时长, 单位为毫秒。 |
+
+## 前提条件
+
+要调用环信即时通讯 RESTful API,请确保满足以下要求:
+
+- 已在环信即时通讯云控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。
+- 已从服务端获取 app token,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+- 了解环信 IM API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。
+
+## 认证方式
+
+环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段:
+
+`Authorization: Bearer YourAppToken`
+
+为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。本文介绍的即时通讯所有 REST API 均需使用 App Token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。
+
+### 设置用户全局禁言
+
+设置单个用户 ID 的单聊、群组或聊天室消息的全局禁言。设置成功后,该用户将无法在对应的单聊、群组或聊天室中发送消息。
+
+#### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/mutes
+```
+
+##### 路径参数
+
+参数及说明详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---------- | :----- | :------- | :----------------------- |
+| `username` | String | 是 | 设置全局禁言的用户 ID。 |
+| `chat` | Int | 否 | 单聊禁言时长,单位为秒,最大值为 `2147483647`。
- > `0`:该用户 ID 的单聊禁言时长。
- `0`:取消该用户的单聊禁言。
- `-1`:该用户被设置永久单聊禁言。
- 其他负值无效。 |
+| `groupchat` | Int | 否 | 群组禁言时长,单位为秒,规则同单聊禁言。 |
+| `chatroom` | Int | 否 | 聊天室禁言时长,单位为秒,规则同单聊禁言。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------ | :----- | :-------------------------------------------- |
+| `data` | JSON | 全局禁言结果。 |
+| `data.result` | String | 是否成功设置用户全局禁言。`ok` 表示设置成功。 |
+
+其他字段及说明详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -L -X POST 'https://XXXX/XXXX/XXXX/mutes' \
+-H 'Authorization: Bearer ' \
+-H 'Content-Type: application/json' \
+--data-raw '{
+ "username": "zs1",
+ "chat": 100,
+ "groupchat": 100,
+ "chatroom": 100
+}'
+```
+
+##### 响应示例
+
+```json
+{
+ "path": "/mutes",
+ "uri": "https://XXXX/XXXX/XXXX/mutes",
+ "timestamp": 1631609754727,
+ "organization": "XXXX",
+ "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d",
+ "action": "post",
+ "data": {
+ "result": "ok"
+ },
+ "duration": 74,
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----- | :---------- | :-------- | :------------------| :------------------------|
+| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 |
+
+关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
+
+### 查询单个用户 ID 全局禁言
+
+查询单个用户的单聊、群聊和聊天室的全局禁言详情。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/mutes/{username}
+```
+
+##### 路径参数
+
+参数及说明详见 [公共参数](#公共参数)。
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :------------------------------------------------------------------------------------------------------------------- |
+| `Content-Type` | String | 是 | 内容类型,请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :--------------- | :----- | :------------------ |
+| `data` | JSON | 用户的全局禁言详情。 |
+| `data.userid` | String | 设置禁言的用户 ID。 |
+| `data.chat` | Int | 单聊剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 剩余的单聊禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 |
+| `data.groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同单聊禁言。 |
+| `data.chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同单聊禁言。 |
+| `data.unixtime` | Int | 当前操作的 Unix 时间戳。 |
+
+其他字段及说明详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes/zs1' \
+-H 'Authorization: Bearer ' \
+-H 'Content-Type: application/json'
+```
+
+##### 响应示例
+
+```json
+{
+ "path": "/mutes",
+ "uri": "https://XXXX/XXXX/XXXX/mutes",
+ "timestamp": 1631609831800,
+ "organization": "XXXX",
+ "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d",
+ "action": "get",
+ "data": {
+ "userid": "XXXX#restys_zs1",
+ "chat": 96,
+ "groupchat": 96,
+ "chatroom": 96,
+ "unixtime": 1631609831
+ },
+ "duration": 13,
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :---------- | :------------------| :-------------------| :-----------| :------------|
+| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。|
+
+关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
+
+### 查询 app 下的所有全局禁言的用户
+
+该方法查询 app 下所有全局禁言的用户及其禁言剩余时间。
+
+#### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/mutes
+```
+
+##### 路径参数
+
+参数及说明详见[公共参数](#公共参数)。
+
+##### 查询参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :--- | :------- | :---------------------------------------------------- |
+| `pageNum` | Int | 否 | 请求查询的页码。 |
+| `pageSize` | Int | 否 | 请求查询每页显示的禁言用户的数量。取值范围为 [1,50]。 |
+
+##### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :--------------------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中的 `data` 字段描述如下:
+
+| 字段 | 类型 | 描述 |
+| :-------------------- | :-------- | :---------------------- |
+| `data` | JSON Array | 获取的所有全局禁言的用户的信息。 |
+| - `username` | String | 设置禁言的用户 ID。 |
+| - `chat` | Int | 单聊消息剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 具体的单聊消息禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 |
+| - `groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同上。|
+| - `chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同上。 |
+| - `unixtime` | Long | 当前操作的 Unix 时间戳,单位为毫秒。 |
+
+其他字段及说明详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes?pageNum=1&pageSize=10' \
+-H 'Authorization: Bearer ' \
+-H 'Content-Type: application/json'
+```
+
+##### 响应示例
+
+```json
+{
+ "path": "/mutes",
+ "uri": "https://XXXX/XXXX/XXXX/mutes",
+ "timestamp": 1631609858771,
+ "organization": "XXXX",
+ "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d",
+ "action": "get",
+ "data": {
+ "data": [
+ {
+ "username": "zs2",
+ "chatroom": 0
+ },
+ {
+ "username": "zs1",
+ "groupchat": 69
+ },
+ {
+ "username": "zs1",
+ "chat": 69
+ },
+ {
+ "username": "zs1",
+ "chatroom": 69
+ },
+ {
+ "username": "h2",
+ "chatroom": 0
+ },
+ {
+ "username": "h2",
+ "groupchat": 0
+ },
+ {
+ "username": "h2",
+ "chat": 0
+ }
+ ],
+ "unixtime": 1631609858
+ },
+ "duration": 17,
+ "applicationName": "XXXX"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :---------- | :------------------| :--------------------| :------------------| :----------------|
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 |
+
+关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。
+
+
+
+
+
+
+
diff --git a/docs/product/enable_and_configure_IM.md b/docs/product/enable_and_configure_IM.md
index 6b8bbeb0..e780610b 100644
--- a/docs/product/enable_and_configure_IM.md
+++ b/docs/product/enable_and_configure_IM.md
@@ -385,6 +385,22 @@
![img](/images/product/user_operation.png)
+## 创建群组
+
+1. 在环信即时通讯云的左侧导航栏中,选择 **即时通讯 > 运营服务 > 群组管理**。
+2.
+3. 在 **群组管理** 页面,点击 **创建群组**,在弹出的对话框中设置群组名称、描述、群主、最大人数、群组类型、申请入群方式、邀请方式和被邀请用户是否需要确认,然后点击 **创建**。
+
+ 各参数的设置要求,详见[创建群组 RESTful API](/document/server-side/group_manage.html#创建群组)。
+
+创建群组后,你可以通过以下步骤管理群组信息和成员:
+
+- 点击 **操作** 栏中的 **更多** 进行群组管理,包括查看群组成员、查看群组黑名单、发送rest消息和删除群组等。
+
+- 要添加用户,选择 **查看群组成员**,在弹出的对话框中,输入用户 ID,点击 **添加成员**。成员添加后会显示在下方的成员列表中,你可以移除该成员。
+
+- 在群组列表上,你可以点击群组 ID,修改群组信息,包括群组名称、描述和公告,以及管理群成员,包括全员禁言、将成员添加/移除禁言列表和黑名单,添加和移除管理员。
+
## 创建聊天室
1. 在环信即时通讯云的左侧导航栏中,选择 **即时通讯 > 运营服务 > 聊天室管理**。
@@ -393,9 +409,13 @@
各参数的设置要求,详见[创建聊天室 RESTful API](/document/server-side/chatroom.html#创建聊天室)。
-创建聊天室后,你可以点击 **操作** 栏中的 **更多** 对进行聊天室管理,包括修改修改聊天室信息、解散聊天室以及成员管理等。
+创建群组后,你可以通过以下步骤管理聊天室信息和成员:
-要添加聊天室成员,选择 **查看聊天室成员**,在弹出的对话框中,输入用户 ID,点击 **添加成员**。成员添加后会显示在下方的成员列表中,你可以移除该成员。
+- 点击 **操作** 栏中的 **更多** 进行聊天室管理,包括修改聊天室信息、查看聊天室成员、查看聊天室管理员、查看聊天室黑名单、查看聊天室禁言名单和删除聊天室。
+
+- 要添加用户,选择 **查看聊天室成员**,在弹出的对话框中,输入用户 ID,点击 **添加成员**。成员添加后会显示在下方的成员列表中,你可以移除该成员。
+
+- 在聊天室列表上,你可以点击聊天室 ID,修改聊天室信息,包括聊天室名称、描述和公告,以及管理聊天室成员,包括全员禁言、将成员添加/移除禁言列表和黑名单,添加和移除管理员。
## IM 用户设备日志
diff --git a/docs/product/limitation.md b/docs/product/limitation.md
index bb0c82ca..b50fd80b 100644
--- a/docs/product/limitation.md
+++ b/docs/product/limitation.md
@@ -77,11 +77,11 @@
| 使用限制| 默认 | 描述 |
| :--------- | :----- | :------- |
-| 功能开通 | 关闭 | 仅专业版及以上版本支持群消息已读回执功能。若要使用该功能,需在[环信即时通讯云控制台](https://console.easemob.com/user/login)开通,具体费用详见[产品价格](/product/pricing.html#增值服务费用)。 |
-| 使用权限 | 群组管理员和群主 | 默认情况下,群主和群组管理员有权限。
可以联系商务为普通群成员开放权限。 |
+| 功能开通 | 关闭 | 若要使用该功能,你需要在[环信即时通讯云控制台](https://console.easemob.com/user/login)的**即时通讯** > **功能配置** > **功能配置总览**> **基础功能**页签下,搜索找到 **消息已读回执(群聊)** 开通功能。具体费用详见[产品价格](/product/pricing.html#增值服务费用)。 |
+| 使用权限 | 所有群成员 | 默认情况下,所有群成员发送消息时可要求已读回执。如果仅需群主和群管理员发消息时要求已读回执,可联系商务修改。 |
| 已读回执有效期 | 3 天 | 群聊已读回执的有效期为 3 天,即群组中的消息发送时间超过 3 天,服务器不记录阅读该条消息的群组成员,也不会发送已读回执。 |
-| 群规模 | 500 人 | 该特性最大支持 500 人的群组。也就是说,群组中每条消息最多可返回 500 条已读回执,若超过该上限,最新的已读回执记录会覆盖最早的记录。 |
-| 群消息条数上限 | 500 条 | 单个群组每天最多支持 500 条消息要求已读回执。|
+| 群规模 | 200 人 | 该特性最大支持 200 人的群组。如果超过 200 人/群,群成员发送的消息不会返回已读回执。你可以联系商务提升群成员人数上限。 |
+| 查看返回已读回执数量 | 消息发送方 | 对消息返回的已读回执数量(或返回已读回执的人数),默认仅消息发送方可查看。如需所有群成员均可查看,可联系商务开通。 |
### 修改消息
diff --git a/docs/product/limitationapi.md b/docs/product/limitationapi.md
index 5bccb784..02730f00 100644
--- a/docs/product/limitationapi.md
+++ b/docs/product/limitationapi.md
@@ -6,61 +6,6 @@
对于环信即时通讯 IM 来说,大部分客户端接口调用时,实际上调用的是对应的 RESTful API,除接口名称带星号 * 的之外。表格中所示的每个接口的调用频率实则为 RESTful API 及其对应的客户端接口的调用频率总和。带 * 的接口由于没有对应的客户端接口,此类接口的调用频率为该 RESTful API 的调用频率。
-## 用户帐号管理
-
-| Restful API 接口 |方法 | 接口 URL|
-| :------------ | :--- | :--------------------------- |
-| 注册单个用户 | POST | /{org_name}/{app_name}/users |
-| * 批量注册用户 | POST | /{org_name}/{app_name}/users |
-
-以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。
-
-| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
-| :----------- | :----- | :------------------- | :------------- |
-| * 获取 app/用户 token | POST | /{org_name}/{app_name}/token | 300 次/秒/App Key |
-| 获取单个用户 | GET | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key |
-| * 批量获取用户 | GET | /{org_name}/{app_name}/users | 100 次/秒/App Key|
-| * 删除单个用户 | DELETE | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key |
-| * 批量删除用户 | DELETE | /{org_name}/{app_name}/users | 30 次/秒/App Key |
-| * 修改用户密码 | POST | /{org_name}/{app_name}/users/{username}/password | 100 次/秒/App Key |
-| * 获取用户在线状态 | GET | /{org_name}/{app_name}/users/{username}/status | 100 次/秒/App Key |
-| * 批量获取用户在线状态 | POST | /{org_name}/{app_name}/users/batch/status | 50 次/秒/App Key |
-| * 获取离线消息数 | GET | /{org_name}/{app_name}/users/{owner_username}/offline_msg_count | 100 次/秒/App Key |
-| * 获取离线消息的状态 | GET | /{org_name}/{app_name}/users/{username}/offline_msg_status/{msg_id} | 100 次/秒/App Key |
-| * 账号封禁 | POST | /{org_name}/{app_name}/users/{username}/deactivate | 100 次/秒/App Key |
-| * 账号解禁 | POST | /{org_name}/{app_name}/users/{username}/activate | 100 次/秒/App Key |
-| * 强制用户下线 | GET | /{org_name}/{app_name}/users/{username}/disconnect | 100 次/秒/App Key |
-| * 强制用户从单设备下线 | DELETE | /{org_name}/{app_name}/users/{username}/disconnect/{resourceId} | 100 次/秒/App Key |
-| * 获取指定账号的在线登录设备列表 | GET | /{org_name}/{app_name}/users/{username}/resources | 100 次/秒/App Key |
-
-## 消息推送
-
-| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) |
-| :----------- | :--- | :------------- | :----------- |
-| 设置离线推送 | PUT | /{org}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key |
-| 查询离线推送设置 | GET | /{org_name}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key |
-| 批量设置离线推送时显示的昵称 | PUT | /{org_name}/{app_name}/push/nickname | 100 次/秒/App Key |
-| 设置推送通知的首选语言 | PUT | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key |
-| 获取推送通知的首选语言 | GET | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key |
-| 创建离线推送模板 | POST | /{org_name}/{app_name}/notification/template | 10 次/秒/App Key |
-| 查询离线推送模板 | GET | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key |
-| 删除离线推送模板 | DELETE | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key |
-| 接收方配置模板名称 | PUT | /{org_name}/{app_name}/users/{userId}/notification/template | 100 次/秒/App Key。 |
-
-| RESTful API 接口 | 方法 | 接口 URL |
-| :----------- | :--- | :------------- |
-| 绑定和解绑推送信息 | PUT | /{org_name}/{app_name}/users/{userId}/push/binding |
-| 查询当前用户的所有设备的推送绑定信息 | GET | /{org_name}/{app_name}/users/{userId}/push/binding |
-
-以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。
-
-| RESTful API 接口 | 方法 | 接口 URL |
-| :----------- | :--- | :------------- |
-| 设置推送消息显示昵称 | PUT | /{org_name}/{app_name}/users/{userId} |
-| 设置推送消息展示方式 | PUT | /{org_name}/{app_name}/users/{userId} |
-
-以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。
-
## 消息管理
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
@@ -84,31 +29,18 @@
| 单向清空群组或聊天室会话某个时间点及之前的漫游消息 | POST | /{org_name}/{app_name}/rest/message/roaming/group/user/{userId}/time?groupId={groupId}&delTime={delTime} | 100 次/秒/App Key |
| 导入单聊消息 | POST | /{org_name}/{app_name}/messages/users/import | 100 条/秒/App Key |
-## 用户属性
-
-| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
-| :---------- | :----- | :-------------------- | :---------------- |
-| 设置用户属性 | PUT | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key |
-| 批量获取用户属性 | POST | /{org_name}/{app_name}/metadata/user/get | 100 次/秒/App Key |
-| 删除用户属性 | DELETE | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key |
-| 获取指定用户的所有用户属性 | GET | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key |
-| * 获取 app 下的用户属性总大小 | GET | /{org_name}/{app_name}/metadata/user/capacity | 100 次/秒/App Key |
+### 消息表情回复 Reaction
-## 用户关系管理
+| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) |
+| :------------------- | :----- | :------------------------ | :----------- |
+| 创建/添加 Reaction | POST | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key |
+| 根据消息 ID 获取 Reaction | GET | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key |
+| 删除 Reaction | DELETE | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key |
+| 根据消息 ID 和表情 ID 获取 Reaction 信息 | GET | /{org_name}/{app_name}/reaction/user/{userId}/detail | 100 次/秒/App Key |
-| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率 |
-| :------------- | :----- | :---------------- | :-------------- |
-| 添加好友 | POST | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
-| 移除好友 | DELETE | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
-| 设置好友备注 | PUT | /{org_name}/{app_name}/user/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
-| 分页获取好友列表 | GET | /{org_name}/{app_name}/user/{username}/contacts?limit={N}&cursor={cursor}&needReturnRemark={true/false} | 100 次/秒/App Key |
-| 一次性获取好友列表 | GET | /{org_name}/{app_name}/users/{owner_username}/contacts/users | 100 次/秒/App Key |
-| * 导入好友列表 | POST | /{org_name}/{app_name}/users/{username}/contacts/import | 100 次/秒/App Key |
-| 获取黑名单列表 | GET | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
-| 添加用户至黑名单 | POST | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
-| 从黑名单移除用户 | DELETE | /{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username} | 50 次/秒/App Key |
+## 群组
-## 群组管理
+### 群组管理
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
| :--------------- |:------ | :------------ | :----------- |
@@ -128,7 +60,7 @@
| 下载群组共享文件 | GET | /{org_name}/{app_name}/chatgroups/{group_id}/share_files/{file_id} | 100 次/秒/App Key |
| 删除群组共享文件 | DELETE | /{org_name}/{app_name}/chatgroups/{group_id}/share_files/{file_id} | 100 次/秒/App Key |
-## 群成员管理
+### 群成员管理
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
| :--------------- |:------ | :------------ | :----------- |
@@ -160,7 +92,23 @@
| 解除成员禁言 | DELETE | /{org_name}/{app_name}/chatgroups/{group_id}/mute/{member1}(,{member2},…) | 100 次/秒/App Key |
| 解除全员禁言 | DELETE | /{org_name}/{app_name}/chatgroups/{group_id}/ban | 100 次/秒/App Key |
-## 聊天室管理
+### 子区管理
+
+| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) |
+| :------------------- | :----- | :------------------------ | :----------- |
+| 分页获取 app 中的子区 | GET | /{org_name}/{app_name}/thread | 100 次/秒/App Key |
+| 分页获取单个用户加入的所有子区 | GET | /{org_name}/{app_name}/threads/user/{username} | 100 次/秒/App Key |
+| 分页获取单个用户在指定群组中加入的所有子区 | GET | /{org_name}/{app_name}/threads/chatgroups/{group_id}/user/{username} | 100 次/秒/App Key |
+| 创建子区 | POST | /{org_name}/{app_name}/thread | 100 次/秒/App Key |
+| 修改子区 | PUT | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key |
+| 删除子区 | DELETE | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key |
+| 分页获取子区成员列表 | GET | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key |
+| 用户批量加入子区 | POST | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key |
+| 批量踢出子区成员 | DELETE | /{org_name}/{app_name}/threads/{thread_id}/users | 100 次/秒/App Key |
+
+## 聊天室
+
+### 聊天室管理
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
| :--------------- |:------ | :------------ | :----------- |
@@ -179,7 +127,7 @@
| 删除聊天室自定义属性 | DELETE | /{org_name}/{app_name}/metadata/chatroom/{chatroom_id}/user/{username} | 100 次/秒/App Key |
| 强制删除聊天室自定义属性 | DELETE | /{org_name}/{app_name}/metadata/chatroom/{chatroom_id}/user/{username}/forced | 100 次/秒/App Key |
-## 聊天室成员管理
+### 聊天室成员管理
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
| :--------------- |:------ | :------------ | :----------- |
@@ -205,19 +153,53 @@
| 禁言聊天室全体成员 | POST | /{org_name}/{app_name}/chatrooms/{chatroom_id}/ban | 100 次/秒/App Key |
| 解除聊天室禁言成员 | DELETE | /{org_name}/{app_name}/chatrooms/{chatroom_id}/mute/{member1}(,{member2},…) | 100 次/秒/App Key |
| 解除聊天室全员禁言 | DELETE | /{org_name}/{app_name}/chatrooms/{chatroom_id}/ban | 100 次/秒/App Key |
+| 按聊天室用户标签禁言 | PUT | /{org_name}/{app_name}/chatrooms/{chatroom_id}/tag/mute | 100 次/秒/App Key |
+| 设置用户在聊天室中的标签 | PUT | /{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag | 100 次/秒/App Key |
+| 获取用户聊天室标签 | GET | /{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag | 100 次/秒/App Key |
| 获取超级管理员列表 | GET | /{org_name}/{app_name}/chatrooms/super_admin | 100 次/秒/App Key |
| 添加超级管理员 | POST | /{org_name}/{app_name}/chatrooms/super_admin | 100 次/秒/App Key |
| 移除超级管理员 | DELETE | /{org_name}/{app_name}/chatrooms/super_admin/{superAdmin} | 100 次/秒/App Key |
-## 全局禁言
+## 用户相关
+
+### 用户体系管理
+
+| Restful API 接口 |方法 | 接口 URL|
+| :------------ | :--- | :--------------------------- |
+| 注册单个用户 | POST | /{org_name}/{app_name}/users |
+| * 批量注册用户 | POST | /{org_name}/{app_name}/users |
+
+以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
-| :--------------- |:------ | :------------ | :----------- |
-| * 设置用户全局禁言 | POST | /{org_name}/{app_name}/mutes | 100 次/秒/App Key |
-| * 查询单个用户 ID 全局禁言 | GET | /{org_name}/{appName}/mutes/username | 100 次/秒/App Key |
-| * 查询 app 下的所有全局禁言的用户 | GET | /{org_name}/{app_name}/mutes | 100 次/秒/App Key |
+| :----------- | :----- | :------------------- | :------------- |
+| * 获取 app/用户 token | POST | /{org_name}/{app_name}/token | 300 次/秒/App Key |
+| 获取单个用户 | GET | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key |
+| * 批量获取用户 | GET | /{org_name}/{app_name}/users | 100 次/秒/App Key|
+| * 删除单个用户 | DELETE | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key |
+| * 批量删除用户 | DELETE | /{org_name}/{app_name}/users | 30 次/秒/App Key |
+| * 修改用户密码 | POST | /{org_name}/{app_name}/users/{username}/password | 100 次/秒/App Key |
+| * 获取用户在线状态 | GET | /{org_name}/{app_name}/users/{username}/status | 100 次/秒/App Key |
+| * 批量获取用户在线状态 | POST | /{org_name}/{app_name}/users/batch/status | 50 次/秒/App Key |
+| * 获取离线消息数 | GET | /{org_name}/{app_name}/users/{owner_username}/offline_msg_count | 100 次/秒/App Key |
+| * 获取离线消息的状态 | GET | /{org_name}/{app_name}/users/{username}/offline_msg_status/{msg_id} | 100 次/秒/App Key |
+| * 账号封禁 | POST | /{org_name}/{app_name}/users/{username}/deactivate | 100 次/秒/App Key |
+| * 账号解禁 | POST | /{org_name}/{app_name}/users/{username}/activate | 100 次/秒/App Key |
+| * 强制用户下线 | GET | /{org_name}/{app_name}/users/{username}/disconnect | 100 次/秒/App Key |
+| * 强制用户从单设备下线 | DELETE | /{org_name}/{app_name}/users/{username}/disconnect/{resourceId} | 100 次/秒/App Key |
+| * 获取指定账号的在线登录设备列表 | GET | /{org_name}/{app_name}/users/{username}/resources | 100 次/秒/App Key |
+
+### 用户属性
-## 用户在线状态管理
+| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
+| :---------- | :----- | :-------------------- | :---------------- |
+| 设置用户属性 | PUT | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key |
+| 批量获取用户属性 | POST | /{org_name}/{app_name}/metadata/user/get | 100 次/秒/App Key |
+| 删除用户属性 | DELETE | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key |
+| 获取指定用户的所有用户属性 | GET | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key |
+| * 获取 app 下的用户属性总大小 | GET | /{org_name}/{app_name}/metadata/user/capacity | 100 次/秒/App Key |
+
+### 用户在线状态订阅
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
| :--------------- |:------ | :------------ | :----------- |
@@ -228,25 +210,62 @@
| 取消订阅多个用户的在线状态 | DELETE | /{org_name}/{app_name}/users/{uid}/presence | 50 次/秒/App Key |
| 查询订阅列表 | GET | /{org_name}/{app_name}/users/{uid}/presence/sublist?pageNum={pagenumber}&pageSize={pagesize} | 50 次/秒/App Key |
-## 消息表情回复 Reaction
+### 全局禁言
-| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) |
-| :------------------- | :----- | :------------------------ | :----------- |
-| 创建/添加 Reaction | POST | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key |
-| 根据消息 ID 获取 Reaction | GET | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key |
-| 删除 Reaction | DELETE | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key |
-| 根据消息 ID 和表情 ID 获取 Reaction 信息 | GET | /{org_name}/{app_name}/reaction/user/{userId}/detail | 100 次/秒/App Key |
+| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
+| :--------------- |:------ | :------------ | :----------- |
+| * 设置用户全局禁言 | POST | /{org_name}/{app_name}/mutes | 100 次/秒/App Key |
+| * 查询单个用户 ID 全局禁言 | GET | /{org_name}/{appName}/mutes/username | 100 次/秒/App Key |
+| * 查询 app 下的所有全局禁言的用户 | GET | /{org_name}/{app_name}/mutes | 100 次/秒/App Key |
-## 子区管理
+### 用户收藏
-| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) |
-| :------------------- | :----- | :------------------------ | :----------- |
-| 分页获取 app 中的子区 | GET | /{org_name}/{app_name}/thread | 100 次/秒/App Key |
-| 分页获取单个用户加入的所有子区 | GET | /{org_name}/{app_name}/threads/user/{username} | 100 次/秒/App Key |
-| 分页获取单个用户在指定群组中加入的所有子区 | GET | /{org_name}/{app_name}/threads/chatgroups/{group_id}/user/{username} | 100 次/秒/App Key |
-| 创建子区 | POST | /{org_name}/{app_name}/thread | 100 次/秒/App Key |
-| 修改子区 | PUT | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key |
-| 删除子区 | DELETE | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key |
-| 分页获取子区成员列表 | GET | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key |
-| 用户批量加入子区 | POST | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key |
-| 批量踢出子区成员 | DELETE | /{org_name}/{app_name}/threads/{thread_id}/users | 100 次/秒/App Key |
\ No newline at end of file
+| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
+| :---------- | :----- | :-------------------- | :---------------- |
+| 分页获取用户收藏 | GET | /{org_name}/{app_name}/users/{username}/collections | 100 次/秒/App Key |
+| 添加一条收藏 | POST | /{org_name}/{app_name}/users/{username}/collections | 100 次/秒/App Key |
+| 批量添加用户收藏 | POST | /{org_name}/{app_name}/collections | 100 次/秒/App Key |
+| 修改用户收藏的扩展信息 | PUT | /{org_name}/{app_name}/users/{username}/collections/{collectionId} | 100 次/秒/App Key |
+| 删除用户收藏 | DELETE | /{org_name}/{app_name}/users/{username}/collections | 100 次/秒/App Key |
+
+### 用户关系管理
+
+| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率 |
+| :------------- | :----- | :---------------- | :-------------- |
+| 添加好友 | POST | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
+| 移除好友 | DELETE | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
+| 设置好友备注 | PUT | /{org_name}/{app_name}/user/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
+| 分页获取好友列表 | GET | /{org_name}/{app_name}/user/{username}/contacts?limit={N}&cursor={cursor}&needReturnRemark={true/false} | 100 次/秒/App Key |
+| 一次性获取好友列表 | GET | /{org_name}/{app_name}/users/{owner_username}/contacts/users | 100 次/秒/App Key |
+| * 导入好友列表 | POST | /{org_name}/{app_name}/users/{username}/contacts/import | 100 次/秒/App Key |
+| 获取黑名单列表 | GET | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
+| 添加用户至黑名单 | POST | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
+| 从黑名单移除用户 | DELETE | /{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username} | 50 次/秒/App Key |
+
+## 离线推送
+
+| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) |
+| :----------- | :--- | :------------- | :----------- |
+| 设置离线推送 | PUT | /{org}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key |
+| 查询离线推送设置 | GET | /{org_name}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key |
+| 批量设置离线推送时显示的昵称 | PUT | /{org_name}/{app_name}/push/nickname | 100 次/秒/App Key |
+| 设置推送通知的首选语言 | PUT | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key |
+| 获取推送通知的首选语言 | GET | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key |
+| 创建离线推送模板 | POST | /{org_name}/{app_name}/notification/template | 10 次/秒/App Key |
+| 查询离线推送模板 | GET | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key |
+| 删除离线推送模板 | DELETE | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key |
+| 接收方配置模板名称 | PUT | /{org_name}/{app_name}/users/{userId}/notification/template | 100 次/秒/App Key。 |
+
+| RESTful API 接口 | 方法 | 接口 URL |
+| :----------- | :--- | :------------- |
+| 绑定和解绑推送信息 | PUT | /{org_name}/{app_name}/users/{userId}/push/binding |
+| 查询当前用户的所有设备的推送绑定信息 | GET | /{org_name}/{app_name}/users/{userId}/push/binding |
+
+以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。
+
+| RESTful API 接口 | 方法 | 接口 URL |
+| :----------- | :--- | :------------- |
+| 设置推送消息显示昵称 | PUT | /{org_name}/{app_name}/users/{userId} |
+| 设置推送消息展示方式 | PUT | /{org_name}/{app_name}/users/{userId} |
+
+以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。
diff --git a/docs/product/pricing.md b/docs/product/pricing.md
index c1043428..26845978 100644
--- a/docs/product/pricing.md
+++ b/docs/product/pricing.md
@@ -100,7 +100,7 @@
| 扩展单个群成员数上限 | 对单个 App Key 内的所有群组生效 | 预付费 | 3000 人/群,500 元/月 | 8000 人/群,500 元/月 |
| 扩展单个用户可加入群组数上限 | 对单个 App Key 内的所有用户生效 | 预付费 | 2000 群/人:1000 元/月 | — |
| 群聊消息已读回执 | 功能介绍详见[群聊消息已读回执](/document/android/message_receipt.html#群聊)。 | 预付费 | 1000 元/月 | — |
-| 全局禁言 | 功能介绍详见[全局禁言](/document/server-side/account_system.html#用户全局禁言)。 | 预付费 | 500 元/月 | — |
+| 全局禁言 | 功能介绍详见[全局禁言](/document/server-side/user_global_mute.html)。 | 预付费 | 500 元/月 | — |
| 回调 | 功能介绍详见[回调](/document/server-side/callback.html)。 | 预付费 | 1000 元/月 | — |
| 用户在线状态(Presence)订阅 | 功能介绍详见[用户在线状态订阅](/document/server-side/presence.html)。 | 预付费 | 1000 元/月 | — |
| 消息表情回复 Reaction | 功能介绍详见[消息表情回复](/document/server-side/reaction.html)。 | 预付费 | 600 元/月 | — |