Skip to content

/api/v1/* REST API 端点总目录 / REST API v1 Endpoint Catalog

日期 / Date: 2026-06-02 | 状态 / Status: 长期协议契约文档 / Long-lived contract doc 范围 / Scope: 全部 /api/v1/* REST 端点(不含 /api/v1/ws WebSocket 与 /api/v1/test/* 测试路由) 权威来源 / Source of truth: src/imboy_router.erl + 各 src/api/*_handler.erl(逐一阅读真实源码提取,非概括推断) 方法 / Method: 按域并行审计 30 个 handler,逐端点核对请求/响应字段

简体中文为权威版本;English mirrors are inline per row. 代码、命令、模块名不翻译。

相关文档 / Related docs:


概览 / Overview

  • 端点总数 / Total endpoints: 约 130+/api/v1/* REST 端点,分布于 30 个 handler。
  • 鉴权模型 / Auth model: 三类 —— 公开 Open(无需 token)、可选 Optional(有 token 才校验)、JWT(默认,必须 Authorization)。
  • 响应信封 / Response envelope: 绝大多数返回 {code, msg, payload};少数特殊端点返回裸 body(已在对应行注明)。
  • TSID: 实体 ID(id/uid/gid/channel_id 等)为 64 位 TSID,以 JSON integer 传输;前端用 safeParseBigIntJson 转 string(详见 tsid-field-convention.md)。

鉴权与信封约定 / Auth & Envelope Conventions

json
{ "code": 0, "msg": "success.", "payload": {} }
  • code = 0 成功;code != 0 失败。payload 结构由各端点定义。
  • 鉴权基线取自 imboy_router:open/0(公开)与 option/0(可选);其余路由经 auth_middleware_api_v1 强制 JWT。
  • 表中“响应载荷 Response payload”列仅列 payload 顶层字段,不重复 {code,msg}

不走标准信封的端点 / Non-envelope endpoints

路径 Path说明 / Note
/api/v1/initpayload.res 为 AES-256-CBC 加密的初始化数据(裸 payload 含 test/res
/api/v1/app/manifest直返裸 JSON(features/policy/plugins/generated_at),带 ETag/304
/api/v1/metricsaccept: text/plain 时返回 Prometheus 文本,否则 JSON
/api/v1/passport/qr_login/subscribeSSE text/event-stream 长连接
/api/v1/group/file/downloadHTTP 302 重定向到文件 URL
/api/v1/uqrcode/api/v1/group/qrcode无 token / 校验失败时 302 重定向

A. 系统与认证 / System & Auth

系统与配置 / System & Config

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/init公开 Openindex_handler#init客户端初始化配置(加密下发)/ Encrypted client init configHeader: vsn,cos,pkg,sktestres(AES 加密 JSON:ws_url/upload_url/attach_presign_endpoint/login_rsa_pub_key 等)
GET/api/v1/app/features公开 Openapp_feature_handler#features功能特性开关表 / Feature flagsfeature map(键→bool)
GET/api/v1/app/manifest公开 Openapp_manifest_handler#manifest应用清单(带 ETag/304)/ App manifestHeader: if-none-match(可选)featurespolicyapp_entriesadmin_entriespluginsgenerated_at(裸 JSON)
GET/api/v1/app/policy公开 Openapp_feature_handler#policy生效策略视图 / Effective policypolicy map
GET/api/v1/app/ice_serversJWTapp_feature_handler#ice_serversWebRTC STUN/TURN 配置 / ICE serversice_servers(array)
GET/api/v1/app_version/check可选 Optionalapp_version_handler#check版本升级检查 / Version checkHeader: cos,did;Query: vsn,region_codeupdatableupgrade_type(none/force/recommend/silent)、check_interval_hours
POST/api/v1/app_upgrade/report可选 Optionalapp_upgrade_log_handler#report上报升级事件 / Report upgrade eventBody: event,client_vsn,target_vsn,upgrade_type,extra,uidok=true(缺必填返回 400)
GET/api/v1/metrics公开 Openmetrics_handler运行时指标 / Runtime metricsHeader: acceptJSON counters/histograms 或 Prometheus 文本

认证与登录 / Auth & Login

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/refreshtoken公开 Openpassport_handler#refreshtoken刷新 access token / Refresh tokenHeader: imboy-refreshtokentoken(限流超额 429)
POST/api/v1/passport/quick_login公开 Openpassport_handler#quick_login运营商一键登录 / Carrier one-tapBody: service,operator,token,sys_version登录 payload:uid integer(TSID)、tokenrefreshtokenemailnicknameavataraccountgenderregionsignstatusrolesetting
POST/api/v1/passport/login公开 Openpassport_handler#login密码/验证码登录 / LoginBody: type(email/mobile/account),account,pwd(RSA),code;Header: cos,did同上登录 payload;设备冲突 code=5100;验证码登录可带 action=need_set_password
POST/api/v1/passport/signup公开 Openpassport_handler#signup注册账号 / Sign upBody: type,account,pwd(RSA),code,nickname,avatar{}(语义成功)
POST/api/v1/passport/getcode公开 Openpassport_handler#getcode发送验证码 / Send codeBody: type(email/sms),scene,account{}(手机号已存在返回 paramAlreadyExist)
POST/api/v1/passport/findpassword公开 Openpassport_handler#find_password验证码重置密码 / Reset passwordBody: type,account,pwd(RSA),code{}
GET/api/v1/passport/bind_mail公开 Openpassport_handler#bind_mail邮件链接确认绑定邮箱 / Confirm email bindQuery: ts,tk(HMAC),uin,mail{}
POST/api/v1/passport/qr_login/create公开 Openqr_login_handler#create创建扫码登录会话(60s)/ Create QR sessionBody: device_id*,device_name,platformqr_tokensession_tokenexpires_in=60
GET/api/v1/passport/qr_login/status公开 Openqr_login_handler#status轮询扫码状态 / Poll QR statusQuery: session_tokenstatus(waiting/scanned/confirmed/cancelled);confirmed 附 token
POST/api/v1/passport/qr_login/scan公开*(实需登录)qr_login_handler#scan手机端扫码 / Phone scansBody: qr_token;State: current_uidstatus=scanned、device_nameplatform
POST/api/v1/passport/qr_login/confirm公开*(实需登录)qr_login_handler#confirm手机端确认登录 / Phone confirmsBody: qr_token;State: current_uidstatus=confirmed
POST/api/v1/passport/qr_login/cancel公开 Openqr_login_handler#cancel取消扫码会话 / Cancel QRBody: session_tokenstatus=cancelled
GET/api/v1/passport/qr_login/subscribe公开 Openqr_login_sse_handlerSSE 推送扫码状态 / SSE status pushQuery: session_token*SSE 帧 data:{status[,token]}(30s 心跳)

注:qr_login/scanqr_login/confirm 路由列为公开,但 handler 依赖 State.current_uid,手机端须携带 JWT 才能取到非 0 uid。


B. 会话与消息 / Conversation & Messaging

会话 / Conversation

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/conversation/online公开 Openconversation_handler#online在线统计与列表 / Online stats & listQuery: type(list 时返回列表),limit(默认10)数组(list 元素含 uid,pid,dtype,did,time,ref,node
GET/api/v1/conversation/mineJWTconversation_handler#mine我的会话列表 / My conversationsQuery: last_server_ts(可选)会话列表(聚合 c2c+c2g,limit=1000)
POST/api/v1/conversation/pinJWTconversation_handler#pin_conversation置顶会话 / PinBody(JSON): conversation_id,type(默认 c2c){}
POST/api/v1/conversation/unpinJWTconversation_handler#unpin_conversation取消置顶 / UnpinBody(JSON): conversation_id,type{updated:true}
GET/api/v1/conversation/pinnedJWTconversation_handler#pinned_list置顶列表 / Pinned list{items:[...]}
POST/api/v1/conversation/deleteJWTconversation_handler#delete_conversation删除会话(软删)/ Soft-deleteBody(JSON): conversation_id,type{}
POST/api/v1/conversation/restoreJWTconversation_handler#restore_conversation恢复会话 / RestoreBody(JSON): conversation_id,type{restored:true}

消息 / Message

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/msg/offlineJWTmsg_handler#offline拉取离线消息 / Fetch offlineQuery: limit(默认1000),c2c_last_msg_at,c2g_last_msg_at,s2c_last_msg_at(ms){c2c:{has_more,next_last_msg_at,total,list},c2g:{...},s2c:{...}}
POST/api/v1/msg/offline_ackJWTmsg_handler#offline_ack确认离线消息 / Ack offlineBody: type(c2c/c2g/s2c),msg_ids(list){type,processed_count,msg_ids_count}
GET/api/v1/msg/read_statsJWTmsg_handler#read_stats群消息已读统计 / Read statsQuery: msg_id*{read_count,total_count}
POST/api/v1/msg/pinJWTmsg_handler#pin置顶/取消置顶消息 / Pin messageBody: msg_id,pinned(bool){msg_id,pinned}
POST/api/v1/msg/forwardJWTmsg_handler#forward转发消息 / ForwardBody: msg_ids(list),to(TSID),to_type*{forward_msg_ids,forward_count}
POST/api/v1/msg/reaction/addJWTmsg_handler#reaction_add添加表情回应 / Add reactionBody: msg_id,msg_type(默认 c2c),emoji{msg_id,emoji,user_id,created_at}
POST/api/v1/msg/reaction/removeJWTmsg_handler#reaction_remove移除表情回应 / Remove reactionBody: msg_id,msg_type,emoji{msg_id,emoji}
GET/api/v1/msg/reaction/listJWTmsg_handler#reaction_list表情列表 / List reactionsQuery: msg_id*,msg_type(默认 c2c)reaction 列表(见源码)
GET/api/v1/msg/historyJWTmsg_handler#history消息历史(conv_seq 游标)/ HistoryQuery: chat_type(c2c/c2g),peer_id(TSID),after_seq(默认0),limit(默认50,≤100){messages,next_seq,has_more,conv_key};message 含 conv_seq/from/可选 to/group_id

@提及 / Mention

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/POST/api/v1/mention/listJWTmention_handler#list@我列表(可按群)/ List @-mepage,size,is_read,gid/group_id(可选){total,page,size,items[]};item 含 id,msg_id,group_id,from_uid,mentioned_uid,is_read,created_at
GET/POST/api/v1/mention/unreadJWTmention_handler#unread未读@计数 / Unread countgid/group_id(可选){count}
POST/api/v1/mention/mark_readJWTmention_handler#mark_read标记已读 / Mark readall(bool) 或 msg_idmention_idall=true 可带 gid/group_id{msg_id}/{mention_id,msg_id}/{all:true[,group_id]}
GET/POST/api/v1/mention/suggestJWTmention_handler#suggest@输入成员建议 / @-suggestgid/group_id*,keyword{members[],items[]}(两键同列表)

C. 用户与社交 / User & Social

用户 / User

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/uqrcode可选 Optionaluser_handler#qrcode扫用户二维码 / Scan user QRQuery: id(TSID)无 token→302;有 token→type,id(TSID),nickname,gender,avatar,sign,region,isfriend,remark
GET/api/v1/user/qrcodeJWTuser_handler#qrcode扫用户二维码 / Scan user QRQuery: id(TSID)同 /api/v1/uqrcode(不会 302)
POST/api/v1/user/updateJWTuser_handler#update修改个人信息单字段 / Update fieldfield,value(email/gender/allow_search 等白名单){}
GET/api/v1/user/show公开 Openuser_handler#show获取公开信息 / Public infoQuery: id(TSID)id(TSID),nickname,avatar,account,sign
POST/api/v1/user/change_stateJWTuser_handler#change_state切换在线/隐身 / Toggle statestate(默认 hide){}
POST/api/v1/user/settingJWTuser_handler#setting批量保存设置 / Save settingssetting(键值对列表){}
GET/api/v1/user/credentialJWTuser_handler#credentialWebRTC TURN/STUN 凭证 / Credentialttl=86400,turn_urls,stun_urls,username,credential
POST/api/v1/user/change_passwordJWTuser_handler#change_password修改密码 / Change password旧/新密码(见源码){}
POST/api/v1/user/set_passwordJWTuser_handler#set_password设置密码 / Set password新密码(见源码){}
POST/api/v1/user/apply_logoutJWTuser_handler#apply_logout申请注销 / Apply logout见源码{}(恒成功)
POST/api/v1/user/cancel_logoutJWTuser_handler#cancel_logout撤销注销 / Cancel logout见源码{}
POST/api/v1/user/export_dataJWTuser_handler#export_data个人数据导出(占位)/ Export (placeholder)恒 501 ?ERR_NOT_IMPLEMENTED
GET/api/v1/user/searchJWTuser_handler#search精确搜索用户 / Search userQuery: keyword;分页 page,sizetotal,page,size,list(命中项含用户列+is_friend+remarkid TSID)

设备与推送 / Device & Push

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/user_device/pageJWTuser_device_handler#page设备档案分页 / Paged devices分页 page,size标准分页 total/page/size/list
POST/api/v1/user_device/change_nameJWTuser_device_handler#change_name改设备名 / Rename devicedid,name{}
POST/api/v1/user_device/deleteJWTuser_device_handler#delete删除设备 / Delete devicedid{}
GET/api/v1/user_device/sessionsJWTuser_device_handler#sessions活跃会话(内存)/ Active sessionsdevices(array),count
POST/api/v1/user_device/check_loginJWTuser_device_handler#check_login检查登录冲突 / Check conflictBody(JSON): device_type{conflict:bool[,conflict_device],message}
POST/api/v1/user_device/kickJWTuser_device_handler#kick踢出设备 / Kick deviceBody(JSON): device_type,device_id{message}
POST/api/v1/user_device/kick-othersJWTuser_device_handler#kick_others踢出其他设备 / Kick othersBody(JSON): device_type,device_id{message}
POST/api/v1/push/registerJWTuser_device_handler#push_register注册推送 Token / Register pushdevice_id,device_type,platform(fcm/apns),token{}
POST/api/v1/push/unregisterJWTuser_device_handler#push_unregister注销推送 Token / Unregister pushdevice_id*{}

收藏 / Collect

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/user_collect/pageJWTuser_collect_handler#page收藏分页(可筛选)/ Paged collect分页;kind(0-7),order,kwd,tagtotal/page/size/list(项含 kind,kind_id,source,created_at,updated_at,tag,info
POST/api/v1/user_collect/addJWTuser_collect_handler#add添加收藏 / Addkind,kind_id,source,remark,info{}
POST/api/v1/user_collect/removeJWTuser_collect_handler#remove删除收藏 / Removekind_id{}(恒成功)
POST/api/v1/user_collect/changeJWTuser_collect_handler#change修改收藏 / Changeaction,kind_id,...{}(恒成功)

用户标签 / User Tag

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/user_tag/pageJWTuser_tag_handler#page标签分页 / Tag pagepage,size,kwd,scene(collect/friend)标签分页(见源码);token 无效返回 ?ERR_TOKEN_INVALID
POST/api/v1/user_tag/addJWTuser_tag_handler#add新建标签(≤14字)/ Add tagscene,tagtagId(TSID)
POST/api/v1/user_tag/change_nameJWTuser_tag_handler#change_name改标签名 / Rename tagscene,tagName(≤14字),tagId(≥1){}
POST/api/v1/user_tag/deleteJWTuser_tag_handler#delete删除标签 / Delete tagscene,tag{}

标签关系 / User Tag Relation

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/user_tag_relation/collect_pageJWTuser_tag_relation_handler#collect_page收藏标签对象分页 / Collect-scene pagepage,size,kwd,tag_id(≥1)*total,page,size,list(项含 kind,kind_id,source,created_at,updated_at,tag,info
GET/api/v1/user_tag_relation/friend_pageJWTuser_tag_relation_handler#friend_page好友标签对象分页 / Friend-scene pagepage,size,kwd,tag_id(≥1)*分页结构(见源码)
POST/api/v1/user_tag_relation/addJWTuser_tag_relation_handler#add给对象打标签 / Tag objectscene,tag(array,每项≤14字),objectId{}
POST/api/v1/user_tag_relation/setJWTuser_tag_relation_handler#set批量设置对象标签 / Batch setscene,tagName(≤14字),tagId(≥1),objectIds(array){}
POST/api/v1/user_tag_relation/removeJWTuser_tag_relation_handler#remove从标签移除对象 / Remove from tagscene,tagId(≥1),objectId{}

好友 / Friend

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/friend/addJWTfriend_handler#add_friend申请加好友 / Send requestto(TSID),payload,created_at{}
POST/api/v1/friend/confirmJWTfriend_handler#confirm确认申请 / Confirmfrom(TSID),to(TSID),payload好友信息 + remark + source(见源码)
POST/api/v1/friend/rejectJWTfriend_handler#reject拒绝申请 / Rejectfrom(TSID)*{}
POST/api/v1/friend/deleteJWTfriend_handler#delete_friend删除好友 / Deleteuid(TSID){}
GET/api/v1/friend/listJWTfriend_handler#list好友列表 / Friend listmine(map),friend(array,含 id/from_user_id/to_user_id TSID)
GET/api/v1/friend/informationJWTfriend_handler#information好友/群组详情 / Infoid(TSID),type(friend/group)friend: id(TSID),nickname,account,gender,experience,avatar,sign,mine_uid,user_setting;group/其他: {}
POST/api/v1/friend/change_remarkJWTfriend_handler#change_remark改好友备注 / Change remarkuid(TSID),remark{remark}
POST/api/v1/friend/moveJWTfriend_handler#move移动好友到分组 / Moveuid(TSID),category_id(默认0){}

黑名单 / Denylist

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/friend/denylist/addJWTuser_denylist_handler#add加黑名单 / Adddenied_user_id(TSID){user_id,denied_user_id,created_at}
POST/api/v1/friend/denylist/removeJWTuser_denylist_handler#remove移除黑名单 / Removedenied_user_id(TSID){}
GET/api/v1/friend/denylist/pageJWTuser_denylist_handler#page黑名单分页 / Pagepage,size标准分页(见源码)

好友分类 / Friend Category

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/friend/category/addJWTfriend_category_handler#add新增分组 / Addname(默认 Unnamed){id(TSID),name}
POST/api/v1/friend/category/deleteJWTfriend_category_handler#delete删除分组 / Deleteid(TSID){}
POST/api/v1/friend/category/renameJWTfriend_category_handler#rename重命名分组 / Renameid(TSID),name{}
方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/fts/user_searchJWTfts_handler#user_search搜索用户 / Search userskeyword,page,size分页;结果项以 uid 为键(非 id
GET/api/v1/fts/recently_userJWTfts_handler#recently_user最近可搜索用户 / Recent userskeyword,page,size分页(见源码)
GET/api/v1/fts/msgJWTfts_handler#msg消息全文搜索 / Search messageskeyword,type(默认 C2C),page,size,start_date,end_date,msg_type,from_uid,conversation_id,sort_by分页;功能未启用返回 ?ERR_FEATURE_DISABLED

位置 / Location

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/location/makeMyselfVisibleJWT(feature 门控)location_handler#make_myself_visible设为可见 / Make visiblelatitude,longitude{}
POST/api/v1/location/makeMyselfUnvisibleJWT(feature 门控)location_handler#make_myself_unvisible设为不可见 / Make invisible{}
GET/api/v1/location/peopleNearbyJWT(feature 门控)location_handler#people_nearby附近的人 / People nearbylongitude,latitude,unit(默认 m),radius(默认500),limit(默认100)radius,size,unit,list不含坐标,仅 distance

注:location 三端点执行前经 imboy_plugin_registry:required_feature 门控,feature 未启用返回错误。


D. 群组 / Group

群组核心 / Group Core

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET / POST/api/v1/group/remarkJWTgroup_handler#remark获取/更新群备注 / Get or set remarkGET: gid(TSID);POST: gid,remark{remark,gid} / {gid}
GET/api/v1/group/qrcodeJWTgroup_handler#qrcode扫群二维码加入 / Join via QRid(TSID),exp,tk群对象 id(TSID),title,avatar,member_count,member_max,type,group_member;校验失败 302
GET/api/v1/group/face2faceJWTgroup_handler#face2face面对面建群 / Face-to-facelongitude,latitude,codegid(TSID),member_list
POST/api/v1/group/face2face_saveJWTgroup_handler#face2face_save保存面对面建群 / Save F2Fcode,gid(TSID)group,member_list
POST/api/v1/group/addJWTgroup_handler#add创建群(type=2 私有)/ Create groupmember_uids(list[TSID])group,member_list
POST/api/v1/group/editJWTgroup_handler#edit编辑群信息 / Editgid(TSID),title/avatar/introduction(可选){gid}
POST/api/v1/group/dissolveJWTgroup_handler#dissolve解散群(仅群主)/ Dissolvegid(TSID){gid}
GET/api/v1/group/detailJWTgroup_handler#detail群详情 / Group detailgid(TSID)群对象(全字段 group_transfer)
GET/api/v1/group/pageJWTgroup_handler#page我的群列表(owner/join/manager)/ Paged groupsattr,page,sizetotal,page,size,list
GET/api/v1/group/msg_pageJWTgroup_handler#msg_page群消息分页 / Paged group msgsgid(TSID),last_time,page,sizetotal,page,size,list
POST/api/v1/group/transferJWTgroup_handler#transfer群转让 / Transfer ownershipgid(TSID),new_owner_uid(TSID){gid}

群成员 / Group Member

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group_member/joinJWTgroup_member_handler#join邀请成员加入 / Invitegid(TSID),member_uids(list[TSID])*,join_mode{gid,user_id_sum,member_list}
POST/api/v1/group_member/leaveJWTgroup_member_handler#leave离群/移除成员 / Leave or removegid(TSID),member_uids(list[TSID]){gid}
GET/api/v1/group_member/pageJWTgroup_member_handler#page群成员分页 / Paged membersgid(TSID),page,sizetotal,page,size,list(成员含 id,role,alias,mute_until 等)
POST/api/v1/group_member/aliasJWTgroup_member_handler#alias设置群内昵称 / Set aliasgid(TSID),alias,description{gid}
GET/api/v1/group_member/same_groupJWTgroup_member_handler#same_group两用户共同群 / Common groupsuid1(TSID),uid2(TSID){count,list}
POST/api/v1/group_member/muteJWTgroup_member_handler#mute禁言成员 / Mutegid(TSID),user_id(TSID),duration(秒>0){gid,user_id}
POST/api/v1/group_member/unmuteJWTgroup_member_handler#unmute解除禁言 / Unmutegid(TSID),user_id(TSID){gid,user_id}
POST/api/v1/group_member/roleJWTgroup_member_handler#role更新成员角色(1-3)/ Update rolegid(TSID),user_id(TSID),role(1-3){gid,user_id}

群分类 / Group Category

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group/category/createJWTgroup_category_handler#create创建分类 / Createcategory_name{id(TSID),category_name}
GET/api/v1/group/category/listJWTgroup_category_handler#list分类列表 / List{categories[]}
POST/api/v1/group/category/renameJWTgroup_category_handler#rename重命名 / Renameid(TSID),category_name{}
POST/api/v1/group/category/deleteJWTgroup_category_handler#delete删除分类 / Deleteid(TSID){}
POST/api/v1/group/category/move_groupJWTgroup_category_handler#move_group移动群到分类 / Move groupgid(TSID),category_id(TSID){}
POST/api/v1/group/category/sortJWTgroup_category_handler#sort批量排序 / Sortsort_orders(list[{id,sort_order}]){}

群标签 / Group Tag

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group/tag/addJWTgroup_tag_handler#add添加群标签 / Add taggid(TSID),tag_name{tag_id(TSID)}
POST/api/v1/group/tag/removeJWTgroup_tag_handler#remove删除群标签 / Remove taggid(TSID),tag_name{}
GET/api/v1/group/tag/listJWTgroup_tag_handler#list群标签列表 / List tagsgid(TSID){list[]}
GET/api/v1/group/tag/searchJWTgroup_tag_handler#search按标签搜群 / Search by tagtag_name{list[]}
GET/api/v1/group/tag/hotJWTgroup_tag_handler#hot热门标签 / Hot tagslimit(默认20,1-100){list[]}

群公告 / Group Notice

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group_notice/addJWTgroup_notice_handler#add创建公告 / Creategid(TSID),title,body,status(0-2),expired_at{notice_id(TSID)}
POST/api/v1/group_notice/editJWTgroup_notice_handler#edit编辑公告 / Editnotice_id(TSID),gid,status,title,body,expired_at{notice_id}
POST/api/v1/group_notice/deleteJWTgroup_notice_handler#delete删除公告(软删)/ Deletenotice_id(TSID){notice_id}
GET/api/v1/group_notice/pageJWTgroup_notice_handler#page公告分页(旧)/ Page (legacy)gid(TSID),page,sizelist+分页;项含 notice_id,user_id,body,status,expired_at,created_at
POST/api/v1/group_notice/publishJWTgroup_notice_handler#publish发布并广播 / Publishnotice_id(TSID),gid{notice_id}
GET/api/v1/group_notice/latestJWTgroup_notice_handler#latest最新已发布公告 / Latestgid(TSID)array(0/1 项)
GET/api/v1/group/notice/listJWTgroup_notice_handler#list公告列表(置顶排序)/ Listgid(TSID),page,size{total,page,size,items[]}
GET/api/v1/group/notice/detailJWTgroup_notice_handler#detail公告详情 / Detailnotice_id(TSID)notice map(见 DS)
POST/api/v1/group/notice/pinJWTgroup_notice_handler#pin置顶(群主/管理员)/ Pinnotice_id(TSID){notice_id}
POST/api/v1/group/notice/unpinJWTgroup_notice_handler#unpin取消置顶 / Unpinnotice_id(TSID){notice_id}
POST/api/v1/group/notice/mark_readJWTgroup_notice_handler#mark_read标记已读 / Mark readnotice_id(TSID)notice map(见 DS)

群投票 / Group Vote(feature 门控)

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group/vote/createJWTgroup_vote_handler#create创建投票 / Creategid(TSID),title,description,options(array,二进制键 option_text/sort_order),vote_type(1单/2多),is_anonymous,end_at{vote_id,group_id(TSID),creator_id(TSID),title,vote_type,is_anonymous}
GET/api/v1/group/vote/listJWTgroup_vote_handler#list投票列表 / Listgid(TSID),page,size{total,page,size,list[]}
GET/api/v1/group/vote/detailJWTgroup_vote_handler#detail投票详情 / Detailvote_idvote map + options[](含 vote_count) + total_votes
POST/api/v1/group/vote/castJWTgroup_vote_handler#cast投票 / Castvote_id,option_ids(array){vote_id}
POST/api/v1/group/vote/updateJWTgroup_vote_handler#update修改已投 / Updatevote_id,option_ids{vote_id}
POST/api/v1/group/vote/cancelJWTgroup_vote_handler#cancel取消我的投票 / Cancelvote_id{vote_id}
POST/api/v1/group/vote/closeJWTgroup_vote_handler#close结束投票 / Closevote_id{vote_id}
GET/api/v1/group/vote/my_voteJWTgroup_vote_handler#my_vote我的投票记录 / My votevote_id{vote_id,option_ids,created_at}

注:vote_id 为字符串 ID(vote 前缀,非 TSID integer);option_idopt 前缀字符串。

群日程 / Group Schedule(feature 门控)

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group_schedule/createJWTgroup_schedule_handler#create创建日程 / Creategroup_id(TSID),title,description,location,start_at,end_at,remind_before(默认15),participant_ids(list[TSID]){schedule_id,id}
POST/api/v1/group_schedule/updateJWTgroup_schedule_handler#update修改日程(仅创建者)/ Updateschedule_id,title,description,location,start_at,end_at{schedule_id}
POST/api/v1/group_schedule/cancelJWTgroup_schedule_handler#cancel取消日程(仅创建者)/ Cancelschedule_id{schedule_id}
GET/api/v1/group_schedule/detailJWTgroup_schedule_handler#detail日程详情(含参与人)/ Detailschedule_id{schedule,participants[],participant_count}
GET/api/v1/group_schedule/listJWTgroup_schedule_handler#list群日程列表 / Group listgroup_id(TSID),start_at,end_at,page,size{list[],total,page,size}
GET/api/v1/group_schedule/my_listJWTgroup_schedule_handler#my_list我的日程列表 / My liststart_at,end_at,page,size{list[],page,size}(无 total)
POST/api/v1/group_schedule/confirmJWTgroup_schedule_handler#confirm确认/拒绝参与 / Confirmschedule_id,accept(默认 true){schedule_id}

注:schedule_idsched_ 前缀字符串 ID(非 TSID integer)。

群相册 / Group Album

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group_album/createJWTgroup_album_handler#create_album创建相册 / Create albumgid,album_name,cover_photo_id{id(TSID),gid,...}
GET/api/v1/group_album/listJWTgroup_album_handler#list_albums相册列表 / List albumsgid*,page,size{list,total,page,size}
POST/api/v1/group_album/renameJWTgroup_album_handler#rename_album重命名相册 / Renamealbum_id,album_name{}
POST/api/v1/group_album/deleteJWTgroup_album_handler#delete_album删除相册 / Deletealbum_id*{}
POST/api/v1/group_album/photo/uploadJWTgroup_album_handler#upload_photo上传图片 / Uploadmultipart 或 JSON: gid,album_id,photo,photo_name{id(TSID),gid,album_id,...}
POST/api/v1/group_album/photo/batchJWTgroup_album_handler#batch_upload批量上传 / Batch uploadgid*,photos(array){results[]}(每项 {ok,PhotoData}/{error}
GET/api/v1/group_album/photo/listJWTgroup_album_handler#list_photos图片列表 / List photosalbum_id*,page,size{list,total,page,size}
GET/api/v1/group_album/photo/detailJWTgroup_album_handler#photo_detail图片详情 / Photo detailphoto_id*photo map
POST/api/v1/group_album/photo/deleteJWTgroup_album_handler#delete_photo删除图片 / Delete photophoto_id*{}
POST/api/v1/group_album/photo/likeJWTgroup_album_handler#like_photo点赞图片 / Likephoto_id*{}
POST/api/v1/group_album/photo/unlikeJWTgroup_album_handler#unlike_photo取消点赞 / Unlikephoto_id*{}
POST/api/v1/group_album/photo/commentJWTgroup_album_handler#add_comment添加评论 / Add commentphoto_id,content{}
GET/api/v1/group_album/photo/commentsJWTgroup_album_handler#list_comments评论列表 / List commentsphoto_id*,limit(默认20){comments[]}(含 user_id TSID)
POST/api/v1/group_album/cover/updateJWTgroup_album_handler#update_cover更新封面 / Update coveralbum_id,photo_id{}

群文件 / Group File

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group/file/uploadJWTgroup_file_handler#upload上传文件 / Uploadmultipart: gid,file,file_name*,file_type{file_id(TSID),file_name,file_size,file_type,file_category,created_at}
GET/api/v1/group/file/downloadJWTgroup_file_handler#download下载(302)/ Downloadfile_id*HTTP 302 Location
GET/api/v1/group/file/listJWTgroup_file_handler#list文件列表 / Listgid*,page,size,category{items,total,page,size}
POST/api/v1/group/file/deleteJWTgroup_file_handler#delete删除文件 / Deletefile_id*{deleted:true}
GET/api/v1/group/file/searchJWTgroup_file_handler#search搜索文件 / Searchgid,keyword,page,size{items}(无分页字段)
GET/api/v1/group/file/categoriesJWTgroup_file_handler#categories分类统计 / Category statsgid*{items[]}category,count,total_size

群作业 / Group Task(feature 门控)

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/group/task/createJWTgroup_task_handler#create创建作业 / Creategroup_id(TSID),title,user_ids(array),description,deadline,attachment{task_id(TSID)}
POST/api/v1/group/task/updateJWTgroup_task_handler#update更新作业 / Updatetask_id*,status(0-3),title,description,deadline,attachment{task_id}
POST/api/v1/group/task/assignJWTgroup_task_handler#assign分配作业 / Assigntask_id*,user_ids(array){task_id}
POST/api/v1/group/task/submitJWTgroup_task_handler#submit提交作业 / Submittask_id*,content,attachment(s){task_id}(task_uid binary)
POST/api/v1/group/task/reviewJWTgroup_task_handler#review批改作业 / Reviewassignment_id*,score,comment{assignment_id}
GET/api/v1/group/task/listJWTgroup_task_handler#list作业列表 / Listgroup_id(TSID)*,status,assignee_id(默认当前;all),page,size{list[],page,size}
GET/api/v1/group/task/detailJWTgroup_task_handler#detail作业详情 / Detailtask_id*task map
GET/api/v1/group/task/myJWTgroup_task_handler#my_tasks我的作业 / My tasksstatus,page,size{list[],page,size}
GET/api/v1/group/task/pendingJWTgroup_task_handler#pending_review待批改作业 / Pending reviewtask_id*,page,size{list[],page,size}

E. 频道 / Channel

频道字段完整结构详见 channel-api-contract-v1.md。频道对象顶层含 id(TSID)、nametype(smallint 0|1|2)、descriptionavatarcustom_idtagscreator_uid(TSID) 等。路径参数“path 优先、body 回退”。

频道核心 / Channel Core

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/channel/createJWTchannel_handler#create创建频道(上限20)/ Createname*,type(0|2,默认0),description,avatar,custom_id,tagsChannel object
GET/api/v1/channel/:channel_idJWTchannel_handler#show频道详情 / Getpath channel_id*Channel object
GET/api/v1/channel/by_custom_id/:custom_idJWTchannel_handler#by_custom_id按自定义ID获取 / Get by custom idpath custom_id*Channel object
PUT/POST/api/v1/channel/:channel_id/updateJWTchannel_handler#update更新频道 / Updatepath channel_id;body 其余字段透传Channel object
POST/api/v1/channel/:channel_id/deleteJWTchannel_handler#delete删除频道 / Deletepath channel_id{}
POST/api/v1/channel/:channel_id/subscribeJWTchannel_handler#subscribe订阅 / Subscribepath channel_id{}
POST/api/v1/channel/:channel_id/unsubscribeJWTchannel_handler#unsubscribe取消订阅 / Unsubscribepath channel_id{}
GET/api/v1/channels/subscribedJWTchannel_handler#subscribed我订阅的频道 / Subscribedcursor,limit(默认50){list,cursor,limit}(cursor/limit 仅回显)
GET/api/v1/channels/managedJWTchannel_handler#managed我管理的频道 / Managed{list}
GET/api/v1/channels/unread/summaryJWTchannel_handler#unread_summary未读聚合 / Unread summary{total_unread,unread_channels,channels[]}
GET/api/v1/channels/syncJWTchannel_handler#sync增量同步 / Incremental syncsince(默认0){channels,server_time}

频道消息 / Channel Messages

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/channel/:channel_id/messageJWTchannel_handler#publish_message发布消息 / Publishpath channel_id;body content*,msg_type(默认 text),payloadMessage object(id/channel_id TSID)
GET/api/v1/channel/:channel_id/messagesJWTchannel_handler#messages消息列表 / Listpath channel_id*;cursor(默认0),limit(默认20,1-200){list}
POST/api/v1/channel/:channel_id/readJWTchannel_handler#mark_read标记已读 / Mark readpath channel_id;body message_id{}
POST/api/v1/channel/:channel_id/message/:message_id/viewJWTchannel_handler#record_view记录阅读 / Record viewpath channel_id,message_id*{}
POST/api/v1/channel/:channel_id/message/:message_id/reactionJWTchannel_handler#add_reaction添加反应 / Add reactionpath 同上;body reaction_type(默认 like){}
DELETE/api/v1/channel/:channel_id/message/:message_id/reaction/:reaction_typeJWTchannel_handler#remove_reaction移除反应 / Remove reactionpath channel_id,message_id,reaction_type{}
PUT/POST/api/v1/channel/:channel_id/message/:message_id/pinJWTchannel_handler#pin_message置顶/取消置顶 / Pinpath message_id*;body pinned(默认true)Message object
DELETE/api/v1/channel/:channel_id/message/:message_id/deleteJWTchannel_handler#delete_message删除消息 / Deletepath message_id*{}
POST/api/v1/channel/:channel_id/message/:message_id/revokeJWTchannel_handler#revoke_message撤回消息 / Revokepath channel_id,message_id*{}

频道管理员与订阅者 / Channel Admins & Subscribers

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/channel/:channel_id/adminJWTchannel_handler#add_admin添加管理员 / Add adminpath channel_id;body user_id(TSID)*,role(1-3,默认1){}
GET/api/v1/channel/:channel_id/adminsJWTchannel_handler#admins管理员列表 / Adminspath channel_id*{list}(项含 user_id(TSID),role,nickname,avatar
PUT/api/v1/channel/:channel_id/admin/:user_id/roleJWTchannel_handler#update_admin_role更新管理员角色 / Update rolepath channel_id,user_id;body role(1-3){}
DELETE/PUT/api/v1/channel/:channel_id/admin/:user_idJWTchannel_handler#remove_admin移除管理员(PUT 兼容转改角色)/ Remove adminpath channel_id,user_id{}
GET/api/v1/channel/:channel_id/subscribersJWTchannel_handler#subscribers订阅者列表 / Subscriberspath channel_id*;cursor,limit(默认50){list,cursor,limit}(项含 user_id(TSID),nickname,avatar
DELETE/api/v1/channel/:channel_id/subscriber/:user_idJWTchannel_handler#remove_subscriber移除订阅者 / Remove subscriberpath channel_id,user_id*{}

频道邀请与订单 / Channel Invitation & Order

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/channel/:channel_id/invitationJWTchannel_handler#create_invitation创建邀请(私有)/ Create invitationpath channel_id;body invitee_uid(TSID)*Invitation object
POST/api/v1/channel/invitation/acceptJWTchannel_handler#accept_invitation接受邀请 / Acceptinvitation_id(TSID)*{}
POST/api/v1/channel/invitation/rejectJWTchannel_handler#reject_invitation拒绝邀请 / Rejectinvitation_id(TSID)*{}
GET/api/v1/channel/invitations/myJWTchannel_handler#my_invitations我收到的邀请 / My invitations{list}
GET/api/v1/channel/invitations/sentJWTchannel_handler#sent_invitations我发出的邀请 / Sent invitations{list}
POST/api/v1/channel/:channel_id/orderJWTchannel_handler#create_order创建订单(付费)/ Create orderpath channel_idOrder object(order_no,channel_id(TSID),金额,状态)
POST/api/v1/channel/order/payJWTchannel_handler#pay_order支付订单(模拟)/ Payorder_no*{}
GET/api/v1/channel/orders/myJWTchannel_handler#my_orders我的订单 / My orders{list}
GET/api/v1/channel/order/:order_noJWTchannel_handler#get_order订单详情 / Get orderpath order_no*Order object

频道统计与发现 / Channel Stats & Discover

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/channels/searchJWTchannel_handler#search搜索频道 / Searchkeyword,limit(默认20){list}(keyword 空返回 []
GET/api/v1/channels/discoverJWTchannel_handler#discover发现/推荐频道 / Discoverlimit(默认20),category(未用){list}
GET/api/v1/channel/:channel_id/statsJWTchannel_handler#stats频道统计 / Statspath channel_id*Stats object
GET/api/v1/channel/:channel_id/stats/dailyJWTchannel_handler#stats_daily每日统计 / Daily statspath channel_id*;days(默认7,1-365){list}

F. 内容与互动 / Content & Interaction

朋友圈 / Moment

详见 moment-api-contract-v1.md。feed/user_posts/comments 经 enrich_* 批量补全作者昵称/头像/liked;post_transferlike_count/comment_count 收敛到 stats

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/moment/createJWTmoment_handler#create发布动态 / Create postcontent,media(≤9),visibility(0-4,默认1),allow_comment,allow_uids,deny_uidspost_transfer:id(TSID),author_uid(TSID),content,media,visibility,created_at,stats{like_count,comment_count}
POST/api/v1/moment/:moment_idJWTmoment_handler#show查看动态 / Get postpath/body moment_id(TSID)post_transfer + liked
POST/api/v1/moment/:moment_id/deleteJWTmoment_handler#delete删除动态 / Deletemoment_id(TSID){}
GET/api/v1/moments/feedJWTmoment_handler#feed信息流 / Feedcursor(默认0),limit(默认20,1-100){list,cursor,limit};项含 author_nickname,author_avatar,liked
GET/api/v1/moments/user/:uidJWTmoment_handler#user_posts用户动态列表 / User postspath/qs uid(TSID),cursor,limit同 feed
POST/api/v1/moment/:moment_id/likeJWTmoment_handler#like点赞 / Likemoment_id(TSID){}
POST/api/v1/moment/:moment_id/unlikeJWTmoment_handler#unlike取消点赞 / Unlikemoment_id(TSID){}
POST/api/v1/moment/:moment_id/commentJWTmoment_handler#add_comment添加评论 / Add commentmoment_id(TSID),content(≤500字)*,reply_to_uid(TSID)comment_transfer:id(TSID),moment_id(TSID),user_id(TSID),content,created_at
POST/api/v1/moment/:moment_id/commentsJWTmoment_handler#comments评论列表 / List commentsmoment_id(TSID),cursor,limit(默认20){list,cursor,limit};项含 user_nickname,user_avatar,reply_to_nickname
POST/api/v1/moment/:moment_id/comment/:comment_id/deleteJWTmoment_handler#delete_comment删除评论 / Delete commentpath/body comment_id(TSID),moment_id{}
POST/api/v1/moment/:moment_id/reportJWTmoment_handler#report举报动态 / Reportmoment_id(TSID),reason*,description{report_id(TSID)}

举报 / Report

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/report/createJWTreport_handler#create通用举报(自动识别类型)/ Create reporttarget_type(moment/group/channel/user),target_id(TSID)(或 moment_id/group_id/...),reason(≤64)*,description(≤500){report_id(TSID),target_type};moment 类型返回 {report_id}
POST/api/v1/moment/report/createJWTreport_handler#moment_create举报动态(固定 moment)/ Report momenttarget_id/moment_id(TSID),reason(≤64)*,description(≤500){report_id(TSID)}

直播间 / Live Room

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/live_room/listJWTlive_room_handler#list直播中列表 / Active rooms分页 page,size{list[],...};room 含 id,user_id,title,cover,stream_key,status,viewer_count
GET/api/v1/live_room/my_listJWTlive_room_handler#my_list我的直播间 / My rooms分页同 list
POST/api/v1/live_room/createJWTlive_room_handler#create创建直播间 / Createtitle(≤100B)*,cover(≤255B)room(status=0,viewer_count=0)
POST/api/v1/live_room/startJWTlive_room_handler#start开始直播 / Startroom_id{}(仅房主)
POST/api/v1/live_room/stopJWTlive_room_handler#stop停止直播 / Stoproom_id{}(仅房主)
GET/api/v1/live_room/detailJWTlive_room_handler#detail直播间详情 / Detailroom_idroom(非房主移除 stream_key

钱包 / Wallet

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/wallet/balanceJWTwallet_handler#balance查询余额 / Balance{balance(分),balance_yuan(元),frozen(分)}
GET/api/v1/wallet/transactionsJWTwallet_handler#transactions流水分页 / Transactions分页 page,size分页信封(顶层 list+page/total/size)
POST/api/v1/wallet/topupJWTwallet_handler#topup模拟充值 / Topupamount(分,100-1000000){balance,balance_yuan,reference_no}

附件 / Attachment

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/attachment/presignJWTattach_handler#presign生成 S3 直传 presigned URL / Presign uploadfilename(默认 file),mime_type,expires(60-86400,默认3600){put_url,object_key,expires_at}(非 GET 返回 405)

反馈 / Feedback

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/feedback/pageJWTfeedback_handler#page我的反馈分页 / Feedback page分页list+分页;项含 feedback_id,type,rating,body,attach,reply_count,status,created_at
POST/api/v1/feedback/add可选 Optionalfeedback_handler#add提交反馈 / AddHeader cos/vsn/did;body type,rating,contact_detail,content/description*,screenshot成功(无 payload)
POST/api/v1/feedback/removeJWTfeedback_handler#remove删除反馈 / Removefeedback_id(int)成功(无 payload)
GET/api/v1/feedback/page_replyJWTfeedback_handler#page_reply反馈回复分页 / Reply pagefeedback_id*+分页list+分页;项含 feedback_reply_id,feedback_id,replier_name,body,created_at

注:/api/v1/feedback/change/api/v1/feedback/reply 路由已注册,但 handler 当前未实装(命中 false 分支原样返回),暂不可用。


G. E2EE 端到端加密 / E2EE

所有 E2EE 端点先经 imboy_policy:e2ee_enabled() 门控,关闭时返回 ?ERR_FEATURE_DISABLED。社交恢复分片详见 e2ee-server-persisted-shard-contract-v1.md

E2EE 密钥与备份 / Keys & Backup

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/e2ee/user_keysJWTe2ee_handler#user_keys查目标用户设备公钥 / User device keysuid(TSID)*设备公钥(见源码)
GET/api/v1/e2ee/group_member_keysJWTe2ee_handler#group_member_keys查群成员公钥 / Group member keysgid(TSID)*成员公钥(见源码)
POST/api/v1/e2ee/report_device_keyJWTe2ee_handler#report_device_key上报设备公钥 / Report device keydevice_id,device_type,device_name,public_key,key_id{success:true}
GET/api/v1/e2ee/key/statusJWTe2ee_handler#key_status密钥状态与恢复方式 / Key statusdevice_id*状态(含 has_valid_key 等,见源码)
GET/api/v1/e2ee/notifications/pullJWTe2ee_handler#pull_notifications增量拉取密钥变更通知 / Pull notificationssince(默认"0"),limit(默认50){notifications[],count}
POST/api/v1/e2ee/recovery/startJWTe2ee_handler#start_recovery启动自动密钥恢复 / Start recoverydevice_id*,method恢复结果(见源码)
GET/api/v1/e2ee/backup/listJWTe2ee_handler#backup_list备份历史列表 / List backups{list[]}
POST/api/v1/e2ee/backup/deleteJWTe2ee_handler#backup_delete删除备份(仅本人)/ Delete backupbackup_id(TSID)*{deleted:true}
GET/api/v1/e2ee/compliance_keyJWTe2ee_handler#compliance_key获取活跃合规公钥 / Compliance key{key_id,public_key}

E2EE 设备迁移 / Device Transfer

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
POST/api/v1/e2ee/transfer/createJWTe2ee_transfer_handler#create创建密钥传输会话 / Create transferto_uid(TSID)*{session_id,expires_at}
POST/api/v1/e2ee/transfer/acceptJWTe2ee_transfer_handler#accept接受并获取密钥包 / Acceptsession_id*,device_id{session_id,from_uid(TSID),from_device_id,encrypted_key_bundle,status,expires_at}
POST/api/v1/e2ee/transfer/confirmJWTe2ee_transfer_handler#confirm确认传输完成 / Confirmsession_id*{message}
POST/api/v1/e2ee/transfer/cancelJWTe2ee_transfer_handler#cancel取消传输 / Cancelsession_id*{message}
GET/api/v1/e2ee/transfer/infoJWTe2ee_transfer_handler#info查询会话信息 / Infosession_id*{session_id,from_uid(TSID),from_device_id,status,expires_at}
GET/api/v1/e2ee/transfer/pendingJWTe2ee_transfer_handler#pending待处理传输列表 / Pending{transfers[]}(含 from_uid(TSID) 等)

E2EE 社交恢复 / Social Recovery

方法 Method路径 Path鉴权 AuthHandler#action用途 Purpose(中 / EN)请求参数 Request响应载荷 Response payload
GET/api/v1/e2ee/social/contactsJWTe2ee_social_handler#contacts可信联系人列表 / List trusted{contacts[]}
POST/api/v1/e2ee/social/contacts/addJWTe2ee_social_handler#add_contact添加可信联系人(须好友)/ Addcontact_uid(TSID)*,nickname{message}
POST/api/v1/e2ee/social/contacts/removeJWTe2ee_social_handler#remove_contact移除可信联系人 / Removecontact_uid(TSID)*{message}
POST/api/v1/e2ee/social/create_shardsJWTe2ee_social_handler#create_shards创建社交恢复分片 / Create shardstotal_shards(默认3),threshold(默认2),proxies(array){key_version,total_shards,threshold,shards[]}
GET/api/v1/e2ee/social/shardsJWTe2ee_social_handler#get_shards获取自己的分片 / Get shardskey_version(默认 latest){shards[]}
POST/api/v1/e2ee/social/recoverJWTe2ee_social_handler#recover_key用分片重组私钥 / Recover keydecrypted_shards(≥2){message}
GET/api/v1/e2ee/social/proxy_shardsJWTe2ee_social_handler#get_proxy_shards作为代理持有的分片 / Proxy shards{shards[]}
POST/api/v1/e2ee/social/decrypt_shardJWTe2ee_social_handler#decrypt_shard代理解密所托管分片 / Decrypt shardshard_id*{decrypted_shard}

附录:标注约定 / Appendix: Annotation Conventions

  • * 表示必填参数 / required parameter.
  • (TSID) 表示该字段为 64 位 TSID,以 JSON integer 传输 / 64-bit TSID transmitted as JSON integer.
  • 见源码 / TBD 表示该响应子结构由对应 logic/ds 层决定,handler 仅透传,未在本目录展开精确字段;如需逐列字段请查对应 *_logic/*_ds 或域契约文档。
  • “feature 门控”表示该域端点受插件/功能开关(imboy_plugin_registry:required_featureimboy_policy)约束,关闭时返回功能禁用错误。
  • HTTP 方法判定依据:handler 用 elib_param:post/cowboy_req:read_body/elib_req:body 读取请求体 → POST;仅用 cowboy_req:parse_qs/qs_val/elib_param:page → GET;RESTful 资源端点结合 cowboy_req:method 与路由约定标注。Cowboy 路由本身不绑定方法,最终方法约束以客户端实际调用与中间件为准。

变更记录 / Changelog

日期 Date内容 Content
2026-07-08同步 43224c1f/4cc20e81 硬切换:全文档 /v1/*/api/v1/*,与 src/imboy_router.erl 当前真实路由对齐
2026-06-02初版:并行审计 30 个 handler 真实源码,建立完整 /api/v1/* 端点总目录(约 130+ 端点,按 7 大类分域),交叉引用 channel/moment/e2ee/ws 详细契约

IMBoy — 企业私有化即时通讯平台