开发者文档 · 开放接口

项目接口

用个人 API 密钥查询自己的身份与项目,新建项目、修改项目信息、推进阶段、登记费用。

以下接口的完整地址都以 https://api.yqpj.com/app-api/project/open-api 开头,请求头带 X-Api-Key: <你的密钥>。每次调用都会记入密钥的调用日志。

定位项目

修改项目、登记费用等接口需要先指明是哪个项目,可以用下面任意一种方式,只能定位到你是创建者或已接受开发者的项目:

字段类型必填说明
projectId数字否项目编号,优先使用
project文本否项目名称或业务编号(如 PRJ20261019001);先精确匹配名称或业务编号,没有再按名称包含匹配
repoRemote文本否仓库的 git 远端地址;与 branch 一起按「仓库 + 分支」认项目
branch文本否当前分支
repoPath文本否本机仓库路径;以上都认不出时,按接入值守时登记的路径兜底
找不到或匹配到多个项目时,接口返回错误,错误信息里附带最多 20 个可选项目(名称、业务编号、编号)。

GET /me 当前密钥信息

返回密钥对应的用户与权限,常用来检查密钥是否有效。

所需权限:无(有效密钥即可)。对应命令:yqpj-agent whoami

返回示例

{
  "code": 0,
  "data": {
    "userId": 128,
    "tenantId": 1,
    "name": "张三",
    "keyName": "MacBook 上的 Claude",
    "scopes": ["PROJECT_READ", "AGENT_MANAGE"]
  },
  "msg": ""
}

GET /projects 我的项目

列出你能处理反馈的进行中项目(你是创建者或已接受的开发者),以及每个项目的值守接入情况。

所需权限:查看我的项目(PROJECT_READ)。对应命令:yqpj-agent projects [关键字]

请求参数(查询串)

字段类型必填说明
keyword文本否按名称包含(不分大小写)或业务编号精确筛选

返回示例

{
  "code": 0,
  "data": [
    {
      "id": 34,
      "no": "PRJ20261019001",
      "name": "钱包服务",
      "status": "DEVELOPING",
      "agentName": "钱包服务·反馈值守",
      "agentRepoPath": "/Users/me/Project/wallet",
      "agentBranch": "master",
      "agentOnline": true
    }
  ],
  "msg": ""
}

还没接入值守的项目,agentName、agentRepoPath、agentBranch 为 null,agentOnline 为 false。

POST /projects/create 新建项目

以密钥用户为创建者新建项目,可以同时加合作方、登记费用、推进到指定阶段。整个过程是一个事务,任一步失败全部回滚。

所需权限:新建项目(PROJECT_WRITE)。对应命令:yqpj-agent project-create <请求 JSON 文件>

请求参数

字段类型必填说明
name文本是项目名称,最长 128 字
sourceType枚举否项目类型:IMITATE / CUSTOM / MIXED,默认 CUSTOM
creatorRole枚举否你在项目中的角色:DEVELOPER / MIDDLEMAN,默认 DEVELOPER
requirement文本否需求描述
devCycleMin / devCycleMax整数否开发周期下限 / 上限
cycleUnit枚举否周期单位:DAY / WEEK / MONTH
remark文本否备注,最长 500 字
middleman文本否合作方,见下方说明
devFee金额否开发费,必须大于 0;登记为「开发费」一次性费用
devFeeCurrency枚举否开发费币种:CNY / USD / USDT,默认 USDT
fees数组否其它费用项,格式同「登记项目费用」的费用项;与 devFee 同分类时以这里为准
status枚举否建好后所处阶段:QUOTING / DEVELOPING / TESTING / ONLINE / MAINTAINING,默认 QUOTING(报价中)
dealDate日期否成交日期(进入开发中),空为今天
testDate日期否进入测试日期,空为今天
onlineDate日期否上线日期,空为今天
maintainDate日期否维护开始日期,空为今天;不能早于上线日期
nextChargeDate日期否周期费下次收费日;不能早于维护开始日期
priorPeriodMode枚举否下次收费日之前的账期:FREE 免费不出账(默认)/ OFFLINE_PAID 已线下收取

请求示例

{
  "name": "小额贷",
  "requirement": "小额贷款 App + 后台",
  "devCycleMin": 30,
  "devCycleMax": 45,
  "cycleUnit": "DAY",
  "middleman": "xuan",
  "devFee": 5500,
  "devFeeCurrency": "USDT",
  "fees": [
    { "categoryCode": "maintain", "amount": 200, "chargeType": "PERIODIC", "period": "MONTH" }
  ],
  "status": "MAINTAINING",
  "dealDate": "2026-09-01",
  "testDate": "2026-10-10",
  "onlineDate": "2026-10-20",
  "maintainDate": "2026-10-21",
  "nextChargeDate": "2026-10-31",
  "priorPeriodMode": "FREE"
}

返回示例

{
  "code": 0,
  "data": {
    "id": 52,
    "no": "PRJ20261022001",
    "name": "小额贷",
    "status": "MAINTAINING",
    "middleman": "通讯录联系人「xuan」(线下,已加入)",
    "devFee": 5500,
    "feeCount": 2
  },
  "msg": ""
}

规则说明

  • 防重复:你名下已有同名(不分大小写)且未结束的项目时拒绝新建,避免重复调用建出两份。
  • 合作方:先在你的通讯录里按名字或真实姓名精确找,找到一个即加入(线下联系人直接加入,已入驻平台的发邀请待确认);通讯录里有多个同名时报错。通讯录没有再按用户名或昵称精确找平台用户并发邀请,找不到或有多个时报错,请先把合作方加进通讯录。
  • 阶段推进:项目先以报价中建好,登记完费用后按报价中 → 开发中 → 测试中 → 已上线 → 维护中逐级推进到目标阶段,每一级与 H5 上操作一致。进入维护中时,首期维护账单按已登记的周期费生成。

POST /projects/update 修改项目信息

只修改给了值的字段,其余字段、对接联系人、附件、参考站点保持不变。

所需权限:新建项目(PROJECT_WRITE)。对应命令:yqpj-agent project-update <项目名 | 业务编号 | 编号> <JSON 文件>

请求参数

除下表字段外,还需带上「定位项目」的字段。

字段类型必填说明
name文本否新项目名称,最长 128 字(仅项目创建者)
requirement文本否需求描述(仅项目创建者)
remark文本否备注,最长 500 字(仅项目创建者)
devCycleMin / devCycleMax整数否开发周期下限 / 上限(仅项目创建者)
cycleUnit枚举否DAY / WEEK / MONTH(仅项目创建者)
dealDate日期否成交日期;只能修正已经过的节点,不晚于今天
testDate日期否进入测试日期
onlineDate日期否上线日期
status枚举否推进到的阶段(只能往后):DEVELOPING / TESTING / ONLINE / MAINTAINING
maintainDate日期否维护开始日期,空为今天;不能早于上线日期
nextChargeDate日期否周期费下次收费日;不能早于维护开始日期
priorPeriodMode枚举否FREE 免费不出账(默认)/ OFFLINE_PAID 已线下收取

请求示例

{
  "project": "小额贷",
  "name": "小额贷二期",
  "status": "MAINTAINING",
  "maintainDate": "2026-10-21",
  "nextChargeDate": "2026-10-31",
  "priorPeriodMode": "OFFLINE_PAID"
}

返回示例

{
  "code": 0,
  "data": {
    "id": 52,
    "no": "PRJ20261022001",
    "name": "小额贷二期",
    "oldName": "小额贷",
    "status": "MAINTAINING",
    "dealTime": 1788192000000,
    "testTime": 1791561600000,
    "onlineTime": 1792425600000,
    "maintainTime": 1792512000000
  },
  "msg": ""
}

规则说明

  • 谁能改:名称、需求、备注、开发周期只有项目创建者能改(与 H5 编辑一致);成交、测试、上线日期创建者或已接受的开发者都能改。
  • 改名:群名与处理端名称(「项目名·反馈值守」)随之更新。
  • 先修日期,再推进阶段:同时给了节点日期和 status 时,先修正已过的节点,再按新阶段补后面的节点。
  • 阶段只能往后:从当前阶段逐级推进到目标阶段;目标早于当前阶段或项目已结束时报错。推进时补的节点日期取当天,进入维护中时使用 maintainDate、nextChargeDate、priorPeriodMode。
  • 已在维护中:不传 status(或传 MAINTAINING)而传了 maintainDate、nextChargeDate、priorPeriodMode 任一项时,修改维护开始日期与下次收费日;没给 maintainDate 就沿用原维护开始日期。与 H5 一致,已有手动收款的维护账单时不允许修改。

POST /projects/fees/save 登记项目费用

按内置分类登记一次性或周期性费用。同分类的已有费用项被覆盖,其它费用项保留。

所需权限:新建项目(PROJECT_WRITE),且你是项目创建者或已接受的开发者。对应命令:yqpj-agent fee-save <项目名 | 业务编号 | 编号> <fees.json>

请求参数

除 fees 外,还需带上「定位项目」的字段。

字段类型必填说明
fees数组是费用项,不能为空,每项字段如下
fees[].categoryCode文本是分类:dev 开发费 / design 设计费 / maintain 维护费 / server 服务器费
fees[].amount金额是必须大于 0
fees[].currency枚举否CNY / USD / USDT,默认 USDT
fees[].chargeType枚举否ONCE 一次性 / PERIODIC 周期性,默认取分类自身的计费类型
fees[].period枚举否周期性时的计费周期:MONTH / QUARTER / YEAR
fees[].billDay整数否出账日 1~31,仅周期性有效
fees[].nextChargeDate日期否下次收费日,仅周期性有效
fees[].priorPeriodMode枚举否下次收费日之前的账期:FREE 免费 / OFFLINE_PAID 已线下收取
fees[].remark文本否备注,最长 500 字

请求示例

{
  "project": "小额贷",
  "fees": [
    {
      "categoryCode": "maintain",
      "amount": 200,
      "currency": "USDT",
      "chargeType": "PERIODIC",
      "period": "MONTH",
      "billDay": 28,
      "nextChargeDate": "2026-10-31",
      "priorPeriodMode": "OFFLINE_PAID",
      "remark": "含服务器巡检"
    }
  ]
}

返回示例

{
  "code": 0,
  "data": { "projectId": 52, "saved": 1, "total": 2 },
  "msg": ""
}

saved 是本次提交的费用项数,total 是登记后项目的费用项总数。

每个分类只覆盖一条已有费用项(保留其原有加价),同一次请求里同分类写了多条时,多出的作为新费用项追加。分类编码不是上面四个之一时报错。