Update a page's content as markdown
Insert or replace content in a page using enhanced markdown.
Use cases
Updating content with search-and-replace (recommended)
Use theupdate_content command to make targeted edits using an array of search-and-replace operations. Each operation specifies an old_str to find and a new_str to replace it with. This is the recommended approach for making precise edits without rewriting the full page.
Replacing all page content (recommended)
Use thereplace_content command to replace the entire page content with new markdown. Provide the full replacement content in new_str.
Inserting content (legacy)
Use theinsert_content command to add new markdown content to a page. Provide position: { "type": "start" } to prepend, position: { "type": "end" } to explicitly append, or omit position to append to the end of the page. You can also provide an after selection to insert at a specific point; after uses an ellipsis-based selection format: "start text...end text".
update_content or replace_content instead. The insert_content command is still supported but may be deprecated in a future version.Replacing a content range (legacy)
Use thereplace_content_range command to replace a matched range of existing content with new markdown. The content_range parameter uses the same ellipsis-based selection format as after.
update_content instead. The replace_content_range command is still supported but may be deprecated in a future version.General behavior
Returns apage_markdown object containing the full page content as enhanced markdown after the update, including truncated and unknown_block_ids fields for large pages.
Set allow_async: true at the top level of the request body to receive an HTTP 202 response with an async_task object instead of waiting for the markdown update to finish in the original request. This is useful for high block-count markdown updates, especially replace_content requests and large batches of update_content operations.
If allow_async is omitted or false, this endpoint keeps its existing synchronous response behavior. allow_async changes response behavior only; it does not change validation, permissions, or which operation runs. See Retrieve an async task and Working with markdown content for polling examples.
Errors
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
The API version to use for this request. The latest version is 2026-03-11.
2026-03-11 Path Parameters
The ID of the page to update.
Body
- Insert Content
- Replace Content Range
- Update Content
- Replace Content
Always insert_content
"insert_content"Insert new content into the page.
Set to true to opt into receiving an async_task result when this update operation is accepted for background execution. If omitted or false, the endpoint keeps the existing synchronous response shape.
Response
The type of object, always 'page_markdown'.
"page_markdown"The ID of the page or block.
The page content rendered as enhanced Markdown.
Whether the content was truncated due to exceeding the record count limit.
Block IDs that could not be loaded (appeared as tags in the markdown). Pass these IDs back to this endpoint to fetch their content separately.
100