REST API
POST /api/publish にJSONを送るだけでサイトを公開できます。
機械可読な仕様は OpenAPI 3.1 で公開しています: https://publee.app/openapi.json。AIエージェント向けのMCPサーバー(https://publee.app/api/mcp)についてはMCP連携を参照してください。
最小の例(匿名公開)
curl -X POST https://publee.app/api/publish \
-H "Content-Type: application/json" \
-d '{
"title": "My Page",
"visibility": "public",
"html": "<!doctype html><html><head><title>My Page</title></head><body>Hello</body></html>"
}'
レスポンス(201):
{
"site": {
"id": "site_xxxx",
"slug": "my-page-a1b2c3",
"url": "https://my-page-a1b2c3.publee.site/",
"visibility": "public",
"fileCount": 1
},
"claimToken": "...",
"claimUrl": "https://publee.app/claim?token=..."
}
claimToken / claimUrl は 匿名公開のときだけ 含まれます。ログイン後に claimUrl を開くと、そのサイトをアカウントに引き継いで保持期間を延長できます(認証済みの公開ではこのフィールドはなく、site のみ返ります)。
認証(APIトークン)
トークンページで発行した publee_live_ トークンを Authorization ヘッダに載せると、アカウントに紐づいた公開になります。
curl -X POST https://publee.app/api/publish \
-H "Authorization: Bearer publee_live_xxxxx" \
-H "Content-Type: application/json" \
-d @payload.json
リクエストボディ
| フィールド | 型 | 説明 |
|---|---|---|
title |
string | サイト名(省略時はHTMLの<title>または"Untitled site") |
description |
string | サイトの説明(省略可、最大500文字。管理画面に表示) |
slug |
string | 公開URLのサブドメイン(https://<slug>.publee.site)。3〜63文字の英小文字・数字・ハイフン。Pro プラン以上(登録なし・Free は自動発行) |
html |
string | 単一HTMLのショートカット。filesと排他 |
files |
array | {path, content または contentBase64, mimeType?} の配列。index.htmlが無くてもルート直下にHTMLが1つなら自動でトップページになります |
visibility |
string | password(デフォルト) / public / private / members / workspace。登録なしは password / public のみ。private は Pro 以上、members / workspace は Team |
password |
string | visibility=password のとき必須(6文字以上) |
spaMode |
boolean | 未マッチのパスをindex.htmlにフォールバック |
noindex |
boolean | 検索エンジン除外(デフォルト true)。false にできるのは Pro プラン以上 |
showBranding |
boolean | false でPubleeフッターを非表示(Pro プラン以上) |
memberEmails |
string[] | visibility=members のときの許可リスト(最大100件) |
overwrite |
boolean | true にすると slug で指定した自分の既存サイトのファイルを差し替えます(URLは変わりません。要Bearerトークン) |
複数ファイルの例
curl -X POST https://publee.app/api/publish \
-H "Content-Type: application/json" \
-d '{
"title": "Docs Site",
"visibility": "password",
"password": "s3cret-pass",
"files": [
{"path": "index.html", "content": "<!doctype html>..."},
{"path": "style.css", "content": "body { ... }"},
{"path": "img/logo.png", "contentBase64": "iVBORw0KGgo..."}
]
}'
既存サイトの更新(同じURLで差し替え)
curl -X POST https://publee.app/api/publish \
-H "Authorization: Bearer publee_live_..." \
-H "Content-Type: application/json" \
-d '{
"slug": "my-page",
"overwrite": true,
"html": "<!doctype html><html>...更新後のHTML...</html>"
}'
公開範囲やパスワードなどの設定は変わりません(サイト管理画面の共有設定から変更できます)。
エラー
エラーは常にJSONで返ります。error(人間向けメッセージ)に加えて、機械判定用の code と解決のヒント hint が含まれます。
{
"error": "公開範囲が不正です",
"code": "invalid_input",
"hint": "Fix the request body — see the request schema at https://publee.app/openapi.json.",
"docs": "https://publee.app/docs/api"
}
| ステータス | code |
意味 |
|---|---|---|
400 |
invalid_input |
入力エラー(error フィールドに日本語の理由。プラン外の機能指定もここ) |
401 |
invalid_token |
APIトークンが無効 |
404 |
not_found |
存在しないAPIパス |
405 |
method_not_allowed |
メソッドが違う(/api/publish は POST のみ) |
415 |
unsupported_media_type |
Content-Type: application/json がない |
429 |
rate_limited |
レート制限。時間を置いて再試行してください |
500 |
internal_error |
サーバー内部エラー。時間を置いて再試行してください |