Public API v2
NextMoe 公开 API v2,正式公开面。无信封、RFC 9457 错误、字符串 id、keyset 游标。目录只读面不带凭据就能调,按 IP 限流;应用密钥是 nmk_live_(CRC32 校验位),任何应用都能在门户自助铸造,无需申请。
https://api.nextmoe.dev/v2Authorization: Bearer nmk_live_…- 正式公开:形状按 additive-only 演进,删除与改名由 CI 的 oasdiff 门拦下。第三方在门户自助铸 nmk_ 密钥即可调用,不需要申请。
- /v2/catalog 只读面(claim-events 除外)不带凭据也能调,按 IPv4 地址或 IPv6 /64 计一份很小的额度(默认 30 次/分钟、1,000 次/天),够个人脚本、浏览器扩展和纯前端小项目用;量大了就铸一把密钥,自助、不审核。带了却无效的凭据仍是 401,不会降级成匿名。
- /v2/me/playtimes 只要用户令牌,不需要 playtime:read / playtime:write。任何已开通用户登录的应用都可以调用。
- /v2/me/work-states 与 playtimes 同款:只要用户令牌,不需要任何 scope。state 五值与 Bangumi 收藏类型一一对应,completion 表示通了多少,wish 不允许携带。
- /v2/me/followed-companies 与 /v2/me/calendar 同样只要用户令牌、不需要任何 scope。关注列表只对本人可见,公开的只有 /v2/catalog/companies/{id} 详情上的 follower_count;/v2/me/calendar 与公开月历同参数,只列关注厂商的作品,且缺省不按语言、不排除同人。
- /v2/me/blocked-tags 同样只要用户令牌、不需要任何 scope,最多 100 个,只对本人可见。目录不会自动套用它:客户端把 mode=tree 的 id 放进 exclude_tag_tree、mode=exact 的放进 exclude_tag_id,传给 /v2/catalog/works 与两个月历。tree 会连同 tag 层级里它下面的所有 tag 一起排除(Tag.descendant_count 是数量)。站点自己的表出的列表用 /v2/catalog/tag-exclusion 取同参数要剔除的作品 id 集,在本地查询里剔掉。
- /v2/me/ratings 是评分:全网一人一作一份,在哪个站写的都是同一份。读写只要用户令牌、不需要 scope,任何应用都能写(同游玩时长);第三方应用送来的短评由中央做内容检查,被拒绝是 422 VALIDATION_FAILED。/v2/me/work-records/{work_id} 一次事务写游玩状态、本应用的时长和评分,PUT 替换整条记录,缺省或为 null 的部分即删除(唯一例外:第三方应用不带评分时保留原评分)。
- /v2/me/folders 是例外:收藏夹是私人清单,读要 folder:read(folder:write 也算),写要 folder:write,缺了是 403 SCOPE_REQUIRED。
- /v2/me/works 带 work_ids 时一次答最多 100 部作品的收藏夹归属、游玩时长和游玩状态,作品详情页一次调用即可;不带 work_ids 时按作品 id 升序分页走完持有人记过的全部作品(进了自己的收藏夹、有游玩时长或有游玩状态的都算)。答案里有收藏夹,所以同样要 folder:read(folder:write 也算);封面投票要 catalog:edit,不在其中,走 /v2/me/cover-votes。
- /v2/folders 是别人的公开收藏夹,只要 catalog:read —— folder:read 是「读我自己的」,与能不能看别人无关。私密收藏夹在这里一律 404(对夹主本人也是),要读自己的私密夹走 /v2/me/folders。
- /v2/ratings 是公开评分,只要 catalog:read:按 work_id / user_id 列表、按 id 读单条;/v2/ratings/changes 是给自己保留评分副本的站点用的镜像信道,删除以 gone: true 出现。作品的 nextmoe 评分(/v2/catalog/works/{id}/ratings)由这些评分算出:以全网均值为先验、权重 10 的贝叶斯均值,1 人起发布。
- /v2/work-records?user_id= 是别人的游玩记录,个人主页的游戏库读它:列出该账号有游玩状态的作品,每条带时长与评分,按状态的更新时间倒序;facets=state 给出五个状态各有几部(与列表同一组筛选,state= 也算在内,标签页的数字取自不带 state= 的请求),content_limit=sfw 时列表、total 与计数一起排除 nsfw 作品。只要 catalog:read。本人看自己的走 /v2/me/work-records,参数相同、不看隐私开关、只要用户令牌。游玩记录默认公开;本人经 PATCH /v2/me/privacy 设为 private 后,除本人的用户令牌外一律 403 PLAY_RECORDS_PRIVATE,评分仍在 /v2/ratings 公开。/v2/me/privacy 读写都只要用户令牌、不需要 scope。
- 错误体是 RFC 9457 application/problem+json。type URI 解析到本站 /problems/{domain}/{kebab-code}。
- 客户端必须忽略未知字段、容忍开放词表中未见过的取值,并为未知错误 code 准备一个按 HTTP status 的兜底分支。
注册表
目录
- get
/v2/catalog/calendar可匿名发售月历
- get
/v2/catalog/changes可匿名catalog 变更 feed
- get
/v2/catalog/characters可匿名列出角色
- get
/v2/catalog/characters/{id}可匿名获取一个角色
- get
/v2/catalog/characters/{id}/appearances可匿名某一角色的出场
- get
/v2/catalog/claim-events认领事件历史
- get
/v2/catalog/companies可匿名列出公司
- get
/v2/catalog/companies/{id}可匿名获取一家公司
- get
/v2/catalog/companies/{id}/graph可匿名公司家族图
- get
/v2/catalog/credit-names可匿名列出署名
- get
/v2/catalog/credit-names/{id}可匿名获取一个署名名义
- get
/v2/catalog/credit-names/{id}/credits可匿名某署名名义的署名
- get
/v2/catalog/engines可匿名列出引擎
- get
/v2/catalog/engines/{id}可匿名获取一个引擎
- get
/v2/catalog/persons可匿名列出人物
- get
/v2/catalog/persons/{id}可匿名获取一个人物
- get
/v2/catalog/persons/{id}/credit-names可匿名某人物的署名名义
- get
/v2/catalog/proposals可匿名编辑提案历史
- get
/v2/catalog/proposals/{id}可匿名单条提案
- get
/v2/catalog/redirects可匿名实体合并 feed
- get
/v2/catalog/releases可匿名列出发售
- get
/v2/catalog/releases/{id}可匿名获取一个发行
- get
/v2/catalog/revisions可匿名实体修订历史
- get
/v2/catalog/revisions/{id}可匿名单条修订
- get
/v2/catalog/roles可匿名列出署名职务
- get
/v2/catalog/roles/{id}可匿名获取一个署名职务
- get
/v2/catalog/schemas/{object}无需凭据某族的可编辑字段 schema
- get
/v2/catalog/search可匿名搜索 catalog 实体
- get
/v2/catalog/series可匿名列出系列
- get
/v2/catalog/series/{id}可匿名获取一个系列
- get
/v2/catalog/stats无需凭据catalog 总量
- get
/v2/catalog/tag-exclusion可匿名解析一组 tag 排除
- get
/v2/catalog/tags可匿名列出标签
- get
/v2/catalog/tags/{id}可匿名获取一个标签
- get
/v2/catalog/traits可匿名列出特征
- get
/v2/catalog/traits/{id}可匿名获取一条特征
- get
/v2/catalog/works可匿名列出作品
- get
/v2/catalog/works/{id}可匿名获取一部作品
- get
/v2/catalog/works/{id}/characters可匿名列出一部作品的角色
- get
/v2/catalog/works/{id}/covers可匿名列出一部作品的封面
- get
/v2/catalog/works/{id}/credits可匿名列出一部作品的职员署名
- get
/v2/catalog/works/{id}/engines可匿名列出一部作品的引擎
- get
/v2/catalog/works/{id}/intros可匿名列出一部作品的简介
- get
/v2/catalog/works/{id}/links可匿名列出一部作品的外链
- get
/v2/catalog/works/{id}/ratings可匿名列出一部作品的评分
- get
/v2/catalog/works/{id}/relations可匿名列出一部作品的关联
- get
/v2/catalog/works/{id}/releases可匿名列出一部作品的发售
- get
/v2/catalog/works/{id}/screenshots可匿名列出一部作品的截图
- get
/v2/catalog/works/{id}/series可匿名列出一部作品的系列
- get
/v2/catalog/works/{id}/tags可匿名列出一部作品的标签
资讯
公开收藏夹
公开评分
公开游玩记录
我的
- get
/v2/me/blocked-tags列出我屏蔽的 tag
- get
/v2/me/blocked-tags/{tag_id}查询我对某个 tag 的屏蔽
- put
/v2/me/blocked-tags/{tag_id}屏蔽一个 tag
- delete
/v2/me/blocked-tags/{tag_id}取消屏蔽一个 tag
- get
/v2/me/calendar我的发售月历
- get
/v2/me/claims列出我的认领
- post
/v2/me/claims提交认领
- get
/v2/me/claims/{id}获取我的一条认领
- patch
/v2/me/claims/{id}转移调用方拥有的认领
- delete
/v2/me/claims/{id}删除草稿认领
- get
/v2/me/cover-votes列出我的封面投票
- put
/v2/me/cover-votes/{cover_id}投封面票
- delete
/v2/me/cover-votes/{cover_id}撤回封面投票
- get
/v2/me/edit-capabilities/{object}我在某个族上能编辑什么
- post
/v2/me/edit-images为编辑提案上传图片
- get
/v2/me/folders列出我的收藏夹
- post
/v2/me/folders创建收藏夹
- get
/v2/me/folders/holdings我的哪些收藏夹收着这些作品
- get
/v2/me/folders/{id}获取单个收藏夹
- patch
/v2/me/folders/{id}更新收藏夹
- delete
/v2/me/folders/{id}删除收藏夹
- get
/v2/me/folders/{id}/items列出收藏夹内的条目
- post
/v2/me/folders/{id}/items批量向收藏夹添加作品
- put
/v2/me/folders/{id}/items/{work_id}向收藏夹添加一部作品
- delete
/v2/me/folders/{id}/items/{work_id}从收藏夹移除一部作品
- get
/v2/me/followed-companies列出我关注的公司
- get
/v2/me/followed-companies/{company_id}读取我对某家公司的关注
- put
/v2/me/followed-companies/{company_id}关注一家公司
- delete
/v2/me/followed-companies/{company_id}取消关注一家公司
- get
/v2/me/news列出我的资讯条目
- post
/v2/me/news提交资讯
- post
/v2/me/news-images为资讯条目上传横幅
- get
/v2/me/news/{id}获取我的一条资讯
- patch
/v2/me/news/{id}编辑或撤回我的一条资讯
- get
/v2/me/playtimes列出我的游玩时长
- post
/v2/me/playtimes批量写入 playtime
- get
/v2/me/playtimes/{work_id}获取我对某部作品的游玩时长
- put
/v2/me/playtimes/{work_id}替换我对一部作品的游玩时长
- delete
/v2/me/playtimes/{work_id}删除本应用对某部作品的游玩时长
- get
/v2/me/privacy我的隐私开关
- patch
/v2/me/privacy修改我的隐私开关
- get
/v2/me/proposals列出我的提案
- post
/v2/me/proposals提交提案
- get
/v2/me/proposals/{id}获取我的一条提案
- patch
/v2/me/proposals/{id}修改或撤回提案
- post
/v2/me/proposals/{id}/amendments追加一条修订
- get
/v2/me/ratings列出我的评分
- get
/v2/me/ratings/{work_id}读取我对某部作品的评分
- put
/v2/me/ratings/{work_id}给作品评分,或替换我对它的评分
- delete
/v2/me/ratings/{work_id}删除我对某部作品的评分
- get
/v2/me/work-records列出我的游玩记录
- get
/v2/me/work-records/{work_id}我在某部作品上的游玩状态、游玩时长和评分
- put
/v2/me/work-records/{work_id}替换我在某部作品上的游玩状态、游玩时长和评分
- get
/v2/me/work-states列出我的作品状态
- post
/v2/me/work-states批量写入作品状态
- get
/v2/me/work-states/{work_id}读取我对某部作品的状态
- put
/v2/me/work-states/{work_id}替换我对某部作品的状态
- delete
/v2/me/work-states/{work_id}删除我对某部作品的状态
- get
/v2/me/works我在各部作品上的收藏夹、游玩时长、游玩状态和评分
审核
- get
/v2/moderation/claims审核认领队列
- get
/v2/moderation/claims/{id}获取一条审核认领
- post
/v2/moderation/claims/{id}/decisions裁决一条认领
- patch
/v2/moderation/folders/{id}处置收藏夹的文本
- delete
/v2/moderation/folders/{id}删除任意收藏夹
- get
/v2/moderation/proposals审核提案队列
- get
/v2/moderation/proposals/{id}获取一条审核提案
- post
/v2/moderation/proposals/{id}/decisions裁决一条提案
- delete
/v2/moderation/ratings/{id}删除任意评分
- post
/v2/moderation/reverts回退到一条修订
- get
/v2/moderation/snapshots/{object}/{id}当前编辑快照
- get
/v2/moderation/users/{uid}/folders列出一个账号名下的全部收藏夹
- delete
/v2/moderation/users/{uid}/folders清空某个账号的全部收藏夹