API v1
v1 的资源直接挂在客户端上:client.projects、client.workItems、client.cycles,等等。每一个工作区级
别的调用都先传工作区 slug,然后是 URL 中包含的项目 id(如果有)。和 v2 不同,这里的 project 是项目的
UUID,并且较早的类把删除方法拼作 delete 或 del(以你编辑器显示的方法列表为准)。
import { PlaneClient } from "@hoyasumii/plane";
const client = new PlaneClient({ apiKey: "your-api-key" });
const projects = await client.projects.list("workspace-slug");
const project = await client.projects.create("workspace-slug", {
name: "My Project",
description: "A new project",
});
const item = await client.workItems.create("workspace-slug", project.id, { name: "First task" });
await client.workItems.comments.create("workspace-slug", project.id, item.id, { comment_html: "<p>Hello</p>" });
// 用一个人类可读的键,在整个工作区范围内查找一个工作项。
const byKey = await client.workItems.retrieveByIdentifier("workspace-slug", "ENG-12");
资源
- Projects:项目管理与组织
- WorkItems:工作项与任务管理,具有完整的 CRUD 操作
- WorkItemTypes:自定义工作项类型的定义与管理
- WorkItemProperties:工作项的自定义属性
- Labels:工作项分类与标签管理
- States:工作流状态管理
- Users:用户管理与资料
- Roles:工作区和项目角色定义(只读)
- Estimates:项目估算与估算点数
- Modules:功能组织与模块管理
- Cycles:迭代周期管理
- Customers:客户管理与操作
- Pages:工作区和项目页面管理
- Links:工作项链接与关联关系
- Workspace:工作区级别的操作
- Epics:史诗(Epic)管理与组织
- Intake:接收表单与请求管理
- Stickies:便签管理
- Teamspaces:团队空间管理
- Milestones:里程碑跟踪与管理
- Initiatives:计划(Initiative)管理
- WorkspaceTemplates:工作区级别的工作项、项目和页面模板
- WorkspaceWorkItemTypes:带属性关联的工作区级别工作项类型管理
- WorkspaceWorkItemProperties:带选项的工作区级别自定义属性管理
- WorkspaceProjectLabels:工作区级别的项目标签管理
- WorkspaceProjectStates:工作区级别的项目状态管理
- WorkItemRelationDefinitions:自定义工作项关系类型定义
- Releases:带标签(tags)、标签(labels)、条目标签、变更日志、评论、链接和工作项的发布管理
- Collections:对工作区页面进行分组的文件夹,带成员和页面管理
- AgentRuns:AI 代理运行的编排与活动跟踪
- Workflows:带状态关联、转换、转换钩子、活动和工作项审批的项目工作流管理
- ProjectTemplates:按项目划分的工作项和页面模板管理
- Features:工作区和项目功能管理
- WorkspaceStates:工作区治理下的工作区级别(目录)工作项状态——双模式读取,仅受治理的写入
- WorkspaceWorkflows:工作区治理下的工作区级别工作流目录,带链条(状态)、转换、使用情况、活动和转换钩子
- WorkItemTypeGovernance:管理一个工作区级别的工作项类型可以使用哪些工作流(any/constrained/required 模式),带按项目的固定设置以及项目侧的选取/回退预览接口
- Instance:来自
GET /api/instances/的实例配置与元数据(版本、版次、认证提供方、SMTP、上传限制)
子资源挂在它们各自的父资源下:workItems.comments、workItems.attachments、workItems.activities、
workItems.relations、workItems.workLogs、customers.properties、customers.requests、
teamspaces.members、teamspaces.projects、initiatives.labels、initiatives.projects、
initiatives.epics、agentRuns.activities、workItemProperties.options、workItemProperties.values,
等等。
实例信息
const info = await client.instance.retrieve();
console.log(info.instance.current_version, info.config.is_smtp_configured);
下载附件
workItems.attachments.download 会解析一个附件的签名 URL 并下载它,而不会把 API 密钥发送给存储主机。
传入 maxBytes 之后,更大的文件会被拒绝,并抛出 AttachmentTooLargeError:如果存储提前公布了它的
Content-Length,就会提前拒绝;否则会在响应体一旦超过这个上限时立刻拒绝。
import { AttachmentTooLargeError } from "@hoyasumii/plane";
try {
const { data, contentType } = await client.workItems.attachments.download("acme", projectId, itemId, "asset-1", {
maxBytes: 20 * 1024 * 1024,
});
console.log(contentType, data.length);
} catch (error) {
if (error instanceof AttachmentTooLargeError) console.log("too large");
else throw error;
}
错误
一次失败的 v1 请求会抛出 HttpError,带有状态码、响应体和响应头(全部小写,所以 429 时可以用
headers["retry-after"])。完整的层级结构参见 错误。