Skip to main content
POST

Authorizations

Authorization
string
header
required

Workspace API key from Settings → API Keys.

Body

application/json
social_account_id
string<uuid>
required

Social account of this workspace. A post has exactly one; use POST /posts/batch for several.

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[]

Media in order. Each item is one of upload_token, url or id. Types the channel does not accept are refused.

status
enum<string>
default:draft

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

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

Format; must belong to the account's network. Omitted, it is chosen from the media.

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

Per-network settings of one destination. Pick the shape of the destination's network. Keys without a rule are dropped. Every known key is validated whatever the network, but only the keys of the destination's network are used when publishing. On update, meta is merged with the stored settings: send null for a key to clear it (string, list and object settings; boolean settings cannot be cleared, so send true or false); thread_replies replaces the whole list; poll is merged key by key, its options replaced as a list. Required to schedule or publish: TikTok privacy_level, Pinterest board_id, Discord channel_id, Google Business event on EVENT/OFFER, YouTube a title (title or the first line of the text), X poll.options (2 or more), poll.duration_minutes and a question (the post content) on x_poll. GET /content-types lists the unconditional ones (TikTok, Pinterest, Discord) per network as required_meta.

scheduled_at
string<date-time> | null

When to publish, for status: scheduled. Any date string; must be in the future and before 2038-01-19. Cannot be combined with queue. Required with status: scheduled unless queue or queue_slot is sent.

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.

Available options:
next,
top,
null
queue_slot
string<date-time> | null

Instant of one free slot from GET /channels/{account}/queue/slots, only with status: scheduled. Stores the post as a queue post in that slot; refused when the slot is taken or held by a pending approval request. Before 2038-01-19. Cannot be combined with queue. Takes the place of scheduled_at when both are sent.

label_ids
string<uuid>[]

Labels of this workspace.

Response

The created 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.