Update a post
Change a post’s text, platforms, media, time or status.
Last checked against the API October 10, 2026 · View as Markdown
Only the fields you send change. platform_content and media are replaced as a whole, so send the full value you want.
Changing scheduled_at does not change status. To schedule a draft, send both scheduled_at and "status": "scheduled". To pull a scheduled post back to drafts, send "status": "draft" (and "scheduled_at": null to clear the time).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id | path | uuid, required | The post ID. |
workspace_id | query | uuid | Act on another workspace you belong to. Defaults to the workspace your API key was created in. |
Request body
Content-Type: application/json
base_contentstringoptionalThe shared draft.
platformsstring[]optionalPlatform keys to publish to.
platform_contentobjectoptionalReplaces every per-platform version.
scheduled_atdate-timeoptional, nullableNew publish time in UTC, or null to clear it.
statusstringoptionalscheduled queues the post for its scheduled_at; draft stops it from publishing. One of: draft, scheduled.
mediaobject[]optionalReplaces the whole attachment list (up to 10).
The workspace, owner and creation time of a post cannot be changed.
Example
curl -X PATCH "https://studio.postprism.app/api/v1/posts/3f1c2a9e-0000-4000-8000-00000000a001" \
-H "Authorization: Bearer pp_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{"status": "scheduled", "scheduled_at": "2026-10-16T09:30:00Z"}'Response
200. data is a Post. A full post, as returned when you create, read or update one. It has every PostSummary field plus the ones below. Ignore any other fields; they are not part of the stable API.
iduuidThe post ID.
base_contentstringThe shared draft the per-platform versions start from.
platformsstring[]Platform keys the post targets.
platform_contentobjectPer-platform versions, keyed by platform key.
statusstringWhere the post is in its lifecycle. One of: draft, scheduled, publishing, published, failed.
scheduled_atdate-timenullableWhen the post publishes, in UTC. null for drafts.
published_atdate-timenullableWhen the post was published, or null.
mediaobject[]Attached images and videos.
ai_generatedbooleanWhether the post was written with Postprism AI.
created_atdate-timeWhen the post was created.
workspace_iduuidThe workspace the post belongs to.
user_iduuidThe member who created the post.
updated_atdate-timeWhen the post last changed.
{
"data": {
"id": "3f1c2a9e-0000-4000-8000-00000000a001",
"workspace_id": "7b2d4e6f-0000-4000-8000-00000000b001",
"user_id": "9a8b7c6d-0000-4000-8000-00000000c001",
"base_content": "Our autumn menu is here: maple oat latte, pumpkin cold brew and a new almond croissant.",
"platforms": ["linkedin", "twitter"],
"platform_content": {
"linkedin": {
"content": "Our autumn menu is here. Three new drinks, one new pastry, all made in-house at Juniper Roasters. Which one are you trying first?"
},
"twitter": {
"content": "Autumn menu, now pouring. Maple oat latte first?",
"hashtags": ["#autumnmenu", "#coffeeshop"]
}
},
"media": [
{
"url": "https://…/launch-photo.webp",
"type": "image"
}
],
"status": "scheduled",
"scheduled_at": "2026-10-16T09:30:00Z",
"published_at": null,
"ai_generated": false,
"created_at": "2026-10-10T14:02:11Z",
"updated_at": "2026-10-10T14:02:11Z"
},
"error": null
}Errors
| Status | Message | When |
|---|---|---|
| 400 | media[0].url must be a URL returned by POST /api/v1/media. | A media URL was not uploaded through the API by you. |
| 400 | media accepts at most 10 items. | More than 10 files were attached. |
| 400 | platform_content.linkedin.media contains a URL that was not returned by POST /api/v1/media. | A per-platform media URL (or a YouTube thumbnailUrl) was not uploaded through the API. |
| 400 | platform_content.youtube.settings: YouTube title: YouTube titles are limited to 100 characters. | A platform setting failed validation. The message names the field. |
| 401 | Invalid or revoked API key | The Authorization header is missing, malformed, or the key was revoked. |
| 404 | Post not found | No post with that ID exists in the workspace. |
| 404 | Workspace not found, or you are not a member of it. | The workspace_id you passed (or your key’s default workspace) is not one you belong to. |
| 429 | Too many requests | You went over the hourly limit. See Rate limits. |