How to publish a video post
Send POST /api/content/video with connection slugs and exactly one entry in medias: a media library ID, a public video URL, or an uploaded file. Set contentFormat to short_video, feed_video or story to choose between a Reel or Short, a regular feed video and a story.
Multipart uploads to this endpoint are capped at 512 MB. Larger files should go to the media library first (500 MB per upload there) or be passed as a public URL. Per-platform size and duration limits are in platform constraints.
How do I publish a video?
1. Sidebar > New Post.
2. Choose the video content type and upload the file or pick it from the
Media Library.
3. Select accounts and a format (for example short video or feed video).
4. Add the caption and any platform options (TikTok privacy, YouTube type).
5. Click Publish.socifyr post "New demo" --media demo.mp4 --format short_video \
--to instagram-mybrand,tiktok-mybrand,youtube-mychannel --waitimport { readFileSync } from 'node:fs'
const upload = await socifyr.uploads.video({
connections: ['instagram-mybrand', 'tiktok-mybrand', 'youtube-mychannel'],
medias: [readFileSync('demo.mp4')],
text: 'New demo',
contentFormat: 'short_video',
})
const result = await socifyr.uploads.waitForCompletion(upload.id!)
console.log(result.status)# Python takes a media library ID or a public URL.
res = client.uploads.video(
connections=["instagram-mybrand", "tiktok-mybrand"],
medias=["6a04f715d3d7d93575e65d13"],
text="New demo",
)
status = client.uploads.get_status(res["requestId"])
print(status["status"])# Multipart: upload the file in the same request
curl -X POST https://api.socifyr.com/api/content/video \
-H "Authorization: Bearer $SOCIFYR_API_KEY" \
-H "X-Workspace-Id: $SOCIFYR_WORKSPACE_ID" \
-F "connections[]=instagram-mybrand" \
-F "connections[]=tiktok-mybrand" \
-F "medias[]=@demo.mp4" \
-F "text=New demo" \
-F "contentFormat=short_video"
# JSON: reuse a library asset
curl -X POST https://api.socifyr.com/api/content/video \
-H "Authorization: Bearer $SOCIFYR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"connections":["instagram-mybrand"],"medias":["6a04f715d3d7d93575e65d13"],"text":"New demo"}'{
"tool": "post_video",
"arguments": {
"connections": ["instagram-mybrand", "tiktok-mybrand"],
"video": "6a04f715d3d7d93575e65d13",
"text": "New demo",
"contentFormat": "short_video"
}
}Prompt for your agent: "Find demo.mp4 in my media library and post it as a short video to Instagram and TikTok with the caption 'New demo'." The agent calls list_media (filter type: video), then post_video.
What does the response look like?
{
"success": true,
"data": {
"success": true,
"requestId": "7c1a2f6e-93a1-4c1f-9d2d-1e0b6a4f8c33",
"usage": { "count": 6, "limit": 30, "remaining": 24 },
"uploadId": "6a05032a84584482ace13d5f"
}
}Video processing can take minutes. Use --wait, waitForCompletion, or webhooks instead of blocking your request thread.
What errors can I get, and how do I fix them?
| Error | Fix |
|---|---|
Video "x.mp4" is 1920x1080 (landscape). YouTube only classifies square or vertical videos up to ... as Shorts (400) | Switch the YouTube video type to Standard, or use a vertical video. |
All media must be of type "video" (400) | The ID points at an image. Check socifyr media get <id>. |
Only one video file can be posted at a time (CLI) | Pass one file. Use photos for several images. |
| Channel error mentioning duration or file size | Trim or compress. Limits are in platform constraints. |
| TikTok post lands as an inbox draft | The webhook payload carries a note for this case. See TikTok. |
FAQ
Can I post a video to several platforms with different formats?
Yes. Set contentFormat for the post, and override per account with platformOptions. See Cross-posting.
Does the Python SDK upload files?
No. Upload the file with the TypeScript SDK, the CLI (socifyr media upload) or REST, then pass the ID. See the feature matrix.