REST API 參考
Page Lemon REST API 位於 https://api.pagelemon.com/v1。有終端機的程式碼 agent 可以用一行指令發布整個資料夾;AI agent 請先看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 僅在匿名建立時出現。
使用 JSON 的 POST /v1/deploy:內嵌檔案
適用於 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,即可只傳送變更的 files 及 "deleted": ["old.html"],套用在 base_revision 之上;其餘內容保留不變。限制與檢查相同;過期的 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(使用全部儲存空間) | 無 |
「每個網站」指部署後整個上線的網站;patch 計算的是合併後的整個網站。付費方案中,一個網站可以使用方案的全部儲存空間,但單次請求最多 90 MB(透過 MCP 為 40 MB):較大的網站請先做第一次部署,其餘用 patch 部署送出。超過限制時:回傳 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 token 時,它會回傳 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。 - 標頭:HTML 使用
X-Content-Type-Options: nosniff、Referrer-Policy: strict-origin-when-cross-origin、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_…" }