Publish something now
No install and no account. The link is unlisted and self-destructs in 24 hours — sign in
afterwards to claim it and keep it. Paste the HTML, or drop an .html, .md,
.svg or .zip:
The same thing, as one curl
Copy this and it is a complete integration — the response carries the shareable URL:
curl -X POST https://read.botook.ai/sites \ -H "Authorization: Bearer otr_live_YOUR_KEY" \ -F file=@index.html
From an agent, over MCP
Register the server once and publishing becomes a tool call the agent makes mid-task:
npx -y opentree-mcpAfter that, "publish this and give me the link" resolves to publish_html, and "update
it" resolves to update_site against the same URL.
Add a key to keep and update it
The anonymous route above is for throwaway output. With a key you get a stable
id you can rewrite in place:
# first publish returns an id
curl -X POST https://read.botook.ai/sites \
-H "Authorization: Bearer otr_live_YOUR_KEY" -F file=@page.html
# later, same link, new bytes
curl -X PUT https://read.botook.ai/sites/SITE_ID \
-H "Authorization: Bearer otr_live_YOUR_KEY" -F file=@page.htmlThe steps, if you would rather read them
- Paste or drop above, or run the
curl— either returns a URL with a 22-character token. - Add a password here, or a gate later with
set_password/set_email_gate. - Send the link. The reader opens it with no account and nothing to install.
- Ask for changes;
update_sitekeeps the same URL. - Read what the reader did when you want to know it landed.
Questions
Do the buttons here really publish?
Yes — they POST to /v1/publish, the same anonymous endpoint the curl uses.
What comes back is a real link you can open.
What formats can I drop?
A single .html / .htm, a .md file (rendered to a document),
an .svg (hosted as-is), or a .zip for a multi-file site.
How do I get an API key?
From the dashboard at /app. The anonymous route needs none; the key is for keeping and updating sites.