Skip to main content
Every tool is scoped. A connected agent can only call a tool if the scope was granted on the consent screen, and never beyond your team role.

list_accounts

accounts:read
List connected social accounts. Returns each account’s platform and handle.
string
An agency client id (see list_clients). When set, returns that client’s connected accounts instead of the team’s own.

list_clients

clients:read
List the agency clients under this team - each with its id, name, and status. Pass a client id as the clientId argument to publish_post, list_accounts, or list_scheduled_posts to act on that client’s behalf instead of the team’s own accounts. No arguments.

get_platform_capabilities

capabilities:read
Per-platform posting limits, formats, and supported post types.
string
A single platform (for example instagram, youtube, linkedin). Omit to get every platform.

generate_caption

generate:write
Draft a caption in your brand voice.
string
required
What the post is about (1-2000 characters).
string
Target platform, so the draft fits its norms and limits.
string
A tone hint (for example casual, professional).
string
Output language.

get_today_idea

ideas:read
Fetch today’s Muse content idea for the team - the daily, brand-grounded idea Sydium already generated. This is a read: it never generates a new idea or spends tokens. No arguments. Returns the current idea (topic, angle, format, hashtags, whyItFits, and an optional anchor - the one concrete detail to hang the post on), or null when none is in window. Paid plans see today’s idea; free plans see the idea for the current week.

add_media

media:write
Store an image or video in Sydium and return the media URL that publish_post and update_post require. Media must be Sydium-hosted - an external URL passed straight to publish_post is rejected - so call this first. Pass either file (a file attached to the conversation) or url (a direct link to the image or video itself, not a web page containing it). Returns the media URL plus its measured size, dimensions and duration, and acceptedBy / rejectedBy - which platforms will take this file. Supported: jpeg, png, gif, webp, mp4, mov, webm, up to 200MB. For a larger video, or a file on the user’s own computer, see create_upload_url. HEIC and AVIF (the iPhone photo defaults) are not supported - convert to JPEG first. The media is removed once its post publishes, so a URL cannot be reused for a second post. Call add_media again.
string
A direct, publicly reachable link to an image or video file. Redirects are followed and each destination is re-validated.
object
A file the user attached to the conversation, supplied by the host as { download_url, file_id, mime_type?, file_name? }. Only hosts that support file parameters populate this - see the note below.
string
The post type this media is for (reel, story, carousel, short…). Story and carousel limits are stricter than the platform default, so without it acceptedBy is optimistic. Check rejectedBy before scheduling.
File attachments are ChatGPT-only today. ChatGPT reads the tool’s file parameter declaration and passes attachments through, which is what makes drag-and-drop work - on the web client; ChatGPT mobile currently sends incomplete file references. Claude chat connectors have no equivalent mechanism, so there url is the only path. If a user wants to post a file from their device and attaching it is not available, ask them for a public link - or, in an agent that runs on their computer (Claude Code), use create_upload_url.
add_media is for real photos and videos. Do not generate or upload placeholder or text-only images to stand in for carousel slides - use draft_carousel.

create_upload_url

media:write
Upload a file from the user’s own computer. For agents that can run shell commands on that machine, such as Claude Code: add_media can only fetch a public link, and a file on the user’s disk has none. It is also the way in for a video over add_media’s 200MB limit - up to 2GB for video, 50MB for images. Returns a one-time uploadUrl (valid for an hour) and the url to pass to publish_post or update_post. The agent PUTs the file’s bytes to uploadUrl with Content-Type set to exactly the returned contentType; the returned curl field is that command, with FILE standing for the path:
The upload is bound to the declared size, so the file must be exactly fileSize bytes. Unlike add_media, the file is not measured, so no acceptedBy / rejectedBy is returned; publish_post still checks the file exists before scheduling. The media is removed once its post publishes.
string
required
The file’s MIME type: image/jpeg, image/png, image/gif, image/webp, video/mp4, video/quicktime (.mov) or video/webm.
integer
required
The file’s exact size in bytes.
posts:write
Draft a carousel from slide text the agent writes. Sydium stores it as a draft and returns openUrl, a link that opens it in the Sydium composer. There the user sees the slides rendered in the brand’s carousel style and colors in the Carousel Studio, adjusts them, and schedules the post. Nothing is published or scheduled. An agent cannot see a rendered slide, so a carousel is always approved by a person in Sydium. Give the user openUrl. Returns draftId, openUrl, the number of slides, the platforms it is planned for, and status: "draft".
string
required
What the carousel is about, in a sentence (1-300 characters).
object[]
required
3-20 slides in reading order, each { headline, body?, altText? }. The first slide is the cover (a hook as the headline) and the last is the close (what to do next). Keep headlines short (up to 200 characters) and put the substance in body (up to 1000).
string[]
required
Exactly two other cover hooks, different from the first slide’s headline and from each other. The user picks one of the three in the studio.
string
The post caption. Omit and the user writes it in Sydium.
string
teach, sell, or story. Defaults to teach.
string
What the close slide asks for: save, share, follow, or click. Defaults to save.
string[]
The platforms to plan it for (for example instagram, linkedin, tiktok). Defaults to instagram. The composer opens with these selected.
string
ISO 639-1 code. Omit unless the user asks for a specific language - the draft uses the brand voice’s language.
string
An agency client id (see list_clients). The draft uses that client’s brand voice, and opening it switches Sydium to that client.
The link opens in the workspace the connector was authorized for. A user signed in to a different workspace sees a “could not be opened” message - they switch workspace and open it again.

publish_post

posts:write
Publish now, or schedule for later, to one or more platforms. Returns an operation id, a rollup status, and per-target results.
string
The post text.
string[]
Up to 35 Sydium-hosted media URLs, as returned by add_media. Arbitrary external URLs are rejected.
string (ISO 8601)
A future timestamp with offset (for example 2026-07-01T09:00:00Z). Omit to publish immediately.
object[]
required
1-10 targets, each { platform, postType?, options? }. postType and options are platform-specific (for example a YouTube short).
string
An agency client id (see list_clients). When set, the post publishes using that client’s connected accounts. Connectivity is checked against the client, not the team.

get_post_status

posts:read
Per-target status of a publish or schedule operation.
string
required
The operation id returned by publish_post.

update_post

posts:write
Edit a scheduled operation: change its caption, media, and/or scheduleAt. Only targets that are still scheduled are updated - a target already publishing or published is left untouched, and the edit never races an in-flight publish. Omitted fields are left unchanged; media: [] clears media. You cannot change which platforms the operation posts to - cancel and re-create for that. Returns the operation’s state after the edit, or a 409 if no target is still scheduled.
string
required
The operation id returned by publish_post.
string
Replacement post text.
string[]
Up to 35 Sydium-hosted media URLs from add_media (same rules as publish_post). Pass [] to remove all media.
string (ISO 8601)
A new future timestamp with offset. The scheduled publish is moved to this time.
string
An agency client id (see list_clients). When set, scopes the edit to that client’s post.

list_scheduled_posts

posts:read
List the team’s upcoming scheduled posts. Each entry is one operation with its target platforms, scheduled time, and caption - so an agent can answer “what’s scheduled this week?” without knowing any ids. The caption is the post’s display text as shown in the app: the video title for YouTube, the caption for caption-first platforms. Published and failed posts are not included.
string (ISO 8601)
Window start. Omit for everything upcoming.
string (ISO 8601)
Window end. Pass from and to together to bound a range, for example the current week.
string
An agency client id (see list_clients). When set, lists only that client’s scheduled posts.

cancel_post

posts:write
Cancel a scheduled operation. Only targets that are still scheduled are cancelled - a target already publishing or published is left untouched. Returns the operation’s state after cancellation.
string
required
The operation id to cancel.

get_analytics

analytics:read
Account analytics as a daily time-series.
string (YYYY-MM-DD)
Start date. Defaults to 30 days ago.
string (YYYY-MM-DD)
End date. Defaults to today.