Call the updateDocument MCP tool
Edit an existing document's title and/or content, replacing whichever field you pass, and/or publish it. If the document is public (is_public: true), an edit changes its LIVE page immediately: anyone with the /p/ link sees the new content right away. Separately, and regardless of is_public, any lead-magnet link createLeadMagnetCampaign already delivered to a lead (a private per-lead link) also shows the new content the next time that lead opens it, since that page reads the document's current content at open time rather than a frozen copy. Caution: if the document is open in the Reachium editor right now, the user must reload that tab before typing or their autosave overwrites this edit; the response warnings say when it was saved recently. If anyone is CURRENTLY in a live Collaborate room on this document, a title/content_markdown/edits write is refused outright (reason open_in_collaboration), naming who is in the room, rather than risking a silent overwrite by the room's next autosave; ask them to close it or wait for the room to go idle, then retry. If the collaboration check itself cannot be confirmed (a Liveblocks outage), the write proceeds and the response carries a collab_check_failed warning instead. Refuses documents that are restricted to admin editing (a Reachium-internal template a workspace cannot edit here) and documents outside this workspace. Provide at least one of title, content_markdown (up to 60000 characters), edits, or publish:true. Two ways to change the body: content_markdown REPLACES it entirely (embeds/tables the markdown cannot express are lost); edits applies PARTIAL changes to the current body (replace/insert/delete a section by heading, replace exact text in one line, insert/replace/remove images), leaving everything else, including tables and embeds, untouched. Prefer edits for revisions: call getDocuments with document_id first, then target sections by heading or section_index. publish:true makes the document a public /p/ page: pass it alone to publish an already-written document with no other change, or pass it together with title/content_markdown/edits to apply that edit first and publish the result in the same call, so the live page never shows stale content. unpublish:true takes a published /p/ page offline again: the document is kept as a private draft and its slug is retained, so a later publish:true restores the exact same URL. It is standalone (no title/content/edits in the same call) and mutually exclusive with publish:true. archive:true retires a document without deleting it (the escape valve for docs that campaigns already delivered, which can never be deleted): it moves to the Archived folder and drops out of default getDocuments listings, single-call, no confirm needed, fully reversed by archive:false. Archiving does NOT unpublish - a still-published doc keeps its live /p/ page and the response warns about it. Standalone like unpublish. publish:true and unpublish:true are both two-step, same shape as createDocument's: the FIRST call (no confirm_token) returns a preview naming the document and its public URL and creates/changes nothing; call again with the identical arguments plus confirm_token to actually execute. A plain edit (publish and unpublish unset or false) stays single-call, no confirm_token needed, byte-for-byte the same as before publish:true existed on this tool.
Called through the Actions bridge: the response is that tool's own result, wrapped as { data: <tool result> } under HTTP 200. Billing, daily-cap, and confirm-step outcomes are embedded INSIDE data, never remapped to an HTTP status (see the templated /api/v1/actions/{toolName} operation above for the full protocol, and x-mcp-actions for this tool's machine-readable scope/cap/confirm_behavior fields). Authentication, request-shape, and optional idempotency-protocol failures still use their documented non-200 statuses.
Request
- Base URL: https://app.reachium.io
- URL: https://app.reachium.io/api/v1/actions/updateDocument
- Auth: HTTP bearer
Headers
Optional caller-generated key (8-200 characters: letters, digits, dot, underscore, colon, or hyphen). A final tool result is replayed for the same key and body. An ambiguous result remains 409 under that key; reconcile external state before using a new key. Reuse with a different body returns 422.
Request body
Response
The result of calling this tool.
Changes
No recorded changes to this operation across all 2 revisions of this API.