Raw schema
{
"type": "object",
"properties": {
"platforms": {
"type": "array",
"items": {
"type": "string",
"enum": [
"telegram",
"bluesky",
"mastodon",
"discord",
"tiktok",
"youtube",
"reddit",
"linkedin",
"facebook",
"instagram",
"x"
]
},
"minItems": 1,
"description": "Platforms to publish to, all in one call, e.g. [\"linkedin\",\"bluesky\"]."
},
"text": {
"type": "string",
"description": "Post text used for every platform that has no per_platform draft."
},
"per_platform": {
"type": "object",
"description": "Per-platform drafts: { \"<platform>\": { \"text\": \"…\", \"title\": \"…\", \"tags\": [\"…\"] } }. X also takes \"thread\" (the posts after text, in order) and \"reply\" (one post under the last one, e.g. the link).",
"additionalProperties": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"title": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"thread": {
"type": "array",
"maxItems": 25,
"items": {
"type": "string",
"maxLength": 1000
},
"description": "X only: the posts of a thread after text, each a reply to the one before (max 25, each <= 280 as X counts)."
},
"reply": {
"type": "string",
"maxLength": 1000,
"description": "X only: one post under the last post of the chain, e.g. the link."
}
}
}
},
"title": {
"type": "string",
"description": "Title, used by YouTube."
},
"video_url": {
"type": "string",
"format": "uri",
"description": "Public https URL of a video. Required for YouTube; TikTok takes a video or photos."
},
"photo_url": {
"type": "string",
"format": "uri",
"description": "Public https URL of an image."
},
"media": {
"type": "array",
"minItems": 1,
"maxItems": 35,
"description": "Several images (or images and videos) in one post, in order: an Instagram carousel (up to 10), TikTok photo post (up to 35 images; PNG is converted to JPEG automatically for Instagram and TikTok), Bluesky (up to 4 images), Mastodon (up to 4), LinkedIn (up to 20 images, or one PDF document). Networks that take one item get the first. Each item: { url, type: image|video|document, alt? }.",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public https URL of the file."
},
"type": {
"type": "string",
"enum": [
"image",
"video",
"document"
],
"description": "Default image."
},
"alt": {
"type": "string",
"maxLength": 1500,
"description": "Alt text (used by Bluesky, Mastodon and LinkedIn)."
},
"title": {
"type": "string",
"maxLength": 200,
"description": "Document title, used by LinkedIn."
}
},
"required": [
"url"
],
"additionalProperties": false
}
},
"privacy": {
"type": "string",
"enum": [
"public",
"unlisted",
"friends",
"private"
],
"description": "Who can see the TikTok and YouTube posts: public (everyone), unlisted (YouTube), friends (TikTok mutual followers) or private (only the account owner). TikTok asks that the account owner choose this for each TikTok post. Without it a TikTok post goes out private and YouTube uses the channel default."
},
"brand_id": {
"type": "string",
"description": "Which brand's accounts to use. Omit to use the default brand."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"description": "Optional unique key; a repeat with the same key within 24 h is refused instead of posted twice."
}
},
"required": [
"platforms"
],
"additionalProperties": false
}