Skip to main content
POST
Call board.write_document

Authorizations

Authorization
string
header
required

An API key minted at Settings › API & MCP. Send it as Authorization: Bearer <key>. A key carries its holder's own permissions, resolved on every call — revoking a membership closes the key's reach immediately. Keep it in an environment variable (GOOSY_API_KEY), never in a committed file.

Headers

x-request-id
string

Your own id for this request, echoed back and recorded on the audit trail. 1–128 characters from A–Z a–z 0–9 . _ : -, starting with a letter or digit; anything else is replaced by a generated id.

Maximum string length: 128

Body

application/json
board_id
string<uuid>
required

The board the document is on, or goes on, as board.tree returned it.

title
string
required

The document's title, replacing any title it had.

Required string length: 1 - 200
body_markdown
string
required

The whole document in markdown, replacing everything it held. Headings, bold, italic, lists and links are kept; anything else arrives as its text.

Minimum string length: 1
document_id
string<uuid>

The document to replace, as an earlier board.write_document returned it. Omit to create a new document on the board.

expected_updated_at
string

With document_id only: the updated_at an earlier answer returned. A document saved since is refused and left unchanged. Omit to replace it as it reads now.

Required string length: 1 - 64
workspace
string

Which workspace to run in — its slug. Omit to use your default. With more than one reachable workspace and no default, the call is refused and the choices are listed.

Minimum string length: 1

Response

The call was admitted and dispatched. ok says whether the tool succeeded — a refusal the tool itself produced is still a 200, exactly as it is a successful JSON-RPC result over MCP.

The tool ran and answered.

ok
boolean
required
document_id
string<uuid>
required
board_id
string<uuid>
required
title
string
required
updated_at
string
required

The document's version after this write; pass it as expected_updated_at to replace it again safely.

created
boolean
required

true when this call made the document, false when it replaced one.

url
string
required

Where a member opens the document in the product, as a path: a Splash Pad document opens in its article workflow, any other on its board.

workspace
string
required

The slug of the workspace this call ran in.

working_in
object
required

Which workspace this call ran in, and how that was decided. Present on every workspace-scoped result.