开发者
API 参考
VentionDesk API 的所有公开端点。此列表由服务器已注册的路由生成;每个端点的访问规则来自路由上的检查,表格来自 VentionDesk 用于检查请求和生成响应的 Zod 合约。因此,这里写的就是服务器实际执行的内容。
URL 以 https://api.ventiondesk.com 开头。登录、权限范围、错误格式和速率限制见 API 基础。必填字段标有 *;没有表格的端点,要么使用未公开的合约检查请求体,要么没有合约。
访问 的含义如下:“所有者”和“所有者和员工”指在 Web 界面中已登录的人员;使用 API 密钥访问这类端点时,返回 403。带有权限范围的端点,也可以由具备该权限范围的代理密钥访问。
任务
GET/v1/tasks
读取任务,可按项目、状态、负责人或搜索文本筛选。
访问 所有者、员工或具有权限范围 tasks:read 的代理密钥
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| project | UUID | |
| projectSlug | 文本 | |
| status | "hold" | "todo" | "in_progress" | "question" | "review" | "done" | |
| assignee | "owner" | "staff" | "claude" | "external" | |
| claimable | "true" | "false" | |
| maxAttempts | 整数 | ≥ 1 | ≤ 20 | 默认值:3 |
| limit | 整数 | ≥ 1 | ≤ 100 | 默认值:20 |
| q | 文本 | 至少 1 个字符 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| tasks | 对象 列表 |
POST/v1/tasks
创建任务;非常相似的未完成任务会被识别为重复。
访问 所有者、员工或具有权限范围 tasks:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| projectId | UUID | |
| projectSlug | 文本 | |
| title * | 文本 | 至少 25 个字符 |
| descriptionMd | 文本 | 至少 1 个字符 |
| area | "frontend" | "backend" | "design" | "infra" | "support" | |
| dueDate | 日期(YYYY-MM-DD) | |
| estimateMinutes | 整数 | > 0 |
| triggerCondition | 文本 | 至少 1 个字符 |
| evidence | 文本 | 至少 1 个字符 |
GET/v1/tasks/:id
包含描述、反馈和附件的任务。
访问 所有者、员工或具有权限范围 tasks:read 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| task | 对象 | |
| results | 对象 列表 | |
| attachments | 对象 列表 |
PATCH/v1/tasks/:id
更改任务的字段。
访问 所有者、员工或具有权限范围 tasks:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| title | 文本 | 至少 1 个字符 |
| descriptionMd | 文本 或 null | |
| status | "hold" | "todo" | "in_progress" | "question" | "review" | "done" | |
| assignee | "owner" | "staff" | "claude" | "external" 或 null | |
| area | "frontend" | "backend" | "design" | "infra" | "support" 或 null | |
| dueDate | 日期(YYYY-MM-DD) 或 null | |
| estimateMinutes | 整数 或 null | > 0 |
| position | 文本 | 至少 1 个字符 |
| triggerCondition | 文本 或 null |
POST/v1/tasks/:id/claim
原子性地领取任务——两次运行绝不会领到同一个任务。
访问 所有者、员工或具有权限范围 tasks:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| maxAttempts | 整数 | ≥ 1 | ≤ 20 | 默认值:3 |
| runId | UUID |
POST/v1/tasks/:id/decision
人对反馈的批准或驳回;驳回需要评论。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| decision * | "approved" | "rejected" | |
| commentMd | 文本 | 至少 1 个字符 | 最多 20000 个字符 |
| attachmentIds | UUID 列表 | 默认值:[] |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| task | 对象 | |
| result | 对象 |
POST/v1/tasks/:id/handoff
将任务移交给 Claude。
访问 所有者、员工或具有权限范围 tasks:write 的代理密钥
POST/v1/tasks/:id/result
反馈任务状态(arbeitet、kontrolle、frage、master、blockiert、erledigt)。
访问 所有者、员工或具有权限范围 tasks:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| state * | "arbeitet" | "kontrolle" | "frage" | "master" | "blockiert" | "erledigt" | |
| summaryMd | 文本 | 至少 1 个字符 |
| detailsMd | 文本 | 至少 1 个字符 |
| prUrl | URL | |
| evidence | 文本 | 至少 1 个字符 |
| runId | UUID |
代理运行
POST/v1/agent/runs
启动代理运行。
访问 仅限代理密钥,需权限范围 agent:run
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| projectId | UUID | |
| projectSlug | 文本 | |
| meta | 对象(自由格式) | 默认值:{} |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| run | 对象 |
POST/v1/agent/runs/:id/finish
结束代理运行,附摘要或错误状态。
访问 仅限代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| status * | "succeeded" | "failed" | |
| summary | 文本 | 至少 1 个字符 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| run | 对象 |
POST/v1/agent/runs/:id/heartbeat
正在进行的代理运行的存活信号。
访问 仅限代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| run | 对象 |
项目
POST/v1/errors/:id/resolve
将未解决的错误标记为已解决——先使用错误来源的访问在错误追踪器(Sentry、Bugsnag、Rollbar)中标记,成功后才在 VentionDesk 中标记。如果服务商处失败(访问只读、错误未知、无响应),错误保持未解决:返回 409 或 502 及原因。适用于所有者、员工和具有 errors:write 的代理。此处不提供隐藏和删除。
访问 所有者、员工或具有权限范围 errors:write 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| issue | 对象 | |
| changed | true | false |
POST/v1/errors/:id/task
根据错误创建任务。
访问 所有者和员工
GET/v1/errors/summary
所有项目的错误计数,用于概览。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| projects | 对象 列表 |
POST/v1/monitors/probe
在创建前检查监控 URL,并报告重定向及最终目标。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| url * | URL | 最多 2048 个字符 |
GET/v1/projects
账户或密钥可以看到的项目。
访问 所有者、员工或具有权限范围 projects:read 的代理密钥
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| status | "active" | "blocked" | "review" | "paused" | |
| includeArchived | "true" | "false" | |
| q | 文本 | 至少 1 个字符 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| projects | 对象 列表 |
GET/v1/projects/:id
按 ID 获取项目。
访问 所有者、员工或具有权限范围 projects:read 的代理密钥
PATCH/v1/projects/:id/customer
将项目分配给其他客户;工单、草稿和文档随之移动。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| customerId * | UUID |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| project | 对象 | |
| changed | true | false | |
| moved | 对象 |
GET/v1/projects/:id/deploy
有哪些部署目标,以及每个目标缺少什么。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| targets | 对象 列表 |
POST/v1/projects/:id/deploy
触发部署(202:已触发,不代表成功)。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| target * | "production" | "staging" | "preview" | |
| provider | "vercel" | "render" |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| provider | "vercel" | "render" | |
| target | "production" | "staging" | "preview" | |
| externalId | 文本 或 null | |
| started | 整数 | > 0 |
POST/v1/projects/:id/error-sources
将错误追踪器中的项目关联到此项目。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| provider * | "sentry" | "bugsnag" | "rollbar" | |
| externalId * | 文本 | 至少 1 个字符 | 最多 200 个字符 |
DELETE/v1/projects/:id/error-sources/:sourceId
从项目中解除错误来源。
访问 所有者和员工
GET/v1/projects/:id/errors
此项目来自 Sentry、Bugsnag 或 Rollbar 的错误。具有 errors:read 的代理可获得其项目的错误,不含来源和连接。
访问 所有者、员工或具有权限范围 errors:read 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| issues | 对象 列表 | |
| stats | 对象 | |
| sources | 对象 列表 | |
| providers | "sentry" | "bugsnag" | "rollbar" 列表 |
GET/v1/projects/:id/hosting
项目的托管关联。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| mappings | 对象 列表 | |
| providers | "netlify" | "cloudflare_pages" | "aws_amplify" | "railway" | "flyio" | "digitalocean_app_platform" 列表 |
POST/v1/projects/:id/hosting
关联托管服务商处的网站、应用或服务。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| provider * | "netlify" | "cloudflare_pages" | "aws_amplify" | "railway" | "flyio" | "digitalocean_app_platform" | |
| externalId * | 文本 | 至少 1 个字符 | 最多 200 个字符 |
DELETE/v1/projects/:id/hosting/:mappingId
移除托管关联。
访问 所有者和员工
DELETE/v1/projects/:id/render-services/:serviceId
从项目中解除过时的 Render 服务 ID。
访问 所有者
GET/v1/projects/:id/report
用于报告的项目状态:进度、各状态的任务数、未结和逾期的工单、路线图、监控、部署和开放的 pull request。不含金额——既无营收也无预算或成本。
访问 所有者、员工或具有权限范围 stats:read 的代理密钥
GET/v1/projects/:id/roadmap
项目的路线图阶段,按计划顺序排列。
访问 所有者、员工或具有权限范围 roadmap:write 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| phases | 对象 列表 |
POST/v1/projects/:id/roadmap
创建路线图阶段。没有 sort 时放在末尾;下一个未完成的阶段就是驾驶舱中的里程碑。
访问 所有者、员工或具有权限范围 roadmap:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| title * | 文本 | 至少 1 个字符 | 最多 200 个字符 |
| startsOn * | 文本 | 固定格式 |
| endsOn * | 文本 | 固定格式 |
| sort | 整数 | ≥ 0 |
PATCH/v1/projects/:id/roadmap/:phaseId
更改阶段——标题、期间、完成状态或顺序,仅更改所发送的字段。API 不执行删除。
访问 所有者、员工或具有权限范围 roadmap:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| title | 文本 | 至少 1 个字符 | 最多 200 个字符 |
| startsOn | 文本 | 固定格式 |
| endsOn | 文本 | 固定格式 |
| done | true | false | |
| sort | 整数 | ≥ 0 |
POST/v1/projects/:id/sync
立即同步项目的 GitHub 数据,而不是等到夜间。
访问 所有者和员工
GET/v1/projects/:id/time
项目的工时记录:日期、时长、描述、任务、是否可计费和已开票、人员姓名——不含小时费率、金额和发票 ID。
访问 所有者、员工或具有权限范围 time:read 的代理密钥
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| from | 文本 | 固定格式 |
| to | 文本 | 固定格式 |
| limit | 整数 | ≥ 1 | ≤ 500 | 默认值:200 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| entries | 对象 列表 | |
| totalSeconds | 整数 | ≥ 0 |
GET/v1/projects/by-slug/:slug
按 slug 获取项目。
访问 所有者、员工或具有权限范围 projects:read 的代理密钥
工单
GET/v1/tickets
读取工单,可按状态、渠道、优先级、项目或客户筛选。
访问 所有者、员工或具有权限范围 tickets:read 的代理密钥
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| status | "open" | "in_progress" | "waiting" | "resolved" | |
| source | "contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api" | |
| priority | "low" | "normal" | "high" | "critical" | |
| project | UUID | |
| projectSlug | 文本 | |
| customer | UUID | |
| withSla | "true" | "false" | |
| q | 文本 | 至少 1 个字符 |
| limit | 整数 | ≥ 1 | ≤ 100 | 默认值:50 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| tickets | 对象 列表 |
POST/v1/tickets
创建工单,例如在电话之后。
访问 所有者、员工或具有权限范围 tickets:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| subject * | 文本 | 至少 3 个字符 |
| bodyMd * | 文本 | 至少 1 个字符 |
| source * | "contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api" | |
| customerId | UUID 或 null | |
| projectId | UUID 或 null | |
| priority | "low" | "normal" | "high" | "critical" | 默认值:"normal" |
| requesterName | 文本 | |
| requesterEmail | 电子邮件 | |
| requesterMeta | 对象(自由格式) |
DELETE/v1/tickets/:id
删除工单。
访问 所有者和员工
GET/v1/tickets/:id
包含历史的工单。
访问 所有者、员工或具有权限范围 tickets:read 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| ticket | 对象 | |
| messages | 对象 列表 |
PATCH/v1/tickets/:id
更改工单的主题、状态、优先级、渠道、客户、项目、负责人或门户可见性。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| subject | 文本 | 至少 3 个字符 |
| status | "open" | "in_progress" | "waiting" | "resolved" | |
| priority | "low" | "normal" | "high" | "critical" | |
| source | "contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api" | |
| customerId | UUID 或 null | |
| projectId | UUID 或 null | |
| assignedTo | UUID 或 null | |
| portalVisible | true | false |
POST/v1/tickets/:id/messages
在历史中写入一条记录:内部备注或草稿。不会发送邮件。
访问 所有者、员工或具有权限范围 tickets:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| bodyMd * | 文本 | 至少 1 个字符 |
| isInternalNote | true | false | 默认值:false |
| isDraft | true | false | 默认值:false |
POST/v1/tickets/:id/reply
回复客户——这是唯一会发送邮件的方式。将工单设为“等待中”。代理的回复始终附有由 AI 助手撰写的提示,并限制为每个密钥每小时 20 条、每个工单每天 3 条(超出返回 429)。
访问 所有者、员工或具有权限范围 tickets:reply 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| bodyMd * | 文本 | 至少 1 个字符 |
| isInternalNote | true | false | 默认值:false |
| isDraft | true | false | 默认值:false |
| draftId | UUID |
POST/v1/tickets/:id/to-task
根据工单创建任务——主题作为标题,全部历史作为描述。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| projectId * | UUID | |
| title | 文本 | 至少 10 个字符 |
| assignee | "owner" | "staff" | "claude" | "external" 或 null |
GET/v1/tickets/attachments/:id/url
工单附件的短期 URL——代理只能获取其项目工单的附件。
访问 所有者、员工或具有权限范围 tickets:read 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| url | URL | |
| expiresInSeconds | 整数 | > 0 |
笔记
POST/v1/notes
在项目上创建笔记(项目 ID 或 slug)。
访问 所有者、员工或具有权限范围 notes:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| projectId | UUID | |
| projectSlug | 文本 | |
| bodyMd * | 文本 | 至少 1 个字符 |
| kind | "idea" | "decision" | "risk" | 默认值:"idea" |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| note | 对象 |
POST/v1/notes/:id/to-task
根据笔记创建任务。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| title | 文本 | 至少 25 个字符 |
| assignee | "owner" | "staff" | "claude" | "external" 或 null |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| ok | false | |
| error | 文本 | |
| code | "note_already_converted" | |
| task | 对象 |
想法
POST/v1/ideas
创建想法——始终为“未开始”。代理只能创建:不能读取、修改或删除任何想法;没有项目时,仅限适用于所有项目的密钥。
访问 所有者或具有权限范围 ideas:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| title * | 文本 | 至少 1 个字符 | 最多 200 个字符 |
| bodyMd | 文本 | 最多 20000 个字符 |
| tags | 文本 列表 | 默认值:[] |
| potential | "low" | "medium" | "high" | |
| priority | "low" | "high" | |
| projectId | UUID 或 null |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| idea | 对象 |
工时
GET/v1/time/entries
读取工时记录。
访问 所有者和员工
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| from | 文本 | |
| to | 文本 | |
| project | UUID | |
| user | UUID | |
| unbilled | "true" | "false" | |
| limit | 整数 | ≥ 1 | ≤ 500 | 默认值:200 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| entries | 对象 列表 |
POST/v1/time/entries
补录工时。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| label * | 文本 | 至少 1 个字符 |
| startedAt * | 时间戳(ISO 8601) | |
| endedAt * | 时间戳(ISO 8601) | |
| seconds | 整数 | > 0 |
| projectId | UUID 或 null | |
| ticketId | UUID 或 null | |
| taskId | UUID 或 null | |
| billable | true | false | 默认值:true |
DELETE/v1/time/entries/:id
删除工时记录。
访问 所有者和员工
PATCH/v1/time/entries/:id
更改工时记录。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| label | 文本 | 至少 1 个字符 |
| seconds | 整数 | > 0 |
| billable | true | false | |
| projectId | UUID 或 null | |
| ticketId | UUID 或 null |
GET/v1/time/timer
账户正在运行的计时器。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| timer | 对象 或 null |
POST/v1/time/timer/start
启动计时器。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| label | 文本 | 默认值:"" |
| projectId | UUID 或 null | |
| ticketId | UUID 或 null | |
| taskId | UUID 或 null |
POST/v1/time/timer/stop
停止计时器,并将时间记录为一条记录。
访问 所有者和员工
GET/v1/time/unbilled
尚未开票的可计费工时,按项目列出,含金额。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| projects | 对象 列表 | |
| totals | 对象 |
客户
DELETE/v1/customers/:id
删除客户,包括文件。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| customerId | UUID | |
| shortName | 文本 | |
| impact | 对象 | |
| files | 对象 | |
| portalAccounts | 对象 |
GET/v1/customers/:id/deletion
预览删除客户时会一并移除的内容。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| customerId | UUID | |
| shortName | 文本 | |
| deletable | true | false | |
| reason | 文本 或 null | |
| blockers | 对象 | |
| impact | 对象 |
POST/v1/customers/:id/portal-access
为联系人授予客户门户访问权限。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| email * | 电子邮件 | |
| displayName | 文本 | 至少 1 个字符 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| access | 对象 | |
| 对象 |
DELETE/v1/customers/:id/portal-access/:userId
撤销账户的门户访问权限。已签发的令牌在续期前仍然有效。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| revoked | 对象 |
POST/v1/customers/:id/portal-access/:userId/invite
重新发送客户门户邀请。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| 对象 |
文档
GET/v1/documents
读取文档,可按客户、项目或类型筛选。
访问 任何已登录账户;由其角色决定能看到什么
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| customer | UUID | |
| project | UUID | |
| type | "pdf" | "image" | "sheet" | "contract" | "other" | |
| q | 文本 | 至少 1 个字符 | 最多 120 个字符 |
| limit | 整数 | ≥ 1 | ≤ 200 | 默认值:50 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| documents | 对象 列表 |
PATCH/v1/documents/:id
更改文档的归属、类型、标签或门户可见性。
访问 任何已登录账户;由其角色决定能看到什么
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| name | 文本 | 至少 1 个字符 | 最多 200 个字符 |
| type | "pdf" | "image" | "sheet" | "contract" | "other" | |
| projectId | UUID 或 null | |
| sharedWithPortal | true | false | |
| tags | 文本 列表 |
GET/v1/documents/:id/url
下载文档的短期 URL。
访问 任何已登录账户;由其角色决定能看到什么
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| url | URL | |
| expiresInSeconds | 整数 | > 0 |
财务
GET/v1/finance/export
为税务顾问提供的年度导出:ZIP,每张表一个 CSV,外加已保存的凭证。
访问 所有者
GET/v1/invoices
读取发票,可按状态、客户或“逾期”筛选。代理只能看到其项目的草稿。
访问 所有者或具有权限范围 invoices:write 的代理密钥
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| status | "draft" | "open" | "overdue" | "paid" | "cancelled" | |
| customer | UUID | |
| overdue | "true" | "false" | |
| limit | 整数 | ≥ 1 | ≤ 200 | 默认值:50 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| invoices | 对象 列表 |
POST/v1/invoices
创建发票草稿——尚无发票编号。没有 customerId 时使用项目的客户;代理只能在其项目之一中创建草稿。定稿、发送和付款仍由所有者负责。
访问 所有者或具有权限范围 invoices:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| customerId | UUID | |
| projectId | UUID 或 null | |
| paymentTermsDays | 整数 | ≥ 1 | ≤ 90 |
| vatRate | 整数 | |
| vatScheme | "standard" | "reverse_charge" | |
| serviceFrom | 文本 | 固定格式 |
| serviceTo | 文本 | 固定格式 |
| serviceDateEqualsInvoiceDate | true | false | 默认值:false |
| positions | 对象 列表 | 默认值:[] |
GET/v1/invoices/:id
包含明细、合计和付款的发票。
访问 所有者或具有权限范围 invoices:write 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| invoice | 对象 | |
| positions | 对象 列表 |
POST/v1/invoices/:id/cancel
冲销已定稿的发票;会生成冲销凭证。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| reason * | 文本 | 至少 3 个字符 | 最多 500 个字符 |
| serviceRendered * | true | false |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| invoice | 对象 | |
| releasedEntries | 整数 | ≥ 0 |
| entries | "released" | "failed" | |
| correction | "stored" | "skipped" | "failed" | |
| taxOfficeConsent | true | false |
GET/v1/invoices/:id/cancellation/pdf
PDF 格式的冲销凭证。
访问 所有者
POST/v1/invoices/:id/cancellation/send
通过电子邮件发送冲销凭证。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| "sent" | "skipped" | ||
| reason | 文本 | 可缺省 |
| invoice | 对象 |
POST/v1/invoices/:id/dunning/send
发送到期的催款级别。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| "sent" | "skipped" | ||
| reason | 文本 | 可缺省 |
| invoice | 对象 | |
| level | 整数 或 null | ≥ 1 | ≤ 4 |
POST/v1/invoices/:id/finalize
将草稿定稿:分配连续编号、锁定发票并保存 PDF。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| settle | 对象 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| invoice | 对象 | |
| "stored" | "skipped" | "failed" | ||
| payment | "none" | "booked" | "failed" | |
| paymentError | 文本 | 可缺省 |
POST/v1/invoices/:id/payments
记录付款或退款。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| amountCents * | 整数 | |
| paidOn | 文本 | 固定格式 |
| method | "transfer" | "stripe" | "cash" | "other" | 默认值:"transfer" |
| note | 文本 | 最多 500 个字符 |
GET/v1/invoices/:id/pdf
PDF 格式的发票——定稿时保存的凭证。
访问 所有者
POST/v1/invoices/:id/positions
向草稿添加明细。
访问 所有者或具有权限范围 invoices:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| description * | 文本 | 至少 1 个字符 |
| quantity * | 数字 | > 0 |
| unit | "hour" | "flat" | 默认值:"hour" |
| unitPriceCents * | 整数 | ≥ 0 |
| sort | 整数 |
DELETE/v1/invoices/:id/positions/:positionId
从草稿中移除明细。
访问 所有者或具有权限范围 invoices:write 的代理密钥
PATCH/v1/invoices/:id/positions/:positionId
更改草稿的明细——仅更改所发送的字段。已定稿的发票返回 409。
访问 所有者或具有权限范围 invoices:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| description | 文本 | 至少 1 个字符 |
| quantity | 数字 | > 0 |
| unit | "hour" | "flat" | 默认值:"hour" |
| unitPriceCents | 整数 | ≥ 0 |
| sort | 整数 |
POST/v1/invoices/:id/remind
发送付款提醒。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| "sent" | "skipped" | ||
| reason | 文本 | 可缺省 |
| invoice | 对象 |
POST/v1/invoices/:id/send
通过电子邮件发送已定稿的发票。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| "sent" | "skipped" | ||
| reason | 文本 | 可缺省 |
| invoice | 对象 |
GET/v1/invoices/:id/stripe-refund
Stripe 付款是否可以退款以及可退多少。
访问 所有者
POST/v1/invoices/:id/stripe-refund
通过 Stripe 退还经 Stripe 支付的发票;通过 webhook 入账。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| amountCents | 整数 | > 0 |
GET/v1/invoices/:id/test-pay-link
Stripe 测试模式下的付款链接,用于试用。
访问 所有者
POST/v1/invoices/from-unbilled
将项目未开票的可计费工时转为发票草稿——每条工时记录一条明细。
访问 所有者或具有权限范围 invoices:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| projectId * | UUID | |
| untilDate | 文本 | |
| paymentTermsDays | 整数 | ≥ 1 | ≤ 90 |
| vatRate | 整数 | |
| vatScheme | "standard" | "reverse_charge" |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| invoice | 对象 | |
| entries | 整数 | ≥ 0 |
| hours | 数字 | ≥ 0 |
GET/v1/quotes
读取报价单。代理只能看到其项目的草稿。
访问 所有者或具有权限范围 quotes:write 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| quotes | 对象 列表 |
POST/v1/quotes
创建报价单草稿——尚无编号。没有 customerId 时使用项目的客户;代理只能在其项目之一中创建草稿,且不能为潜在客户创建。
访问 所有者或具有权限范围 quotes:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| title * | 文本 | 至少 3 个字符 |
| customerId | UUID 或 null | |
| prospectName | 文本 | |
| prospectEmail | 电子邮件 | |
| projectId | UUID 或 null | |
| validUntil | 文本 | |
| vatRate | 整数 | |
| vatScheme | "standard" | "reverse_charge" | |
| positions | 对象 列表 | 默认值:[] |
DELETE/v1/quotes/:id
删除报价单草稿——它还没有编号。
访问 所有者或具有权限范围 quotes:write 的代理密钥
GET/v1/quotes/:id
包含明细的报价单。
访问 所有者或具有权限范围 quotes:write 的代理密钥
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| quote | 对象 | |
| positions | 对象 列表 |
PATCH/v1/quotes/:id
更改草稿的标题和有效期。已发送的报价单返回 409。
访问 所有者或具有权限范围 quotes:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| title | 文本 | 至少 3 个字符 |
| validUntil | 文本 或 null | 固定格式 |
GET/v1/quotes/:id/pdf
PDF 格式的报价单。
访问 所有者
POST/v1/quotes/:id/positions
向报价单草稿添加明细。
访问 所有者或具有权限范围 quotes:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| description * | 文本 | 至少 1 个字符 |
| quantity * | 数字 | > 0 |
| unit | "hour" | "flat" | 默认值:"hour" |
| unitPriceCents * | 整数 | ≥ 0 |
| sort | 整数 |
DELETE/v1/quotes/:id/positions/:positionId
从报价单草稿中移除明细。
访问 所有者或具有权限范围 quotes:write 的代理密钥
PATCH/v1/quotes/:id/positions/:positionId
更改报价单草稿的明细——仅更改所发送的字段。
访问 所有者或具有权限范围 quotes:write 的代理密钥
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| description | 文本 | 至少 1 个字符 |
| quantity | 数字 | > 0 |
| unit | "hour" | "flat" | 默认值:"hour" |
| unitPriceCents | 整数 | ≥ 0 |
| sort | 整数 |
POST/v1/quotes/:id/send
通过电子邮件发送报价单。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| "sent" | "skipped" | ||
| reason | 文本 | 可缺省 |
| quote | 对象 |
连接
GET/v1/integrations
工作区已连接的来源,不含机密。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| integrations | 对象 列表 | |
| plattform | true | false | |
| githubInstallierbar | true | false |
POST/v1/integrations
连接来源。访问凭据在保存前会先经服务商检查。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| provider * | "vercel" | "render" | "netlify" | "cloudflare_pages" | "aws_amplify" | "railway" | "flyio" | "digitalocean_app_platform" | "postmark" | "mailgun" | "amazon_ses" | "resend" | "sentry" | "bugsnag" | "rollbar" | "stripe" | |
| fields * | 对象(自由格式) |
DELETE/v1/integrations/:id
移除连接。
访问 所有者
PATCH/v1/integrations/:id
编辑连接;留空的机密保持不变。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| fields * | 对象(自由格式) |
GET/v1/integrations/:id/webhook
连接(Stripe、Sentry、Bugsnag、Rollbar)的 webhook URL,需在服务商处填写。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| url | URL | |
| signiert | true | false | |
| bereit | true | false |
GET/v1/integrations/:provider/error-projects
该访问在错误追踪器中能看到的项目。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| resources | 对象 列表 |
GET/v1/integrations/:provider/resources
托管访问在服务商处能看到的网站、应用或服务。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| resources | 对象 列表 |
GET/v1/integrations/github/callback
安装后从 GitHub 返回的路径;将安装绑定到工作区。
访问 已签名的 state 和 GitHub 登录
查询参数
| 字段 | 类型 | 说明 |
|---|---|---|
| installation_id | 文本 | 固定格式 |
| setup_action | 文本 | 最多 20 个字符 |
| code | 文本 | 最多 200 个字符 |
| state | 文本 | 最多 2000 个字符 |
POST/v1/integrations/github/install-url
在 GitHub 上安装 VentionDesk 应用的 URL。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| url | URL |
账户、设置和管理
GET/v1/admin/api-keys
工作区的 API 密钥,不含明文。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| keys | 对象 列表 |
POST/v1/admin/api-keys
创建代理密钥或入口密钥。明文只在这一次响应中出现。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| name * | 文本 | 至少 3 个字符 |
| kind | "agent" | "intake" | 默认值:"agent" |
| scopes * | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| projectIds * | UUID 列表 或 null | |
| expiresAt | 时间戳(ISO 8601) |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| key | 对象 | |
| plaintext | 文本 |
DELETE/v1/admin/api-keys/:id
撤销密钥——立即生效。
访问 所有者
PATCH/v1/admin/api-keys/:id
更改密钥的权限和项目——密钥本身保持不变。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| scopes * | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| projectIds * | UUID 列表 或 null |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| key | 对象 |
DELETE/v1/admin/api-keys/:id/endgueltig
永久删除已撤销的密钥。
访问 所有者
GET/v1/admin/members
工作区成员及其角色。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| members | 对象 列表 |
PATCH/v1/admin/members/:id
更改成员的角色。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| role * | "owner" | "staff" |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| member | 对象 | |
| activeHere | true | false |
DELETE/v1/admin/users/:id
删除门户账户;历史中的姓名和地址会先被假名化。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| removed | 对象 | |
| account | "kept" | "deleted" | "locked" |
POST/v1/admin/users/invite
通过电子邮件邀请员工。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| email * | 电子邮件 | |
| role * | "owner" | "staff" | |
| displayName | 文本 | 至少 1 个字符 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| user | 对象 | |
| existingAccount | true | false | 可缺省 | 默认值:false |
GET/v1/ki-apps
已连接的 AI 应用:自己在所有工作区中的连接,所有者还可看到整个工作区的连接。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| apps | 对象 列表 | |
| alleImBetrieb | true | false |
POST/v1/ki-apps
保存对 AI 应用的同意(工作区、权限、项目)——在登录授权之前。应用名称由 Supabase Auth 提供,而不是调用方。
访问 所有者和员工
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| authorizationId * | 文本 | 至少 1 个字符 | 最多 200 个字符 |
| orgId * | UUID | |
| scopes * | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| projectIds * | UUID 列表 或 null |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| app | 对象 |
DELETE/v1/ki-apps/:id
断开 AI 应用——立即生效;对于自己的连接,登录授权也会一并撤回。
访问 所有者和员工
GET/v1/ki-apps/rahmen
同意页面提供的内容:此人的工作区、允许的权限和项目。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| betriebe | 对象 列表 | |
| betrieb | UUID | |
| rolle | "owner" | "staff" | |
| erlaubt | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| projekte | 对象 列表 |
GET/v1/ki-apps/vorgabe
员工可以授予 AI 应用哪些权限。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| scopes | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| abWerk | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| waehlbar | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 |
PUT/v1/ki-apps/vorgabe
更改此默认设置。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| scopes * | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| scopes | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| abWerk | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 | |
| waehlbar | "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write" 列表 |
GET/v1/me
自己的账户:角色、工作区、可选工作区和服务地址。
访问 任何已登录账户;由其角色决定能看到什么
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | |
| role | "owner" | "staff" | "customer" | "agent" | |
| customerId | UUID 或 null | |
| displayName | 文本 | 至少 1 个字符 |
| 电子邮件 | ||
| mfaRequired | true | false | |
| intake | 对象 | |
| organization | 对象 或 null | 可缺省 | 默认值:null |
| memberships | 对象 列表 | 可缺省 | 默认值:[] |
| support | 对象 或 null | 可缺省 |
| locale | "de" | "en" | "zh" | "es" | "hi" | "tr" 或 null | 可缺省 |
PATCH/v1/me/locale
在账户中保存自己的界面语言。
访问 任何已登录账户;由其角色决定能看到什么
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| locale * | "de" | "en" | "zh" | "es" | "hi" | "tr" |
POST/v1/me/organization
如果账户属于多个工作区,切换当前工作区。
访问 任何已登录账户;由其角色决定能看到什么
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| orgId * | UUID |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| organization | 对象 | |
| role | "owner" | "staff" |
GET/v1/settings
工作区设置,包括凭证信头。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| company | 对象 |
PATCH/v1/settings
更改设置和信头。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| company * | 对象 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| company | 对象 |
GET/v1/settings/agreements
对条款和数据处理协议的同意状态。
访问 所有者
POST/v1/settings/agreements
接受或拒绝条款或数据处理协议的新版本。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| document * | "agb" | "avv" | |
| version * | 文本 | 至少 1 个字符 | 最多 40 个字符 |
| decision * | "accepted" | "declined" |
GET/v1/settings/benachrichtigungen
新工单邮件:开或关、收件人、渠道和最低优先级。
访问 所有者
PATCH/v1/settings/benachrichtigungen
配置新工单邮件(仅限所有者)。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| aktiv * | true | false | |
| wiederoeffnen | true | false | |
| empfaenger * | 电子邮件 列表 或 null | |
| kanaele * | "contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api" 列表 或 null | |
| mindestPrioritaet * | "low" | "normal" | "high" | "critical" |
GET/v1/settings/mail
发给客户的邮件发件人以及自定义发件域名的状态。
访问 所有者
PATCH/v1/settings/mail
更改发件人名称和发件地址。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| absenderName | 文本 或 null | 最多 60 个字符 |
| postfachname | 文本 | 最多 40 个字符 |
GET/v1/settings/mail-templates
工作区的邮件模板,包括默认文本。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| vorlagen | 对象 列表 |
DELETE/v1/settings/mail-templates/:kind
将邮件模板重置为默认文本。
访问 所有者
PUT/v1/settings/mail-templates/:kind
保存邮件模板。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| subject * | 文本 | 至少 1 个字符 | 最多 200 个字符 |
| html * | 文本 | 至少 1 个字符 | 最多 102400 个字符 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| kind | "invoice_send" | "invoice_reminder" | "dunning" | "invoice_cancellation" | "quote_send" | "ticket_reply" | "ticket_receipt" | "ticket_internal" | "ticket_reopened" | "member_invite" | "portal_invite" | "deletion_reminder" | |
| angepasst | true | false | |
| subject | 文本 或 null | |
| html | 文本 或 null | |
| aktualisiertAm | 文本 或 null | |
| bereinigt | true | false |
DELETE/v1/settings/mail/domain
移除自定义发件域名。
访问 所有者
POST/v1/settings/mail/domain
创建自定义发件域名;响应会列出 DNS 记录。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| adresse * | 文本 | 至少 3 个字符 | 最多 254 个字符 |
POST/v1/settings/mail/domain/verify
检查发件域名的 DNS 记录。
访问 所有者
VentionDesk 订阅
GET/v1/abo
工作区 VentionDesk 订阅的状态:套餐、试用、停用。
访问 所有者和员工
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| betrieb | 文本 | |
| tarif | "solo" | "team" | "enterprise" | |
| abrechnung | "jaehrlich" | "monatlich" | |
| status | "trial" | "active" | "past_due" | "canceled" | |
| testphaseBis | 文本 或 null | |
| laufzeitBis | 文本 或 null | |
| kuendigtZum | 文本 或 null | 可缺省 | 默认值:null |
| loeschungAm | 文本 或 null | 可缺省 | 默认值:null |
| gesperrt | true | false | 可缺省 | 默认值:false |
| sperrGrund | "beendet" | "testphase" | "zahlungsverzug" | "anbieter" 或 null | 可缺省 | 默认值:null |
| sperreAb | 文本 或 null | 可缺省 | 默认值:null |
| plaetze | 整数 或 null | |
| mitglieder | 整数 | |
| stripeKunde | true | false | |
| stripeAbo | true | false | 可缺省 | 默认值:false |
| befreit | true | false | |
| stripeBereit | true | false |
POST/v1/abo/cancel
在期限结束时取消 VentionDesk 订阅。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| nonce * | 文本 | 固定格式 |
| grund | "too_expensive" | "missing_features" | "switched_service" | "unused" | "too_complex" | "low_quality" | "customer_service" | "other" | |
| kommentar | 文本 | 最多 500 个字符 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| angenommen | true | |
| ausstehend | true | false | 可缺省 |
| hinweis | 文本 | 可缺省 |
POST/v1/abo/change
更改 VentionDesk 订阅的套餐或计费周期。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| tarif * | "solo" | "team" | "enterprise" | |
| abrechnung * | "jaehrlich" | "monatlich" | |
| plaetze * | 整数 | ≥ 1 | ≤ 10000 |
| nonce * | 文本 | 固定格式 |
POST/v1/abo/checkout
订阅 VentionDesk(重定向到 Stripe Checkout)。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| tarif * | "solo" | "team" | "enterprise" | |
| abrechnung * | "jaehrlich" | "monatlich" |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| url | URL |
GET/v1/abo/export
整个工作区的数据导出,格式为 ZIP(结构见“数据导出”)。
访问 所有者
POST/v1/abo/preview
套餐变更预览,含按比例计算的金额。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| tarif * | "solo" | "team" | "enterprise" | |
| abrechnung * | "jaehrlich" | "monatlich" | |
| plaetze * | 整数 | ≥ 1 | ≤ 10000 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| waehrung | 文本 | |
| anteiligCent | 整数 | |
| rechnungCent | 整数 | |
| steuerCent | 整数 | |
| sofortCent | 整数 | |
| faelligAm | 文本 或 null | |
| imTest | true | false |
GET/v1/abo/rechnungen
VentionDesk 开给工作区的发票。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| rechnungen | 对象 列表 |
POST/v1/abo/resume
在期限内撤回取消。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| nonce * | 文本 | 固定格式 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| angenommen | true | |
| ausstehend | true | false | 可缺省 |
| hinweis | 文本 | 可缺省 |
GET/v1/abo/verlauf
订阅历史:订阅、变更、取消。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| eintraege | 对象 列表 |
POST/v1/abo/zahlungsdaten
在 Stripe 更改付款信息(重定向到 Stripe)。
访问 所有者
请求体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| nonce * | 文本 | 固定格式 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| url | URL |
GET/v1/abo/zahlungsmittel
为订阅保存的付款方式。
访问 所有者
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| zahlungsmittel | 对象 或 null |
公开入口
POST/f/:publicKey
第三方网站上的 HTML 表单:创建工单(application/x-www-form-urlencoded)。
访问 URL 中的公开项目密钥(vd_pub_…)
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| ok | true | |
| ticket | 对象 |
POST/v1/contact
VentionDesk 网站的联系表单(/kontakt,从法律声明中链接)。
访问 公开
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| ok | true |
POST/v1/intake/reports
来自客户应用浏览器的报告,可附截图——使用公开项目密钥。
访问 请求头 x-ventiondesk-key 中的公开项目密钥,允许的来源
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| ok | true | |
| ticket | 对象 |
POST/v1/intake/tickets
以服务器到服务器的方式提交工单,可附截图——使用入口密钥。
访问 以 Bearer 形式提供的入口密钥(vd_intake_…)
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| ok | true | |
| ticket | 对象 |
POST/v1/signup
注册新工作区,包括所有者账户。
访问 公开
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| ok | true | |
| 电子邮件 | ||
| testphaseBis | 文本 | |
| checkoutUrl | URL 或 null | 可缺省 | 默认值:null |
MCP
GET/.well-known/oauth-protected-resource
受保护资源元数据(RFC 9728):用于 AI 应用登录的 MCP 地址和授权服务器(Supabase Auth)。
访问 公开
GET/.well-known/oauth-protected-resource/mcp
资源路径下的相同元数据——供会插入该路径的客户端使用。
访问 公开
ALL/mcp
除 POST 外的任何方法都会返回 405 和 Allow: POST。
访问 公开
POST/mcp
基于 HTTP 的 MCP 服务器(无状态):供 Claude 使用的工具,使用代理密钥或已连接 AI 应用的令牌。未有效登录时返回 401,带有 WWW-Authenticate 和指向元数据的路径。
访问 以 Bearer 形式提供的代理密钥(vd_live_…)或已连接 AI 应用的令牌
Webhooks
POST/webhooks/errors/:provider/:integrationId
错误追踪器的 webhook,签名位于请求头中(Sentry)。
访问 服务商签名
POST/webhooks/errors/:provider/:integrationId/:token
错误追踪器的 webhook,机密位于 URL 中(Bugsnag、Rollbar)。
访问 URL 中的机密
POST/webhooks/stripe/:orgId
工作区自有 Stripe 账户的 Stripe webhook:为发票记录付款和退款。
访问 签名 Stripe-Signature
运维与付款链接
GET/api/health
服务的存活信号——只要进程在运行就会响应。
访问 公开
GET/api/health/ready
就绪状态:报告已配置哪些服务;没有数据库时为“degraded”。
访问 公开
GET/pay/:token
发票的付款链接:重定向(303)到 Stripe 付款页面。该链接位于发票邮件和 PDF 中。
访问 URL 中的令牌
GET/pay/:token/abgebrochen
在 Stripe 取消付款后的返回页面。
访问 URL 中的令牌
GET/pay/:token/danke
在 Stripe 付款成功后的返回页面。
访问 URL 中的令牌