add_media
ChatGPTStore an image or video in Sydium and return the media URL that publish_post and update_post require. Media MUST be hosted by Sydium - an external URL passed straight to publish_post is rejected - so call this first. Pass EITHER file (a file the user attached to this conversation) OR url (a direct, publicly reachable link to the image or video itself, not a web page containing it). Supported: jpeg, png, gif, webp, mp4, mov, webm - up to 200MB. HEIC/AVIF photos (the iPhone default) are NOT supported; ask the user to convert to JPEG. A Google Drive or Dropbox SHARE link works, as long as the file is shared with anyone who has the link. 200MB is a hard limit on this tool only - if the file is larger, do NOT keep retrying or look for another link. If the file is on the user's own computer and you can run shell commands there (Claude Code, a terminal), use create_upload_url instead: it takes a local file directly, up to 2GB for video, with no link needed. Otherwise tell the user to upload it in Sydium directly (Publish, or the media library), where there is no such limit, and then carry on with the caption and scheduling. Returns the media url plus its measured size, dimensions and duration, and acceptedBy / rejectedBy: which platforms will take this file. Pass postType when you already know it (reel, story, carousel...) - story and carousel limits are stricter than the platform default, and without it acceptedBy is optimistic. Check rejectedBy before scheduling. The media is REMOVED once its post publishes, so a url cannot be reused for a second post - call add_media again. If the user attached a file to this conversation but you cannot pass it to file, that is a limitation of the CLIENT you are running in, not of Sydium - say so plainly, in those terms, and ask for a public link, which works everywhere. Do not tell the user that Sydium cannot accept their image, and do not claim an upload happened. This is for real images and videos only. For a carousel, call draft_carousel instead: never create, render or upload placeholder or text-only images to stand in for carousel slides.
cancel_post
ChatGPTCancel a scheduled post operation by id (only targets still scheduled are cancelled)
create_upload_url
ChatGPTUpload a file from the user's OWN computer. For agents that can run shell commands on that machine (Claude Code, a terminal) - add_media can only fetch a public link, and a file on the user's disk has none, so this is how a local photo or video gets into Sydium. It is also the way for a video over add_media's 200MB limit: up to 2GB for video, 50MB for images. Steps: (1) read the file's exact size in bytes (e.g. stat -f%z FILE on macOS, stat -c%s FILE on Linux) and its type - jpeg, png, gif, webp, mp4, mov or webm; (2) call this with contentType and fileSize; (3) PUT the file's bytes to uploadUrl with the header Content-Type set to exactly the returned contentType - the returned curl is the command, with FILE replaced by the quoted path. The size must match fileSize exactly, or storage refuses the upload; (4) pass the returned url in publish_post's or update_post's media. The upload URL expires in an hour; mint a new one rather than retrying an expired one. HEIC/AVIF photos (the iPhone default) are NOT supported: convert to JPEG first (on macOS: sips -s format jpeg IN.heic --out OUT.jpg). Unlike add_media this does not measure the file, so it returns no acceptedBy/rejectedBy - publish_post still checks the file exists before scheduling. The media is REMOVED once its post publishes, so a url cannot be reused for a second post. If you cannot run commands on the user's machine (a chat app), this tool cannot help you: use add_media with a public link or an attached file.
draft_carousel
ChatGPTDraft a carousel in Sydium from slide text you write, and get a link that opens it in the Sydium composer. Sydium renders the slides in the brand's carousel style and colors; you cannot see or render them, so you do not publish them. Nothing is scheduled or published: give the user openUrl - they review the rendered slides in the Carousel Studio, adjust and schedule there. Write slides in reading order: the first is the cover (a scroll-stopping hook as the headline), the last is the close (what to do next), 3 to 20 in all. Keep headlines short and put the substance in body. Write in the brand's language; omit language unless the user names one. Never upload placeholder or text-only images with add_media to stand in for slides.
generate_caption
ChatGPTGenerate a social caption with AI
get_analytics
ChatGPTAccount analytics time-series (optional from/to YYYY-MM-DD)
get_platform_capabilities
ChatGPTGet posting limits/capabilities; optional single platform
get_post_status
ChatGPTGet a publish operation's per-target status AND its full, untruncated caption (list_scheduled_posts truncates captions at 280 chars - read the full text here before editing a post)
get_today_idea
ChatGPTFetch today's Muse content idea for the team, or for a specific agency client via clientId (a read; does not generate)
list_accounts
ChatGPTList connected social accounts for the team, or for a specific agency client via clientId. Also returns team, the workspace this connection is bound to - a connection reaches exactly one workspace, fixed when the user authorized it. If the user expected different accounts, they likely authorized a different workspace: say which one you are on and tell them to reconnect and pick the right one.
list_clients
ChatGPTList the agency clients under this team (id/name/status). Pass a client id to other tools' clientId to act for that client.
list_scheduled_posts
ChatGPTList the team's upcoming scheduled posts (optional from/to ISO dates to bound a window, e.g. this week)
publish_post
ChatGPTPublish now or schedule a post to connected platforms. media entries must be Sydium-hosted URLs returned by add_media; any other URL is rejected. Pinterest needs a board per post: set targets[].options.pinterestBoardId to a board id or name from list_accounts; a Pinterest target without one is refused up front. TikTok needs the user's OWN choices: options.privacyLevel and options.musicUsageConfirmed: true. Ask them - the second is the user agreeing to TikTok's Music Usage Confirmation and is not yours to assert. If they would rather not decide here, use options.saveAsDraft: true and they finish it in the TikTok app. A TikTok target with neither is refused up front. Do not use this to post a carousel you cannot see: Sydium renders carousels itself. Call draft_carousel and give the user its link to review the slides and schedule.
update_post
ChatGPTEdit a scheduled post operation by id: change its caption, media, and/or scheduled time. Only targets still scheduled are updated; omitted fields are left unchanged; media:[] clears media. media entries must be Sydium-hosted URLs returned by add_media; any other URL is rejected. Cannot change which platforms it posts to - cancel and re-create for that. options changes per-platform settings (cover, privacy, first comment...) and MERGES with what is already set.
add_media
Claudecancel_post
Claudedraft_carousel
Claudegenerate_caption
Claudeget_analytics
Claudeget_platform_capabilities
Claudeget_post_status
Claudeget_today_idea
Claudelist_accounts
Claudelist_clients
Claudelist_scheduled_posts
Claudepublish_post
Claudeupdate_post
Claude