Kimi API 详解与研究指南 Connect-RPC

研究对象 Kimi App Android 数据来源 APKTool M 反编译 方法 Connect-RPC 字符串常量提取

对 Kimi 客户端 API 的全面逆向工程研究。覆盖 59 个 proto 服务、212 个 RPC 方法、609 个 message(含字段类型)。 详细阐述双协议架构、静态研究方法论、业务地图、服务详解及字段级调用说明。

Proto 服务 59 RPC 方法 212 Message 定义 609 命名空间 6
第一部分 · 方法论 第二部分 · 业务地图 第三部分 · 服务详解 第四部分 · 字段级调用

第一部分:研究方法论

1. 协议架构总认知

Kimi 客户端的 API 是 双协议 架构,研究前必须先分清:

协议路径用途特征
REST/api/*账户、设备、文件等外围能力Ktor Client + OkHttp, application/json
Connect-RPC/apiv2/*所有核心业务(聊天、社区、IM、会员)application/connect+json,纯 JSON 无二进制 protobuf

核心结论:Chat(对话)、Moment(社区)、Feed(信息流)、IM(群聊)等全部走 Connect-RPC。研究核心业务 = 研究 Connect-RPC。

1.1 proto 包结构(6 大命名空间)

com.moonshot.kimi.proto ├── account.gateway.v1 # 账号:登录/注册/扫码/设备 ├── common.* # 公共类型 ├── google.rpc # 错误模型(google 标准) ├── growth.pay.v1 # 增长/支付 ├── moment.v1 # 社区(动态/评论/信息流/关注/话题) ├── moment.type.v1 # 社区公共类型 └── kimi ├── gateway.chat.v1 # 核心聊天(30 方法) ├── gateway.im.v1 # 群聊 IM(15 方法) ├── gateway.mcp.v1 # MCP/OKC 智能体 ├── gateway.swarm.v1 # 多智能体编排 ├── gateway.trigger.v1 # 任务触发器 ├── gateway.memory.v1 # 长期记忆 ├── gateway.suggest.v1 # 首页推荐/展示 ├── ...(claw/order/membership/skill/tts 等 20+ 子包) ├── outbox.v1 # 发件箱(离线任务队列) └── chatty.v1 # 轻量聊天/工具调用

2. 静态研究方法(本次使用)

2.1 反编译工具链

工具产出用途
APKTool Msmali 代码 + 资源拿到全部混淆后的类与方法
jadx(可选)近似 Java 源码比 smali 可读性高,但混淆类仍需还原
R8 mapping.txt(关键)混淆映射还原混淆类名/方法名的唯一钥匙

本研究中 APKTool M 产出 smali,无 mapping.txt,因此类型还原采用启发式(见 2.3)。

2.2 从字符串常量提取 API 全景(核心技巧)

proto 的 RPC 服务信息没有目录结构(类被 R8 混淆成 or/*、nr/* 等短包名),但关键字符串全部保留在 smali 常量池里:

① 服务名:形如 moment.v1.FeedService、kimi.gateway.chat.v1.ChatService grep -rhoE "[a-z0-9_]+\.[a-z0-9_]+\.v[0-9]+\.[A-Za-z0-9]+Service" smali*/ --include="*.smali" ② 方法名(RPC URL):形如 moment.v1.FeedService/ListFeeds grep -rhoE "[A-Za-z0-9_.]+Service/[A-Za-z0-9]+" smali*/ --include="*.smali" ③ message 完整类名:形如 com.moonshot.kimi.proto.moment.v1.Feed grep -rhoE "com\.moonshot\.kimi\.proto\.[A-Za-z0-9_.$]+" smali*/ --include="*.smali" ④ 字段名:从每个 message 的 toString() 方法体提取 "Feed(feedType=" + v + ", feedId=" + v + ", _moment=" + v + ", _interestCard=" + v + ", _recEventLog=" + v + ")" ⑤ 字段类型:从 message 的构造函数签名提取 .method public constructor <init>(Lor/a6;Ljava/lang/String;Lor/ff;Lor/ra;Lor/ci;)V # 对应字段:feedType, feedId, _moment, _interestCard, _recEventLog

2.3 混淆类还原(启发式)

无 mapping.txt 时,混淆类 → 原始类型的还原依赖三条线索:

精确还原仍依赖 mapping.txt。本研究已导出《混淆类清单》(620 个混淆类 + 推测映射),拿到 mapping 后可一键对照。

3. 调用方法(Connect-RPC 协议)

3.1 请求构造

POST /apiv2/{服务全限定名}/{方法名} HTTP/2 Host: www.kimi.com Content-Type: application/connect+json Authorization: Bearer {accessToken} x-msh-platform: android x-msh-device-id: {设备指纹ID} x-msh-session-id: {会话ID} x-msh-version: 3.0.8 R-Timezone: GMT+08:00 {"字段名": 值, ...} # JSON 编码的 proto message

3.2 流式方法(server-streaming)

流式方法(如 Chat、SubscribeMessageStream)响应为按行/帧分隔的 JSON 事件流:

{"eventOffset": 1, "type": "heartbeat"} {"eventOffset": 2, "type": "chunk", "text": "你好"} {"eventOffset": 3, "type": "done"}

断点续传靠递增 eventOffset;若误用 unary 方式调用流式方法,服务端返回 "event stream, 请使用 stream 方法请求"。

3.3 认证链

4. 验证方法(研究结果的确认)

4.1 静态验证

4.2 动态验证(推荐)

4.3 边界验证

5. 研究工具链汇总

反编译APKTool M / jadx
提取grep -rhoE / Python 正则
还原mapping.txt + 混淆类清单
抓包mitmproxy / Charles
调用curl / ConnectRPC 客户端
HookFrida

第二部分:业务地图

59 个服务按业务域归类,帮助快速定位"某个功能走哪个 API":

业务域服务定位
账号account.gateway.v1.AccountService登录/注册/扫码/设备绑定
核心对话kimi.gateway.chat.v1.ChatService
kimi.gateway.chat.v1.ChatShareService
kimi.gateway.chat.v1.PromptService
kimi.chatty.v1.ChattyService
与 Kimi 对话的主入口
聊天分享导出(PDF/Docx)
提示词增强/推荐
轻量工具调用/打断
群聊 IMkimi.gateway.im.v1.IMService多人房间即时通讯
社区moment.v1.*(15 个服务)动态/评论/信息流/关注/话题/搜索/通知
智能体kimi.gateway.mcp.v1.OKCService
kimi.gateway.mcp.v1.MCPOAuthService
kimi.gateway.swarm.v1.SwarmService
OKC 智能体部署/引用解析
MCP 服务器授权
多智能体编排
记忆kimi.gateway.memory.v1.*长期记忆读写/记忆库/梦境
任务kimi.gateway.trigger.v1.TriggerService定时/条件触发
推荐kimi.gateway.suggest.v1.*(3 服务)首页展示/弹窗/引导
内容生产kimi.gateway.slides.v1.SlidesService
kimi.gateway.tts.v1.TTSService
kimi.gateway.converter.v1.ConverterService
kimi.gateway.artifact.v1.ArtifactService
kimi.gateway.file.v1.FileService
PPT 生成
文字转语音
文件/格式转换
可运行产物(代码/HTML)
文件解析进度
商业化kimi.gateway.membership.v2.MembershipService
kimi.gateway.order.v1.SubscriptionService
kimi.gateway.order.v1.GoodsService
kimi.gateway.promotionalasset.v1.PromotionalAssetService
kimi.gateway.issuance.v1.IssuanceService
会员等级/权益
订阅/续费
商品列表
促销资产
凭证发放
系统kimi.gateway.config.v1.ConfigService
kimi.gateway.experiment.v1.ExperimentService
kimi.gateway.riskcontrol.v1.RiskControlService
kimi.gateway.misc.v1.MiscService
kimi.usersetting.v1.UserSettingService
客户端配置
AB 实验
风控
杂项
用户偏好设置
Clawkimi.gateway.claw.v1.ClawService
kimi.gateway.claw.v1.ClawSkillService
kimi.gateway.claw.v1.ClawFileService
爪机 Bot 管理
远程技能
爪机文件
技能kimi.gateway.skill.v1.SkillService
kimi.gateway.skill.v1.SkillJobService
技能市场
技能执行任务
其他kimi.gateway.pin.v1.PinService
kimi.gateway.context.v1.ContextService
kimi.gateway.project.v1.ProjectService
kimi.gateway.websites.v1.WebsiteSlugService
kimi.gateway.feed.v1.FeedService
kimi.gateway.notification.v1.NotificationService
kimi.gateway.app.v1.AppService
置顶
会话上下文
项目
网站别名
信息流
站内通知
应用市场
离线任务kimi.outbox.v1.OutboxService离线任务队列(发件箱)

第三部分:服务详解

每个服务按业务定位、典型场景、方法列表详细说明。

account.gateway.v1.AccountService11 方法

业务定位:账号与登录
典型场景:短信/微信/Google 登录、扫码登录、设备注册、Token 刷新

unary BindPhone
unary ConfirmLoginQRCode
unary ListCountries
unary LoginWithOneClick
unary LoginWithSMS
unary LoginWithThirdParty
unary Logout
unary RefreshToken
unary RegisterDevice
unary ScanLoginQRCode
unary SendVerifyCode
kimi.chatty.v1.ChattyService2 方法

业务定位:轻量聊天/工具
典型场景:通用工具调用、打断生成

unary GenericTool
unary Interrupt
kimi.gateway.app.v1.AppService4 方法

业务定位:应用市场
典型场景:应用发布/版本管理

unary ListVersions
unary PreviewApp
unary PublishApp
unary UnpublishApp
kimi.gateway.artifact.v1.ArtifactService1 方法

业务定位:可运行产物
典型场景:分享代码/HTML 产物

unary ShareArtifact
kimi.gateway.chat.v1.ChatService30 方法

业务定位:核心对话(Kimi 主聊天)
典型场景:发起对话、继续、恢复、订阅消息流、管理会话、消息赞踩、分享聊天

unary BatchDeleteChats unary CancelChat stream Chat stream ChatFromCase stream ContinueChat unary CreateChatShare unary GetChat unary GetChatShare unary GetChatShareMessage unary GetChatShareScreenshot unary GetMessage unary GetUnreadChats unary ListChats unary ListMessages unary MarkChatAsRead unary MessageSpeech unary ProcessAskUserResult unary RegenerateMessage unary ReplyInteraction stream ResumeChat unary ShareChatToCommunity stream SubscribeMessageStream unary UpdateChat unary VoteMessage unary CreateChatFromShare unary GetMessageRecommendPrompts unary GetToolBlock unary ListKimiPlus unary ListPinnedKimiPlus stream ReplayChatShareStream
kimi.gateway.chat.v1.ChatShareService1 方法

业务定位:聊天分享导出
典型场景:导出聊天为 Docx

unary GetChatShareDocx
kimi.gateway.chat.v1.PromptService1 方法

业务定位:提示词增强
典型场景:获取增强提示词

unary GetEnhancedPrompts
kimi.gateway.claw.v1.ClawService4 方法

业务定位:Claw 爪机 Bot 管理
典型场景:创建/删除 Bot、管理模型 API Key

unary CreateBot
unary CreateModelAPIKey
unary DeleteBot
unary ListBots
完整服务列表包含 kimi.gateway.im.v1, membership.v2, memory.v1, trigger.v1, suggest.v1, slides, tts, converter, artifact, file, order, outbox, usersetting 等 59 个服务。详见原文档。

第三部分续:社区服务详解

moment.v1.ChatService5 方法

业务定位:社区内聊天
典型场景:从动态发起聊天、获取最近聊天、重新聊天

unary CreateChatV2
unary GetLastChatV2
unary GetOriginalMessageCount
unary GetRawShareChatV2
stream ReChat
moment.v1.CommentService5 方法

业务定位:社区评论系统
典型场景:发评论、删评论、看评论列表与楼中楼、评论点赞

unary CreateComment
unary DeleteComment
unary ListComments
unary ListSubComments
unary VoteComment
moment.v1.MomentService6 方法

业务定位:社区动态发布与管理(核心写入)
典型场景:发动态、删动态、点赞、看相似动态、动态里的聊天分享卡片

unary CreateMoment
unary DeleteMoment
unary GetChatShareCard
unary ListMomentAskKimiQuestions
unary ListSimilarMoments
unary VoteMoment

其他社区服务:FavoriteService, FeedService, FollowService, HashtagService, InterestService, MuteService, NotificationService, SearchService, UploadService, UserService, ComplaintService, ConfigService 等。


第四部分:字段级调用详解

每个方法列出请求体字段与响应体字段(名称/类型/含义)。类型基于 JVM 签名 + 启发式映射。

moment.v1.ChatService

CreateChatV2 unary

请求 CreateChatV2Request

字段类型含义
momentIdstring动态ID
chatTypemessage(ChatType?)chatType
chatTypeSubKeystringchatTypeSubKey
askKimiQuestionstringaskKimiQuestion

响应 CreateChatV2Response

字段类型含义
chatIdint32会话ID
_chatChatchat
chatTypemessage(ChatType?)chatType
chatTypeSubKeymessage(ChatTypeSubKey?)chatTypeSubKey

GetLastChatV2 unary

请求 GetLastChatV2Request

字段类型含义
momentIdstring动态ID
chatTypemessage(ChatType?)chatType
chatTypeSubKeyint32chatTypeSubKey

响应 GetLastChatV2Response

字段类型含义
chatIdint32会话ID
chatTypestringchatType
chatTypeSubKeymessage(ChatTypeSubKey?)chatTypeSubKey

ReChat stream

流式方法:响应为按行分隔的 JSON 事件流(含 heartbeat/done/chunk 等事件,用 eventOffset 续传),不能按普通 unary 调用。

请求 ReChatRequest momentId int32

响应 ReChatResponse chatId int32, _chat Chat, chatType, chatTypeSubKey

moment.v1.CommentService

CreateComment unary

请求 momentId int32, mentions string, links string

响应 _comment Comment

DeleteComment unary

请求 commentId string   响应无字段

ListComments unary

请求 momentId int32, _rootCommentId string, _pinnedCommentId string

响应 nextPageToken string, _pageStat PageStat, isLastPage bool, _pinnedCommentId string, comments repeated

moment.v1.MomentService

CreateMoment unary

请求 text string, visibility string, _artifactShareId string, images repeated, mentions repeated, links repeated, hashtagIds int32

响应 _moment Moment

DeleteMoment unary

请求 momentId string   响应无字段

GetChatShareCard unary

请求 chatShareId string   响应 _chatShareCard ChatShareCard

kimi.gateway.chat.v1.ChatService

BatchDeleteChats unary

请求 chatIds repeated   响应 chatIds int32

Chat stream

流式方法:响应为按行分隔的 JSON 事件流(含 heartbeat/done/chunk 等事件,用 eventOffset 续传)

请求 ChatRequest chatId int32, _message ChatMessage, _options string, _projectId string, tools string

响应 ChatResponse op, _mask, eventOffset int32, _chat Chat, _message ChatMessage, _block Block, _ref ChatFileRef, _usage Usage, _notification Notification, _done Done, _heartbeat Heartbeat, _tts, _interaction, _interactionAck

ListChats unary

请求 _projectId int32, _withMessageContent string, _includePinned string, pageSize string, pageToken bool

响应 nextPageToken string, chats repeated, pinnedChats repeated

ListMessages unary

请求 chatId int32, _direction string, _startMessageId int32, _includeStartMessage string, _endMessageId message(EndMessageId?), _includeEndMessage string, _noMarkAsRead bool

响应 nextPageToken string

RegenerateMessage unary

请求 chatId int32, _message Message, _scenario string, _options string, tools string


研究完成 59 服务 · 212 方法 · 609 message Kimi API 详解与研究指南
本文作者小象,感谢 银色子弹 的初版文档