REST-API-Referenz
Die Page Lemon REST API findest du unter https://api.pagelemon.com/v1. Code-Agents mit Shell nutzen sie, um einen Ordner mit einem Befehl zu veröffentlichen; KI-Agents sollten mit der Veröffentlichungsanleitung für KIs (Markdown) beginnen.
Zuletzt aktualisiert · Als Markdown ansehen
Auf dieser Seite
Schnellstart
Veröffentliche einen Ordner ohne Konto (er bleibt 72 Stunden online, wenn du ihn nicht behältst):
tar -czf - -C dist . | curl -sS --data-binary @- https://api.pagelemon.com/v1/deployMit einem API-Token landet die Website direkt in deinem Konto:
tar -czf - -C dist . | curl -sS -H "Authorization: Bearer $PAGELEMON_TOKEN" --data-binary @- https://api.pagelemon.com/v1/deployHosts
| Host | Liefert aus |
|---|---|
https://pagelemon.com | Diese Website, /agents, /llms.txt, /docs/* |
https://api.pagelemon.com | REST API unter /v1 |
https://mcp.pagelemon.com | Remote-MCP-Server (Streamable HTTP) unter / (Alias /mcp) |
https://app.pagelemon.com | Dein Konto: Websites, Personen, Tokens, Abrechnung |
https://<name>.pagelemon.dev | Deine Websites |
Authentifizierung
Sende Zugangsdaten als Authorization: Bearer <token>.
| Zugangsdaten | Sieht aus wie | Woher es kommt | Was es kann |
|---|---|---|---|
| Website-Token | st_… | Einmalig von einer anonymen Veröffentlichung zurückgegeben | Diese eine Website aktualisieren, zurücklesen, zurücksetzen und ansehen, bis sie übernommen wird. Danach meldet es nur noch die Übernahme (GET /v1/sites/:name) |
| Übernahmelink | https://app.pagelemon.com/claim/ct_… | Einmalig von einer anonymen Veröffentlichung zurückgegeben | Eine angemeldete Person übernimmt die Website |
| API-Token | pl_… | app.pagelemon.com/account/tokens (Kontoeinstellungen → API-Tokens; siehe API-Tokens) | Alles, was du in deinem Konto tun kannst, über REST und MCP |
| OAuth-Zugriffstoken | pla_… | Wird an eine MCP-App (Claude.ai, ChatGPT, Claude Code…) ausgegeben, nachdem du dich angemeldet und sie freigegeben hast | Wie ein API-Token, aber nur für MCP (REST antwortet mit 401). Gilt 1 Stunde und erneuert sich selbst |
Wir speichern nur Hashes von Tokens, ein verlorenes Token kann also nicht erneut angezeigt werden. Erstelle stattdessen ein neues.
Fehler
{ "error": { "code": "conflict", "message": "…" }, "agent_message": "…" }agent_message ist vorhanden, wenn die KI dem Nutzer etwas mitteilen soll. Gib es in der Sprache des Nutzers weiter, mit allen Links, Codes, Zahlen, Daten und Domains exakt so, wie sie sind. Zeiten sind in UTC, und *_at-Felder enthalten sie im ISO-Format.
| Code | Status | Bedeutung |
|---|---|---|
bad_request | 400 | Fehlerhaftes Archiv, fehlerhafter Body oder Parameter |
unauthorized | 401 | Token fehlt oder ist ungültig |
forbidden | 403 | Das Token oder die Rolle darf das nicht |
not_found | 404 | Website oder Datei existiert nicht |
conflict | 409 | Veraltetes X-Base-Revision / base_revision |
gone | 410 | Die Website ist abgelaufen |
too_large | 413 | Größenlimit überschritten |
blocked_secret | 422 | Der Leak-Schutz hat einen geheimen Schlüssel gefunden |
limit | 429 | Tarif- oder Ratenlimit |
Veröffentlichen
POST /v1/deploy: ein Archiv
Der Request-Body ist das Archiv: .tar.gz, .tgz, .tar oder .zip. Der Server erkennt das Format an den Bytes, Content-Type ist also optional.
tar -czf - -C <dir> . | curl -sS --data-binary @- https://api.pagelemon.com/v1/deploy| Anfrage | Ergebnis |
|---|---|
Kein ?site, kein Token | Anonym erstellen. Ein zufälliger Name wie brave-otter-4821, läuft nach 72 Stunden ab, sofern nicht übernommen |
Kein ?site, API-Token | In deinem Konto erstellen. Kein Ablauf |
?site=<name> + X-Base-Revision: <revision id> + Website-Token oder API-Token | Aktualisieren. Ist die Live-Revision nicht X-Base-Revision, bekommst du 409 conflict und nichts wird veröffentlicht |
Jede Veröffentlichung ersetzt die ganze Website: Dateien, die du weglässt, werden von der Live-Website entfernt. Liegen alle Dateien in einem einzigen obersten Ordner (dist/index.html, …), wird dieser Ordner entfernt.
Antwort 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 und claim_url erscheinen nur beim anonymen Erstellen.
POST /v1/deploy mit JSON: Inline-Dateien
Für MCP-Clients und kleine Websites: Sende Content-Type: application/json an denselben Endpunkt.
{ "site": "brave-otter-4821", "base_revision": "rev_…", "files": [ { "path": "index.html", "content": "<h1>Hi</h1>", "encoding": "utf8" } ] }encoding ist utf8 oder base64. Lass site und base_revision weg, um eine neue Website zu erstellen. Die Antwort ist dieselbe wie oben.
Patch: Füge "patch": true hinzu, um nur die geänderten files plus "deleted": ["old.html"] auf Basis von base_revision zu senden; alles andere bleibt erhalten. Gleiche Limits und Prüfungen; ein veraltetes base_revision ergibt 409 conflict.
Upload-Regeln
| Dateien | Pro Datei | Pro Website | Ablauf | |
|---|---|---|---|---|
| Kein Konto | 100 | 1 MB | 1 MB | 72 Stunden, sofern nicht übernommen |
| Kostenlos | 500 | 5 MB | 5 MB | keiner |
| Prompter | 1,000 | 50 MB | 5 GB (ihr gesamter Speicher) | keiner |
| Builder | 2,000 | 50 MB | 25 GB (ihr gesamter Speicher) | keiner |
| Team | 3,000 | 50 MB | 50 GB (ihr gesamter Speicher) | keiner |
| Company | 5,000 | 50 MB | 150 GB (ihr gesamter Speicher) | keiner |
Pro Website meint die ganze Live-Website nach einem Deploy; ein Patch zählt die gesamte resultierende Website. In bezahlten Tarifen kann eine Website den gesamten Speicher des Tarifs nutzen, aber eine Anfrage trägt höchstens 90 MB (40 MB über MCP): Sende eine größere Website als ersten Deploy und den Rest als Patch-Deploys. Über dem Limit: 413 too_large mit einem agent_message zur Anzeige.
- Abgelehnt: Symlinks, Hardlinks, Geräte, absolute Pfade,
..und doppelte Pfade, die sich nur in der Groß-/Kleinschreibung unterscheiden. - Übersprungen und in
skippedaufgeführt:.git/,node_modules/,.env*,*.map,*.pem,*.key; Dotfiles außer.well-known/;.DS_Store,Thumbs.db. - Leak-Schutz: Textdateien werden auf bekannte Arten geheimer und privater Schlüssel geprüft. Ein Treffer liefert
422 blocked_secretmit{file, line, kind}. Der Schlüssel selbst wird nie zurückgegeben. - Erforderlich:
index.htmlim Stammverzeichnis. - Nur anonym: Ausführbare Dateien und Installer werden blockiert, und jedes Netzwerk bekommt nur eine kleine Zahl anonymer Websites und Veröffentlichungen. Für mehr übernimm die Website oder melde dich an.
Websites
| Methode | Pfad | Authentifizierung | Hinweise |
|---|---|---|---|
| GET | /v1/sites | API-Token | Websites, bei denen du Mitglied bist |
| GET | /v1/sites/:name | Website-Token, Mitglied | {name, url, claimed, expires_at, plan, role, live_revision: {id, number, created_at, created_by}, badge}. Mit dem Website-Token fragst du es ab, nachdem der Nutzer den Übernahmelink geöffnet hat: {claimed: false, …} oder {claimed: true, account_token?}; der einzige Aufruf, den ein Website-Token nach der Übernahme seiner Website noch machen kann |
| GET | /v1/sites/:name/files | Website-Token, Mitglied | {revision, files: [{path, size, sha256}]} für die Live-Version |
| GET | /v1/sites/:name/files/<path> | Website-Token, Mitglied | Roher Dateiinhalt (das Zurücklesen), mit einem X-Revision-Header |
| GET | /v1/sites/:name/revisions | Website-Token, Mitglied | Neueste zuerst. Anonym: nur die aktuelle. Kostenlos: 7 Tage. Prompter: 90 Tage. Builder und Team: 1 Jahr. Company: 2 Jahre |
| POST | /v1/sites/:name/rollback | Website-Token, Bearbeiter oder Inhaber | {revision} macht diese Version wieder live, als neue Versionsnummer |
| POST | /v1/sites/:name/rename | Bearbeiter oder Inhaber (nur Konto) | {name}: 4–63 Zeichen aus a-z, 0-9 und -. Darf nicht wie ein Zufallsname aussehen (word-word-1234), reserviert sein oder schon einmal benutzt worden sein |
| DELETE | /v1/sites/:name | Inhaber | Endgültig. Mit einem API-Token liefert es 202 mit einem approve_url: eine Seite, auf der die Person die Adresse der Website eintippt und auf „Endgültig löschen“ klickt. GET /v1/approvals/<token> sagt danach, ob gelöscht wurde |
| GET | /v1/sites/:name/members | Mitglied | {members: [{email, role}], invites: [{email, role}]} |
| POST | /v1/sites/:name/members | Inhaber | {email, role: "editor" or "viewer"} sendet eine Einladungs-E-Mail |
| DELETE | /v1/sites/:name/members/:email | Inhaber | Zweistufig: Der erste Aufruf liefert {confirm_token}; wiederhole ihn innerhalb von 5 Minuten mit ?confirm=<token> |
Rollen: Betrachter können die Website und ihren Verlauf lesen. Bearbeiter können zusätzlich veröffentlichen und zurücksetzen. Inhaber können zusätzlich einladen, umbenennen und löschen.
Konto
| Methode | Pfad | Authentifizierung | Hinweise |
|---|---|---|---|
| GET | /v1/me | API-Token | {email, plan, sites_used, sites_limit} |
Websites übernehmen, Einladungen annehmen, Tokens und Abrechnung laufen über app.pagelemon.com.
Auslieferung auf pagelemon.dev
/liefertindex.htmlaus./aboutliefertabout.htmloderabout/index.htmlaus.- Fehlende Dateien bekommen die
404.htmlder Website, falls vorhanden, sonst unsere. - Fallback für Single-Page-Apps: Hat die Website keine
404.htmlund der Pfad keine Dateiendung, wirdindex.htmlausgeliefert. - Header:
X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-origin,Cache-Control: public, max-age=60für HTML undmax-age=300für andere Dateien. Inhaltstypen stammen aus einer Allowlist; unbekannte Typen werden alsapplication/octet-streamausgeliefert. - Anonyme und kostenlose Websites bekommen vor
</body>ein kleines "Live auf Page Lemon"-Badge. Es besteht aus einfachem HTML und CSS, ohne Skript, und enthält einen Link zum Melden der Website. - Abgelaufene oder gelöschte Websites liefern
410. Wegen Missbrauchs entfernte Websites liefern451.
.pagelemon.json
Nach dem Veröffentlichen schreiben Agenten diese Datei in den Projektordner und fügen sie zu .gitignore hinzu, damit die nächste Sitzung dieselbe Website aktualisieren kann:
{ "site": "brave-otter-4821", "url": "https://brave-otter-4821.pagelemon.dev", "revision": "rev_…", "site_token": "st_…" }