Page Lemon

REST API 参考

Page Lemon REST API 位于 https://api.pagelemon.com/v1。有命令行的代码智能体用它一条命令就能发布整个文件夹;AI 智能体请先看 AI 发布指南(Markdown)。

最后更新于 · 查看 Markdown 版

本页内容

快速开始

不用账号也能发布文件夹(除非你保留它,否则会在线 72 小时):

bash
tar -czf - -C dist . | curl -sS --data-binary @- https://api.pagelemon.com/v1/deploy

使用 API 令牌,网站会直接进入你的账号:

bash
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 小时,会自动续期

我们只存储令牌的哈希值,所以丢失的令牌无法再次显示。请新建一个。

错误

json
{ "error": { "code": "conflict", "message": "…" }, "agent_message": "…" }

当 AI 需要告诉用户某些事情时,就会出现 agent_message。请用用户的语言转达,其中的每个链接、代码、数字、日期和域名都要原样保留;时间均为 UTC,*_at 字段里的时间采用 ISO 格式。

代码状态含义
bad_request400压缩包、请求体或参数有误
unauthorized401令牌缺失或无效
forbidden403该令牌或角色无权执行此操作
not_found404没有该网站或文件
conflict409X-Base-Revision / base_revision 已过时
gone410网站已过期
too_large413超出大小限制
blocked_secret422泄露防护发现了密钥
limit429套餐或速率限制

部署

POST /v1/deploy:一个压缩包

请求体就是压缩包:.tar.gz、.tgz、.tar 或 .zip。服务器会根据字节内容识别格式,所以 Content-Type 是可选的。

bash
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:

json
{
  "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。

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。

上传规则

文件单个文件单个网站过期
无账号1001 MB1 MB未认领则 72 小时
免费5005 MB5 MB无
Prompter1,00050 MB5 GB(其全部存储空间)无
Builder2,00050 MB25 GB(其全部存储空间)无
Team3,00050 MB50 GB(其全部存储空间)无
Company5,00050 MB150 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/sitesAPI 令牌你作为成员的网站
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/meAPI 令牌{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,这样下一次会话就能更新同一个网站:

json
{ "site": "brave-otter-4821", "url": "https://brave-otter-4821.pagelemon.dev", "revision": "rev_…", "site_token": "st_…" }

有不清楚或过时的地方?告诉我们,我们会修正这个页面。