https://meoo.com/open/v1
支持范围
当前 OpenAPI 发布能力支持type=web 项目的默认 Web 发布。采用 Mise 协议的源码项目可通过 mise.toml 选择静态站点(mode=static)或 HTTP 服务(mode=server)。无需 AI 时的项目要求和最小示例见项目导入与发布。创建接口虽然也接受 app 和 miniprogram,但这只表示可以创建和继续操作对应类型的项目,不表示 OpenAPI 已提供其原生发布渠道。
app:本接口不会生成或返回 APK、IPA 等安装包。miniprogram:本接口不会提交到微信、抖音等小程序平台。- 请求体不能选择发布渠道;发布项目时可省略请求体、传 {},或通过可选 expires_at 设置发布访问过期时间(Unix 毫秒时间戳)。省略 expires_at 或传 null 表示永久有效。
app、miniprogram 项目调用本接口。查询当前版本和发布记录的公开契约也以默认 Web 发布记录为准。
发布安全审核
平台会在发布流程中进行内容安全审核。接入方无需单独发起审核,按接口返回结果处理即可。
静态直传审核失败不会替换当前线上版本。排查问题时请提供错误码、错误说明和
trace_id。
直接上传静态产物
已经在接入方完成构建时,使用两个 API 和一次 PUT 上传,跳过 Meoo 沙箱和构建过程:POST /projects/{project_id}/releases/prepare,提交runtime=static和静态 zip 元数据,入口文件需要为 index.html, 获取临时 PUT 地址与release_token;- 按响应中的 method、URL、headers 将 zip 直接 PUT 到对象存储;
POST /projects/{project_id}/releases/complete,只提交release_token,等待自动解压并审核,通过后创建并激活正式 Release。
release.write
artifact.content_length 必传,MD5 checksum 可选。当前仅支持 artifact.type=static_site、content_type=application/zip,zip 根目录必须包含 index.html。complete 可使用相同 Token 重试,不接受客户端指定版本号、内部项目 ID 或 OSS 路径。
上传必须携带响应 upload.headers 中的全部 Header,包括签名绑定的 x-oss-forbid-overwrite: true。首次 PUT 成功后同一对象不能再次上传;省略或修改该 Header 会导致签名校验失败。若 PUT 结果不确定,应调用 complete 确认;修改产物必须重新 prepare,获取新对象地址。升级前未带禁止覆盖约束的票据在 complete 返回 409 release_state_expired,需要重新 prepare/upload;已经成功的旧发布仍可重放。
complete 返回普通 JSON,不是 SSE;接口内部等待入口文件就绪并执行审核,接入方无需另调审核查询接口。请求超时或返回可重试错误时,用原 release_token 重试。普通源码发布仍通过 SSE 等待 release.completed。
静态发布的访问有效期
POST /projects/{project_id}/releases/prepare 可在请求体顶层传 expires_at:整数或 null,Unix 毫秒时间戳,合法整数范围为 1~253402271999999。省略或传 null 表示永久有效。请设置未来时间,并为上传、解压和审核预留时间;到期后发布访问地址返回 404。
prepare 请求示例(content_length 请替换为实际 ZIP 字节数;expires_at 为示例时间,请替换为实际未来时间):
upload.expires_at 是上传链接的到期时间,与网站的访问到期时间不同;设置网站有效期不会延长上传链接或 release_token 的有效期。
POST /projects/{project_id}/releases/complete 仍只接受 release_token,不能在 complete 中新增或修改 expires_at。服务端沿用 prepare 中的值;成功响应返回 expires_at(Unix 毫秒时间戳或 null),重试不会延长有效期。
complete 成功响应示例:
静态产物的文件要求
发布项目
release.write
发布过程通过 Server-Sent Events(SSE)持续返回进度。客户端断开不会取消后台发布。
请求头
同一凭证、用户、项目和
Idempotency-Key 在 24 小时内只会启动一次发布。网络中断后使用同一个 Key 重连,会重新返回已保存的发布事件。
请求体
请求体可以省略、传空对象{},或仅包含可选字段 expires_at,不接受其他字段。
请设置未来时间并为构建、审核和部署预留时间;到期后发布访问地址返回 404。下面示例中的时间戳需替换为实际未来时间;永久发布使用 {} 或 {“expires_at”:null}。
重试同一次发布时,保留原 Idempotency-Key 和相同 expires_at,不要每次重试重新计算到期时间。同一 Key 修改 expires_at 会产生幂等冲突;需要使用不同有效期重新发布时,应使用新的 Key。省略 expires_at 与传 null 都表示永久有效。
请求示例
事件列表
事件中的时间字段均为 Unix 毫秒时间戳。每个事件还包含递增的 SSE
id。 release.failed.message 会返回可安全展示给用户的失败原因,例如构建产物异常、代码构建失败或额度不足。可由代码修复的失败会在同一字段中附带经过脱敏的构建错误,供 AI 定位文件、行列和编译问题;字段最长 4000 字符,不会透传凭证、内部地址或原始上游响应。
事件流示例
release.completed 或 release.failed 后,本次发布结束。SSE 注释帧是保持连接使用的心跳,可以忽略。
release.completed.expires_at 为本次发布的访问过期时间,类型为 integer | null;整数使用 Unix 毫秒时间戳,null 表示永久有效。接入方应连同 release_id、access_url 一起保存该字段;事件重放不会延长发布有效期。
发布失败示例
如果连接在发布过程中断,先用原
Idempotency-Key 重连。只有服务端明确返回 release_interrupted 或恢复状态已过期时,才生成新的 Key 发起新发布。
取消当前发布
release.write。调用身份必须拥有项目 Owner 或 Admin 权限。
该接口复用应用取消发布流程:取消当前 active Release,并同步移除关联橱窗展示和模板公开指针;历史发布记录仍然保留。请求体可以省略或传空对象 {},不接受 expires_at。此接口用于主动取消当前发布,不用于设置、延长或清除发布有效期。
404 release_not_found;项目仍在发布过程中时返回 409 release_conflict。
查询当前线上版本
release.read
返回项目当前对外提供服务的版本。当前此接口不返回 expires_at;接入方需要展示或管理发布有效期时,请保存发起发布时的 expires_at,以及 complete 成功响应或 release.completed 事件返回的值。
请求示例
响应字段
响应示例
404,错误码为 release_not_found。
查询发布记录
release.read
按版本从新到旧分页返回项目的发布记录。
Query 参数
参数说明page_size(integer,可选):每页数量,默认 20,最大 100page_token(string,可选):上一页响应中的分页令牌
请求示例
响应字段
|
items[ ].release_id | string | 发布记录标识 |
| items[ ].version | integer | 版本号 |
| items[ ].status | string | 发布状态 |
| items[ ].created_at | integer | 发布记录创建时间 |
| items[ ].finished_at | integer | 发布结束或最近更新时间 |
| items[ ].current | boolean | 是否为当前线上版本 |
| next_page_token | string | 下一页令牌;没有下一页时不返回 |
列表只返回已经持久化的发布记录。当前默认发布流程在成功后写入记录,发布中的实时进度和失败结果以同一 Idempotency-Key 对应的 SSE 事件流为准,不应轮询本接口代替 SSE。状态枚举为 processing、succeeded、failed、canceled、active 或 unknown,用于兼容其他发布渠道和后续扩展;客户端应能展示未知状态,而不是将其视为接口错误。
当前历史列表不返回 items[].expires_at,也不提供单独修改发布有效期的接口。接入方应按 release_id 保存发布成功响应或 release.completed 事件中的 expires_at;需要不同有效期时重新发起发布。
响应示例
常见错误
发布接口会使用项目当前的生成结果。调用前请确保 AI 生成任务已经完成,并由你的产品向用户明确展示即将发布的项目。
从已有源码开始
使用源码导入 API创建新 Web 项目,等待import.completed;如果开启 AI,再通过原有 Agent 接口等待 Run 完成,最后调用普通发布接口。导入不会自动发布,也不支持覆盖导入。导入完成前请勿编辑、启动 Agent、发布或删除该项目。发布的是当前源码,接入方无需传 commitId 或手动推送 NAS。
