Skip to main content
PUT
Update post

Authorizations

Authorization
string
header
required

Workspace API key from Settings → API Keys.

Path Parameters

post
string<uuid>
required

Post id. A post of another workspace returns 404.

Body

application/json
content
string | null

Post text, at most 25000 characters. When status is scheduled or publishing it must also fit each account's limit (max_content_length of the social account, for example 280 on X or 25000 for X accounts with long posts, 300 on Bluesky, 500 on Mastodon including the content warning), measured on the text the network receives. A scheduled or published post needs text or media.

Maximum string length: 25000
media
object[]

Replaces the post's media. Omit it to keep the current media. Media in order. Each item is one of upload_token, url or id. Types the channel does not accept are refused.

status
enum<string>

draft keeps the post editable. scheduled schedules it at scheduled_at or in the channel queue (queue). publishing publishes it now. Omit it to keep the current status.

Available options:
draft,
scheduled,
publishing
content_type
enum<string>

New format for the post's channel. Omitted, the stored format is kept, except on Pinterest and TikTok where new media decides it as on create.

Available options:
instagram_feed,
instagram_reel,
instagram_story,
linkedin_post,
linkedin_page_post,
facebook_post,
facebook_reel,
facebook_story,
tiktok_video,
tiktok_photo,
youtube_short,
x_post,
x_poll,
threads_post,
threads_ghost_post,
pinterest_pin,
pinterest_video_pin,
pinterest_carousel,
bluesky_post,
mastodon_post,
telegram_post,
discord_message,
google_business_post
meta
X · object

Settings of the post's channel, merged with the stored ones.

scheduled_at
string<date-time> | null

With status: scheduled: required unless queue is sent or the post already has a future time; must be in the future and before 2038-01-19. Cannot be combined with queue.

queue
enum<string> | null

Queue position, only with status: scheduled. next takes the channel's first free slot; top takes its first slot and moves the queued posts behind it to the next gap. The channel must have posting times (has_posting_schedule). Cannot be combined with scheduled_at. Refused on posts with several destinations.

Available options:
next,
top,
null
label_ids
string<uuid>[]

Replaces the post's labels.

Response

The updated post.

A post on one channel. Posts created together from several channels are independent posts that share a post_group_id.

id
string<uuid>
post_group_id
string<uuid> | null

Shared by the posts created in one batch.

author
object | null

A workspace member. Only the id and name are exposed.

content
string | null

Post text, stored as sent (posts written in the app hold the editor's HTML).

media
object[] | null
status
enum<string>

Lifecycle of the post in PostClean. pending_approval is a post a member who needs approval asked to schedule or publish. The outcome on the network is publish_status.

Available options:
draft,
pending_approval,
scheduled,
publishing,
published,
failed
schedule_mode
enum<string> | null

queue: the post holds a slot of the channel's posting schedule. custom: it is scheduled at its own time.

Available options:
queue,
custom,
null
scheduled_at
string | null

UTC, format Y-m-d H:i:s.

published_at
string | null

UTC, format Y-m-d H:i:s.

approval_requested_by
object | null

Who asked for approval (not always the author).

approval_requested_at
string | null

UTC, format Y-m-d H:i:s.

approved_by
object | null

A workspace member. Only the id and name are exposed.

approved_at
string | null

UTC, format Y-m-d H:i:s.

recurrence
object | null

Repeat rule, or null.

origin
enum<string>

network for posts imported from the network (published outside PostClean).

Available options:
trypost,
network
publish_status
enum<string>

Publishing state on the network. pending until the post is sent; retrying waits for a retry after a network limit or a temporary network problem (such as a LinkedIn post not yet ready for its comment); pending_review and rejected come from networks that review posts (Google Business).

Available options:
pending,
publishing,
retrying,
pending_review,
published,
failed,
rejected
platform
enum<string> | null

Network of the post's channel.

Available options:
linkedin,
linkedin-page,
x,
tiktok,
youtube,
facebook,
instagram,
instagram-facebook,
threads,
pinterest,
bluesky,
mastodon,
telegram,
discord,
google_business
content_type
enum<string> | null

Post format on one network. It must belong to the destination's network. GET /content-types lists the formats of each network with their media rules. Instagram and Facebook stories publish no text. An X poll (x_poll) takes no media; its choices and length are in meta.poll.

Available options:
instagram_feed,
instagram_reel,
instagram_story,
linkedin_post,
linkedin_page_post,
facebook_post,
facebook_reel,
facebook_story,
tiktok_video,
tiktok_photo,
youtube_short,
x_post,
x_poll,
threads_post,
threads_ghost_post,
pinterest_pin,
pinterest_video_pin,
pinterest_carousel,
bluesky_post,
mastodon_post,
telegram_post,
discord_message,
google_business_post
meta

Stored per-network settings (see PlatformMeta). Empty settings may serialize as an empty array.

platform_url
string | null

Link to the published post on the network.

error_message
string | null

Why publishing failed, when it did.

display_name
string | null

Account name, kept even after the account is disconnected.

display_username
string | null
display_avatar
string | null
social_account
object | null

The account, or null once it was removed (the display_* fields keep its name).

labels
object[]
created_at
string

UTC, format Y-m-d H:i:s.

updated_at
string

UTC, format Y-m-d H:i:s.