Update post
update_postEdit existing blog posts in place, updating only the specified fields. Also manage scheduling by setting status to scheduled or draft, and adjust publish dates.
Instructions
Edit an existing post in place. Only the fields you pass are changed. Also the way to schedule an existing draft (status "scheduled" plus publish_at), to unschedule one (status "draft"), or to correct a post's date (publish_at in the past).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | ||
| site | Yes | ||
| tags | No | ||
| title | No | ||
| status | No | ||
| post_id | Yes | ||
| og_image | No | ||
| og_title | No | ||
| meta_title | No | ||
| publish_at | No | a date and a time of day — "2026-08-04T10:00". **It is read in the TARGET BLOG'S OWN timezone, never yours and never the user's.** So "publish at 10am tomorrow" is simply "2026-08-04T10:00": pass the wall-clock time the user said, verbatim. Do NOT convert it to UTC, do NOT convert it to your own timezone, and do NOT ask the user which timezone they mean — the blog decides, and Byline looks its timezone up from the platform. The same string sent to two blogs in two countries is two different instants, on purpose. An explicit offset ("2026-08-04T10:00:00+05:30" or "...Z") is also accepted and is then taken at face value, but only use one if the user actually named a timezone. Required with status "scheduled", where it must be at least 2 minutes in the future. With status "published" it must be in the PAST — that backdates the post; a future time with status "published" is refused, because Ghost would publish it immediately while WordPress would schedule it. The result reports publish_at_local, the time as the blog's own clock reads it — tell the user that one, not the UTC value. Note that Ghost refuses to move an already-published post back to "scheduled" (it answers "Your post is already published"); set it to "draft" first. | |
| canonical_url | No | ||
| feature_image | No | ||
| twitter_image | No | ||
| twitter_title | No | ||
| custom_excerpt | No | ||
| og_description | No | ||
| feature_image_id | No | The native id upload_image returned alongside the url, needed by platforms that reference media by id rather than URL — e.g. WordPress's featured_media. Ghost has no such field and ignores this. | |
| meta_description | No | ||
| feature_image_alt | No | ||
| codeinjection_head | No | ||
| twitter_description | No | ||
| feature_image_caption | No |