Publish a post
publish_postPublish content to the caller's connected account on the chosen platform. Async — returns job_id; poll get_publish_status(job_id). Rate limit: 10 calls/hour.
Media source — provide exactly one: media_url (a public https URL), draft_id (an already-uploaded SocialGPT draft), or carousel_id. If the user only has a LOCAL file on their device and you have no public URL, do NOT ask them to host it or paste a link — call get_upload_link, have them upload, then publish the resulting draft via draft_id (list_uploads returns the newest draft_id). The post_from_my_device prompt walks through this end to end.
TikTok: follow the rules from get_publish_options. post_mode='draft' sends to the TikTok inbox (the user finishes inside TikTok); post_mode='direct' publishes now and requires the full consent ritual (options_token + human-chosen privacy_level + previewed consent).
Instagram: publishes reels (media_url/draft_id) and carousels (carousel_id) immediately — no draft mode, no privacy, no TikTok ritual fields. Use share_to_feed / thumb_offset. The account must be set up for publishing (a connected Instagram professional account).
YouTube: publishes a video (media_url/draft_id) immediately — no carousels. caption becomes the video title (required). privacy is one of public | unlisted | private (default private).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Post caption (TikTok: 90 title / 4000 desc). For YouTube the caption becomes the video title (truncated to 100 chars). | |
| is_aigc | No | Direct mode, video: label as AI-generated (irreversible). | |
| privacy | No | YouTube: public | unlisted | private (default private). YouTube only. | |
| draft_id | No | post_id of an existing SocialGPT draft video — e.g. one the user just uploaded via get_upload_link (find it with list_uploads, newest first). | |
| group_id | No | Optional account-group (brand) id from list_accounts. Omit to use the default group. | |
| platform | Yes | Target platform. Required. 'tiktok' supports draft/direct + the consent ritual; 'instagram' publishes reels/carousels immediately (share_to_feed, thumb_offset); 'youtube' publishes a video immediately (caption=title, privacy). | |
| media_url | No | Public https URL of a video to post (downloaded server-side). Only when you already have a hosted URL — for a file on the user's device use get_upload_link then draft_id, never ask them to host it. | |
| post_mode | No | TikTok only — 'draft' (send to inbox) or 'direct' (publish now). Required for TikTok; omit for Instagram/YouTube. | |
| account_id | No | The account_id returned by get_publish_options. Omit to use the default connected TikTok account. | |
| carousel_id | No | Idea (hook) id with a generated carousel. | |
| disable_duet | No | Direct mode, video: disable duet. | |
| thumb_offset | No | Instagram reels: thumbnail offset in seconds. Instagram only. | |
| options_token | No | Direct mode: token from get_publish_options (15-min TTL). | |
| privacy_level | No | Direct mode: the human's choice from privacy_level_options. No default. | |
| share_to_feed | No | Instagram reels: also share to the main feed (default true). Instagram only. | |
| auto_add_music | No | Direct mode, carousel: auto-add recommended music. | |
| disable_stitch | No | Direct mode, video: disable stitch. | |
| disable_comment | No | Direct mode: disable comments. | |
| brand_content_toggle | No | Direct mode: paid partnership ('Paid partnership' label). | |
| brand_organic_toggle | No | Direct mode: promotes the creator's own brand. | |
| user_previewed_content | No | Direct mode attestation: the human previewed content + settings. | |
| user_expressly_consented | Yes | Attestation about the HUMAN: they explicitly approved sending exactly this content to the target platform. Never set true without asking them. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | ||
| job_id | Yes | ||
| status | Yes | Always 'pending' at creation; poll the matching status tool. |