REST API 参考
Page Lemon REST API 位于 https://api.pagelemon.com/v1。有命令行的代码智能体用它一条命令就能发布整个文件夹;AI 智能体请先看 AI 发布指南(Markdown)。
最后更新于 · 查看 Markdown 版
快速开始
不用账号也能发布文件夹(除非你保留它,否则会在线 72 小时):
tar -czf - -C dist . | curl -sS --data-binary @- https://api.pagelemon.com/v1/deploy使用 API 令牌,网站会直接进入你的账号:
tar -czf - -C dist . | curl -sS -H "Authorization: Bearer $PAGELEMON_TOKEN" --data-binary @- https://api.pagelemon.com/v1/deploy主机
| 主机 | 提供内容 |
|---|---|
https://pagelemon.com | 本网站、/agents、/llms.txt、/docs/* |
https://api.pagelemon.com | /v1 下的 REST API |
https://mcp.pagelemon.com | 远程 MCP 服务器(streamable HTTP),位于 /(别名 /mcp) |
https://app.pagelemon.com | 你的账号:网站、人员、令牌、账单 |
https://<name>.pagelemon.dev | 你的网站 |
认证
以 Authorization: Bearer <token> 形式发送凭据。
| 凭据 | 格式 | 来源 | 能做什么 |
|---|---|---|---|
| 网站令牌 | st_… | 匿名部署时返回一次 | 在被认领前,可更新、读取、回滚和查看该网站。认领后,只能报告认领状态(GET /v1/sites/:name) |
| 认领链接 | https://app.pagelemon.com/claim/ct_… | 匿名部署时返回一次 | 由已登录的人认领网站 |
| API 令牌 | pl_… | app.pagelemon.com/account/tokens(账号设置 → API 令牌;见 API 令牌) | 你在账号中能做的一切,通过 REST 和 MCP 实现 |
| OAuth 访问令牌 | pla_… | 在你登录并批准后,发放给 MCP 应用(Claude.ai、ChatGPT、Claude Code…) | 与 API 令牌相同,但仅限 MCP(REST 返回 401)。有效期 1 小时,会自动续期 |
我们只存储令牌的哈希值,所以丢失的令牌无法再次显示。请新建一个。
错误
{ "error": { "code": "conflict", "message": "…" }, "agent_message": "…" }当 AI 需要告诉用户某些事情时,就会出现 agent_message。请用用户的语言转达,其中的每个链接、代码、数字、日期和域名都要原样保留;时间均为 UTC,*_at 字段里的时间采用 ISO 格式。
| 代码 | 状态 | 含义 |
|---|---|---|
bad_request | 400 | 压缩包、请求体或参数有误 |
unauthorized | 401 | 令牌缺失或无效 |
forbidden | 403 | 该令牌或角色无权执行此操作 |
not_found | 404 | 没有该网站或文件 |
conflict | 409 | X-Base-Revision / base_revision 已过时 |
gone | 410 | 网站已过期 |
too_large | 413 | 超出大小限制 |
blocked_secret | 422 | 泄露防护发现了密钥 |
limit | 429 | 套餐或速率限制 |
部署
POST /v1/deploy:一个压缩包
请求体就是压缩包:.tar.gz、.tgz、.tar 或 .zip。服务器会根据字节内容识别格式,所以 Content-Type 是可选的。
tar -czf - -C <dir> . | curl -sS --data-binary @- https://api.pagelemon.com/v1/deploy| 请求 | 结果 |
|---|---|
无 ?site,无令牌 | 匿名创建。随机名称,例如 brave-otter-4821,未认领则 72 小时后过期 |
无 ?site,使用 API 令牌 | 在你的账号中创建。不会过期 |
?site=<name> + X-Base-Revision: <revision id> + 网站令牌或 API 令牌 | 更新。如果线上版本不是 X-Base-Revision,你会收到 409 conflict,且不会发布任何内容 |
每次部署都会替换整个网站:你没有包含的文件会从线上网站中移除。如果所有文件都在同一个顶层文件夹下(dist/index.html,…),该文件夹会被去掉。
响应 201:
{
"site": { "name": "brave-otter-4821", "url": "https://brave-otter-4821.pagelemon.dev", "claimed": false, "expires_at": "2026-10-14T14:40:00Z" },
"revision": { "id": "rev_…", "number": 1, "files": 12, "bytes": 48213 },
"site_token": "st_…",
"claim_url": "https://app.pagelemon.com/claim/ct_…",
"skipped": [".env", "node_modules/…"],
"agent_message": "Your site is live at …"
}site_token 和 claim_url 仅在匿名创建时出现。
POST /v1/deploy 搭配 JSON:内联文件
适用于 MCP 客户端和小型网站:向同一端点发送 Content-Type: application/json。
{ "site": "brave-otter-4821", "base_revision": "rev_…", "files": [ { "path": "index.html", "content": "<h1>Hi</h1>", "encoding": "utf8" } ] }encoding 为 utf8 或 base64。省略 site 和 base_revision 即可创建新网站。响应与上文相同。
补丁:添加 "patch": true,只需在 base_revision 的基础上发送有改动的 files 以及 "deleted": ["old.html"];其余内容保持不变。限制和检查相同;base_revision 过时会返回 409 conflict。
上传规则
| 文件 | 单个文件 | 单个网站 | 过期 | |
|---|---|---|---|---|
| 无账号 | 100 | 1 MB | 1 MB | 未认领则 72 小时 |
| 免费 | 500 | 5 MB | 5 MB | 无 |
| Prompter | 1,000 | 50 MB | 5 GB(其全部存储空间) | 无 |
| Builder | 2,000 | 50 MB | 25 GB(其全部存储空间) | 无 |
| Team | 3,000 | 50 MB | 50 GB(其全部存储空间) | 无 |
| Company | 5,000 | 50 MB | 150 GB(其全部存储空间) | 无 |
“每个网站”指部署后整个上线的网站;补丁部署按最终得到的整个网站计算。付费套餐下,一个网站可以用满套餐的全部存储空间,但每次请求最多 90 MB(通过 MCP 为 40 MB):更大的网站请先做一次首次部署,其余部分再用补丁部署发送。超出限额时:返回 413 too_large,并附带 agent_message 说明。
- 拒绝:符号链接、硬链接、设备文件、绝对路径、
..,以及仅大小写不同的重复路径。 - 跳过并列在
skipped中:.git/、node_modules/、.env*、*.map、*.pem、*.key;除.well-known/外的点文件;.DS_Store、Thumbs.db。 - 泄露防护:文本文件会被扫描,检查常见类型的密钥和私钥。一旦命中,会返回
422 blocked_secret及{file, line, kind}。密钥本身绝不会被返回。 - 必需:根目录下的
index.html。 - 仅限匿名:可执行文件和安装包会被拦截,每个网络只能创建少量匿名网站和部署。认领或登录后可获得更多。
网站
| 方法 | 路径 | 认证 | 备注 |
|---|---|---|---|
| GET | /v1/sites | API 令牌 | 你作为成员的网站 |
| GET | /v1/sites/:name | 网站令牌、成员 | {name, url, claimed, expires_at, plan, role, live_revision: {id, number, created_at, created_by}, badge}。使用网站令牌时,在用户打开认领链接后轮询:{claimed: false, …} 或 {claimed: true, account_token?};这是网站被认领后网站令牌仍能调用的唯一接口 |
| GET | /v1/sites/:name/files | 网站令牌、成员 | {revision, files: [{path, size, sha256}]} 表示线上版本 |
| GET | /v1/sites/:name/files/<path> | 网站令牌、成员 | 原始文件内容(读取结果),附带 X-Revision 响应头 |
| GET | /v1/sites/:name/revisions | 网站令牌、成员 | 最新的在前。匿名:仅当前版本。Free:7 天。Prompter:90 天。Builder 和 Team:1 年。Company:2 年 |
| POST | /v1/sites/:name/rollback | 网站令牌、编辑者或所有者 | {revision} 会让该版本重新上线,并生成新的版本号 |
| POST | /v1/sites/:name/rename | 编辑者或所有者(仅限账号) | {name}:4–63 个字符,由 a-z、0-9 和 - 组成。不能看起来像随机名称(word-word-1234),不能是保留名称,也不能曾被使用过 |
| DELETE | /v1/sites/:name | 所有者 | 永久删除。使用 API 令牌时,它会返回 202 和 approve_url:这是一个页面,你在上面输入网站地址并点击“永久删除”。之后 GET /v1/approvals/<token> 会告诉你是否已删除 |
| GET | /v1/sites/:name/members | 成员 | {members: [{email, role}], invites: [{email, role}]} |
| POST | /v1/sites/:name/members | 所有者 | {email, role: "editor" or "viewer"} 会发送邀请邮件 |
| DELETE | /v1/sites/:name/members/:email | 所有者 | 分两步:第一次调用返回 {confirm_token};请在 5 分钟内带上 ?confirm=<token> 再调用一次 |
角色:查看者可以读取网站及其历史记录。编辑者还可以部署和回滚。所有者还可以邀请、重命名和删除。
账号
| 方法 | 路径 | 认证 | 备注 |
|---|---|---|---|
| GET | /v1/me | API 令牌 | {email, plan, sites_used, sites_limit} |
认领网站、接受邀请、令牌和账单均在 app.pagelemon.com 处理。
在 pagelemon.dev 上提供访问
/提供index.html。/about提供about.html或about/index.html。- 缺失的文件会返回网站自己的
404.html(如有),否则返回我们的。 - 单页应用回退:如果网站没有
404.html,且路径没有文件扩展名,则提供index.html。 - 响应头:
X-Content-Type-Options: nosniff、Referrer-Policy: strict-origin-when-cross-origin,HTML 使用Cache-Control: public, max-age=60,其他文件使用max-age=300。内容类型来自允许列表;未知类型以application/octet-stream提供。 - 匿名网站和 Free 网站会在
</body>前显示一个小小的 "在 Page Lemon 上线" 标识。它是纯 HTML 和 CSS,没有脚本,并带有举报该网站的链接。 - 已过期或已删除的网站返回
410。因滥用被下线的网站返回451。
.pagelemon.json
部署完成后,代理会在项目文件夹中写入此文件并将其添加到 .gitignore,这样下一次会话就能更新同一个网站:
{ "site": "brave-otter-4821", "url": "https://brave-otter-4821.pagelemon.dev", "revision": "rev_…", "site_token": "st_…" }