create_draft_post
posts:write
Draft a social post for the workspace. It lands in the Review queue as pending approval. Before writing, read get_platform_algorithm_hints (free) for what each platform's feed rewards right now.
Provide one variant per platform (x, linkedin, facebook, instagram, tiktok, reddit, youtube), optionally naming the connected account (see list_social_accounts). A reddit variant is a text post and needs reddit.subreddit and reddit.title; write it as a genuinely useful post for that community, not an ad, and check its rules. A youtube variant needs a video; contentText becomes its description and youtube.title its title (a vertical video up to 3 minutes posts as a Short).
A tiktok variant needs a video or 1-35 JPEG, WebP or PNG photos (PNG is converted when it publishes). Optional tiktok.title is the photo title; tiktok.isAigc labels AI-generated photos. Posts land in the TikTok inbox so the creator finishes them in the TikTok app — Direct Post to the profile is only available from the in-app composer after the required privacy, commercial-content and Music Usage Confirmation steps.
Name the connected account if needed. Attach an image or carousel by passing the postMedia returned by create_branded_image or create_carousel as a variant's media, or a video by passing the asset returned by import_media_from_url or complete_media_upload (not Reddit; LinkedIn needs MP4). An x variant can be a thread: put the first post in contentText and the rest in thread, or use create_x_thread to split long text for you.
To quote a post on X, give its link as the x variant's quoteTweetUrl. To post in an X Community the user is a member of, give its link (https://x.com/i/communities/123) as the x variant's communityUrl. To choose who can reply to an X post, set replySettings to everyone (anyone; the default), following (accounts you follow), mentionedUsers or verified; one stored value is sent on every tweet in a thread.
An x variant can instead be a poll: give poll.options (2-4 choices voters pick between, each up to 25 characters) and poll.durationMinutes (5-10080, i.e. 5 minutes to 7 days; 1440 is one day). A poll can't have media or quoteTweetUrl on the same variant, and only the first post of a thread can be a poll.
Every variant must fit its platform's limit (X 280 as X counts them, LinkedIn 3000, Instagram and TikTok 2200, Bluesky 300, Threads 500). To publish it, approve it with approve_post_group, which schedules it.
Input
titlestringrequiredShort internal title for the post group.
min length 1 · max length 140
postsarray<object>requiredOne variant per destination platform.
at least 1 items · at most 3 items
Item fields
platformstringrequiredDestination network for this variant.
one of
x,linkedin,tiktok,reddit,facebook,instagram,youtube,bluesky,threadscontentTextstringrequiredFull post copy for this platform.
min length 1 · max length 10000
socialAccountIdstring (uuid)Connected account to post from. Defaults to the workspace's connected account for the platform.
mediaobjectImage(s) or a PDF to post with this variant, usually the postMedia returned by create_branded_image or create_carousel. X takes 1-4 images; LinkedIn takes 1-20 images or one PDF document (a carousel); Facebook takes 1-10 images; Instagram needs 1-10 images (a carousel above one), 4:5 to 1.91:1. Reddit posts are text only. YouTube needs a video. TikTok takes a video or 1-35 JPEG, WebP or PNG photos (PNG is converted when it publishes). Each image may include altText (at most 1000 characters).
Option 1
kind"image"requiredassetIdstring (uuid)requiredurlstring (uri)requiredcontentTypestringrequiredsizeBytesintegerrequiredwidthintegerheightintegeraltTextstringmax length 1000
Option 2
kind"images"requiredimagesarray<object>requiredat least 2 items · at most 20 items
Item fields
assetIdstring (uuid)requiredurlstring (uri)requiredcontentTypestringrequiredsizeBytesintegerrequiredwidthintegerheightintegeraltTextstringmax length 1000
Option 3
kind"document"requiredassetIdstring (uuid)requiredurlstring (uri)requiredcontentType"application/pdf"requiredsizeBytesintegerrequiredtitlestringrequiredmin length 1 · max length 200
pageCountintegerpreviewImageUrlsarray<string (uri)>at most 20 items
Option 4
kind"video"requiredassetIdstring (uuid)requiredurlstring (uri)requiredcontentTypestringrequiredsizeBytesintegerrequireddurationSecondsnumberrequiredwidthintegerrequiredheightintegerrequired
redditobjectRequired when platform is reddit: the subreddit to post in and the post's title. contentText is the post body. Check the subreddit's rules first: many ban self-promotion.
Fields
subredditstring & stringrequiredtitlestringrequiredmin length 1 · max length 300
youtubeobjectFor platform youtube: the video's title and visibility. contentText becomes the description (up to 5000 characters). A vertical or square video of up to 3 minutes posts as a Short.
Fields
titlestringVideo title, up to 100 characters. Defaults to the copy's first line.
min length 1 · max length 100
privacyStatusstringWho can watch it. Defaults to public.
one of
public,unlisted,privatemadeForKidsbooleanWhether the video is made for children (a legal requirement). Defaults to false.
tiktokobjectFor platform tiktok: optional photo title and AI-generated flag. Posts land in the TikTok inbox by default so the creator finishes them in the TikTok app. Direct Post to the profile is only available from the in-app composer.
Fields
titlestringPhoto post title, up to 90 characters. The post copy is the description.
max length 90
isAigcbooleanSet true if the photos are AI-generated; TikTok labels them as such.
photoCoverIndexintegerWhich photo is the cover, starting at 0. Defaults to the first.
min 0 · max 34
threadarray<string>For platform x only: the posts that follow contentText in a thread, in order. Each is at most 280 characters as X counts them. They go out as replies to the first post when it publishes.
at most 24 items
quoteTweetUrlstringFor platform x only: a link to a post on X (https://x.com/name/status/123) to quote. The post goes out as a quote of it; in a thread, the first post quotes it.
min length 1 · max length 300
communityUrlstringFor platform x only: a link to an X Community the user is a member of (https://x.com/i/communities/123). The post goes to that community, where its members see it, instead of only to followers.
min length 1 · max length 300
replySettingsstringFor platform x only: who can reply to this post. One stored value; on a thread it is sent on every tweet. everyone (X's default; anyone), following (accounts you follow), mentionedUsers, or verified. Leave off other platforms.
one of
everyone,following,mentionedUsers,verifiedpollobjectFor platform x only: turns this post into a poll, instead of a plain post. In a thread, only the first post can be a poll. Can't be combined with media or quoteTweetUrl.
Fields
optionsarray<string>required2-4 choices voters pick between, each up to 25 characters.
at least 2 items · at most 4 items
durationMinutesintegerrequiredHow long the poll stays open to votes, in minutes (5-10080, i.e. 5 minutes to 7 days). 1440 is one day.
min 5 · max 10080
topicstringWhat the post is about.
max length 500
objectivestringWhat the post should achieve.
max length 500
Permission
Needs the posts:write scope: create drafts. It changes your workspace, so clients may ask you to confirm each call.
Example call
Your assistant sends this for you. It is shown so you can see the shape of a call, with placeholder values for the required fields.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "create_draft_post", "arguments": { "title": "string", "posts": [ { "platform": "x", "contentText": "string" } ] } }}Same action over the REST API
The tool runs POST /v1/orgs/{orgId}/marketing/drafts as the signed-in user, with the same validation, approval rules and limits. See it in the Drafts API reference.