Skip to content

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? ​

text
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.
bash
socifyr post "New demo" --media demo.mp4 --format short_video \
  --to instagram-mybrand,tiktok-mybrand,youtube-mychannel --wait
typescript
import { 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
# 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"])
bash
# 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"}'
json
{
  "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? ​

json
{
  "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? ​

ErrorFix
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 sizeTrim or compress. Limits are in platform constraints.
TikTok post lands as an inbox draftThe 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.

Next steps ​