Page Lemon

REST API 參考

Page Lemon REST API 位於 https://api.pagelemon.com/v1。有終端機的程式碼 agent 可以用一行指令發布整個資料夾;AI agent 請先看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 僅在匿名建立時出現。

使用 JSON 的 POST /v1/deploy:內嵌檔案

適用於 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,即可只傳送變更的 files 及 "deleted": ["old.html"],套用在 base_revision 之上;其餘內容保留不變。限制與檢查相同;過期的 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(使用全部儲存空間)無

「每個網站」指部署後整個上線的網站;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/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 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/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。
  • 標頭: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,讓下一個工作階段能更新同一個網站:

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

有哪裡不清楚或已經過時嗎?告訴我們,我們會修正頁面。