diff --git a/docs/document/server-side/keyword_add.md b/docs/document/server-side/keyword_add.md
new file mode 100644
index 00000000..fa3995ec
--- /dev/null
+++ b/docs/document/server-side/keyword_add.md
@@ -0,0 +1,139 @@
+# 添加关键词
+
+## 功能说明
+
+- 添加关键词。
+- 每个应用最多可配置 10 个名单, 每个名单最多可添加 10,000 个关键词,即每个应用最多可配置 100,000 个词条。
+
+**调用频率上限**:100 次/秒/App Key
+
+## HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/moderation/text/list/text/list/{list_id}/word/batch
+```
+
+### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+| `list_id` | String | 是 | 关键词名单 ID。将关键词添加到该名单中。 |
+
+### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `wordContents` | Array | 是 | 要添加的关键词列表。 一次最多可添加 100 个关键词。 |
+| `userId` | String | 是 | 添加关键词的用户 ID。 |
+
+## HTTP 响应
+
+### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entity` | JSON | 关键词名单的详情。 |
+| - `id` | String | 关键词名单 ID。 |
+| - `name` | String | 关键词名单的名称。 |
+| - `moderationId` | String | 审核 ID。开发者可忽略该参数。|
+| - `appkey` | String | 应用的 App Key。 |
+| - `scope` | String | 关键词名单的生效范围。 |
+| - `tagId` | String | 标签 ID。 |
+| - `fullMatch` | Boolean | 关键词与消息内容是否为精确匹配。 |
+| - `disposition` | String | 对匹配关键词的消息内容的处理。 |
+| - `quantity` | Int | 添加的关键词数量。 |
+| - `status` | String | 关键词名单的状态。
- `ACTIVE`:开启
- `CLOSE`:关闭 |
+| - `createDateTime` | Long | 关键词名单创建时间。|
+| - `updateDateTime` | Long | 关键词名单修改时间。|
+| - `textList` | JSON Array | 关键词列表。对于每个关键词,详情如下:
- `id`:关键词 ID;
- `word`:关键词名称;
- `userId`:添加关键词的用户 ID;
- `listId`:关键词名单 ID;
- `createDateTime`:关键词添加时间;
- `updateDateTime`:关键词修改时间。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+## 示例
+
+// TODO:请提供请求示例和响应示例
+
+### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST 'https://XXXX/XXXX/XXXX/moderation/text/list/text/list/{list_id}/word/batch' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "wordContents": [
+ "music"
+ ],
+ "userId": "user1"
+ }'
+```
+
+### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entity": {
+ "id": "string",
+ "name": "list_0",
+ "moderationId": "string",
+ "appkey": "XXXX#XXXX",
+ "scope": "ALL",
+ "tagId": "entertainment",
+ "fullMatch": true,
+ "disposition": "PASS",
+ "quantity": 0,
+ "status": "enabled",
+ "createDateTime": 0,
+ "updateDateTime": 0,
+ "textList": [
+ {
+ "id": "1wOTD0XXXXduCtnnHJwWzyqzMye",
+ "word": "music",
+ "userId": "user1",
+ "listId": "list_0",
+ "createDateTime": 1594724293063,
+ "updateDateTime": 1696724294063
+ }
+ ]
+ }
+}
+```
+
+## 错误码
+
+// TODO:请添加错误码,例如传入的关键词数量超限,或用户 ID 不存在等。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/keyword_delete.md b/docs/document/server-side/keyword_delete.md
new file mode 100644
index 00000000..e768ff2e
--- /dev/null
+++ b/docs/document/server-side/keyword_delete.md
@@ -0,0 +1,84 @@
+# 删除关键词
+
+## 功能说明
+
+删除关键词。
+
+**调用频率上限**:100 次/秒/App Key
+
+## HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/moderation/text/list/(list_id)/word?wordId={wordId}
+```
+
+### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+| `list_id` | String | 是 | 关键词名单 ID。 |
+
+### 查询参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------- | :----- | :------- | :--------------- |
+| `wordId` | String | 是 | 要删除的关键词的 ID。 |
+
+## HTTP 响应
+
+### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entity` | Boolean | 是否删除成功:
- `true`:删除成功
- `false`:删除失败 |
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+## 示例
+
+// TODO:请提供请求示例和响应示例
+
+### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE 'https://XXXX/XXXX/XXXX/moderation/text/list/{list_id}/word?word=music' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+```
+
+### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entity": true
+}
+```
+
+## 错误码
+
+// TODO:请添加错误码,例如,传入的名单 ID 或关键词 ID 不存在。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/keyword_delete_batch.md b/docs/document/server-side/keyword_delete_batch.md
new file mode 100644
index 00000000..f22127ba
--- /dev/null
+++ b/docs/document/server-side/keyword_delete_batch.md
@@ -0,0 +1,87 @@
+# 批量删除关键词
+
+## 功能说明
+
+批量删除关键词名单中的关键词。
+
+**调用频率上限**:100 次/秒/App Key
+
+## HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/moderation/text/list/text/list/(list_id)/word/batch
+```
+
+### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+| `list_id` | String | 是 | 关键词名单 ID。 |
+
+### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------- | :----- | :------- | :--------------- |
+| `wordIds` | Array | 是 | 要删除的关键词的 ID。一次最多可删除 100 个关键词。 |
+
+## HTTP 响应
+
+### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entity` | Int | 是否删除成功:
- `0`:删除成功
- `1`:删除失败 |
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+## 示例
+
+// TODO:请提供请求示例和响应示例
+
+### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE 'https://XXXX/XXXX/XXXX/moderation/text/list/text/list/{list_id}/word/batch' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "wordIds": ["t1", "t2"]
+ }'
+```
+
+### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entity": 0
+}
+```
+
+## 错误码
+
+// TODO:请添加错误码,例如传入的名单 ID 或关键词 ID 不存在。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/keyword_list_create.md b/docs/document/server-side/keyword_list_create.md
new file mode 100644
index 00000000..97a56a2d
--- /dev/null
+++ b/docs/document/server-side/keyword_list_create.md
@@ -0,0 +1,138 @@
+# 创建关键词名单
+
+## 功能说明
+
+- 创建关键词名单。
+- 关键词名单为增值服务,使用前需要在环信控制台开通,详见 [控制台文档](/product/moderation/keyword_review.html#使用关键词审核)。
+- 创建的名单会在环信控制台的 **关键词名单** 列表 (**即时通讯** > **内容审核** > **文本审核** > **关键词名单**)中展示。你可以在环信控制台编辑、删除名单或进行添加/删除关键词等操作。
+- 关键词名单在 [文本审核规则](/product/moderation/moderation_rule_config.html#设置审核规则) 中应用,详见 [环信控制台文档](/product/moderation/keyword_review.html#第四步-在文本审核规则中应用关键词名单)。
+
+**调用频率上限**:100 次/秒/App Key
+
+## HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/moderation/text/list
+```
+
+### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+
+### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `name` | String | 是 | 关键词名单的名称,不能超过 32 个字符。 |
+| `scope` | String | 是 | 生效范围:
- `ALL`:对所有会话均生效;
- `CHAT`:仅对单聊会话生效;
- `GROUP`:仅对群组会话生效;
- `ROOM`:仅对聊天室会话生效; - `TAG`:仅对指定标签下的用户、群组或聊天室生效。|
+| `tagId` | String | 否 | 标签 ID。该参数仅在 `scope` 为 `TAG` 时必须设置。 |
+| `disposition` | String | 是 | 对匹配关键词的消息内容的审核处理:
- `PASS`:忽略,对匹配的关键词不处理。
- `REJECT`:拦截,对内容匹配关键词的消息进行拦截,不下发给接收方。
- `EXCHANGE`:替换为 `***`。|
+| `fullMatch` | Boolean | 否 | 关键词与消息内容是否为精确匹配:
- `true`:是
- `false`:否 |
+| `userId` | String | 否 | 创建关键词名单的用户 ID。 |
+| `textContexts` | Array | 是 | 关键词。每次最多可包含 200 个关键词,每个关键词的不能超过 128 个字符。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entity` | JSON | 关键词名单的详情。 |
+| - `id` | String | 关键词名单 ID。 |
+| - `name` | String | 关键词名单的名称。 |
+| - `moderationId` | String | 审核 ID。开发者可忽略该参数。|
+| - `appkey` | String | 应用的 App Key。 |
+| - `scope` | String | 关键词名单的生效范围。 |
+| - `tagId` | String | 标签 ID。 |
+| - `fullMatch` | Boolean | 关键词与消息内容是否为精确匹配。 |
+| - `disposition` | String | 对匹配关键词的消息内容的处理。 |
+| - `quantity` | Int | 关键词数量。 |
+| - `status` | String | 关键词名单的状态:
- `ACTIVE`:开启
- `CLOSE`:关闭 |
+| - `createDateTime` | Long | 关键词名单的创建时间。|
+| - `updateDateTime` | Long | 关键词名单的修改时间。 |
+| - `textList` | Array | 关键词列表。 |
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+// TODO:请提供请求示例和响应示例。
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST 'https://XXXX/XXXX/XXXX/moderation/text/list' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "name": "list_0",
+ "scope": "ALL",
+ "tagId": "entertainment",
+ "disposition": "PASS",
+ "fullMatch": true,
+ "userId": "user1",
+ "textContexts": ["music", "sport", "entertainment"]
+ }'
+```
+
+##### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entity": {
+ "id": "1giXXXXE7DMCqfxkiMcfciSHnoX",
+ "name": "list_0",
+ "moderationId": "c012f3d57c7XXXX63de8de2fcaed7cfe",
+ "appkey": "XXXX#XXXX",
+ "scope": "ALL",
+ "tagId": "entertainment",
+ "fullMatch": true,
+ "disposition": "PASS",
+ "quantity": 0,
+ "status": "enabled",
+ "createDateTime": 1594724293063,
+ "updateDateTime": 1696724294063,
+ "textList": ["music", "sport", "entertainment"]
+ }
+}
+```
+
+#### 错误码
+
+// TODO:请添加错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+| 400 | MODERATION 002 | | 请求参数错误 | |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/keyword_list_delete.md b/docs/document/server-side/keyword_list_delete.md
new file mode 100644
index 00000000..c853c088
--- /dev/null
+++ b/docs/document/server-side/keyword_list_delete.md
@@ -0,0 +1,77 @@
+# 删除关键词名单
+
+## 功能说明
+
+删除关键词名单。
+
+**调用频率上限**:100 次/秒/App Key
+
+## HTTP 请求
+
+```http
+DELETE https://{host}/{org_name}/{app_name}/moderation/text/list/(list_id)
+```
+
+### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+| `list_id` | String | 是 | 关键词名单 ID。 |
+
+## HTTP 响应
+
+### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+## 示例
+
+// TODO:请提供请求示例和响应示例
+
+### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE 'https://XXXX/XXXX/XXXX/moderation/text/list/{list_id}' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+```
+
+### 响应示例
+
+```json
+{
+ "status": "OK",
+}
+```
+
+## 错误码
+
+// TODO:请添加错误码,例如传入的名单 ID 不存在。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/keyword_list_modify.md b/docs/document/server-side/keyword_list_modify.md
new file mode 100644
index 00000000..f9d49e64
--- /dev/null
+++ b/docs/document/server-side/keyword_list_modify.md
@@ -0,0 +1,137 @@
+# 修改关键词名单
+
+## 功能说明
+
+修改关键词名单。
+
+**调用频率上限**:100 次/秒/App Key
+
+### HTTP 请求
+
+```http
+PUT https://{host}/{org_name}/{app_name}/moderation/text/list/{list_id}
+```
+
+#### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+| `list_id` | String | 是 | 关键词名单 ID。 |
+
+#### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `name` | String | 是 | 关键词名单的名称,不能超过 32 个字符。 |
+| `scope` | String | 是 |生效范围:
- `ALL`:对所有会话均生效;
- `CHAT`:仅对单聊会话生效;
- `GROUP`:仅对群组会话生效;
- `ROOM`:仅对聊天室会话生效;
- `TAG`:仅对指定标签下的用户、群组或聊天室生效。|
+| `tagId` | String | 否 | 标签 ID。该参数仅在 `scope` 为 `TAG` 时必须设置。 |
+| `disposition` | String | 是 | 对匹配关键词的消息内容的审核处理:
- `PASS`:忽略,对匹配的关键词不处理。
- `REJECT`:拦截,对内容匹配关键词的消息进行拦截,不下发给接收方。
- `EXCHANGE`:替换为 `***`。 |
+| `fullMatch` | Boolean | 否 | 关键词与消息内容是否为精确匹配:
- `true`:是
- `false`:否 |
+| `userId` | String | 否 | 用户 ID。 |
+| `textContexts` | Array | 是 | 关键词。一个名单中最多可包含 200 个关键词。每个关键词最多可包含 128 个字符。 |
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entity` | JSON | 关键词名单的详情。 |
+| - `id` | String | 关键词名单 ID。 |
+| - `name` | String | 关键词名单的名称。 |
+| - `moderationId` | String | 审核 ID。开发者可忽略该参数。 |
+| - `appkey` | String | 应用的 App Key。 |
+| - `scope` | String | 关键词名单的生效范围。 |
+| - `tagId` | String | 用户标签 ID。 |
+| - `fullMatch` | Boolean | 关键词与消息内容是否为精确匹配。 |
+| - `disposition` | String | 对匹配关键词的消息内容的处理。 |
+| - `quantity` | Int | 关键词数量。 |
+| - `status` | String | 关键词名单的状态。
- `enabled`:开启
- `disabled`:关闭。 |
+| - `createDateTime` | Long | 关键词名单的创建时间。 |
+| - `updateDateTime` | Long | 关键词名单的修改时间。 |
+| - `textList` | Array | 关键词列表。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+// TODO:请提供请求示例和响应示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST 'https://XXXX/XXXX/XXXX/moderation/text/list/1giXXXXE7DMCqfxkiMcfciSHnoX' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "name": "list_0",
+ "scope": "ALL",
+ "tagId": "entertainment",
+ "disposition": "PASS",
+ "fullMatch": true,
+ "userId": "user1",
+ "textContexts": ["music"]
+ }'
+```
+
+##### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entity": {
+ "id": "1giXXXXE7DMCqfxkiMcfciSHnoX",
+ "name": "list_0",
+ "moderationId": "c012f3d57c7XXXX63de8de2fcaed7cfe",
+ "appkey": "XXXX#XXXX",
+ "scope": "ALL",
+ "tagId": "entertainment",
+ "fullMatch": true,
+ "disposition": "PASS",
+ "quantity": 0,
+ "status": "enabled",
+ "createDataTime": 1594724293063,
+ "updateDataTime": 1696724294063,
+ "textList": ["sport"]
+}
+}
+```
+
+#### 错误码
+
+// TODO:请添加错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/keyword_list_query.md b/docs/document/server-side/keyword_list_query.md
new file mode 100644
index 00000000..0078870e
--- /dev/null
+++ b/docs/document/server-side/keyword_list_query.md
@@ -0,0 +1,140 @@
+# 查询关键词名单
+
+## 功能说明
+
+查询关键词名单。
+
+**调用频率上限**:100 次/秒/App Key
+
+### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/moderation/text/list/search
+```
+
+#### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+
+#### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `name` | String | 是 | 关键词名单的名称。 |
+| `tagId` | String | 否 | 标签 ID。|
+| `size` | Int | 否 | 每页返回的关键词数量,取值范围为 [1,200],默认值为 `10`。|
+| `page` | Int | 否 | 当前页码,默认值为 `0`。|
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entities` | JSON Array | 关键词名单的详情。 |
+| - `id` | String | 关键词名单 ID。 |
+| - `name` | String | 关键词名单的名称。 |
+| - `moderationId` | String | 审核 ID。开发者可忽略该参数。 |
+| - `appkey` | String | 应用的 App Key。 |
+| - `scope` | String | 关键词名单的生效范围。 |
+| - `tagId` | String | 标签 ID。 |
+| - `fullMatch` | Boolean | 关键词与消息内容是否为精确匹配。 |
+| - `disposition` | String | 对匹配关键词的消息内容的处理。 |
+| - `quantity` | Int | 关键词数量。 |
+| - `status` | | 关键词名单的状态:
- `ACTIVE`:开启
- `CLOSE`:关闭 |
+| - `createDateTime` | Long | 关键词名单的创建时间。|
+| - `updateDateTime` | Long | 关键词名单的修改时间。|
+| `first` | Boolean | 当前页面是否为首页:
- `true`:是
- `false`:否|
+| `last` | Boolean | 当前页面是否为最后一页:
- `true`:是
- `false`:否|
+| `size` | Int | 当前页面返回的关键词数量。 |
+| `number` | Int | 当前页码。 |
+| `numberOfElements` | Int | 当前页面中获取的关键词数量。|
+| `totalPages` | Int | 页面总数。|
+| `totalElements` | Int | 关键词名单包含的关键词总数量。|
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+// TODO:请提供请求示例和响应示例。
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST 'https://XXXX/XXXX/XXXX/moderation/text/list/search' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "name": "list_0",
+ "tagId": "entertainment",
+ `size`:5,
+ `page`:0
+ }'
+```
+
+##### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entities": [
+ {
+ "id": "1giXXXXE7DMCqfxkiMcfciSHnoX",
+ "name": "list_0",
+ "moderationId": "c012f3d57c7XXXX63de8de2fcaed7cfe",
+ "appkey": "XXXX#XXXX",
+ "scope": "ALL",
+ "tagId": "entertainment",
+ "fullMatch": true,
+ "disposition": "PASS",
+ "quantity": 0,
+ "status": "string",
+ "createDateTime": 1594724293063,
+ "updateDateTime": 1696724294063,
+ }
+ ],
+ "first": "true",
+ "last": "false",
+ "size": "5",
+ "number": "1",
+ "numberOfElements": "1",
+ "totalPages": "1",
+ "totalElements": "100",
+}
+```
+
+#### 错误码
+
+// TODO:请添加错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
\ No newline at end of file
diff --git a/docs/document/server-side/keyword_modify.md b/docs/document/server-side/keyword_modify.md
new file mode 100644
index 00000000..2827243e
--- /dev/null
+++ b/docs/document/server-side/keyword_modify.md
@@ -0,0 +1,115 @@
+# 修改关键词
+
+## 功能说明
+
+修改单个关键词。
+
+**调用频率上限**:100 次/秒/App Key
+
+## HTTP 请求
+
+```http
+PUT https://{host}/{org_name}/{app_name}/moderation/text/list/{list_id}/word
+```
+
+### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+| `list_id` | String | 是 | 关键词名单 ID。要修改该名单中的关键词。 |
+
+### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `id` | String | 是 | 要修改的关键词 ID。 |
+| `word` | String | 是 | 修改后的关键词。|
+| `userId` | String | 是 | 修改关键词的用户 ID。|
+
+## HTTP 响应
+
+### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entity` | JSON | 关键词的详情。 |
+| - `id` | String | 关键词 ID。 |
+| - `word` | String | 修改后的关键词。 |
+| - `userId` | String | 修改关键词的用户 ID。 |
+| - `listId` | String | 关键词名单 ID。 |
+| - `createDateTime` | Long | 关键词的创建时间。 |
+| - `updateDateTime` | Long | 关键词的修改时间。|
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+## 示例
+
+### 请求示例
+
+// TODO:提供请求示例和响应示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X PUT 'https://XXXX/XXXX/XXXX/moderation/text/list/{list_id}/word' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "id": "1wOTD0XXXXduCtnnHJwWzyqzMye",
+ "word": "music",
+ "userId": "user1"
+}'
+```
+
+### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entity": {
+ "id": "string",
+ "word": "string",
+ "userId": "string",
+ "listId": "string",
+ "createDateTime": 0,
+ "updateDateTime": 0
+ }
+}
+```
+
+## 错误码
+
+// TODO:请添加错误码,例如传入的关键词数量超限,或用户 ID 不存在等。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/keyword_query.md b/docs/document/server-side/keyword_query.md
new file mode 100644
index 00000000..18abbf80
--- /dev/null
+++ b/docs/document/server-side/keyword_query.md
@@ -0,0 +1,133 @@
+# 查询关键词
+
+## 功能说明
+
+- 在关键词名单中查询关键词。
+- 该接口为模糊查询。例如,若传入关键词 `message`,响应中会返回关键词名单中包含该关键词的词条,包括 `message``messageid`、`addmessage` 和 `deletemessage` 等词条。
+
+**调用频率上限**:100 次/秒/App Key
+
+## HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/moderation/text/list/{list_id}/word
+```
+
+### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :------------ | :----- | :------- | :---------------- |
+| `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-的信息)。 |
+| `list_id` | String | 是 | 关键词名单 ID。查询该名单中的关键词。 |
+
+### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------- |
+| `word` | String | 是 | 要查询的关键词名称。 |
+| `page` | Int | 否 | 当前页码,默认值为 `0`。|
+| `size` | Int | 否 | 每页返回的关键词数量,取值范围为 [1,200],默认值为 `10`。|
+
+#### HTTP 响应
+
+##### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :----- | :---- | :------------------------ |
+| `status` | String | 请求状态。若请求成功,返回 `OK`。 |
+| `entities` | JSON Array | 查询详情。 |
+| - `id` | String | 关键词 ID。 |
+| - `word` | String | 关键词名称。 |
+| - `userId` | String | 查询关键词的用户。 |
+| - `listId` | String | 关键词名单 ID。 |
+| - `createDateTime` | | 关键词添加时间。 |
+| - `updateDateTime` | | 关键词修改时间。|
+| `first` | Boolean | 当前页面是否为首页:
- `true`:是
- `false`:否 |
+| `last` | Boolean | 当前页面是否为最后一页:
- `true`:是
- `false`:否 |
+| `size` | Int | 当前页面返回的与查询关键词模糊匹配的词条。|
+| `number` | Int | 当前页码。 |
+| `numberOfElements` | Int | 当前页面中获取的词条数量。 |
+| `totalPages` | Int | 页面总数。 |
+| `totalElements` | Int | 与查询关键词匹配的词条总数量。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+#### 示例
+
+// TODO:请提供请求示例和响应示例
+
+##### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST 'https://XXXX/XXXX/XXXX/moderation/text/list/{list_id}/word' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "word": "music",
+ "size": "1",
+ "page": "0",
+ }'
+```
+
+##### 响应示例
+
+```json
+{
+ "status": "OK",
+ "entities": [
+ {
+ "id": "string",
+ "word": "music",
+ "userId": "user1",
+ "listId": "list_0",
+ "createDateTime": 0,
+ "updateDateTime": 0
+ }
+ ],
+ "first": true,
+ "last": true,
+ "size": 1,
+ "number": 1,
+ "numberOfElements": 1,
+ "totalPages": 1,
+ "totalElements": 1
+}
+```
+
+
+## 错误码
+
+// TODO:请添加错误码,例如传入的关键词数量超限,或用户 ID 不存在等。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 |
+
+
+
+
+
+
+
+
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
diff --git a/docs/document/server-side/user_relationship.md b/docs/document/server-side/user_relationship.md
index 85ae7f16..4da94c77 100644
--- a/docs/document/server-side/user_relationship.md
+++ b/docs/document/server-side/user_relationship.md
@@ -253,6 +253,87 @@ curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer | 描述 |
+| :-------------- | :----- | :----------- | :------------------------------------------------------ |
+| `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`,表示请求成功,响应包体中包含以下字段:
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+### 示例
+
+#### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/contacts/users/XXXX'
+```
+
+#### 响应示例
+
+```json
+{
+ "action": "delete",
+ "application": "8bXXXX402",
+ "path": "/contacts/users/XXXX",
+ "uri": "https://XXXX/XXXX/XXXX/contacts/users/XXXX",
+ "entities": [],
+ "timestamp": 1542598913819,
+ "duration": 63,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| 401 | unauthorized | Unable to authenticate (OAuth) | Token 不合法,可能过期或 Token 错误。 | 使用新的 Token 访问。 |
+| 429 | reach_limit | This request has reached api limit. | 接口调用超过频率限制。 | 联系商务调整限流或者控制调用速率。 |
+| 403 | forbidden_service_operation | Service operation not allowed | app 或用户被封禁。 | 先解禁 app 或用户后再调用该接口。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+
+
## 设置好友备注
### 功能说明
@@ -536,6 +617,112 @@ curl -X GET 'https://XXXX/XXXX/XXXX/users/user1/contacts/users' \
关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+## 批量校验好友
+
+### 功能说明
+
+- 批量校验是否在好友列表中。
+
+**调用频率上限**:100 次/秒/App Key
+
+### HTTP 请求
+
+```http
+POST https://{host}/{org_name}/{app_name}/contacts/check
+```
+
+#### 路径参数
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+#### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :----------- | :------------------------------------------------------ |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求体 body
+
+请求包体为 JSON Object 类型,包含以下字段:
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---- | :----- | :---------------------- | :------- |
+| `username` | String | 是 | 当前用户 ID。批量校验该用户 ID 的好友。 |
+| `check_list` | JSON Array | 是 | 需要校验的好友的用户 ID,一次最多可校验 100 个用户 ID。 |
+
+### HTTP 响应
+
+#### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------------- | :--------- | :----------------------------------------- |
+| `entities` | JSON Array | 校验结果的详情。 |
+| - `username` | String | 系统内为用户生成的系统内唯一标识。 |
+| - `relation` | String | 是否为好友:
- `friend`:是
- `not_friend`:否 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+### 示例
+
+#### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/contacts/check' -d '{
+ "username": "user1",
+ "check_list": [
+ "user2",
+ "user3"
+ ]
+ }'
+```
+
+#### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8bXXXX402",
+ "path": "/contacts/check",
+ "uri": "https://XXXX/XXXX/XXXX/contacts/check",
+ "entities": [
+ {
+ "username":"user2",
+ "relation":"friend"
+ },
+ {
+ "username":"user3",
+ "relation":"not_friend"
+ }
+ ],
+ "timestamp": 1542598913819,
+ "duration": 63,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | Token 不合法,可能过期或 Token 错误。 | 使用新的 Token 访问。 |
+| 429 | reach_limit | This request has reached api limit. | 接口调用超过频率限制。 | 联系商务调整限流或者控制调用速率。 |
+| 403 | forbidden_service_operation | Service operation not allowed | app 或用户被封禁。 | 先解禁 app 或用户后再调用该接口。 |
+| 400 | illegal_argument | username cannot be blank | 校验的用户 `username` 不能传空。 | 确认 `username` 参数是否正确填写。 |
+| 400 | illegal_argument | check_list size must be between 1 and 100 | 被校验的用户列表只能包含 1 到 100 个用户。 | 确认 `check_list` 参数是否正确填写。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+
## 导入好友列表
### 功能描述
@@ -943,3 +1130,106 @@ curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer | 描述 |
+| :-------------- | :----- | :----------- | :------------------------------------------------------ |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+#### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :----------- | :------------------------------------------------------ |
+| `username` | String | 是 | 要校验该用户 ID 的黑名单。 |
+| `check_list` | JSON Array | 是 | 要校验的黑名单中用户 ID 列表,每次请求最多可传 100 个用户 ID。 |
+
+### HTTP 响应
+
+#### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+| :------------------- | :--------- | :------------------ |
+| `entities` | JSON Array | 校验结果的详情。 |
+| - `username` | String | 校验的用户 ID。 |
+| - `relation` | String | 对象类型,用户是否在黑名单中:
- `blacklist`:是;
- `not_blacklist`:否。| // TODO
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。
+
+### 示例
+
+#### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+
+curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/blocks/check' -d '{
+ "username": "user1",
+ "check_list": [
+ "user2",
+ "user3"
+ ]
+ }'
+```
+
+#### 响应示例
+
+```json
+{
+ "action": "post",
+ "application": "8bXXXX402",
+ "path": "/contacts/check",
+ "uri": "https://XXXX/XXXX/XXXX/blocks/check",
+ "entities": [
+ {
+ "username":"user2",
+ "relation":"blacklist"
+ },
+ {
+ "username":"user3",
+ "relation":"not_blacklist"
+ }
+ ],
+ "timestamp": 1542598913819,
+ "duration": 63,
+ "organization": "XXXX",
+ "applicationName": "testapp"
+}
+```
+
+#### 错误码
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码:
+
+| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
+| :----------- | :--- | :------------- | :----------- | :----------- |
+| 401 | unauthorized | Unable to authenticate (OAuth) | Token 不合法,可能过期或 Token 错误。 | 使用新的 Token 访问。 |
+| 429 | reach_limit | This request has reached api limit. | 接口调用超过频率限制。 | 调整限流或者控制调用速率。 |
+| 403 | forbidden_service_operation | Service operation not allowed | Token 的对应对象被封禁。 | 解禁后再访问。 |
+
+关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。
+