Skip to main content
Publish HTML as a hosted Page in the same call that sends the message. Write-only: we host the HTML, then turn the block into a page_preview card before saving. You never read a page block back, and chat messages never carry raw HTML.
string
required
"page"
string
required
The full page document. Up to your plan’s per-version cap (512 KB on Free). Bigger than that, and the block becomes a visible error line while the rest of the message still lands.
string
Up to 150 characters. Without it we use the HTML <title>, then “Untitled page”.
string
The URL name: 1 to 63 lowercase letters, digits and dashes. We make one from the title if you leave it out. A slug that already belongs to one of your Pages updates that Page instead of making a new one. See below.
string
Publish a new version of this Page instead of making a new one. Takes precedence over slug.
string
default:"private"
private (workspace members only) or public (anyone with the link, no login). Anything else fails the block’s schema check, which drops the block. Only used when the block creates a Page. Neither level is indexed by search engines.

Create or update

Each page block either creates a Page or adds a version to one you already have:
  1. page_id set: a new version of that Page.
  2. Otherwise, slug set and a Page in your workspace already holds it (or held it before a rename): a new version of that Page.
  3. Otherwise: a new Page.
Send the same slug every time and a recurring job keeps updating one Page rather than creating a pile of them. A version whose HTML is byte-for-byte identical to the current one is skipped, so re-sending unchanged content costs nothing.

Where it works

The block is accepted on all three sending paths: webhook response, response_url, and the API-key messages endpoint. One rule: the conversation must be an internal one, a team chat with your bot. In a widget or public-page conversation the block is replaced by an error line and nothing is written, because a visitor is not a workspace member and could never open the Page.
No conversation at all? A scheduled job, a nightly report, a dashboard that refreshes itself: use the Pages API instead. Same Pages, same URLs, no chat needed. See Scheduled and automated Pages.

What we store

The block is replaced by a page_preview card carrying the page_id, slug, title, version and url. If hosting fails, the block becomes a text block that says why (over the size cap, Page limit reached, storage full, slug invalid or taken), and the rest of the message still goes through.
This is the only place HTML is allowed. HTML in a text block is stripped, and HTML file uploads are blocked. Rich HTML belongs in Pages.