Publish one page or document (no terminal)
publish_filePublish an HTML / Markdown page or document straight to a WeChat-ready LivePage link; no terminal needed.
Which upload route: terminal ⇒ SPACE CLI (create_cli_token first); no terminal and text files up to 2 MB in total ⇒ publish_file; anything else or unsure ⇒ create_upload_link.
The link opens and forwards inside WeChat (links from WorkBuddy's built-in site publishing, *.app.workbuddy.host, cannot be opened inside WeChat); use this when the user wants it in WeChat.
Use this when you have no terminal and the page is text files — HTML or Markdown pages and documents (no upload session to open first): pass the complete text content and the platform uploads it for you. Validation, content moderation (never released while moderation is unavailable), automatic release after approval or hold, and the result are exactly the same as finalize_upload. To add a version to existing pages pass proposal_id (find it with list_proposals first); to create new pages pass title (optional folder_id). One file: pass filename + content (.html / .htm / .md). When the page, styles and scripts are separate files, pass files: [{ path, content }] instead (one or the other): paths may include directories (e.g. css/style.css) and pages reference each other with relative paths; text files only (html / htm / md / css / js / mjs / json / svg / txt / csv), at most 50; the entry is manifest.entry, else index.html, else the only page. When a file is already at a public https URL (a cloud-drive public download link, a PDF link produced by another tool), pass { path, url } in files instead (e.g. [{ path: 'report.pdf', url: 'https://…' }]) and the platform fetches it — PDF, PPTX and images work: up to 50 MB each and 50 MB in total, at most 5 URLs, fetched within 30 seconds; only public addresses, and links that need a login cannot be fetched (fetch_failed, with fetch_* details in issues). UTF-8 text, up to 2 MB in total — anything larger is rejected with too_large and never truncated. The contents of images, PDF, PPTX and other binary files cannot be sent here: use a URL if there is one; otherwise without a terminal, use create_upload_link to give the user an upload page; with a terminal, use the SPACE CLI with create_cli_token. IMPORTANT: when the page already has readers outside the workspace, set hold=true whenever the user has not explicitly approved releasing this version, then give them the preview URL before publish_version. Hold only matters once the page has readers outside the workspace (passcode, public, a folder link or a named link); on a page only workspace members can open — every new page starts that way — hold is ignored and the approved version becomes current directly without notifying anyone. For a small edit (a typo fix) that should not notify anyone, pass quiet=true: workspace people and subscribers are not notified this time, and subscribers are notified on the next update.
Keywords: publish · web page · webpage · link · share · share to WeChat · WeChat link · html · pdf · markdown · upload · LivePage · proposal.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional: the tag this version gets when it goes live (a string = the tag name, such as 2026-10-28 / v2 final; or {name, title, note}). On a tagged page readers see the newest tagged version and can browse every tagged one (past issues); an existing tag name moves to this version. Daily reports use the day's date. Omitted: a page that has never been tagged behaves exactly as today; on a tagged page this version takes over the tag readers are looking at | |
| hold | No | True keeps the approved version waiting to publish until the user confirms; then call publish_version. Default false: approval automatically makes this version live. Only takes effect once the page has readers outside the workspace (passcode, public, a folder link or a named link); on a page only workspace members can open it is ignored, and the approved version becomes current directly without notifying anyone. | |
| note | No | What changed this time: one line for subscribers and teammates, 20 characters or fewer, for example “Revised pricing after client feedback”. It appears in the update reminder; without it the reminder only says the version number, and the platform will not make one up. | |
| files | No | A web page made of several files (page, styles, scripts and so on), or files at public URLs; use this or filename / content. | |
| quiet | No | true = no notification this time: when this version goes live, neither workspace people nor readers subscribed to this page are notified; subscribers are notified as usual on the next update. Use it for small edits such as typo fixes | |
| title | No | Title for a new page; with proposal_id it becomes this version’s title. | |
| content | No | For one file: its complete text content (UTF-8). | |
| filename | No | For one file: its name, such as index.html or report.md, without a directory; use this or files. | |
| manifest | No | Optional manifest fields, the same as finalize_upload (theme / theme_switch / chrome / scene / share / sections / actions …). For one file the entry comes from filename; with files you may set entry to choose the entry page. title defaults to the title above. Page settings can ride along here too (page contract): name (page name) · folder (null = out of any folder) · folder_link (shared through the folder link) · path (workspace address) · forms (same fields as set_form, no amount) · analytics.replay (session recording) · tag; anything left out is untouched, and page_settings in the result reports each item. | |
| folder_id | No | Only when creating a new page: destination folder; omit to keep it out of any folder. | |
| proposal_id | No | Existing page to add a version to; supply this or title. |