Publish a post now
create_postCreate and publish a post to one or more social media platforms immediately.
Octopost handles formatting, auth and uploads. Which networks work today is in the server instructions (and get_guide topic "platforms").
PLATFORM CONTENT LIMITS (checked before anything is published: if the text or any segment is too long for one of the networks, the call fails with the count and nothing goes out):
Twitter/X: 280 chars (URLs count as 23 chars). Can't mix video with images.
Bluesky: 300 graphemes. Octopost auto-generates link facets.
LinkedIn: 3,000 chars.
Threads: 500 chars.
Mastodon: ~500 chars (varies by server; checked when publishing).
TIPS:
If a platform fails, the post still succeeds on other platforms — check the response for per-platform results.
A slow publish (Threads with media can take minutes) answers after ~20 s with status "publishing" and carries on: check it with get_post. Pass an idempotency_key; if a call times out with no postId, retry with the same key (you get the original post, never a second).
Use cross_link_enabled + primary_platform to post to one platform first, then share the link on others.
Polls are supported on Twitter (2-4 options, 5 min to 7 day duration) and Mastodon.
APPROVAL: if the account requires approval for every post (an owner setting), create_post saves the post as pending_approval instead of publishing and the result says so. Tell the user to approve it from the email Octopost sends; don't approve it yourself. To ask for a review yourself, use queue_post or schedule_post with needs_approval=true.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"content": "<content>",
"platforms": "<platforms>"
},
"name": "create_post"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| poll | No | Create a poll. Only works on Twitter and Mastodon. | |
| tiktok | No | Required for TikTok. Ask the user; no defaults. | |
| content | Yes | The post text. Keep under 280 chars if posting to Twitter. | |
| accounts | No | Optional. Which connected account to post as when a platform has more than one, e.g. {"twitter": "@handle"}. Values: the handle, or the id from list_accounts. Leave out to use the platform's default account (marked default in list_accounts). | |
| segments | No | Optional thread reply segments (up to 24). Each becomes a reply in a chain on X/Threads/Bluesky/Mastodon; on LinkedIn the first post goes out with `content` and each segment is added as a comment on it. The whole thread publishes atomically. Canonical use case: put the main message in `content` and a URL in `segments: [{content: "https://..."}]` so the link gets attached as a reply — this avoids the algorithmic down-rank that standalone link posts get on Twitter and Threads. | |
| variants | No | Optional. A different version of the post for some networks, keyed by network, e.g. {"linkedin": {"content": "A longer take for LinkedIn"}, "twitter": {"content": "Short version", "segments": [{"content": "https://example.com"}]}}. Each network listed gets its own content, segments and/or media_urls; anything it leaves out comes from the main post (segments: [] = a single post there, media_urls: [] = no media there). Every other network gets the main post. Each version is checked against the limit of its own network. Networks must also be in platforms. With cross_link_enabled only the version for the primary network is used. | |
| platforms | Yes | Which platforms to post to. Call list_accounts first to see what's connected. | |
| video_url | No | Optional video URL. Can't be combined with images on Twitter. | |
| media_urls | No | Optional images (up to 4 for most platforms) or one video. Must be publicly reachable. Each item is a URL string or {url, alt} with alt text (recommended for images). For a file on your machine, call create_upload first. | |
| first_comment | No | Optional. Posted as the first reply right after the post (after the last segment of a thread): a reply on X, Bluesky, Mastodon and Threads, a comment on LinkedIn. Good for the link or the hashtags. Same length limits as the post (LinkedIn comments: 1,250). Its result is reported per network as results.<network>.firstComment and never changes whether the post itself counts as published. | |
| allow_duplicate | No | Optional. Octopost refuses the same text to the same network within 7 days (the error names the earlier post). Set true only when posting it again is intended. | |
| content_warning | No | Mastodon spoiler text / content warning. Post content will be hidden behind this text. Important in Mastodon culture for sensitive topics. | |
| idempotency_key | No | Optional. A unique string (e.g. a UUID) for this post. Retry a timed-out call with the same key and Octopost returns the original post instead of posting again. | |
| primary_platform | No | Which platform to post to first when cross_link_enabled is true. The post URL from this platform is shared to the others. | |
| cross_link_enabled | No | Enable cross-link publishing. Posts to primary_platform first, then shares the link to other platforms using the cross_link_template. | |
| cross_link_template | No | Template for cross-link posts on secondary platforms. Variables: {platform} (primary platform name), {link} (post URL). Default: "New post on {platform}: {link}". | |
| mastodon_visibility | No | Mastodon post visibility. "public" = visible to all, "unlisted" = not on public timelines, "private" = followers only, "direct" = mentioned users only. Default: public. |