distribution
Schedule content for publishing to social platforms
Schedule content for publishing to social platforms › Request Body
platformsTarget platforms (array). Each must have active OAuth — check list_connected_accounts first. Values: youtube, tiktok, instagram, twitter, linkedin, facebook, threads, bluesky.
media_urlURL of the media file to post. Any public HTTPS URL works — including ephemeral generator URLs (Replicate, OpenAI, DALL-E). The server persists non-R2 URLs into R2 before posting so scheduled posts and byte-upload platforms (X, LinkedIn, YouTube, Bluesky) do not 404 when the source URL expires. Set auto_rehost=false to skip. Not needed if media_urls, r2_key, or job_id is provided.
media_urlsArray of 2-10 image URLs for carousel posts. Same rehosting rules as media_url — ephemeral URLs are persisted automatically. Use with media_type=CAROUSEL_ALBUM.
r2_keyR2 object key from upload_media. Signed on demand at post time — survives scheduling delays. Alternative to media_url.
r2_keysArray of R2 object keys for carousel posts. Each is signed on demand. Alternative to media_urls.
job_idAsync job ID from generate_image/generate_video. Resolves the completed job's R2 key and signs it. Alternative to media_url/r2_key.
job_idsArray of async job IDs for carousel posts. Each resolved to its R2 key. Alternative to media_urls/r2_keys.
Platform-specific metadata. Example: {"tiktok":{"privacy_status":"PUBLIC_TO_EVERYONE"}, "youtube":{"title":"My Video"}}
media_typeMedia type. Set to CAROUSEL_ALBUM with media_urls for Instagram carousels. Default: auto-detected from media_url.
captionPost caption/description text.
titlePost title (used by YouTube and some other platforms).
hashtagsHashtags to append to caption. Include or omit the "#" prefix — both work. Example: ["ai", "contentcreator"] or ["#ai", "#contentcreator"].
schedule_atISO 8601 UTC datetime for scheduled posting (e.g. "2026-03-20T14:00:00Z"). Omit to post immediately. Must be in the future.
project_id^([0-9a-fA-F]{8}-[0-…Social Neuron brand/project ID to associate this post with. Provide this when the account has multiple brands so brand voice and connected account routing stay scoped to the right brand.
response_formatOptional response format. Defaults to text.
attributionIf true, appends "Created with Social Neuron" to the caption. Default: false.
account_id^([0-9a-fA-F]{8}-[0-…Connected account ID to post from. Optional when the resolved project has exactly one active account for the target platform — it is auto-bound. Required (with a clear error listing candidates) when multiple accounts exist for the same platform. Use list_connected_accounts to find the right ID. The account must be active and bound to the exact project_id.
Per-platform account IDs when posting to multiple platforms. Example: {"twitter": "abc123", "instagram": "def456"}. Use list_connected_accounts with the same project_id to find IDs.
auto_rehostWhether to persist non-R2 media_url/media_urls into R2 before posting. Default: true. Set to false only if you know the source URL will outlive the scheduling window and every target platform supports URL ingest.
idempotency_key^[a-zA-Z0-9_-]{8,128…Stable 8-128 character retry key (letters, numbers, underscore, hyphen). Reuse the same key when retrying the same publish request to prevent duplicate posts.
Schedule content for publishing to social platforms › Responses
Tool executed. isError:true in the body indicates a tool-level error.
isErrorAtomically move an unclaimed scheduled post to a new time within its brand project
Atomically move an unclaimed scheduled post to a new time within its brand project › Request Body
post_id^([0-9a-fA-F]{8}-[0-… · requiredPost ID returned by list_recent_posts.
scheduled_at^(?:(?:\d\d[2468][04… · requiredNew future publish time as an ISO 8601 datetime with timezone.
project_id^([0-9a-fA-F]{8}-[0-…Brand/project ID that owns the post. Defaults to the authenticated key's project or the account default.
expected_scheduled_at^(?:(?:\d\d[2468][04…Optional current schedule timestamp. If it changed since you read it, the update is rejected instead of silently overwriting it.
response_formatAtomically move an unclaimed scheduled post to a new time within its brand project › Responses
Tool executed. isError:true in the body indicates a tool-level error.
isErrorList recently published or scheduled posts
List recently published or scheduled posts › Request Body
project_id^([0-9a-fA-F]{8}-[0-…Brand/project ID to scope posts. Defaults to the authenticated key's project or the account default.
platformFilter to a specific platform.
statusFilter by post status.
daysNumber of days to look back. Defaults to 7. Max 90.
limitMaximum number of posts to return. Defaults to 20.
response_formatOptional response format. Defaults to text.
List recently published or scheduled posts › Responses
Tool executed. isError:true in the body indicates a tool-level error.
isErrorList connected social media accounts
List connected social media accounts › Request Body
project_id^([0-9a-fA-F]{8}-[0-…Brand/project ID to scope connected accounts. Use the same project_id when calling schedule_post.
include_allIf true, include expired or inactive accounts as well as usable accounts.
response_formatOptional response format. Defaults to text.
List connected social media accounts › Responses
Tool executed. isError:true in the body indicates a tool-level error.
isErrorMint a single-use deep link for a user to complete platform OAuth in their browser
Mint a single-use deep link for a user to complete platform OAuth in their browser › Request Body
platformPlatform to connect. Lower-case: instagram, tiktok, youtube, etc.
project_id^([0-9a-fA-F]{8}-[0-…Brand/project ID to bind the new social account to. Required when the account has multiple brands.
response_formatResponse format. Default: text.
Mint a single-use deep link for a user to complete platform OAuth in their browser › Responses
Tool executed. isError:true in the body indicates a tool-level error.
isErrorPoll until a platform connection becomes active or timeout
Poll until a platform connection becomes active or timeout › Request Body
platformPlatform to wait for.
project_id^([0-9a-fA-F]{8}-[0-…Brand/project ID to scope the connection poll. Use the same project_id passed to start_platform_connection.
timeout_sHow long to wait, in seconds. Default 120.
poll_interval_sPoll interval in seconds. Default 5.
response_formatResponse format. Default: text.
Poll until a platform connection becomes active or timeout › Responses
Tool executed. isError:true in the body indicates a tool-level error.
isError