Creating Reels
Reels are short-form vertical videos. OmniSocials supports reels on Instagram, Facebook, YouTube (as Shorts), and TikTok. A single POST /posts/create call with type: "reel" can fan out a reel to all four platforms at once.
Supported channels
| Channel ID | Platform | Format | Max duration |
|---|---|---|---|
instagram | Instagram Reels | Vertical 9:16 | 90 seconds |
facebook | Facebook Reels | Vertical 9:16 | 90 seconds |
youtube | YouTube Shorts | Vertical 9:16 | 60 seconds |
tiktok | TikTok | Vertical 9:16 or 16:9 | 10 minutes |
Calling with type: "reel" and a channel that does not support reels (LinkedIn, X, Pinterest, etc.) returns 400.
Minimal example
Code
Reels always require a single video file. Image-only or multi-video reel requests return 400.
Cross-posting a reel across all four platforms
Include every channel ID in accounts and use per-platform options for each platform's specific requirements.
Code
Every platform-specific key only applies to its own channel. Instagram ignores the youtube and tiktok blocks. YouTube ignores the instagram and tiktok blocks. And so on.
Platform-specific options
Each reel-capable platform has its own set of options. Pass them under the matching channel ID key.
Instagram reel options
| Field | Type | Description |
|---|---|---|
instagram.share_to_feed | boolean | Also show the reel on the profile feed grid |
instagram.thumbnail_type | string | from-video or from-library |
instagram.thumb_offset | number | Timestamp in milliseconds, used when thumbnail_type is from-video |
instagram.cover_url | string | URL of a custom cover image, used when thumbnail_type is from-library |
YouTube Shorts options
| Field | Type | Description |
|---|---|---|
youtube.title | string | Video title, max 100 characters. Defaults to "YouTube Short". |
youtube.tags | array | Discovery tags. Max 500 characters total. |
youtube.privacy_status | string | public, private, or unlisted |
youtube.category_id | string | YouTube category. Defaults to "22" (People & Blogs). |
youtube.made_for_kids | boolean | COPPA disclosure. Disables comments and interactions when true. |
youtube.notify_subscribers | boolean | Send the subscriber notification when published |
youtube.contains_synthetic_media | boolean | Disclose AI-generated content |
TikTok options
| Field | Type | Description |
|---|---|---|
tiktok.privacy_level | string | Required. PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY |
tiktok.disable_comment | boolean | Disable comments on the reel |
tiktok.disable_duet | boolean | Disable duets |
tiktok.disable_stitch | boolean | Disable stitches |
tiktok.is_aigc | boolean | Disclose AI-generated content |
tiktok.brand_content_toggle | boolean | Mark as paid partnership / branded content |
TikTok requires privacy_level on every reel. Omitting it returns 400.
Facebook Reels
Facebook has no specific reel option fields. The default reel body works.
Different video per platform
Sometimes you want a slightly different cut for each platform (e.g. a shorter version for YouTube Shorts where the limit is 60 seconds, and a longer cut for TikTok where the limit is 10 minutes). Use the per-platform media_urls shape:
Code
Media requirements
| Platform | Format | Aspect | Duration | File size |
|---|---|---|---|---|
| MP4 | 9:16 | 3 to 90 seconds | Up to 1 GB | |
| MP4 | 9:16 | 3 to 90 seconds | Up to 1 GB | |
| YouTube Shorts | MP4 | 9:16 | Up to 60 seconds | Up to 256 MB |
| TikTok | MP4 or MOV | 9:16 or 16:9 | 3 seconds to 10 minutes | Up to 4 GB |
Videos outside these constraints are rejected at publish time. OmniSocials does not transcode, trim, or re-encode.
The safest format for cross-platform reels: MP4, H.264 codec, 1080 × 1920 vertical, under 60 seconds, under 100 MB. That passes every platform's requirements.
Thumbnails and cover images
Each platform picks the reel cover differently:
- Instagram: default is the first frame. Override with
instagram.thumb_offset(pick a video frame) orinstagram.cover_url(supply a custom image). - Facebook: default is the first frame. No override currently supported through the API.
- YouTube Shorts: YouTube auto-selects the thumbnail. Custom thumbnails for Shorts are not supported by the YouTube API.
- TikTok: TikTok auto-selects a frame. Custom covers can be set under
tiktok.video_cover_timestamp_ms(timestamp in milliseconds, pick a frame).
Scheduling reels
Reels are schedulable the same way as feed posts. Add scheduled_at (ISO 8601 UTC).
Code
Limitations
- Reels must have exactly one video. Multi-video or image reels are rejected.
type: "reel"is rejected on platforms that do not support reels. Mixing reel-capable and non-reel-capable channels in the sameaccountsarray returns400.- YouTube Shorts require the channel to be monetization-eligible on YouTube. Non-eligible channels can still publish but the video may appear as a regular video instead of a Short.
- TikTok branded-content reels (
brand_content_toggle: true) go through TikTok's review workflow and may take longer to publish. - Instagram enforces a 75-day maximum lookahead for scheduled reels. Scheduling further out returns
400.
Related reading
- Creating Posts for the full field reference
- Cross-Posting for the one-request-many-platforms model
- Creating Stories for the ephemeral story workflow
- Instagram, TikTok, YouTube for full per-platform specs