CIMS 提供四个独立端口的 API 服务:
| 端口 | 名称 | 用途 |
|---|---|---|
27041 |
Client API | ClassIsland 客户端获取配置和资源 |
27042 |
Management API | 用户认证、账户管理、资源管理、客户端控制 |
27043 |
Admin API | 超级管理员全局用户/账户/系统管理 |
27044 |
gRPC | Cyrene_MSP 协议(注册、命令推送、心跳) |
服务状态检测。
响应
{"message": "CIMS Client API 运行中"}获取客户端配置清单。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
client_uid |
path | string | ✅ | 客户端唯一标识 |
响应 — Manifest JSON,包含各资源类型的名称列表。
获取指定资源(302 重定向到令牌下载地址)。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
resource_type |
path | string | ✅ | 合法值: ClassPlan, TimeLayout, Subjects, Policy, DefaultSettings, Components, Credentials |
name |
query | string | ✅ | 资源文件名 |
通过令牌获取资源 JSON 内容。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
token |
query | string | ✅ | 一次性资源访问令牌 |
响应 — 资源 JSON 内容。
获取 ManagementPreset 引导配置。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
class_identity |
query | string | ❌ | 班级标识(匹配预注册客户端) |
响应
{
"IsManagementEnabled": true,
"ManagementServerKind": 1,
"ManagementServer": "https://{slug}.example.com",
"ManagementServerGrpc": "grpc://{slug}.example.com",
"ClassIdentity": "",
"PreRegisteredLabel": "三年一班",
"ManifestUrlTemplate": ""
}所有端点(除
/user/apply和/user/auth)需要Authorization: Bearer {token}请求头。
刷新当前会话令牌。
响应
{"token": "新的会话令牌"}验证令牌有效性。
响应
{"valid": true, "user_id": "uuid"}注销当前令牌(登出)。
响应
{"status": "success", "message": "已登出"}申请注册新用户。注册后进入 Pending 状态,需管理员审核。
请求体
{
"email": "user@example.com",
"password": "至少12位密码",
"username": "可选",
"display_name": "可选"
}用户登录,获取会话令牌。
请求体
{"email": "user@example.com", "password": "密码"}响应(正常) — {"token": "会话令牌"}
响应(需 2FA) — {"requires_2fa": true, "temp_token": "临时令牌"}
检查邮箱是否可用(未被占用)。无需认证。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
value |
query | string | ✅ | 待检查的邮箱地址 |
响应 — {"available": true|false}
检查用户名是否可用(未被占用、非系统保留且格式合法)。无需认证。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
value |
query | string | ✅ | 待检查的用户名(3-64位) |
响应 — {"available": true|false, "reason": "不可用原因(可选)"}
获取当前用户信息。
响应 — UserOut
启用 TOTP。返回密钥和恢复码。
确认绑定(提交首次 TOTP 码)。
请求体 — {"code": "123456"}
禁用 TOTP。
请求体 — {"password": "当前密码"}
登录时验证 TOTP。
请求体 — {"temp_token": "临时令牌", "code": "123456"}
响应 — {"token": "正式会话令牌"}
使用恢复码登录。
请求体 — {"temp_token": "临时令牌", "recovery_code": "恢复码"}
获取用户信息(同 GET /user/info)。
修改邮箱。
请求体 — {"email": "new@example.com"}
修改用户名。
请求体 — {"username": "new_username"}
修改密码(需旧密码)。
请求体 — {"old_password": "旧密码", "new_password": "至少12位新密码"}
重置密码(自助流程)。
检查账户 URL 标识 (Slug) 是否可用。需登录。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
value |
query | string | ✅ | 待检查的 Slug(3-64位) |
响应 — {"available": true|false, "reason": "不可用原因(可选)"}
列出当前用户有权访问的所有账户。
响应 — AccountOut[]
搜索账户。
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
q |
query | string | 搜索关键字 |
申请创建新账户。
请求体 — {"name": "学校名称", "slug": "可选"}
删除/停用账户。
获取账户详情。
响应 — AccountOut
修改账户 slug。
请求体 — {"slug": "new-slug-name"}
列出所有资源文件名。
搜索资源。
创建资源。
上传资源。
删除资源。
重命名资源。
覆盖写入资源。
下载资源。
当前实现仍使用
?name=查询参数模式而非路径参数:
GET /{resource_type}/create?name={name}— 创建空资源GET /{resource_type}/token?name={name}— 签发访问令牌PUT|POST /{resource_type}/write?name={name}— 覆盖写入PATCH /{resource_type}/update?name={name}— 增量合并更新GET|DELETE /{resource_type}/delete?name={name}— 删除资源
列出已注册客户端 UID。
搜索客户端。
查询客户端注册详情及在线状态。
响应
{
"uid": "client-uid",
"name": "client-id",
"mac": "AA:BB:CC:DD:EE:FF",
"status": "online",
"registered_at": "2026-01-01T00:00:00Z"
}删除客户端。
重命名客户端。
获取客户端在线状态。
断开客户端连接。
禁用客户端。
启用客户端。
修改客户端使用的档案组。
重启客户端应用。
强制客户端同步最新数据。
发送通知。
请求体
{
"title": "标题",
"content": "内容",
"icon": "info",
"tts": false,
"urgent": false
}请求客户端上报运行时配置。
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
config_type |
query | int | 配置类型枚举 |
列出配对码。
搜索配对码。
拒绝配对码。
批准配对码。
启用配对码功能。
禁用配对码功能。
列出预注册客户端。
搜索预注册客户端。
获取预注册客户端信息。
删除预注册客户端。
重命名预注册客户端。
启用预注册客户端。
禁用预注册客户端。
下载引导配置。
修改预注册客户端使用的档案组。
创建预注册客户端。
请求体 — {"label": "三年一班", "class_identity": "3-1"}
列出具权用户。
搜索具权用户。
获取具权用户信息。
移除成员(204 No Content)。
重命名具权用户。
修改具权用户的权限。
请求体 — {"role_in_account": "admin"}
列出邀请列表。
创建邀请。
请求体
{
"role_in_account": "member",
"max_uses": 1,
"expires_at": "2026-12-31T23:59:59Z"
}搜索邀请。
删除邀请。
重命名邀请。
获取邀请信息。
执行批量资源操作。
请求体
{
"operations": [
{
"action": "write",
"resource_type": "ClassPlan",
"name": "文件名",
"payload": {}
}
]
}| action | 说明 |
|---|---|
create |
创建资源 |
write |
覆盖写入 |
update |
增量合并 |
delete |
删除资源 |
所有端点需要超级管理员认证(
Authorization: Bearer {admin_secret})。
分页查询所有用户。
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
offset |
query | int | 偏移量(默认 0) |
limit |
query | int | 条数(默认 20) |
响应 — UserOut[]
搜索用户。
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
q |
query | string | 搜索关键字 |
直接创建用户(跳过审核)。
请求体
{
"email": "user@example.com",
"password": "至少12位密码",
"username": "可选",
"display_name": "可选"
}获取用户信息。
响应 — UserOut
修改用户信息。
请求体
{
"display_name": "新名称",
"role_code": "normal",
"is_active": true,
"can_create_account": true
}删除用户。
重命名用户。
请求体 — {"name": "新用户名"}
重置用户密码(无需旧密码)。
请求体 — {"new_password": "至少12位新密码"}
修改用户密码(需验证旧密码)。
请求体 — {"old_password": "旧密码", "new_password": "新密码"}
为用户启用 TOTP。
禁用用户 TOTP。
验证用户 TOTP。
重置用户 TOTP 密钥。
列出待审核用户。
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
offset |
query | int | 偏移量(默认 0) |
limit |
query | int | 条数(默认 50) |
批准用户注册。
拒绝用户注册。
列出所有账户(跨租户)。复用 Management API 的 /account 接口,但具备所有权限。允许 ?role={user_id} 以某个用户身份操作。
响应 — AccountOut[]
获取所有系统设置。
响应 — 键值对 JSON。
修改系统设置。
仅允许以下 key:
registration_open,require_approval,max_accounts_per_user,default_role,motd。
请求体 — 键值对 JSON。
执行批量资源操作(同 Management API /account/bulk)。
客户端注册。
请求 — ClientRegisterCsReq
| 字段 | 类型 | 说明 |
|---|---|---|
uid |
string | 客户端唯一标识 |
client_id |
string | 客户端 ID |
mac |
string | MAC 地址 |
ip |
string | IP 地址 |
pairing_code |
string | 配对码 |
响应 — ClientRegisterScRsp
| 字段 | 类型 | 说明 |
|---|---|---|
RetCode |
enum | 返回码(Success/Fail) |
ServerPublicKey |
bytes | 服务器公钥 |
命令通道。
客户端发送 — ClientCommandDeliverCsReq(命令响应 / Ping)
服务端推送 — ClientCommandDeliverScRsp
| 字段 | 类型 | 说明 |
|---|---|---|
RetCode |
enum | 返回码 |
Type |
enum | 命令类型 (RestartApp, DataUpdated, SendNotification, GetClientConfig) |
Payload |
bytes | Protobuf 序列化的命令负载 |
心跳保活。客户端定期发送心跳,服务端回复确认。
{
"id": "uuid",
"username": "user_a1b2c3d4",
"email": "user@example.com",
"display_name": "显示名称",
"role_code": "normal",
"is_active": true,
"can_create_account": false,
"created_at": "2026-01-01T00:00:00Z"
}{
"id": "uuid",
"name": "账户名称",
"slug": "org-a1b2c3d4",
"api_key": "API密钥",
"is_active": true,
"created_at": "2026-01-01T00:00:00Z"
}{
"status": "success|error",
"message": "操作结果描述"
}