Page Lemon

REST API リファレンス

Page Lemon の REST API は https://api.pagelemon.com/v1 にあります。シェルを使えるコードエージェントは、1 つのコマンドでフォルダを公開できます。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)のリモート MCP サーバー(streamable HTTP)
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": "…" }

agent_message は、AI からユーザーに伝えることがあるときに付いています。ユーザーの言語で伝え、リンク、コード、数字、日付、ドメインは正確なまま使ってください。時刻は UTC で、*_at のフィールドには ISO 形式で入っています。

コードステータス意味
bad_request400アーカイブ、ボディ、パラメーターが不正
unauthorized401トークンがない、または無効
forbidden403そのトークンまたはロールでは実行できない
not_found404サイトまたはファイルが存在しない
conflict409X-Base-Revision / base_revision が古い
gone410サイトの期限が切れた
too_large413サイズ上限を超えている
blocked_secret422リーク防止機能が秘密鍵を検出した
limit429プランまたはレートの上限

デプロイ

POST /v1/deploy:アーカイブ 1 つ

リクエストボディがアーカイブそのものです:.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 が返され、何も公開されない

デプロイのたびにサイト全体が置き換わります。含めなかったファイルは公開中のサイトから削除されます。すべてのファイルが 1 つの最上位フォルダ(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 を追加すると、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(その全ストレージ)なし

サイトごとの上限は、デプロイ後に公開されるサイト全体に対する値です。パッチでも、反映後のサイト全体で数えます。有料プランでは 1 つのサイトでプランのストレージをすべて使えますが、1 回のリクエストで送れるのは最大 90 MB(MCP 経由では 40 MB)です。それより大きいサイトは、最初のデプロイで送り、残りをパッチのデプロイで送ってください。上限を超えると、413 too_large と、表示用の agent_message が返ります。

  • 拒否:シンボリックリンク、ハードリンク、デバイス、絶対パス、..、大文字・小文字だけが異なる重複パス。
  • スキップされ skipped に記載:.git/、node_modules/、.env*、*.map、*.pem、*.key、.well-known/ 以外のドットファイル、.DS_Store、Thumbs.db。
  • リーク防止:テキストファイルは、よく知られた種類の秘密鍵やプライベートキーが含まれていないかスキャンされます。検出されると {file, line, kind} 付きの 422 blocked_secret が返されます。キー自体が返されることはありません。
  • 必須:ルートに 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}:a-z、0-9、- からなる 4〜63 文字。ランダムな名前(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所有者2 ステップ式です。1 回目の呼び出しで {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。Content-Type は許可リストに基づき、不明な形式は application/octet-stream として配信されます。
  • 匿名のサイトと無料プランのサイトには、</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_…" }

わかりにくい点や古い情報はありましたか?お知らせください。ページを直します。