# 总则

## 站点说明

**YemaPT** 将会是一个综合类资源的PT站点，欢迎到访YemaPT，相信你已经对PT有了一定了解。本站的规则与其他站大同小异，但具体规则略有出入，也有可能有补充条款。因此建议你仔细阅览本站的知识库。

管理组拥有对规则解释及更新的权力，因此有必要不定期访问知识库，防止出现违反规则的行为。对于明显有害于网站运行的行为，管理组保留不经公示而直接处理的权力。

## 基本规则

* 不要做管理员明文禁止的事情
* 一切作弊的账号将会被封，请勿心存侥幸
* 任何情况下，不得将与管理员沟通的内容转发至任何其他场所
* 不得在任何公开场合暴露本站的访问地址和tracker地址
* 禁止言语攻击其他用户、<mark style="color:red;">**严禁**</mark>讨论政治问题
* <mark style="color:red;">**严禁**</mark>利用系统漏洞对网站、其他用户进行攻击性质行为，开玩笑也不可以
* 如果你认为其他人(包括管理员)言辞/行为不当，请首先向管理组投诉或联系
* 如果你认为管理组的规则、做法有疑问，请首先向管理组反馈
* 除特殊权限用户外，所有人都需要完成入门考核，考核内容详见[账号部分](/account/user)

## 联系及反馈渠道

* 站点链接：[点击访问](https://www.yemapt.org/)
* TG群：[点击加入](https://t.me/YemaPT)
* 公开反馈：[github feedback](https://github.com/YemaPT/feedback)
* 邮箱反馈：<admin@yemapt.org>
* 种子反馈：种子详情页举报按钮
* 用户反馈：个人详情页举报按钮

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FyLipsh0qwsTGIBb8Z2qX%2FIMG_0016.jpeg?alt=media&amp;token=dc64cc32-dca1-4093-a9b5-bf698916bd9d" alt="" width="188"><figcaption><p>tg 群</p></figcaption></figure>


# 注册

## 邀请码获取方式

任何用户都必须通过邀请码注册，即使是开放注册。

目前未限制邀请码和邮箱的绑定关系，拥有邀请码后，可用符合站点要求的邮箱进行注册。

### 开放注册

在注册页面右下角，点击 <mark style="color:blue;">没有邀请码?</mark> 如提示开放注册，复制邀请码即可。

本站一般会在节假日前后开放注册。

### 官方邀请

管理组会在TG群等渠道发放邀请码，加入官方群组即有机会获取邀请码。

### 私人邀请

已注册用户可发放邀请码，连坐机制请查看[账号连坐部分](/account/user)。

## 注册要求

### 邮箱

目前支持后缀如下：

* @gmail.com
* @qq.com
* @163.com
* @vip.qq.com
* @139.com
* @hotmail.com

实际可用邮箱后缀请以注册为准

### 用户名

用户名由小写字母开头，中间和结尾允许出现数字，长度为5-12位。

不允许出现大写字母和特殊字符。

禁止使用容易让人误以为是管理员的名称。

### 密码

密码必须包含以下四类字符： 大写、小写、数字、特殊字符（具体特殊字符可在注册时查看），长度为8-12位。

## 注册验证

注册后，即可登录站点。登录站点后，可根据提示前往个人详情页主动触发邮箱验证。

邮箱验证需要在个人详情页<mark style="color:red;">**手动触发**</mark>，注册7天内如不进行邮箱验证，将会被ban（即封禁，本文中皆为此意），此后<mark style="color:red;">**用户名和邮箱将不可再用于注册**</mark>。

手动触发验证邮件后，如未收到邮件，可等几分钟或在邮箱的垃圾箱中查找，可能是注册验证邮件发送频率过高，被邮箱误认为是垃圾邮件。

<br>

## 注意事项

不允许一个人注册多个账号，管理组有权力封禁此类账号。

注册后，请妥善保管邮箱、账号和密码。


# 账号

## 账号考核要求

> 特殊权限用户将不受考核约束，目前特殊权限包含：特邀用户（著名PT工具的开发者、协助对接的committor；其他站点的管理；其他管理组认定的用户；）。
>
> 请此类用户主动与管理组联系，绑定特殊权限。

<mark style="color:red;">**账号注册30天内，上传量须达到 10 GB，允许用积分兑换**</mark>。

开始考核时间为2024年8月1号，示例：2024年8月1号将考核7月1号之前注册的用户，2024年8月2号将考核7月2号前注册的用户，如未达到考核要求，将会被ban。

<mark style="color:red;">**不排除未来增加考核量**</mark>，管理组将会视站点发展情况调整考核量，但任何考核量的增加均会至少提前30天在站内公告进行公示。所以建议尽可能增加自己的上传量、下载量。

## 账号保留规则

> <mark style="color:red;">**被ban的用户名和邮箱将被永远记录，以后将无法再注册**</mark>

* 未通过考核的用户将被封禁；
* level0用户将被禁；
* level1用户持续7天未改善将被禁；
* 连续30天不登陆将被封禁，请务必定期登录关注站点公告；
* 达到[指定等级](/account/level)后，将永久保留账号；
* 参与契约期间，将暂停活跃度统计，具体规则查看契约部分；

## 处罚与封禁规则

我们鼓励犯错用户主动承认错误，请不要在被管理组发现您的违规行为后再提出各种理由，届时所说一切均为时已晚。任何用户均有接受站点关于违规调查之义务。账号一旦被禁用，除非是系统或管理组误操作，否则均无解。即使是捐赠亦不能使账号解禁，即使是VIP也必须遵守网站规则。

以下行为发生的，账号将被扣除积分或清除数据：

* 违背网站禁用规则后，主动向管理组承认错误的（此时该账号数据可能被清零）；
* 在网站内公开区域对会员进行辱骂、人身攻击的；
* 在内站论坛或评论区内回复无意义内容的；
* 故意上传不匹配字幕的；
* 向字幕区上传非字幕文件的；
* 共享从本站下载的种子或auth的；
* 恶意限速的；
* 转发本站官方制作资源或本站其他会员制作的资源去除后缀的；
* 转发本站禁转资源至其他同性质网站的；
* 不当利用本站邀请区官方邀请或受到相关站点管理员检举的；
* 如有前例或经讨论后，管理员认为应当警告的。

以下行为发生时，账号将直接被管理员检举或禁用：

* 注册时使用的邮箱为临时性/一次性且无法查证来源的；
* 账号使用者未满十八周岁的；
* 在公开区域/网站内对网站、管理员或工作人员进行辱骂、人身攻击的；
* 单人注册两个及以上账号的；
* 赠与、共享、借用账号的；
* 多次共享本站下载的种子或auth的；
* 任何未经官方允许进行账号、积分交易的（无论是否是金钱相关的）；
* 数据异常，作弊的；
* 恶意限速且引起公愤的；
* 邀请人要求禁用被邀请人，经管理员了解情况后禁用；
* 在内站论坛或评论区或种子内容或种子档案发布推广链接的；
* 通过私信或其他方式发布模板信息（如广告等）的；
* 在内站论坛或评论区对种子发布者进行辱骂、人身攻击的；
* 使用欺骗或其他不正当手段获取邀请的；
* 多次上传不匹配或命名不当的字幕的；
* 在法院审理或申诉前后将审理或申诉内容张贴在公开区域或非公开区域、交由其他无关人员查阅的；
* 转发种子发布者明确声明禁止转发至其他网站的资源的；
* 违背总则中相关条款以及网站临时规则的；
* 管理组讨论后多数认为应禁用某账号的；
* 下家使用上家近期使用过的ip位址进行注册的；
* 使用的下载器不在官方允许使用的下载器名单中的；
* 在内站发表政治性言论，无论是通过私信，内站论坛贴子或者是种子评论的。

以下行为发生时，账号将直接被系统禁用：

* 单种上传速度超过系统限制的；
* 分享率低于规则要求且未在规定时间内改善的；
* 未通过网站新手考核的。

## 邀请规则

* 只把邀请发送给明确向你表达进站意向的人，请不要给没有进站意向的人发送邀请；
* 只把邀请发送给现实中认识的人，如果要邀请网友，请确保你认识他并相信他可以正确使用站点；
* 请不要随意给陌生人发送邀请。 确保你邀请的用户在进站后阅读站点规则以及常见问题来了解站点相关规则。

## 金钱交易、连坐与契约

虽然还是百大，但也禁止售卖邀请码。

目前暂无连坐机制，你可以放心邀请下家。

本站不鼓励契约，但如有设定契约，管理组也会执行。

## 账号安全

### 两步验证 TOTP

本站不强制开启两步验证，但为了账号安全，还是强烈建议开启两步验证。如TOTP丢失，可<mark style="color:red;">**通过重置密码的方式清除TOTP**</mark>。

此外，TG绑定需要开启两步验证，当然验证完再关闭也是可以的。

### 修改密码

本站已要求高强度密码，因此不要求用户定期更换密码。

### 忘记密码

忘记密码时，可通过邮箱和用户名重置密码，<mark style="color:red;">**请务必记住自己的邮箱和用户名**</mark>，否则将无法重置密码。


# 等级

## 等级称号

不同等级有不同特殊加成

![Level0](https://img.shields.io/badge/level0-%E4%B9%B1%E6%B0%91-ABB2B9?logoColor=gray\&style=flat)

![Level1](https://img.shields.io/badge/level1-%E5%B0%8F%E5%8D%92-566573?logoColor=gray\&style=flat)

* 注册后默认等级，待系统更新后会自动升级到level2

![Level2](https://img.shields.io/badge/level2-%E6%95%99%E8%B0%95-273746?logoColor=gray\&style=flat)

* 可查看站点统计

![Level3](https://img.shields.io/badge/level3-%E7%99%BB%E4%BB%95%E9%83%8E-AED6F1?logoColor=gray\&style=flat)

* 新注册用户系统定时更新后的默认等级
* 可查看种子TOP10排行

![Level4](https://img.shields.io/badge/level4-%E4%BF%AE%E8%81%8C%E9%83%8E-5DADE2?logoColor=gray\&style=flat)

* 可查看种子TOP250信息
* 可查看用户TOP10信息

![Level5](https://img.shields.io/badge/level5-%E6%96%87%E6%9E%97%E9%83%8E-2E86C1?logoColor=gray\&style=flat)

* 可查看用户TOP250信息
* 可匿名发帖

![Level6](https://img.shields.io/badge/level6-%E5%BF%A0%E6%AD%A6%E6%A0%A1%E5%B0%89-A2D9CE?logoColor=gray\&style=flat)

* 可设定免候选发布种子

![Level7](https://img.shields.io/badge/level7-%E6%89%BF%E4%BF%A1%E5%B0%86%E5%86%9B-45B39D?logoColor=gray\&style=flat)

* 发帖可禁止评论

![Level8](https://img.shields.io/badge/level8-%E6%AD%A6%E6%AF%85%E5%B0%86%E5%86%9B-138D75?logoColor=gray\&style=flat)

![Level9](https://img.shields.io/badge/level9-%E6%AD%A6%E8%8A%82%E5%B0%86%E5%86%9B-0E6655?logoColor=gray\&style=flat)

* 此等级及以上用户，账号将永久保留

![Level10](https://img.shields.io/badge/level10-%E6%98%BE%E5%A8%81%E5%B0%86%E5%86%9B-D2B4DE?logoColor=gray\&style=flat)

![](https://img.shields.io/badge/level11-%E5%AE%A3%E6%AD%A6%E5%B0%86%E5%86%9B-A569BD?logoColor=gray\&style=flat)

![Level12](https://img.shields.io/badge/level12-%E5%AE%9A%E8%BF%9C%E5%B0%86%E5%86%9B-7D3C98?logoColor=gray\&style=flat)

![Level13](https://img.shields.io/badge/level13-%E6%98%AD%E6%AF%85%E5%B0%86%E5%86%9B-5B2C6F?logoColor=gray\&style=flat)

![Level14](https://img.shields.io/badge/level14-%E5%AE%9A%E5%9B%BD%E5%B0%86%E5%86%9B-E6B0AA?logoColor=gray\&style=flat)

![Level15](https://img.shields.io/badge/level15-%E9%87%91%E5%90%BE%E5%B0%86%E5%86%9B-CD6155?logoColor=gray\&style=flat)

![Level16](https://img.shields.io/badge/level16-%E5%85%89%E7%A6%84%E5%A4%A7%E5%A4%AB-A93226?logoColor=gray\&style=flat)

![Level17](https://img.shields.io/badge/level17-%E7%89%B9%E8%BF%9B%E5%85%89%E7%A6%84%E5%A4%A7%E5%A4%AB-7B241C?logoColor=gray\&style=flat)

## 升级/降级规则

> <mark style="color:red;">**level0用户的第二天0点，将会被禁用账号。**</mark>
>
> <mark style="color:red;">**level1用户持续7天未改善，将会被禁用账号。**</mark>

#### level 0

下载量超过10GB，且分享率（上传量/下载量）低于0.3。

#### level 1

新注册后，默认为level1

* 下载量超过 10 GB且分享率低于 0.6；
* 下载量超过 50 GB且分享率低于 0.7；
* 下载量超过 100 GB且分享率低于 0.8；
* 下载量超过 200 GB且分享率低于 0.9；
* 下载量超过 500 GB且分享率低于 1.0。

#### level 2

不符合其他规则时，默认为level2。

#### level 3

下载量大于100GB，分享率大于1。

#### level 4

下载量大于200GB，分享率大于2，注册超过30天。且月均下载量超过 5 GB。

#### level 5

下载量大于400GB，分享率大于3，注册超过60天。且月均下载量超过 10 GB。

#### level 6

下载量大于500GB，分享率大于4，注册超过90天。且月均下载量超过 15 GB。

#### level 7

下载量大于800GB，分享率大于5，注册超过120天。且月均下载量超过 20 GB。

#### level 8

下载量大于1000GB，分享率大于6，注册超过150天。且月均下载量超过 25 GB。

#### level 9

下载量大于2000GB，分享率大于7，注册超过180天。且月均下载量超过 50 GB。

#### level 10

下载量大于2500GB，分享率大于8，注册超过210天。且月均下载量超过 60 GB。

#### level 11

下载量大于3000GB，分享率大于9，注册超过240天；且月均下载量超过 70 GB。


# 积分

积分类似于其他站点的魔力，但不包含小数。

## 积分获取途径

* 签到：日常签到可获取随机分数；
* 发布种子：发布并候选通过的种子将会获得积分，具体获取规则详见站内积分详情页；
* 做种积分：包含基础做种积分、发布人奖励积分和计算做种积分，具体获取规则详见站内积分详情页；
* 被赠送积分：其他用户(包括管理员)可在积分页向你赠送积分，赠送方将被额外收取30%手续费，手续费可能会浮动；
* 通过种子/帖子被赠送积分：当你发种或发帖后，其他用户可以向你的种子/帖子赠送积分，手续费同直接被赠送积分；
* 娱乐场：通过猜大小、大转盘和老虎机有机会获得积分；
* 参与契约，按月获取奖励积分，具体规则查看契约部分；
* 未来还会开放其他积分获取途径。


# 其他

## passkey

本站passkey不对用户透出，仅用于以下功能：

* 生成带时间限制的RSS订阅链接
* 生成带有更多信息的tracker链接

重置passkey后，以上生成的链接都将失效。

## auth

本站的passkey不对用户透出，但在个人详情页提供了专门用于第三方对接的auth。

生成的auth有效期为180天，重置密码后，此auth将失效。

## rss

目前支持收藏夹、全局、分类目订阅，具体功能可在 种子->收藏列表、类目列表 中查看使用。

RSS订阅链接有效期180天。


# 基本规则

## 基本要求

* 允许使用辅助工具；
* 不允许使用指定客户端之外的软件进行种子下载；
* 禁止提供账号、auth等信息给他人使用，尤其<mark style="color:red;">禁止代刷；</mark>
* 如不清楚某种下载方式是否合适，请联系管理组确认。

## 客户端要求

> 本站Tracker只允许指定的BitTorrent客户端软件，除指明的、小众的客户端外，可向管理组提支持需求。

支持的[客户端](/newbie/download-tool)：

<table><thead><tr><th width="203">系列</th><th width="217">版本</th><th>附加说明</th></tr></thead><tbody><tr><td>qBittorrent</td><td>4.0.x-4.6.x、5.0.x</td><td></td></tr><tr><td>Transmission</td><td>2.9.x、3.0.x、4.0.x</td><td></td></tr><tr><td>uTorrent</td><td>2.x、3.x</td><td></td></tr><tr><td>BitComet(比特彗星)</td><td>2.x</td><td></td></tr><tr><td>rTorrent</td><td>0.9.8</td><td></td></tr><tr><td>BitTorrent</td><td>7.x</td><td></td></tr><tr><td>BiglyBT</td><td>3.x.x.x</td><td></td></tr><tr><td>webtorrent</td><td>0.0.2.4</td><td></td></tr><tr><td>libtorrent</td><td>0.16.17.0</td><td></td></tr><tr><td>LibreTorrent</td><td>2.0-2.1</td><td>端</td></tr><tr><td>tixati</td><td>3.29</td><td></td></tr></tbody></table>

## 促销与优惠活动

上传促销类型：

* 1.5倍上传
* 2倍上传

下载促销类型：

* 50%
* FREE
* 新发布的种子将随机开启free优惠，优惠时长以站点内实际情况为准；
* 本站将不定期开启全站free；
* 发布者可以用积分兑换促销，具体兑换规则见发种列表。

## 候选、赞赏&举报

任何用户都可以对候选内容进行投票。

当你对某个种子非常喜欢时，建议在种子详情页向种子赠送积分，你赠送的积分会100%转到发布人手中，与此同时会扣除你一定数额的手续费，具体费用可查看[此说明](/account/point)。

当你认为某个种子违反规则时，可以在种子详情页举报该种子，你举报的原因会同时发送给发布人和管理员。发布人会根据你的要求调整种子内容或请求删除，管理员也会视情况对种子进行处理。


# 种子的生命周期

<img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FS5pmi7fpvhuSBI5XzfYs%2Ffile.excalidraw.svg?alt=media&amp;token=655ead4e-4f39-4b56-9d92-6ae8df3d8547" alt="" class="gitbook-drawing">

任何已经注册并完成验证的用户，均可以发布种子。发布种子后，种子状态无论是否在候选中，发布人就可以在种子详情页中下载种子文件，开始做种。

如果没有免候选权限，则种子会进入候选状态，此时除发布人外，其他用户可以对其发起投票，支持数达到一定数量时，就可以生效(上架)，此外管理员也可以直接审核通过。具体投票规则请查看候选详情页说明。

生效后，种子便可以被其他用户下载。生效后的若干小时内，种子的做种数必须大于1，可以是发布人做种，也可以是其他人辅种。如果满足此条件，发布人会在若干小时后获得奖励积分，否则扣除积分。

生效的种子也可以被发布人发起请求删除、被其他用户举报、被管理员评估。如须删除，管理员会禁用种子、删除种子，删除时会视情况决定是否扣除发布奖励积分。具体规则可在发种页查看。

生效种子发布超过一定时间且无人做种时，也会被系统主动删除，此时的删除将不会扣除发布人奖励积分，也不会有处罚。

被禁用的种子，在申诉或管理员评估后，也可以被重新生效。


# 发布

## 基本规则

* 发布者必须对发布的文件拥有合法的传播权；
* 禁止发布网络游戏客户端，私服除外；
* 不要单独发布Sample（样片、预告片等）种子。Sample片请和正片一起发布；
* 体积小于100MB的资源不允许发布，短剧类请发布全集，如果你认为文件有价值，请在评论区进行说明，管理员保留删除种子的权力；
* 涉及禁忌、敏感、色情、政治等话题的资源禁止发布；
* Torrent内容不得包含商业网站连接及他站推广或名称；
* 已发布的种子规则同候选规则，需附有图片、内容、标题需正确，违反者直接删除不另行通知；
* 除漫画和管理员认定应以压缩包形式上传的电子书、游戏和图包外，禁止以压缩包（rar、zip、7z等形式）上传资源；
* 不要转载正处于禁转期或标明禁止转载的资源，否则您的候选会将直接被移除，情节严重的将会被给予一定数额的积分扣除；
* 原资源页面所带有的所有资源转载声明在添加候选时也一定要附上，否则您的候选将不会通过；
* 请不要上传带密码的压缩包，这样的资源一经发现将会被立刻删除，并会被给予一定数额的积分扣除。

## 影片类要求

* 禁止发布偷拍的影片；
* 禁止发布低码率转高码率的影片；
* 禁止上传预告片；
* 强烈建议提供douban及imdb信息，未来不排除强制要求；
* 其他信息请根据实际情况填写。

## 发布做种要求

种子上架若干小时内，系统会自动考核做种情况。如果没有人做种，种子将被系统直接删除，并<mark style="color:red;">**给予发布者积分处罚**</mark>，具体扣除积分数额以站内实际情况为准。

做种时间要求可能会随着站点发展而调整增加到72小时甚至更长，因此建议发布种子后，长时间做种。

只要发布提交成功，即使进入候选，也可以直接下载种子开始做种。

## 标题要求

各站/制作组的要求不尽相同，转种时保留原标题/副标题即可。

如是非标内容，目前暂无要求。

## 候选说明

发布种子，会进入候选。候选要求以候选种子详情页为准。

种子如进入候选，管理员也可以直接审核通过。

可在个人详情页设定中开启免候选发布，要求如下：

* 当[等级达到一定程度](/account/level)后，可在个人详情页开启免候选发布。
* 当发布种子数超过一定数时，也可在个人详情页开启免候选发布。

## 发布奖励

### 积分奖励

发布种子并通过候选后，即可有机会获取奖励。具体**奖励数额**和**发放时间**参考积分页或种子发布页。

### 做种积分奖励

作为种子发布人，你将额外获得发布人做种积分，24小时内、30天内、一年内都将额外获得不同程度的积分奖励。具体奖励分数参考积分页或种子发布页。

### 做种上传奖励

作为种子发布人，种子上架特定时间内，你的上传量计两倍（不与其他上传促销叠加）。具体奖励分数参考积分页或种子发布页。

## 请求删除

作为种子发布人，你可以在种子详情页发起请求删除操作。

操作后，管理组将会收到你的请求，并视情况处理你的种子。通过此操作删除的种子，只会扣除上传种子可以获取的积分数。注意，即使发布这个种子你没有获取积分，或之前获取了更多积分或更少积分，当下只会扣除当下规定的积分。

## 重复判定规则

如果旧版本中存在错误、重复等问题，则允许新版本发布。

如果旧版本已经断种、或者发布超过18个月，则允许发布新版本。

发布新版时，请在评论区注明发布新版本的原因。


# 上传&下载

## 上传

### 上传速度限制

任何单种上传速度均不可超过12.5MB/s，如超速，促销上传量将按12.5MB/s重新计算，并且不再享受任何上传促销优惠。

### 流量计算与分享率

分享率统计的是促销后的流量，请保证分享率在1以上，以免被封禁，具体要求请查看[账号](/account/user#zhang-hao-bao-liu-gui-ze)和[等级](/account/level)说明。

### 补种规则

出于对连通性的考量，目前对补种不做限制。

## 下载

### 下载速度速度限制

目前暂无限制及处罚措施，但建议单种子下载速度请不要超过128MB/s。

### Hit & Run

Hit & Run 是指用户在下载完成某个种子文件后，立即停止做种（即停止上传），而没有继续保留该文件在上传状态以供其他用户下载。这样做违反了PT站的基本分享规则，因为它破坏了资源的共享平衡，影响了其他用户的下载体验。

本站于2025年8月支持HR，具体HR规则详见 [Hit & Run](#hit-and-run) 。

~~目前本站没有HR相关限制，但为了维持整个资源共享网络的健康和可持续发展，下载完成后请尽量维持一段时间的做种。~~

### 下载量与分享率要求

分享率统计的是促销后的流量，请保证分享率在1以上，以免被封禁，具体要求请查看[账号](/account/user#zhang-hao-bao-liu-gui-ze)和[等级](/account/level)说明。


# Hit & Run(H\&R)

## 1. 什么是H\&R？

H\&R就是Hit and Run 的缩写，表示下载完资源后在规定时间内没有完成最少做种时间的行为，简单说就是"下完就跑"。

## 2. 为什么要H\&R考核？

由于这种行为严重的打击了P2P的氛围，造成了资源短时间内断种的现象，并且给发布者带来了极大的保种压力，打击了发布者的发布热情。

\
为了形成良好的P2P氛围，本站为给大家创造一个公平和良好的PT环境，特引入HR考核惩罚功能。

实行H\&R考核是为了提高资源保种率，使老资源不断种。

## 3. 具体规则

### 3.1 H\&R考核

所有种子都会进行HR考核，当下载者完成下载的时候，考核自动开始。考核的规则是，从下载完成时间开始算起，在指定天数内，完成指定小时的做种时长；或在指定天数截止前，上传量超过下载量，即分享率大于1。

<img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FZI1Z6dHgZJDgHqn9ZzQT%2Ffile.excalidraw.svg?alt=media&amp;token=c4c192f9-63e9-4dbe-b1ba-c8f1dd114dc4" alt="" class="gitbook-drawing">

系统进行考核统计时，会检查该种子的做种时间或分享率是否达标，如果达标，则标记为已达标，否则标记为未达标。

指定天数默认为7天，做种时长默认为24小时，分享率要求默认为1。具体规则详见积分详情页或种子发布页。

### 3.2 H\&R惩罚

并不是所有种子在考核不达标后，都会受到惩罚。种子发布者在发布种子时，可以选择是否开启HR惩罚。如果开启了HR惩罚，那么在系统完成后统计后，未达标的下载者会在系统首页看到重要提示，提示用户有多少个未达标种子，需要前往HR种子列表进行免罪处理。

免罪需要花费积分，HR的惩罚积分并不是纯粹回归系统，而是有一部分会返还给发布者，以奖励发布者的发布热情。具体需要多少积分，会回馈多少积分给到发布者，可以前往积分详情页查看。

### 3.3 H\&R终极惩罚

系统每天凌晨会统计每一个用户的带有惩罚的考核未达标数，如果你的带有惩罚的考核未达标数超过10个，那么系统会自动ban号。

请调整好你的PT客户端配置，延长做种时间，不要做下"完就跑"的小人。

### 3.4 终极惩罚的临时免疫规则

为了站点的稳定运行，避免误伤真正的爱好者，因此设有以下临时免疫规则，当命中这些规则时，会免疫终极惩罚。

1. 野马之友，PT工具圈的大佬，积极适配本站的开发者，可以联系管理添加野马之友权限，拥有此权限时，可免疫终极惩罚。
2. 等级达人，如果你的等级超过Level 10，那么会免疫终极惩罚。
3. 契约守护，如果你参与了本站的契约，在参与契约的月份里，免疫终极惩罚。
4. 其他，当管理认为需要关闭终极惩罚时，终极惩罚将会跳过。

<mark style="color:red;">注意：免疫不代表不需要接受惩罚，请时刻保持未达标数为0。</mark>

## 4. Q & A

### 1. 如何知道当前种子是否带有HR惩罚？

在种子列表和种子详情页，在标题位置，都会带有明显的HR标记。

### 2. 盒子用户如何得知当前种子是否为带有HR惩罚？

RSS标题最后如果带有<mark style="color:red;">**\[HR]**</mark>，则表示此种子带有HR惩罚，如果你的盒子完成不了HR考核，请在RSS客户端处设置过滤规则，过滤掉带有<mark style="color:red;">**\[HR]**</mark>的种子。

### 3. 发布种子开启HR惩罚选项提交失败？

管理关闭了HR惩罚设置功能，请查看公告了解具体原因。

### 4. 在哪查看惩罚积分以及发布者回馈积分？

在种子发布页和积分详情页均可以查看惩罚所需积分和回馈给发布者的积分。

完成免罪后，在积分详情页中可查看积分记录，受罚者和种子发布者都会有记录。

### 5. 什么情况下没有发布者回馈积分？

1. 发布者状态异常
2. 发布者和受罚者为同一人


# 契约

注册满30天的用户，可参与契约活动。

参与契约的好处：

* 参与契约活动可获得额外积分收益。
* <mark style="color:red;">**在参与契约的月份中，免于活跃度统计**</mark>。
* 参与契约用户的盒子上传不受三倍大小限制。
* 此外，未来如有其他待遇、资格会优先从参与契约的用户中选择。

目前契约分为两种：做种和发种。每个月月初可参与契约，次月3-4号发放上月积分。每个月除月末最后几天，可以选择调整是否续约。如设置自动续约，但当月未完成契约，下月将正常续约，但<mark style="color:red;">**下下月将不会自动续约**</mark>。

契约的具体奖励、处罚和要求，管理员可能会酌情调整，但调整不会影响现有契约，而将会体现在下个月的契约上。如有大的减损用户权益的调整，管理员会提前15天以上在公告中进行通知。

参与做种契约需注意以下要求：

* 必须持续做种，如果你做种了3TB，但一个月内只做种了10天，则平均做种体积则为1TB
* 做种体积必须达到最低要求，否则会有积分处罚

参与发种契约需要注意以下要求：

* 发种后，做种时间要求必须达标，未达标种子不计入统计
* 发种数必须达到最低要求，否则会有积分处罚

其他契约要求可在有资格参与后，前往契约页面查看。


# 发布相关工具

## 转种工具

autofeedjs：<https://github.com/tomorrow505/auto_feed_js/>

## 视频参数获取

什么是视频参数？种子详细介绍中引用的视频文件摘要信息，这样能帮助其他用户判断视频文件的质量。

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FUsXdDFNlt48uPTEuVKco%2Fimage.png?alt=media&amp;token=ccaf79ab-1256-400f-aa2a-34af061e5c18" alt=""><figcaption><p>视频参数示例</p></figcaption></figure>

### mediainfo

官网下载地址：<https://mediaarea.net/en/MediaInfo/Download/Windows>

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FWShcWB41IbRtiBQYeeZo%2Fimage.png?alt=media&amp;token=a8f1744a-d987-4a43-8c0d-22fd691563d1" alt=""><figcaption><p>mediainfo主界面</p></figcaption></figure>

点击文件打开视频文件或者文件夹

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FH3neORvWWc0JmQXb3gde%2Fimage.png?alt=media&amp;token=f29ae478-b4cf-41a7-8fc8-c14b699944bc" alt=""><figcaption><p>添加文件后展示的内容</p></figcaption></figure>

然后点击视图->文本

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FzAhVx7RcZ5foLe6fNJHl%2Fimage.png?alt=media&amp;token=82958e9a-f830-475c-94ab-243a23312fa4" alt=""><figcaption><p>视图->文本</p></figcaption></figure>

复制全部文本添加到种子详情中即可，注意去除其中个人的文件夹信息。

### BDinfo

github下载地址：<https://github.com/UniqProject/BDInfo/releases>

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2F6pxe1QtY6zSe7a3RFAHe%2Fimage.png?alt=media&amp;token=49fdc7be-46eb-414d-9054-11afa3283dfb" alt=""><figcaption><p>软件主页</p></figcaption></figure>

点击Browse选择文件夹或点击ISO选择iso文件

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FQIcYs4Q3cMDhmMQ3v5kM%2Fimage.png?alt=media&amp;token=507b9aaa-3f8d-4745-8696-9084b3f465b9" alt=""><figcaption><p>选择文件后</p></figcaption></figure>

点击下方的View Report获取主轨的详细信息

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FKwdIWGhJepETBlSfjj2I%2Fimage.png?alt=media&amp;token=d28fa608-2216-48ad-a1ec-b2123167c8b7" alt=""><figcaption><p>详细信息</p></figcaption></figure>

此时点击Copy to Clipboard即可复制文件详细信息。

## 视频缩略图生成

potplayer官方下载地址：<https://potplayer.daum.net/?lang=zh_CN>

打开视频后，右键->视频->图像截取->创建缩略图

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2F8p3DyHPiI8O4tJCAOcR4%2Fimage.png?alt=media&amp;token=7cb2e08d-e0ee-4e94-905c-52535c4df2cd" alt=""><figcaption><p>生成缩略图</p></figcaption></figure>


# 盒子说明

## 盒子定义

* 使用服务器、seedbox、或VPN向tracker汇报的IP
* 家宽上传速度超过12.5MB/s的IP

盒子只跟发起汇报的请求IP相关，和用户无直接关联，可在个人详情页->客户端项查看当前做种的客户端以及是否被认定为盒子。

<div><figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FtELSICKos9Us9SDjnvcH%2Fbox.PNG?alt=media&amp;token=0ba10f79-8fea-45ef-9074-2af6fa52d6af" alt=""><figcaption><p>盒子</p></figcaption></figure> <figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2Fiv42O0fvXYtEPih0Y9iW%2Fnonbox.PNG?alt=media&amp;token=38b38bc1-e1f8-46ad-9a96-013c4d4c1c17" alt=""><figcaption><p>非盒子</p></figcaption></figure></div>

显示为红色盒子即表示此客户端被认定为盒子，显示蓝色电脑即表示此客户端被认定为非盒子。

## 盒子限制

通过被认定为盒子的IP上传，受到以下限制：

* 不享受上传促销，包含种子上传促销以及用户发种限定小时内上传量双倍促销，下载促销不受限制。
* 非自己发布的种子、且种子的盒子上传量超过种子文件大小3倍、且未参加当月契约，本次汇报的上传量计0。

除此限制外，目前暂无其他限制，但请随时关注站内公告，了解变动情况。

## Q & A

### Q: 如何查看当前下载/做种的种子盒子上传量？

A: 在个人种子菜单中，点击下载/做种列表，可查看种子对应的盒子上传量。

### Q: 盒子上传量超过3倍后是否影响之后非盒子上传？

A: 不影响，盒子上传量统计仅与IP挂钩。

### Q: IP被标注为盒子，实际上是家宽该怎么办？

A: 请联系管理员，申请将IP备案为家宽。


# 种子制作&发布

目前暂无精力整理教程，欢迎大佬整理PR，优秀作品将给予1w-5w不等的积分奖励。

要求以YemaPT的发布为准，可参考此文章：[PT-Upload-Tutorial](https://github.com/jinqiangyu666/PT-Upload-Tutorial/blob/main/index.md)


# 工具

qBittorrent下载地址：<https://sourceforge.net/projects/qbittorrent/>

transmission下载地址：<https://transmissionbt.com/download>

BitComet(比特彗星)：<https://www.bitcomet.com/cn/downloads>

autofeedjs：站点间转种工具

<https://github.com/tomorrow505/auto_feed_js/>

iyuuplus：辅种工具

<https://github.com/ledccn/iyuuplus-dev>

MoviePilot：影视资源管理 & 站点 & 下载

<https://github.com/jxxghp/MoviePilot>

PT助手Plus：站点管理 & 资源整合 & 下载

<https://github.com/pt-plugins/PT-Plugin-Plus>


# Markdown语法

## 背景

Markdown 和 BBCode 都是轻量级标记语言，本站选择 Markdown 作为种子描述、论坛帖子和评论内容的编辑语法，以下是 Markdown 相比 BBCode 的优点：

#### 1. **语法更简洁直观**

* **Markdown**：用简单的符号（如 `#`、`*`、`-`）实现格式，接近自然书写习惯。
  * 标题：`# 标题`
  * 加粗：`**文本**`
  * 列表：`- 项目`
* **BBCode**：依赖标签（如 `[b][/b]`），更像 HTML 的简化版，输入更繁琐。
  * 标题：`[h1]标题[/h1]`
  * 加粗：`[b]文本[/b]`

#### 2. **原生可读性更强**

* **Markdown** 的原始文本无需渲染也能清晰阅读。例如：\
  `**加粗** 和 _斜体_` 直接表达意图。
* **BBCode** 的标签会干扰阅读：\
  `[b]加粗[/b] 和 [i]斜体[/i]`。

#### 3. **跨平台通用性**

* **Markdown** 被广泛支持：GitHub、Notion、VS Code、Stack Overflow、博客工具等。
* **BBCode** 主要局限于传统论坛（如 phpBB、Discourse），应用场景狭窄。

#### 4. **扩展性与灵活性**

* **Markdown**：
  * 支持混合 HTML 实现复杂布局（如表格、图表）。
  * 通过扩展语法（如 GitHub Flavored Markdown）支持任务列表、代码高亮等。
* **BBCode**：功能依赖论坛预设的标签，扩展性差，无法自由定制。

#### 5. **工具生态丰富**

* **Markdown** 有强大的编辑器（Typora、Obsidian）、预览工具、静态网站生成器（Hugo、Jekyll）等。
* **BBCode** 工具链较少，通常依赖论坛内置的编辑器。

#### 6. **移动端友好**

* Markdown 的符号（`*` `#` `-`）在手机键盘上易于输入，而 BBCode 的 `[ ]` 标签需要频繁切换符号面板。

#### 7. **标准化与社区支持**

* Markdown 有 CommonMark 等标准化努力，减少方言差异；而 BBCode 不同论坛的实现可能不一致。
* Markdown 拥有活跃的开源社区，BBCode 逐渐成为“旧时代”产物。

## 语法规范

### 原生语法规范

您可以参考 [这篇教程](https://www.runoob.com/markdown/md-tutorial.html) 学习 Markdown 语法，诚然在markdown中可以使用HTML/CSS/JavaScript语言，但为了网站的健壮性，我们屏蔽了绝大多数HTML/CSS/JavaScript语法，建议您只使用纯粹的 Markdown 语法。

### 扩展支持

由于大部分PT站都构建自PHP，并且都在使用BBCode语言，本站也提供了相当多的 Markdown 扩展语法，用于构建比肩 BBCode 的展示体验。

#### 1. emoji

您可以使用这种语法来编写emoji：

```
:xxxx:
```

例如:smile:

```
:smile:
```

这里是 [emoji码表](https://gist.github.com/rxaviers/7360908) ，你可以参考使用，同时本站的编辑器工具栏中内置了许多emoji快捷方式。

#### 2. 折叠面板

BBCode语法支持折叠面板，本站引入了类似的语法支持：

```markdown
:::collapse{label=这是折叠面板}
这是内容
:::
```

其中label表示折叠面板的标题，:::包裹的内容则是内容。编辑器工具栏中包含了折叠面板的快捷操作。

#### 3. Alert支持

如果想实现带有背景颜色的内容，则可以使用alert语法，其中type表示提示类型，message表示标题，showIcon表示是否展示图标。编辑器工具栏中包含了折叠面板的快捷操作。

```markdown
:::alert{type=error}
这是内容
:::
:::alert{type=warning}
这是内容
:::
:::alert{type=success}
这是内容
:::
:::alert{type=info message=这是标题 showIcon=1}
这是内容
:::

```


# 账号及站点问题

### 邀请码已发，对方未收到邀请码？

请按以下步骤进行排查

1. 请等待3-5分钟再查收邮件；
2. 请对方邮箱是否正确；
3. 请对方检查是否在邮箱垃圾邮件中，不同邮箱垃圾邮件位置不同，请仔细找；
4. 将邀请码自行发送给对方（个人邮箱、app聊天服务等），需要注意，如果邀请码收不到，那注册后大概率也无法进行邮箱验证；
5. 联系管理组排查问题。

### 如何更改邮箱或用户名？

目前暂不支持更改邮箱和用户名，后续如增加相关功能，也将会采用以积分兑换的方式进行，消耗大量积分。

所以请注册时，就保证邮箱和用户名正确。

### 网站显示错误、渲染异常

目前主要支持chrome浏览器，凡chrome套壳浏览器也大都支持。

移动端也做了一定程度的适配，并且有自适应的展示内容。

如显示以下内容，则表示正在维护中，可以休息一会再尝试访问：

> Service is under maintenance

如显示以下内容，则表示访问过于频繁，请降低访问频率：

> Access retricted

如显示以下内容，则表示版本已更新，请刷新页面重试：

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FsHKZuVmciJiqO2lnLKe4%2FIMG_9788.JPG?alt=media&amp;token=977fe553-413d-4d26-8336-2d02a2014739" alt="" width="375"><figcaption></figcaption></figure>

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FHIiEHrTOyTG0smKWsGKu%2FIMG_9789.JPG?alt=media&amp;token=d70ddac0-d004-4d15-ba5c-3263b90c9539" alt="" width="375"><figcaption></figcaption></figure>

### 为什么我的账号被封禁?

参考知识库中其他文章：

* [邮箱](/account/register)未在指定时间进行验证；
* [分享率](/account/level)过低；
* 未通过[考核](/account/user#zhang-hao-kao-he-yao-qiu)；
* 管理员认定的其他原因。

### 被封禁了怎么解封？

一旦被封禁，请不要申诉，没有任何解封的可能。

被封禁的账号仍然保留，原因只是防止再次被注册、以及用于管理员查询封禁原因，不代表可以解封。


# 做种下载问题

### 什么是分享率？

分享率是衡量用户在PT站中贡献程度的一个重要指标，它通常用来反映一个用户上传数据（Upload）和下载数据（Download）之间的比率。一般来说，只计算促销上传量/促销下载量。

分享率的意义在于鼓励用户多上传文件，贡献更多的带宽和资源，从而维持整个PT站的健康运作。通常，PT站会对用户的分享率进行考核，并设定一些规则或惩罚措施。

### 可以多台电脑一起上传下载吗？

针对同一个种子，只允许使用一台电脑、一个客户端进行做种/下载。

针对不同的种子，目前暂无做种/下载唯一性要求。

### 为什么我无法上传/下载?

只有状态正常的用户才可以上传下载，未进行邮箱验证的用户无法上传下载。


# Tracker异常排查

tracker在某些情况下会向客户端透出特定信息，因此可以根据此信息进行定位处理问题。

> user not exist

用户不存在，不可能出现的信息，除非你伪造了请求参数。

> uid valid fail

tracker url的参数uid校验失败，出现这种情况大概率是重置了passkey，此时，所有种子做种都会失败。

> user status error:

账号状态异常，具体状态可看后面的状态

> user level is 0

你的等级为0，将不能再使用tracker

> torrent not exist

种子不存在，一般情况是种子被删除

> torrent validate error

种子信息校验异常，建议重新下载种子

> torrent status error:

种子状态异常，具体可看后面的状态

> not allow client

不支持的客户端，请使用常见的客户端以及版本，如使用了新版本客户端，可联系管理员

> client error

客户端携带的参数有误，请确保是从本站下载的种子，如果确认没有问题，请尝试重新下载种子、添加种子

> inner error

服务器异常，请联系管理组处理


# 其他问题


# 授权 & 接口规范

## 1. 对接专用auth

针对页面访问的接口，使用cookie校验用户态，您可以使用cookie中的数据进行对接测试，但不建议作为给用户的对接方案，一方面此数据有效期仅为30天。

开放API接口仅可使用个人详情页中提供的第三方对接专用auth，此auth有效期为180天。

目前针对页面访问的接口，cookie auth和第三方对接auth均可使用，未来有可能限制为仅可使用cookie auth访问。

## 2. 接口规范

本站目前提供了有限的开放API接口，如不满足需求，请向管理员提需求。不过您可以暂时使用本站页面所对应的接口。目前暂未总结不同接口的调用规范，但有一些明确的规范可以提供给到您，方便您进行问题排查。

### 2.1 请求方式

本站POST接口请求标头(Content-Type)有不同的设计。

添加种子的接口由于要上传文件，因此采用的是 `multipart/form-data` 。

大部分POST接口采用的都是 `application/json。`

也有部分POST接口由于入参较为简单拼在了URI后，或者没有入参，此时就不需要设置此标头。

> 如果请求失败，请优先检查您的请求标头是否与本站页面访问保持一致。

### 2.2 返回结果

除种子下载的链接外，其他URI返回的内容均为JSON格式。

```json
{
    "success": true,
    "showType": 0,
    "errorMessage": "访问异常时提示的信息",
    "data": [] // list为[] object为{}
}
```

当success为true时，则表明请求成功，如果为false，则errorMessage字段表明访问失败的原因。

### 2.3 开放API接口

开放API正在建设中，具体已开放接口可查看[开放API](/developer/open-api)。

## 3. 协助排查问题

相信您能够独立完成对接，但如果实在无法解决问题，请向 <develop@yemapt.org> 邮箱发送邮件，邮件内容须包含请求的接口、请求的参数、测试的时间、以及请求返回header中的traceid。

最好是打开浏览器开发者工具，打开网络，找到出错的请求，右键->复制-> 以 fetch 格式复制/以 cURL (bash) 格式复制。

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FJbn0Somvm7x8s8aAKEXN%2Fimage.png?alt=media&amp;token=d4f45d12-a0f8-432d-b676-8fd697b48452" alt=""><figcaption><p>复制出错请求</p></figcaption></figure>

<figure><img src="https://1723650567-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7IDm4UWoSBXuI4DAvWrY%2Fuploads%2FqrmxnJQlob1doTLrRpMR%2Fimage.png?alt=media&amp;token=664b98cd-2674-4cc8-942b-044d3308b00e" alt=""><figcaption><p>响应标头中的traceid</p></figcaption></figure>


# 接口说明

{% hint style="warning" %}
以下接口均用于web页面，目前暂未提供专门的第三方对接API，您可以使用现有供web页面使用的接口。未来如有调整，会在知识库和站内公示一个月以上。
{% endhint %}

## 根据piecesHash获取种子id

{% hint style="warning" %}
注意，已提供[开放API](https://wiki1.yemapt.org/developer/pages/B9mnHs3Q6KIVZYbvCXKK#id-2.1-gen-ju-pieceshash-huo-qu-zhong-zi-id)，此接口于2025年下线，请尽快迁移。
{% endhint %}

* URI：/api/torrent/fetchTorrentIdWithPiecesHash
* Method：POST
* ContentType：application/json
* 请求参数格式：

<pre class="language-json"><code class="lang-json"><strong>{
</strong>    "piecesHashList": ["abcde","fght"]
}
</code></pre>

* 请求参数要求：piecesHashList不能为空，最长不超过100
* 返回结果格式：

```json
{
    "success": true,
    "showType": 0,
    "data": {
        "e9f3f5dd32abcd6fc0fea4d43d32559cf0309764": 45
    }
}
```


# 开放API

更新时间：2026-08-13

## 接口总览

| Method | URI                                                  | 用途                   |
| ------ | ---------------------------------------------------- | -------------------- |
| `POST` | `/openApi/user/fetchBasicInfo.json`                  | 获取当前API用户的基本信息       |
| `POST` | `/openApi/user/authenticate.json`                    | 获取本站对用户身份挑战值的RSA签名   |
| `POST` | `/openApi/torrent/fetchTorrentIdWithPiecesHash.json` | 批量根据piecesHash查询种子ID |
| `POST` | `/openApi/torrent/fetchOpenTorrentList.json`         | 分页查询公开种子列表           |
| `POST` | `/openApi/torrent/generateDownloadKey.json`          | 生成临时种子下载凭证           |
| `POST` | `/openApi/torrent/uploadTorrent.json`                | 上传种子，可用于第三方系统转种      |

## 认证方式

开放API接口URI均以 **`/openApi/`** 开头。请求Header中的 `Authorization` 应直接填写API AuthKey，不要添加 `Bearer` 前缀。

API AuthKey需要在个人详情页创建，有效期为180天，每个用户最多同时保留3个有效AuthKey。用户可以在个人详情页删除AuthKey，删除后立即失效。请勿在URL、日志或公开代码中暴露AuthKey。

调用示例：

```javascript
// node javascript
fetch("https://www.yemapt.org/openApi/xxxxxxxxx", {
  "headers": {
    "Authorization": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  }
});
```

```bash
# bash
curl 'https://www.yemapt.org/openApi/xxxxxxxxx' \
 -H 'Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
```

Cookie中的登录auth不能用于开放API。如果在 `Authorization` 中传入Cookie auth，接口会返回：

```json
{
    "success": false,
    "showType": 2,
    "errorCode": 403,
    "errorMessage": "need api auth"
}
```

## 通用响应

除下载种子文件的接口外，开放API均返回 `ResultDTO` 格式的JSON。业务调用是否成功应以 `success` 为准，不要只依赖HTTP状态码。

成功响应：

```json
{
    "success": true,
    "showType": 0,
    "data": {}
}
```

失败响应：

```json
{
    "success": false,
    "showType": 2,
    "errorCode": 2401,
    "errorMessage": "参数异常"
}
```

常见错误码：

| errorCode | 说明                                |
| --------- | --------------------------------- |
| `400`     | 未提供AuthKey，或AuthKey格式异常、签名无效、已经过期 |
| `402`     | 当前用户没有访问相关资源的权限                   |
| `403`     | 使用的不是API AuthKey，或API AuthKey已被删除 |
| `1402`    | 当前接口要求用户先完成邮箱验证                   |
| `2401`    | 请求参数或业务校验不通过，具体原因见 `errorMessage` |
| `500`     | 系统内部异常；反馈问题时请同时提供响应中的traceId信息    |

## 1. 用户

### 1.1 获取用户基本信息

<mark style="color:green;">`POST`</mark> `/openApi/user/fetchBasicInfo.json`

原 `GET /openApi/user/fetchBasicInfo.json` 已删除，不再提供兼容。请使用上述POST接口。

<mark style="color:green;">`响应结果`</mark>

```json
{
    "success": true,
    "showType": 0,
    "data": {
        "id": 10,
        "name": "abcde",
        "avatar": "https://img.yemapt.org/avatar/97/97d77c955bf14b0c8807020755ebd8a0.png",
        "bonus": 1000000,
        "level": 7,
        "status": "enable",
        "invitedNum": 100,
        "availableInviteNum": 100,
        "registerTime": "2024-05-01T00:00:00.000+00:00",
        "promotionUploadSize": 1000000,
        "promotionDownloadSize": 1000000,
        "admin": false
    }
}
```

主要字段说明：

| 字段                      | 类型      | 说明                      |
| ----------------------- | ------- | ----------------------- |
| `id`                    | Long    | 用户ID                    |
| `name`                  | String  | 用户名                     |
| `avatar`                | String  | 用户上传头像的完整URL，或系统生成的头像标识 |
| `bonus`                 | Long    | 用户积分                    |
| `level`                 | Integer | 用户等级                    |
| `status`                | String  | 用户状态                    |
| `invitedNum`            | Long    | 已邀请用户数量                 |
| `availableInviteNum`    | Long    | 当前可用邀请数量                |
| `registerTime`          | Date    | 注册时间，ISO 8601格式         |
| `promotionUploadSize`   | Long    | 促销上传量，单位为字节             |
| `promotionDownloadSize` | Long    | 促销下载量，单位为字节             |
| `admin`                 | Boolean | 是否为管理员                  |

备注：用户上传头像后，`avatar`直接返回以 `https://img.yemapt.org/avatar/` 开头的完整URL，无需再拼接域名；如果返回的是32位随机字符串，则需要使用 [Multiavatar](https://github.com/multiavatar) 转换。该组件提供JavaScript、PHP和Python工具包。

### 1.2 校验是否为本站用户

用于第三方系统校验用户提交的auth是否正常，以及获取对应的uid，此功能采用RSA签名技术。

当前使用的publicKey：

{% code overflow="wrap" fullWidth="false" %}

```
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm6OpYYWpF5Js8SWtuAXGZ1iWGsADHSDhdkz9wDQYuvRB3SW2xGSQpwYB7B7Bn6ZfoXtxhMm2v4JzwTe3qZioWmwgyweCyv7FIjvsdYIhAHMj7v7jI7zq0Xn9F6CjBMM0AWtCmhhH/eFNxICiCucVGqa6Z0hf5OcAWefPHIOdtMbWp+4fqkjWc7EuEjfqFr2eDy9kHqZWFpuByQa9jiF4v9HzLfoO/UwqBheYkNSLgoTRQ6sSF1bHlDC8yq3l4d/6fsQ7mZPJzWBf2vlohmOVpjy6s4Z+qtNpWsJhrLW9au49+1eYadKpNLR10izG5boKn+z9i5P/tRQ8WNkZELN2OwIDAQAB
```

{% endcode %}

<mark style="color:green;">`POST`</mark> `/openApi/user/authenticate.json`

<mark style="color:green;">`Header`</mark> `Content-Type: application/json`

<mark style="color:green;">`Body`</mark>

```json
{
    "publicKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "randomContent": "12345678123456781234567812345678"
}
```

备注：

* `publicKey`务必使用当前Wiki中展示的Key。公钥可能轮换，接口返回“publicKey已失效”时应重新读取本文档中的最新值。
* `randomContent`必须为32个字符。建议每次请求都生成新的随机值，例如使用UUID并移除其中的 `-`。
* 验证方应同时校验RSA签名、返回的 `userId` 和本次提交的 `randomContent`，并避免重复接受相同的随机值。

<mark style="color:green;">`响应结果`</mark>

```json
{
    "success": true,
    "showType": 0,
    "data": {
        "userId": 100,
        "signType": "rsa-sha256",
        "publicKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "signature": "OOOOOOOOOOOOOOOOOOOOOOOOOOOO"
    }
}
```

备注：

签名数据使用UTF-8编码，格式为“用户ID、制表符、randomContent”，即：

```java
String data = "{userId}\t{randomContent}"
                .replace("userId","100")
                .replace("randomContent","12345678123456781234567812345678");
```

示例代码：

python：

```python
from base64 import b64decode
import rsa

data = "100\t12345678123456781234567812345678"
publicKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
signature = "OOOOOOOOOOOOOOOOOOOOOOOOOOOO"

PUB = '''
-----BEGIN PUBLIC KEY-----
{publicKey}
-----END PUBLIC KEY-----
'''.format(publicKey=publicKey)

try:
    signType = rsa.verify(data.encode(), b64decode(signature), rsa.PublicKey.load_pkcs1_openssl_pem(PUB))
    print(signType)
except rsa.pkcs1.VerificationError:
    print("verification failed")
```

java:

```java
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;


public static boolean rsaValidate(String publicKeyStr, String sign, String data) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {
    PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(
            new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyStr)));

    Signature verify = Signature.getInstance("SHA256withRSA");
    verify.initVerify(publicKey);
    verify.update(data.getBytes());
    return verify.verify(Base64.getDecoder().decode(sign));
}
```

## 2. 种子

### 2.1 根据piecesHash获取种子id

<mark style="color:green;">`POST`</mark> `/openApi/torrent/fetchTorrentIdWithPiecesHash.json`

<mark style="color:green;">`Header`</mark> `Content-Type: application/json`

<mark style="color:green;">`Body`</mark>

```json
{
    "piecesHashList": [
        "e9f3f5dd32abasdfghfea4d43d32559cf0309764",
        "e9f3f5dd32ab123456fea4d43d32559cf0309764"
    ]
}
```

参数说明：

* `piecesHashList`数组长度不能超过100。
* 空数组会返回空Map，不会返回参数错误。
* piecesHash通常是对种子 `info.pieces` 内容计算得到的40位SHA-1十六进制字符串；无匹配种子的Hash不会出现在响应结果中。

<mark style="color:green;">`响应结果`</mark>

```json
{
    "success": true,
    "showType": 0,
    "data": {
        "e9f3f5dd32abasdfghfea4d43d32559cf0309764": 100
    }
}
```

### 2.2 查询公开种子列表

此接口与站内页面使用的 `/api/torrent/fetchOpenTorrentList` 查询能力一致，供第三方系统分页查询已发布的公开种子。

<mark style="color:green;">`POST`</mark> `/openApi/torrent/fetchOpenTorrentList.json`

<mark style="color:green;">`Header`</mark> `Content-Type: application/json`

<mark style="color:green;">`Body`</mark>

```json
{
    "keyword": "关键词",
    "categoryId": 1,
    "downloadPromotionType": "free",
    "pageParam": {
        "current": 1,
        "pageSize": 20
    },
    "sorter": {
        "field": "listingTime",
        "order": "descend"
    }
}
```

请求参数说明：

* `keyword`：可选，同时匹配种子标题和副标题，长度必须小于128个字符。
* `categoryId`：可选，种子类目ID；查询受限类目时，API auth对应的用户必须拥有相应权限。
* `uploadPromotionType`：可选，上传促销类型，可用值为 `none`、`one_half`、`double_upload`。
* `downloadPromotionType`：可选，下载促销类型，可用值为 `none`、`half`、`free`。
* `pageParam`：必填；`current`按页码从1开始，最大为1000；`pageSize`必须大于0且最大为40。
* `sorter`：可选；`order`可用值为 `ascend`、`descend`。不传时按照置顶状态和发布时间倒序排列。

`sorter.field`支持以下值：

* `id`、`torrentSize`、`fileSize`、`fileNum`
* `torrentCommentNum`、`torrentViewNum`、`torrentDownloadNum`
* `leechNum`、`seedNum`、`completedNum`、`downloadUserNum`
* `status`、`listingTime`、`gmtCreate`、`gmtModified`
* `uploadPromotionEndTime`、`downloadPromotionEndTime`、`reportNum`

<mark style="color:green;">`响应结果`</mark>

以下响应仅展示主要字段。实际响应还可能包含当前用户信息、种子媒体属性以及以后新增的兼容字段，对接系统应忽略不认识的字段，并允许可选字段为 `null` 或不返回。

```json
{
    "success": true,
    "showType": 0,
    "data": [
        {
            "id": 100,
            "showName": "种子标题",
            "shortDesc": "种子副标题",
            "categoryId": 1,
            "categoryName": "电影",
            "fileSize": 1073741824,
            "seedNum": 10,
            "leechNum": 2,
            "uploadPromotion": "none",
            "downloadPromotion": "free",
            "listingTime": "2026-08-02T08:00:00.000+00:00",
            "collect": false
        }
    ]
}
```

主要字段说明：

| 字段                         | 类型      | 说明                             |
| -------------------------- | ------- | ------------------------------ |
| `id`                       | Long    | 种子ID                           |
| `showName`                 | String  | 种子标题                           |
| `shortDesc`                | String  | 种子副标题                          |
| `categoryId`               | Long    | 类目ID                           |
| `categoryKey`              | String  | 包含父子层级的类目标识                    |
| `categoryName`             | String  | 类目名称                           |
| `categoryAvatar`           | String  | 类目图标                           |
| `picture`                  | String  | 种子预览图路径                        |
| `fileSize`                 | Long    | 种子内容总大小，单位为字节                  |
| `seedNum`                  | Integer | 当前做种数量                         |
| `leechNum`                 | Integer | 当前下载数量                         |
| `listingTime`              | Date    | 发布时间，ISO 8601格式；具体时区以响应中的偏移量为准 |
| `isTopping`                | String  | 是否置顶，枚举值为 `y`、`n`              |
| `uploadPromotion`          | String  | 上传促销类型                         |
| `uploadPromotionEndTime`   | Date    | 上传促销结束时间                       |
| `downloadPromotion`        | String  | 下载促销类型                         |
| `downloadPromotionEndTime` | Date    | 下载促销结束时间                       |
| `hrPunishEnable`           | Boolean | 是否启用HR考察                       |
| `userInfo`                 | Object  | 发种用户的展示信息；匿名发布时不会暴露真实身份        |
| `collect`                  | Boolean | 当前API用户是否已收藏                   |
| `userTorrentInfo`          | Object  | 当前API用户对该种子的下载量及做种、下载状态        |

接口只返回状态为 `enable` 的种子，目前不提供配套的总数接口。无符合条件的数据或分页参数超出限制时，`data`返回空数组。对接方可以逐页请求；当返回数量小于 `pageSize` 时，即可认为已经到达当次查询结果的最后一页。分页期间种子数据可能发生变化，对接方应使用种子 `id` 去重。

### 2.3 生成种子下载凭证

第三方系统不能直接使用开放API的 `Authorization` 下载种子文件，需要先为指定种子生成临时下载凭证，再使用凭证下载 `.torrent` 文件。

#### 2.3.1 生成凭证

<mark style="color:green;">`POST`</mark> `/openApi/torrent/generateDownloadKey.json?id={torrentId}`

请求参数说明：

* `id`：必填，需要下载的种子ID。
* 请求Header中必须携带开放API的 `Authorization`。

请求示例：

```bash
curl -X POST 'https://www.yemapt.org/openApi/torrent/generateDownloadKey.json?id=100' \
 -H 'Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
```

<mark style="color:green;">`响应结果`</mark>

```json
{
    "success": true,
    "showType": 0,
    "data": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
```

`data`即种子下载凭证，有效期为30分钟。生成凭证时会校验当前API用户是否拥有该种子的下载权限；种子不存在或没有下载权限时，接口返回失败。

原 `GET /openApi/torrent/generateDownloadKey.json` 和 `GET /openApi/torrent/generateDownloadKey` 均已删除，不再提供兼容。请使用带 `.json` 后缀的POST接口。

#### 2.3.2 使用凭证下载种子

<mark style="color:green;">`GET`</mark> `/api/torrent/download1?token={downloadKey}`

此下载接口不需要携带 `Authorization`。下载凭证是Base64字符串，可能包含 `+`、`/`、`=` 等字符，作为查询参数使用前必须进行URL编码。

JavaScript示例：

```javascript
const downloadUrl = "https://www.yemapt.org/api/torrent/download1?token="
    + encodeURIComponent(downloadKey);
window.location.href = downloadUrl;
```

cURL示例：

```bash
curl --get 'https://www.yemapt.org/api/torrent/download1' \
 --data-urlencode 'token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' \
 --output download.torrent
```

下载成功时，接口返回 `application/x-bittorrent` 类型的种子文件，而不是JSON。凭证已过期、内容异常、用户被禁用、用户passkey发生变化或下载权限发生变化时，接口返回JSON格式的错误信息。

{% hint style="warning" %}
下载凭证与生成凭证的用户及种子绑定。下载得到的种子文件包含该用户的个人Tracker信息，请勿共享凭证或下载后的种子文件。
{% endhint %}

### 2.4 上传种子

第三方系统可以通过此接口上传 `.torrent` 文件并创建种子，可用于自动转种。上传操作计入API AuthKey所属用户的发种数量，并使用该用户的发种权限。

<mark style="color:green;">`POST`</mark> `/openApi/torrent/uploadTorrent.json`

<mark style="color:green;">`Header`</mark> `Content-Type: multipart/form-data`

请求Header中必须携带开放API的 `Authorization`。请求体不是JSON，种子文件和种子信息都需要作为multipart表单字段提交。

请求参数说明：

| 字段                    | 类型        | 必填 | 说明                                         |
| --------------------- | --------- | -- | ------------------------------------------ |
| `file`                | File      | 是  | 需要上传的 `.torrent` 文件                        |
| `showName`            | String    | 是  | 种子标题，最长512个字符，不能包含换行                       |
| `shortDesc`           | String    | 是  | 种子副标题，最长512个字符，不能包含换行                      |
| `categoryId`          | Long      | 是  | 种子类目ID；受限类目要求当前用户拥有对应的上传权限                 |
| `uploadUserAnonymous` | String    | 是  | 是否匿名发布，可用值为 `y`、`n`                        |
| `longDesc`            | String    | 否  | 种子描述，支持Markdown，不允许使用 `data:image` 内嵌图片    |
| `picture`             | String    | 否  | 预览图的HTTP或HTTPS完整URL，最长512个字符               |
| `mediaInfo`           | String    | 否  | MediaInfo文本                                |
| `imdb`                | String    | 否  | IMDb数字ID，不能带 `tt` 前缀，例如 `0111161`          |
| `season`              | Integer   | 否  | 季编号，剧集类资源可与 `imdb` 一起提交                    |
| `douban`              | String    | 否  | 豆瓣条目ID，例如 `1292052`                        |
| `medium`              | String    | 否  | 媒介选项值                                      |
| `standard`            | String    | 否  | 分辨率选项值                                     |
| `codec`               | String    | 否  | 视频编码选项值                                    |
| `audiocodec`          | String    | 否  | 音频编码选项值                                    |
| `regionList`          | String\[] | 否  | 地区选项值，最多3个；多个值使用同名表单字段重复提交                 |
| `team`                | String    | 否  | 制作组选项值                                     |
| `tagList`             | String\[] | 否  | 标签选项值；多个值使用同名表单字段重复提交                      |
| `screenshotList`      | String\[] | 否  | 截图的HTTP或HTTPS完整URL，最多20个；多个值使用同名表单字段重复提交   |
| `hrPunishEnable`      | Boolean   | 否  | 是否启用HR考察，默认为 `false`；本站关闭HR设置功能时不能传 `true` |

`longDesc`、`screenshotList`、`imdb` 和 `douban` 至少需要填写一项。媒介、分辨率、编码、地区、制作组和标签的选项值参见[枚举值说明](https://wiki1.yemapt.org/developer/pages/5ckEHIiZ0LIYL7FvK5z9#种子)。类目ID可在站内发种页面的类目选项中查看。

数组字段应重复提交同名字段，不要将数组序列化成JSON字符串。例如两个地区应提交两次 `regionList`：

```
regionList=1
regionList=4
```

IMDb页面地址中的ID通常带有 `tt` 前缀，提交前必须移除此前缀。例如 `https://www.imdb.com/title/tt0111161/` 应提交为 `0111161`。

#### cURL

```bash
curl -X POST 'https://www.yemapt.org/openApi/torrent/uploadTorrent.json' \
 -H 'Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' \
 -F 'file=@/path/to/example.torrent;type=application/x-bittorrent' \
 -F 'showName=The Shawshank Redemption 1994 BluRay 1080p' \
 -F 'shortDesc=肖申克的救赎 / 1080p BluRay' \
 -F 'categoryId=1' \
 -F 'uploadUserAnonymous=n' \
 -F 'imdb=0111161' \
 -F 'douban=1292052' \
 -F 'medium=2' \
 -F 'standard=4' \
 -F 'codec=4' \
 -F 'audiocodec=4' \
 -F 'regionList=4' \
 -F 'tagList=6' \
 -F 'longDesc=种子描述'
```

#### Python

以下示例使用 `requests`。列表字段通过元组列表重复提交同名字段。

```python
import requests

url = "https://www.yemapt.org/openApi/torrent/uploadTorrent.json"
headers = {
    "Authorization": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
data = [
    ("showName", "The Shawshank Redemption 1994 BluRay 1080p"),
    ("shortDesc", "肖申克的救赎 / 1080p BluRay"),
    ("categoryId", "1"),
    ("uploadUserAnonymous", "n"),
    ("imdb", "0111161"),
    ("douban", "1292052"),
    ("medium", "2"),
    ("standard", "4"),
    ("codec", "4"),
    ("audiocodec", "4"),
    ("regionList", "4"),
    ("tagList", "6"),
    ("longDesc", "种子描述")
]

with open("/path/to/example.torrent", "rb") as torrent_file:
    files = {
        "file": ("example.torrent", torrent_file, "application/x-bittorrent")
    }
    response = requests.post(url, headers=headers, data=data, files=files, timeout=60)

response.raise_for_status()
result = response.json()
if not result.get("success"):
    raise RuntimeError(result.get("errorMessage", "上传失败"))
print(result["data"])
```

#### PHP

```php
<?php
$url = 'https://www.yemapt.org/openApi/torrent/uploadTorrent.json';
$fields = [
    'file' => new CURLFile(
        '/path/to/example.torrent',
        'application/x-bittorrent',
        'example.torrent'
    ),
    'showName' => 'The Shawshank Redemption 1994 BluRay 1080p',
    'shortDesc' => '肖申克的救赎 / 1080p BluRay',
    'categoryId' => '1',
    'uploadUserAnonymous' => 'n',
    'imdb' => '0111161',
    'douban' => '1292052',
    'medium' => '2',
    'standard' => '4',
    'codec' => '4',
    'audiocodec' => '4',
    'regionList' => '4',
    'tagList' => '6',
    'longDesc' => '种子描述'
];

$curl = curl_init($url);
curl_setopt_array($curl, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    ],
    CURLOPT_POSTFIELDS => $fields,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60
]);
$response = curl_exec($curl);
if ($response === false) {
    throw new RuntimeException(curl_error($curl));
}
curl_close($curl);

$result = json_decode($response, true, 512, JSON_THROW_ON_ERROR);
if (!$result['success']) {
    throw new RuntimeException($result['errorMessage'] ?? '上传失败');
}
echo $result['data'] . PHP_EOL;
```

#### JavaScript（Node.js 18+）

使用 `FormData` 时不要手动设置 `Content-Type`，运行时会自动生成包含boundary的Header。

```javascript
import { readFile } from "node:fs/promises";

const torrentBytes = await readFile("/path/to/example.torrent");
const torrentBlob = new Blob([torrentBytes], {
  type: "application/x-bittorrent"
});
const formData = new FormData();
formData.append("file", torrentBlob, "example.torrent");
formData.append("showName", "The Shawshank Redemption 1994 BluRay 1080p");
formData.append("shortDesc", "肖申克的救赎 / 1080p BluRay");
formData.append("categoryId", "1");
formData.append("uploadUserAnonymous", "n");
formData.append("imdb", "0111161");
formData.append("douban", "1292052");
formData.append("medium", "2");
formData.append("standard", "4");
formData.append("codec", "4");
formData.append("audiocodec", "4");
formData.append("regionList", "4");
formData.append("tagList", "6");
formData.append("longDesc", "种子描述");

const response = await fetch(
  "https://www.yemapt.org/openApi/torrent/uploadTorrent.json",
  {
    method: "POST",
    headers: {
      Authorization: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    },
    body: formData
  }
);
if (!response.ok) {
  throw new Error(`HTTP ${response.status}`);
}
const result = await response.json();
if (!result.success) {
  throw new Error(result.errorMessage ?? "上传失败");
}
console.log(result.data);
```

<mark style="color:green;">`响应结果`</mark>

```json
{
    "success": true,
    "showType": 0,
    "data": 100
}
```

`data`为新创建的种子ID。是否直接发布由当前用户的发种权限和类目权限决定；没有直接发布权限时，种子会进入与站内发种相同的候选审核流程，响应格式不变。

接口会执行与站内发种相同的校验，包括全站发种开关、用户积分、每日发种上限、类目权限、种子文件格式、infoHash和piecesHash重复检查。校验失败时，接口返回通用失败响应，具体原因见 `errorMessage`。上传成功后，对接方应妥善保存返回的种子ID；网络超时且无法确认结果时，建议先调用 `fetchTorrentIdWithPiecesHash.json` 检查种子是否已经创建，再决定是否重试。

## 变更记录

| 日期         | 变更内容                                                                                                                                               |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-08-13 | 增加上传种子接口 `/openApi/torrent/uploadTorrent.json` 的说明，补充多语言调用示例; 删除 `fetchBasicInfo` 和 `generateDownloadKey` 的旧GET接口，不再提供兼容                           |
| 2026-08-02 | 增加公开种子列表和种子下载凭证接口说明；新增 `/openApi/torrent/generateDownloadKey.json`；将 `fetchBasicInfo` 和 `generateDownloadKey.json` 调整为POST接口；补充认证、通用响应、错误码、字段与分页规则 |


# 枚举值说明

## 促销相关

### DownloadPromotionType

* none：无优惠
* half：只计50%下载量
* free：不计下载量

### UploadPromotionType

* none：无优惠
* one\_half：计1.5倍上传量
* double\_upload：计2倍上传量

## 种子

### medium/媒介

| 选项名                       | 选项值 | 说明 |
| ------------------------- | --- | -- |
| Web-DL/WebRip             | 1   |    |
| Blu-ray (1080p Complete)  | 2   |    |
| Blu-ray UHD (4K Complete) | 3   |    |
| Remux                     | 4   |    |
| Rip/Encode                | 5   |    |
| HDTV/TV Cap               | 6   |    |
| DVDRip                    | 7   |    |
| Audio CD/Vinyl            | 8   |    |
| DVD (Complete/ISO)        | 9   |    |
| Other                     | 999 |    |

### standard/分辨率

| 选项名      | 选项值 | 说明 |
| -------- | --- | -- |
| 720i     | 1   |    |
| 720p     | 2   |    |
| 1080i    | 3   |    |
| 1080p    | 4   |    |
| SD       | 5   |    |
| 2K/1440p | 6   |    |
| 4K/2160p | 7   |    |
| 8K       | 8   |    |
| Other    | 999 |    |

### codec/视频编码

<table><thead><tr><th width="196">选项名</th><th width="138">选项值</th><th>说明</th></tr></thead><tbody><tr><td>H.264/AVC</td><td>1</td><td></td></tr><tr><td>H.265/HEVC</td><td>2</td><td></td></tr><tr><td>VC-1(Blu-ray)</td><td>3</td><td></td></tr><tr><td>Bluray(AVC)</td><td>4</td><td></td></tr><tr><td>Bluray(HEVC)</td><td>5</td><td></td></tr><tr><td>MPEG-2(Blu-ray/DVD)</td><td>6</td><td></td></tr><tr><td>Xvid/DivX</td><td>7</td><td></td></tr><tr><td>AV1</td><td>8</td><td></td></tr><tr><td>VP9</td><td>9</td><td></td></tr><tr><td>H.266/VVC</td><td>10</td><td></td></tr><tr><td>Other</td><td>999</td><td></td></tr></tbody></table>

### audiocodec/音频编码

<table><thead><tr><th width="196">选项名</th><th width="138">选项值</th><th>说明</th></tr></thead><tbody><tr><td>AAC</td><td>1</td><td></td></tr><tr><td>AC3 (Dolby Digital)</td><td>2</td><td></td></tr><tr><td>DTS</td><td>3</td><td></td></tr><tr><td>DTS-HD MA</td><td>4</td><td></td></tr><tr><td>E-AC3 (Dolby Digital Plus)</td><td>5</td><td></td></tr><tr><td>E-AC3 Atmos</td><td>6</td><td></td></tr><tr><td>TrueHD</td><td>7</td><td></td></tr><tr><td>TrueHD Atmos</td><td>8</td><td></td></tr><tr><td>LPCM</td><td>9</td><td></td></tr><tr><td>FLAC</td><td>10</td><td></td></tr><tr><td>APE</td><td>11</td><td></td></tr><tr><td>MP3</td><td>12</td><td></td></tr><tr><td>OGG</td><td>13</td><td></td></tr><tr><td>Opus</td><td>14</td><td></td></tr><tr><td>Other</td><td>999</td><td></td></tr></tbody></table>

### region/地区

<table><thead><tr><th width="196">选项名</th><th width="138">选项值</th><th>说明</th></tr></thead><tbody><tr><td>CN(中国)</td><td>1</td><td></td></tr><tr><td>HK/CN(香港)</td><td>2</td><td></td></tr><tr><td>TW/CN(台湾)</td><td>3</td><td></td></tr><tr><td>US(美国)</td><td>4</td><td></td></tr><tr><td>EU(欧洲)</td><td>5</td><td></td></tr><tr><td>JP(日本)</td><td>6</td><td></td></tr><tr><td>KR(韩国)</td><td>7</td><td></td></tr><tr><td>Other</td><td>999</td><td></td></tr></tbody></table>

### team/制作组

<table><thead><tr><th width="196">选项名</th><th width="138">选项值</th><th>说明</th></tr></thead><tbody><tr><td>OurBits</td><td>1</td><td></td></tr><tr><td>BtsHD</td><td>2</td><td></td></tr><tr><td>BtsTV</td><td>3</td><td></td></tr><tr><td>HDChina</td><td>4</td><td></td></tr><tr><td>CMCT</td><td>5</td><td></td></tr><tr><td>HHWEB</td><td>6</td><td></td></tr><tr><td>FRDS</td><td>7</td><td></td></tr><tr><td>MTeam</td><td>8</td><td></td></tr><tr><td>QHstudio</td><td>9</td><td></td></tr><tr><td>UBits</td><td>10</td><td></td></tr><tr><td>Other</td><td>999</td><td></td></tr></tbody></table>

### tag/标签

<table><thead><tr><th width="196">选项名</th><th width="138">选项值</th><th>说明</th></tr></thead><tbody><tr><td>禁转</td><td>1</td><td></td></tr><tr><td>首发</td><td>2</td><td></td></tr><tr><td>官组</td><td>3</td><td></td></tr><tr><td>DIY</td><td>4</td><td></td></tr><tr><td>国语</td><td>5</td><td></td></tr><tr><td>中字</td><td>6</td><td></td></tr><tr><td>粤语</td><td>7</td><td></td></tr><tr><td>英字</td><td>8</td><td></td></tr><tr><td>HDR10</td><td>9</td><td></td></tr><tr><td>杜比视界</td><td>10</td><td></td></tr><tr><td>连载中</td><td>11</td><td>动漫/综艺/剧集类使用</td></tr><tr><td>完结</td><td>12</td><td>动漫/综艺/剧集类使用</td></tr><tr><td>多国字幕</td><td>13</td><td></td></tr><tr><td>HDR10+</td><td>14</td><td></td></tr><tr><td>杜比全景声(Atmos)</td><td>15</td><td></td></tr><tr><td>DTS-X</td><td>16</td><td></td></tr><tr><td>5.1/7.1声道</td><td>17</td><td></td></tr><tr><td>完结全集</td><td>18</td><td></td></tr><tr><td>SP/剧场版/OVA</td><td>19</td><td></td></tr></tbody></table>


# 其他


# 附录

## 站点大事记

* 2025
  * 8月9日:上线HR功能
* 2024
  * 5月1日: 开放内测
  * 6月1日: 开放公测
* 2023: 开始设计开发


