Edit Post
edit_postPatch a post, draft or published. Send only the fields you are changing.
Two behaviours here destroy content quietly:
SEO Title, Description, CoverImageURL, AuthorAvatarURL and CoverImageAlt distinguish omission from an empty string: omit to preserve the stored value; send "" to clear it. Other string fields still treat "" as unchanged.
Markdown, Tags and Categories REPLACE wholesale. A partial value deletes everything not in it — send one tag and the rest are gone; send a paragraph as Markdown and the rest of the post is gone. get_post returns the complete current values.
Title remains the visible headline. SEO Title independently overrides the search/social title, falling back to Title when empty. Summary is the human lede. Description independently overrides the metadata description; clearing it resumes the word-aware Summary fallback capped at 160 characters, never body text. The body renders with raw HTML disabled.
COVER. CoverImageURL is the post page/card/social-metadata/newsletter cover, separate from any image inside Markdown — setting one never touches the other. Set it to a URL upload_post_image returned for this workspace. Sending a new CoverImageURL without restating CoverImageAlt clears the alt text — send both to change the picture and keep its description.
AUTHOR PHOTO. AuthorAvatarURL is the author's photo, shown beside the byline and as the author's image in structured data. Set it to a URL upload_post_image returned for this workspace; "" removes it.
Editing never publishes and never re-sends. A post already broadcast cannot be broadcast again, so an edit after that reaches the blog but not the inboxes that already received it.
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": {
"PostID": "<PostID>"
},
"name": "edit_post"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Slug | No | New URL slug. Changing it on a published post breaks existing links to that post and affects its search ranking. Format: lowercase words joined by hyphens. | |
| Tags | No | Replaces the existing tags WHOLESALE when non-empty, and cannot clear them - an empty array leaves them unchanged. To add one tag, send every existing tag plus the new one, or the rest are deleted; list_posts and get_post return the current tags. Each distinct term generates its own public index page, so a near-duplicate of a term already used on this blog splits one topic across two pages. | |
| Title | No | New visible headline: the page heading, index-card/RSS title and newsletter fallback subject. It is also the search/social title only when SEO Title is empty. Maximum 255 characters. Changing this does NOT change the slug, so a published URL stays stable. Omit or send an empty string to leave it unchanged. | |
| Author | No | New author display name - the real person. Left unset on a post that has none, the structured data attributes it to the GoodSender organisation rather than to a person. | |
| PostID | Yes | Id of the post to patch, from create_post or list_posts. | |
| Summary | No | New lede under the title, the blog index card, the RSS entry and the post's line in llms.txt. | |
| Markdown | No | New body, replacing the existing one WHOLESALE - send the complete post, not just the changed part. Rendered by markdown-it with raw HTML disabled: tables, lists, links and footnote references such as [^1] render, while raw HTML, inline SVG and fenced mermaid blocks are escaped and publish as literal text. The current body comes from get_post; anything not sent is discarded. Image URLs come from upload_post_image; the API does not restrict Markdown image URLs, and an external or invented one may not render. | |
| SEOTitle | No | New independent search/social title override. Omit to leave it unchanged, send text to replace it, or send an explicit empty string to clear it and resume the Title fallback. Maximum 255 characters. | |
| AuthorURL | No | New author profile URL matching Author - LinkedIn, GitHub or a personal site. MUST carry the scheme: a value that does not parse as http:// or https:// is silently DROPPED and publishes as no link at all. | |
| Categories | No | Replaces the existing categories WHOLESALE when non-empty, and cannot clear them - an empty array leaves them unchanged. Send the complete set, not just additions. Broad sections shared across the whole blog; list_posts shows the categories already in use. | |
| Provenance | No | Re-stamp agent attribution. All five fields are required together - a partial record is rejected - and the server re-stamps its own timestamp on every write that carries one. Omit it to leave the stored value unchanged. | |
| Description | No | New search/social description override: the meta description, OG/Twitter description and JSON-LD description. Never rendered on the page. Omit to leave it unchanged, send text to replace it, or send an explicit empty string to clear it and resume the existing word-aware Summary fallback capped at 160 characters, never body text. | |
| PublishedAt | No | Optional RFC 3339 publish timestamp, for example 2026-08-30T09:00:00Z. On a draft this pre-sets the public date that publish_post will then keep instead of stamping now. On a published post it rewrites the displayed date. | |
| CoverImageAlt | No | New text alternative for the cover image. An empty value marks a purely decorative cover (alt=""). Like CoverImageURL, omit and empty differ: omit to leave it as it is, send text to replace it, send an explicit empty string to clear it (a JSON null behaves as omitted). Sending a new CoverImageURL without restating CoverImageAlt clears the alt text — send both to change the picture and keep its description. | |
| CoverImageURL | No | New cover image URL for the post page, card, social metadata, and the newsletter email - separate from any image inside Markdown. Omit to leave the cover as it is, send a URL upload_post_image returned for this workspace to replace it, or send an explicit empty string to clear it. A JSON null behaves the same as omitting the field - it does NOT clear the cover; use an empty string for that. | |
| AuthorAvatarURL | No | New author photo URL, shown beside the byline and as the author's image in structured data. Like CoverImageURL, omit and empty differ: omit to leave the photo as it is, send a URL upload_post_image returned for this workspace to replace it, or send an explicit empty string to clear it. A JSON null behaves the same as omitting the field - it does NOT clear the photo; use an empty string for that. Changing Author alone keeps the previous author's photo beside the new name. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Slug | Yes | URL slug. | |
| Tags | Yes | Tags. | |
| Title | Yes | Visible post headline; also the search/social title fallback when SEO Title is empty. | |
| Author | Yes | Author display name if set. | |
| PostID | Yes | Post id. | |
| Status | Yes | draft or published. | |
| Summary | Yes | Human-facing lede; also the word-aware metadata-description fallback when Description is empty. | |
| Markdown | Yes | Markdown body. | |
| SEOTitle | Yes | Stored optional search/social title override, or empty when Title supplies the fallback. | |
| AuthorURL | Yes | Author URL if set. | |
| CreatedAt | Yes | ISO-8601 created time. | |
| UpdatedAt | Yes | ISO-8601 updated time. | |
| Categories | Yes | Categories. | |
| Provenance | Yes | Agent attribution, absent on a human-authored post. | |
| Description | Yes | Stored optional search/social description override, or empty when the word-aware Summary fallback supplies metadata. | |
| PublishedAt | Yes | ISO-8601 publish time if set. | |
| CoverImageAlt | Yes | Cover image alt text, or empty when unset. (FR-020) | |
| CoverImageURL | Yes | Cover image URL, or empty when unset. Rendered on the post page, card, social metadata, and in the newsletter email - distinct from any image inside Markdown. CoverImageAlt describes it. | |
| AuthorAvatarURL | Yes | Author photo URL if set — shown beside the byline and as the author's image in structured data. | |
| LastBroadcastAt | Yes | ISO-8601 broadcast time if set. |