Post One Video to YouTube Shorts, TikTok, and Instagram Reels at Once
Prepare one video file that clears the duration, aspect-ratio, and size limits for all three platforms, then publish it to every connected profile with a single POST /api/posts call.
Encode one vertical MP4 (H.264/AAC, 1080x1920, 180 seconds or under, below 300 MB) and it clears the limits of Instagram Reels, TikTok, and YouTube Shorts at once. Then send a single POST /api/posts listing all three connected profiles in profiles and the file in media — each platform is tracked as its own target.
One vertical video file, encoded to clear the tightest limits across Instagram Reels, TikTok, and YouTube Shorts, is valid input for all three at once. PostGate's POST /api/posts takes one media array and one profiles array — list all three connected profiles and the same file gets delivered to every one of them in a single request, each tracked as its own target.
What file clears every limit at once?
Encode one export to the tightest common denominator across all three destinations:
- MP4, H.264 video, AAC audio — accepted by Instagram (MP4 or MOV, up to 300MB, 3 seconds to 15 minutes), TikTok (MP4 only, up to 4GB, 3 seconds to 10 minutes), and YouTube (MP4 or MOV, up to 256GB per YouTube's own upload ceiling).
- 9:16 vertical, 1080×1920 — Instagram's recommended Reels framing, TikTok's native format, and one of the two aspect ratios YouTube requires for Shorts classification (the other being square).
- 180 seconds or under — the binding constraint. YouTube only classifies a video as a Short if it's 3 minutes (180s) or shorter and vertical or square, per YouTube's Shorts eligibility documentation. TikTok (600s) and Instagram (900s) both allow far longer, so 180s is the real ceiling for a single cross-platform file. Stay above 3 seconds — Instagram and TikTok both reject anything shorter.
- Under 300MB — Instagram's video cap is the smallest of the three by a wide margin, so it's the number that actually constrains file size.
How do you publish to all three with one call?
Reference the connected Instagram, TikTok, and YouTube profile IDs in profiles and the one video URL or media ID in media. YouTube requires an explicit title, privacy setting, made_for_kids flag, and Community Guidelines confirmation under post.options.youtube — see YouTube Data API v3: Upload a Video for what each field means.
curl -X POST "https://postgate.studio/api/posts?profile_group_id=grp_acme123" \
-H "Authorization: Bearer $POSTGATE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: cross-post-clip-014" \
-d '{
"post": {
"body": "60 seconds from the full breakdown.",
"options": {
"youtube": {
"title": "The 60-second version #Shorts",
"privacy": "public",
"made_for_kids": false,
"community_guidelines_confirmed": true
}
}
},
"profiles": ["pro_instagram123", "pro_tiktok456", "pro_youtube789"],
"media": ["https://cdn.example.com/clip-9x16.mp4"]
}'How do you drop links for TikTok?
TikTok doesn't allow links in captions at all, unlike Instagram and YouTube. If your shared post.body normally includes one (a "full video" link, for example), override just the TikTok copy under post.options.body_overrides:
{
"post": {
"body": "60 seconds from the full breakdown — link in bio for the rest.",
"options": {
"body_overrides": {
"tiktok": "60 seconds from the full breakdown."
}
}
}
}How do you read the per-platform result?
The response's targets array carries one entry per profile with its own status, attempt count, and — once each platform finishes processing — its own platform_post_id and permalink. Because the platforms process asynchronously and at different speeds, expect targets to reach published at different times even though they were created in the same call. See the delivery lifecycle guide for the full state machine.
What if you need a different edit per platform?
The media array is shared across every profile in the request — there's no field to route a different file to a different platform in one call. If you've cut a shorter version specifically for YouTube Shorts, or a different crop for one platform, send it as its own POST /api/posts call with that platform's profile ID, that edited file, and its own Idempotency-Key. Each call still returns its own per-target status.
Frequently asked questions
Why does a cross-platform video need to be 180 seconds or under?
YouTube only classifies a video as a Short if it is 3 minutes (180 seconds) or shorter and vertical or square, per YouTube's Shorts eligibility documentation. TikTok allows up to 600 seconds and Instagram up to 900, so 180 seconds is the real ceiling for a single cross-platform file. Stay above 3 seconds — Instagram and TikTok both reject anything shorter.
Why does the file have to stay under 300 MB?
Instagram's video cap of 300 MB is the smallest of the three by a wide margin — TikTok allows up to 4 GB and YouTube up to 256 GB — so Instagram's limit is the number that actually constrains a shared file's size.
Can I put a link in the caption on all three platforms?
No — TikTok does not allow links in captions at all, unlike Instagram and YouTube. If your shared post.body normally includes one, override just the TikTok copy under post.options.body_overrides while the other platforms keep the original caption.
What extra fields does YouTube require in a cross-platform post?
YouTube requires an explicit title, a privacy setting, a made_for_kids flag, and a Community Guidelines confirmation under post.options.youtube. The other platforms in the same request need no extra fields for a basic video post.
Can I send a different video edit to each platform in one call?
No — the media array is shared across every profile in the request, and there is no field to route a different file to a different platform in one call. Send a platform-specific edit as its own POST /api/posts call with that platform's profile ID, the edited file, and its own Idempotency-Key.
