Update Post
patch_posts_by_idEDIT ONLY — modifies a post in-place. NEVER call for reading; use post_posts to create. Published edits go live immediately. Always pass base_updated_at (from get_post.updated_at); without it a concurrent edit is silently overwritten. Custom styled HTML needs a richembed fenced block; bare block HTML is escaped. Do NOT include the title in the content body. Response has links.review_url for drafts — give that link to the user.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"id": "<id>"
},
"name": "patch_posts_by_id"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| slug | No | ||
| tags | No | ||
| title | No | ||
| domain | No | ||
| status | No | ||
| content | No | ||
| site_id | No | ||
| featured | No | ||
| subtitle | No | ||
| seo_title | No | ||
| description | No | The post's PUBLIC meta description shown in search results and link previews. Overwrites any stored value immediately. THIS IS NOT an edit-comment or reason-for-change field — omit this key entirely unless you explicitly intend to replace the current description. | |
| published_at | No | ||
| featured_image | No | ||
| base_updated_at | No | ISO from preceding get_post.updated_at. Server returns 409 CONFLICT with current_updated_at + current_content if post was edited since read; re-read, merge, retry. | |
| seo_description | No | ||
| x_discussion_url | No | X post permalink for the post's "Discuss on X" block. null removes it. | |
| hero_prompt_edited | No | Custom prompt that will be used on the next hero image generation for this post. |