Draft vs. published
Every page has two versions:
When you publish, the draft is copied to the published version. Editing afterward updates only the draft — the live URL keeps showing the last published version until you publish again. A page with newer edits reports
has_unpublished_changes: true.
This lets you iterate freely without disrupting people who already have the link.
Create a page with
"publish": false to save a private draft without making it live. Then call publish when you’re ready.Access levels
Access is independent of publish state. Set it with theaccess field:
Anyone with the link
No sign-in required. Anyone who has the URL can view. This is the default for published pages.
Specific people
Invite-only — only emails in
allowed_emails can view. By default invitees confirm their email with a one-time link (no Shareable account needed); set require_signin: true to require a sign-in instead. Others are shown an access gate.Set allow_access_requests: true to let someone who isn’t on the list request access from the gate. They confirm their email first, so you see a verified address; you then approve or deny from the email we send you or from the Share dialog (a count badge on the dashboard tile flags pending requests). Approving adds their email to allowed_emails and sends them a link.Only you
Only the owner can open the page.
Anyone with the link + the password
No sign-in required, but visitors must enter the page password. Pass a
password when setting access: "password" (or one is generated and returned to you).Anyone with a verified email
Semi-public: the link is freely shareable, but each viewer must enter and confirm an email before viewing — and the confirmed address is captured. Set
business_only: true to reject personal-email providers (gmail, yahoo, …). Great for forward-able investor decks.Comments
Turn on Comments (Share dialog, orallow_comments: true) to add a small floating comment widget to the page. Everyone who can see the page sees the thread.
By default comments are anonymous — anyone viewing can comment with no account or email (they can still add a display name, or stay anonymous). If you’d rather, set Who can comment to Verified email (or comments_require_email: true) and each commenter confirms a one-time email link first; their email stays private (only you see it, for moderation). Either way you can hide or delete any comment, or turn comments off, from the Share dialog, and you’re emailed when someone comments. Works on any published page (HTML, deck, PDF, or image).
Approvals · Pro
Collect client sign-off on a published page — a proposal, deck, contract, or design. Turn on Approvals in the Share dialog and add the approver emails. Each approver gets an email asking them to review; they confirm their email once (no account), then Approve or Request changes on the page, with an optional note. You’re emailed on every decision, and the Share dialog and dashboard show who has signed off. You control who sees the results with one toggle:- Private (default) — decisions and notes are visible only to you. Each approver sees just their own.
- Shared — approvers also see each other’s decisions and notes.
link or invite them as people. Approvals is a Pro feature.
Polls
Add a one-question poll to a page (Share dialog, orcollect_votes: true with poll_question + poll_options). Viewers pick one option in a small floating widget that shows a live bar chart. Free on every plan. You control:
- Who can vote —
poll_require_email: false(anonymous, one vote per device) ortrue(verified email, one vote per person). - Who sees results (
poll_results) —public(everyone),vote(only after they vote), orowner(only you, on your dashboard). - Named results (
poll_named, verified-email polls only) — voters also see who picked each option. - A close date (
poll_closes_at) — after which voting stops.
Search-engine indexing
Published pages are not indexed by search engines by default (served withX-Robots-Tag: noindex). Set "indexed": true to allow indexing — only meaningful for link pages, since private/invite pages aren’t crawlable anyway.
Slugs
Each page gets a hard-to-guess slug: a readable title prefix plus a 12-character random token (e.g.q3-revenue-k3f9d2a8xq4p). For link pages the URL is the access boundary, so the random token prevents enumeration.