开发者
一份规范,管理你的小屋
OpenAPI 接口规范,以及所有客户端都应遵守的几项规则:幂等键、ETag、任务和问题详情。
机器可读的接口规范
GET /api/v1/openapi.json 返回一份 OpenAPI 3.1 文档,准确描述当前部署实现的内容:每个路径、模式、所需权限范围和响应,以及 webhook 事件。它由运行中的操作目录生成,MCP 工具也来自同一目录,因此 REST 与 MCP 始终保持一致。
curl -s "https://<your host>/api/v1/openapi.json"接口涵盖小屋与草稿、修订与发布、动态、模板目录、导入、域名组合与批量运行、域名与 DNS 计划、邮件转发、订阅与联系设置、社交来源、分析、推广、账单、团队成员和 webhook。GET /workspaces/{id}/capabilities 会告诉你,这些功能在你的工作区中哪些已经可用,哪些处于模拟状态,哪些正在等待凭据。
有意识地重试
- 每次修改操作都需要一个长度为 16 至 128 个字符的
Idempotency-Key请求头。以相同键和请求体重复发送请求,会返回原来的结果,并附带Idempotent-Replayed: true。相同键搭配不同请求体会返回409 idempotency_key_reused。 - 编辑小屋时,需要在
If-Match中提供上次读取获得的ETag。过期的值会返回412 revision_conflict,且不会作出任何更改。 - 发布需要你读取到的确切
revision_id和expected_digest,确保发布的正是你检查过的内容。
耗时操作以任务执行
发布、批量运行和其他较慢的操作会返回 202 和一个任务。轮询 GET /workspaces/{id}/jobs/{job_id} 的间隔不得短于 next_poll_after_seconds,也可以订阅 job.updated webhook。请求已接受并不代表工作已完成:报告成功之前,请读取任务的 state、各项计数和 error。
错误采用问题详情格式
错误使用 application/problem+json 格式,其中包含稳定的 code、本地化的 title、request_id 和 retryable。请根据 code 判断处理方式,不要根据标题文本判断。
{
"type": "https://<your host>/problems/insufficient_scope",
"title": "This token does not include the permission this action needs.",
"status": 403,
"code": "insufficient_scope",
"request_id": "01M5...",
"retryable": false,
"context": { "required_scope": "account:read" }
}列表与限制
- 列表端点接受
limit(最多 100)和上一页返回的cursor。 - 每个工作区令牌每分钟最多可执行 120 次读取和 30 次写入。超过限制会返回
429和一个Retry-After请求头。 - 保留响应中未知的字段:新增字段可能不会伴随版本号变更。