Update a post

Change a post’s text, platforms, media, time or status.

Last checked against the API October 10, 2026 · View as Markdown

PATCHhttps://studio.postprism.app/api/v1/posts/{id}

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

NameInTypeDescription
idpathuuid, requiredThe post ID.
workspace_idqueryuuidAct on another workspace you belong to. Defaults to the workspace your API key was created in.

Request body

Content-Type: application/json

base_contentstringoptional

The shared draft.

platformsstring[]optional

Platform keys to publish to.

platform_contentobjectoptional

Replaces every per-platform version.

scheduled_atdate-timeoptional, nullable

New publish time in UTC, or null to clear it.

statusstringoptional

scheduled queues the post for its scheduled_at; draft stops it from publishing. One of: draft, scheduled.

mediaobject[]optional

Replaces the whole attachment list (up to 10).

The workspace, owner and creation time of a post cannot be changed.

Example

Schedule a draft
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.

iduuid

The post ID.

base_contentstring

The shared draft the per-platform versions start from.

platformsstring[]

Platform keys the post targets.

platform_contentobject

Per-platform versions, keyed by platform key.

statusstring

Where the post is in its lifecycle. One of: draft, scheduled, publishing, published, failed.

scheduled_atdate-timenullable

When the post publishes, in UTC. null for drafts.

published_atdate-timenullable

When the post was published, or null.

mediaobject[]

Attached images and videos.

ai_generatedboolean

Whether the post was written with Postprism AI.

created_atdate-time

When the post was created.

workspace_iduuid

The workspace the post belongs to.

user_iduuid

The member who created the post.

updated_atdate-time

When the post last changed.

200 response
{
  "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

StatusMessageWhen
400media[0].url must be a URL returned by POST /api/v1/media.A media URL was not uploaded through the API by you.
400media accepts at most 10 items.More than 10 files were attached.
400platform_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.
400platform_content.youtube.settings: YouTube title: YouTube titles are limited to 100 characters.A platform setting failed validation. The message names the field.
401Invalid or revoked API keyThe Authorization header is missing, malformed, or the key was revoked.
404Post not foundNo post with that ID exists in the workspace.
404Workspace 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.
429Too many requestsYou went over the hourly limit. See Rate limits.