The route in five steps
- Upload the MP4 once to Media Storage with
POST /medias/upload-file. According to the documentation, videos accept up to 500 MB. The response returns the file URL. - Confirm the URL. Request it and check that it responds as
video/mp4and weighs the same as your file. It takes a minute and saves you from publishing a broken video to six networks. - Create one post per network with
POST /social-media-posting/:locationId/posts: one call per connected account, each with its ownaccountIds, the text insummary, the video inmediaand, for accounts connected through OAuth, theuserId. - Configure each network separately (below).
- Poll until you see
published. A 201 only means HighLevel accepted the post. The real status arrives later, and it passes throughin_progress.
You can do it with the direct API or with HighLevel's official MCP from Claude Code. The logic is the same.
Settings that change per network
- Instagram: publish it as a
reel, with the reel type insideinstagramPostDetailsand the option to show it in the feed too. - TikTok: set the
privacyLevelexplicitly intiktokPostDetails. In our public post we left the audience on "Everyone" and turned on the branded content disclosure. - YouTube: use
youtubePostDetailswith title, type (Short or regular video) and privacy. For a regular horizontal 16:9 video, the post type ispost. - Pinterest: requires the board in
pinterestPostDetails.boardIds. No board, no pin. - Threads and Bluesky: just the text and the video, but respect their limits.
Official limits per network (video)
| Network | Max size | Duration | Text |
|---|---|---|---|
| Instagram Reels | 300 MB | 3 s to 15 min | 2,200 characters |
| TikTok | 1 GB | 3 s to 180 s (personal) or 600 s (business) | 150 (personal) or 2,200 (business) |
| YouTube Shorts | not listed | up to 60 s, vertical 9:16 | 5,000 characters |
| 2 GB | 4 s to 5 min | title 100, description 500 | |
| Threads | 1 GB | up to 5 min | 500 characters |
| Bluesky | 50 MB | up to 3 min | 300 characters |
Bluesky is the one that trips people up: an 80 MB video that works for the other five does not fit, and a long text gets rejected. Prepare a short variant of the caption for that network.
How long it really takes
These timings are our own measurements, not a HighLevel promise: YouTube about 12 seconds, Threads, Bluesky and Pinterest between one and two minutes, Instagram and TikTok around five. While a post is in progress, do not resend it: you will duplicate the post.
The traps we found
- A 201 is not a publication. Verify each network with the post list (
get-postsin the MCP) until you seepublishedand its link. If it ends upfailed, the error comes in the row. - Google Business Profile does not accept this video. It is a network you can connect in Social Planner, but not for this format.
- YouTube private to public: do it in YouTube Studio. We published first as private to test and made it public from Studio, not through the API, to avoid creating a duplicate post. When you do it, make sure the instant premiere checkbox (Premiere) is not ticked: in our case it ended up right below where the Public option was.
- Text you write in the chat does not bind the tool. If you automate with an agent, the rules (allowed accounts, limits, tone) go inside the prompt or the code, not in a separate conversation.
Before you automate it
Show a preview with the accounts, the texts and the settings, and wait for a human yes before publishing. Publishing is the only thing in this flow that cannot be cleanly undone.