Titles, Tags, Privacy and Shorts: Upload YouTube Video Through API
One authenticated POST lets you upload YouTube video through API with a title, up to 20 tags, a privacy status and an existing playlist id attached. YouTube is video-only here - no Community posts, no image or text posts - so the payload is small and the rules are strict.

Every YouTube-Specific Option Sits in One Object
youtubeConfigs carries postType, videoTitle, tags, categoryId, privacyStatus, playlistId and the notify/embed/kids/license flags, and it rides on the same POST /social-posts request that references the uploaded file.
Post to All Your Platforms at Once
Share to Instagram, TikTok, YouTube, X, and more with one click. Each post auto-adapts to fit the platform.
Visual Content Calendar
The AdaptlyPost calendar shows every draft, scheduled, and published post by day, so your posting slots stay filled.
Social Media Analytics in One Place
AdaptlyPost tracks views, likes, shares, and engagement for every connected account in one analytics dashboard.
API Access & OpenClaw Skill
Connect via API or let your OpenClaw AI agent manage posts for you. Automate social media with natural language commands.
AI Image Generator for Social Media
Generate scroll-stopping images in seconds. Just describe your vision and let AI bring it to life.
AI Caption Generator for Every Platform
The AdaptlyPost AI copilot writes captions, rewrites them per platform, and adds hashtags from a single prompt.
Social Media Content Planner
AdaptlyPost keeps drafts, scheduled posts, and published content in one queue, so you see what goes live and when.
Trusted by Creators and Teams
See how creators, marketers, agencies, and small businesses use AdaptlyPost to stay consistent and save hours every week.
Running 11 accounts across 8 platforms with almost zero friction
I am currently running 11 accounts spread across Facebook, Instagram, Threads, LinkedIn, Bluesky, YouTube, X, and TikTok, all connected and posting daily. Ease of use: 10/10. The learning curve is basically nonexistent. Scheduling posts across multiple platforms takes minutes instead of the hours it used to take me doing it manually. It has replaced at least two other subscriptions for me and I have zero regrets.
Simple, powerful and amazing support
It's easy to use, and connecting it with Claude lets me organize and distribute videos and images while staying true to my brand's style. What really stands out is the support: I told Taras I needed two new features, the ability to publish Instagram posts mixing images and videos, and to upload PDFs to LinkedIn via MCP, and he had both ready in just 3 hours. Fast, responsive, and truly amazing.
My Honest Experience Running My Social Media with AdaptlyPost + Claude AI
Then the part that still feels a little crazy: I told Claude to generate the full posts including images and graphics and schedule everything through AdaptlyPost. I went to my content calendar expecting to babysit the process. It was already filled. 30 days of posts, text and visuals, scheduled and ready. The whole thing took about 10 minutes. I used to lose hours every week to this.
Finally, a tool that fits a terminal-first workflow (and top-tier support!)
I've tried several social media scheduling tools in the past, and none of them quite clicked with my workflow. Adaptly completely changed that.
Responsive developer and a client-friendly connect link that solves a real agency pain point
My favorite feature is the Shareable Connect Link. You can generate a link so a client can connect their own social accounts, with no dashboard access required. Getting non-technical clients to hand over access to their accounts has been a constant pain point for me, and this removes most of that friction. I send a link, they click through and authorize, and I'm done.
Solid multi-account scheduler, we run 3 brands on it daily
We've been using AdaptlyPost to schedule Instagram, Facebook, LinkedIn (and Stories) across three brands. What I like most is that it stays out of the way once posts are queued. We schedule stills, carousels, and Reels/Stories in batches, review the calendar, and let it publish.
From Empty Terminal to Published Upload
Create a Key, Then Look up the Channel
Keys are issued in the dashboard under Settings > API Tokens and start with adaptly_. Send them as `Authorization: Bearer <key>` against https://post.adaptlypost.com/post/api/v1. The channel itself is connected over OAuth in the dashboard - there is no endpoint that connects, disconnects or health-checks a YouTube channel - and then `GET /social-accounts` returns its id, platform and displayName to reference in the post. One call targets one YouTube channel: a second channel is a second call, and sending two YouTube accounts in one payload is rejected with a 400.
Push the File, Then POST /Social-Posts With youtubeConfigs
Only video/mp4 and video/quicktime are accepted, and `POST /upload-urls` rejects any other mime type outright, so request presigned URLs there (1-20 files, valid for one hour), PUT the file, and create the post with `text`, `platforms: ["YOUTUBE"]`, `timezone` (IANA, e.g. "Europe/Berlin"), `contentType: "VIDEO"` and a `youtubeConfigs` object. YouTube's supported content type list is VIDEO and its max images per post is 0, so an IMAGE or TEXT post that includes YouTube never reaches the channel. The request body is validated synchronously: `videoTitle` past 100 characters, more than 20 `tags`, a missing required field or an unsupported content type all come back as a 400 on the create call itself, with no post record written and nothing to retry. `postType: "SHORTS"` requires a 9:16 file of 60 seconds or less, so check aspect ratio and duration before you call. Add `scheduledAt` to schedule instead of publishing immediately.
Read platformPostId, or Fix and Retry
`GET /social-posts/:id/results` returns the YouTube entry with `status`, `publishedAt`, `errorMessage` and `platformPostId` - the raw YouTube video id. No watch URL is ever returned, so build the link yourself from that id. This endpoint reports what YouTube did after we accepted and dispatched the upload, not whether the payload was well formed - malformed payloads never get this far, because they failed with a 400 at create. What shows up in `errorMessage` is channel-side: a `playlistId` that does not exist on the connected channel, an OAuth grant the channel owner revoked, or an upload YouTube refused or throttled during its own processing. Fix the underlying cause and call `POST /social-posts/:id/retry` with the failed `platformIds` rather than recreating the post. There is no sandbox anywhere in the API, so the closest thing to a dry run is publishing with `privacyStatus: "PRIVATE"` and flipping it in YouTube Studio afterwards.
Simple, Transparent Pricing
Choose the perfect plan for your needs
30 connected social accounts
Unlimited scheduled posts
Team collaboration
1 workspace
150 AI credits/month
AI Captions
AI Image Studio
API/MCP/CLI
Image, video & carousel posts
Direct Connector
Direct Plugin
Browser extensions
Works with
Most Popular
60 connected social accounts
Unlimited scheduled posts
3 team members
3 workspaces
400 AI credits/month
AI Captions
AI Image Studio
API/MCP/CLI
Image, video & carousel posts
Direct Connector
Direct Plugin
Browser extensions
Works with
100 connected social accounts
Unlimited scheduled posts
10 team members
10 workspaces
1000 AI credits/month
AI Captions
AI Image Studio
API/MCP/CLI
Image, video & carousel posts
Direct Connector
Direct Plugin
Browser extensions
Works with
Custom
Custom limits, white-label and priority support
Custom
Unlimited social accounts
Unlimited scheduled posts
Unlimited team members
Unlimited workspaces
Unlimited AI credits
AI Captions
AI Image Studio
API/MCP/CLI
Image, video & carousel posts
Direct Connector
Direct Plugin
Browser extensions
Works with
All plans include a 7-day free trial
Want to see the full feature comparison? View pricing page
What You Can Actually Set on a YouTube Upload
Long-Form Uploads With Metadata Attached
`postType: "VIDEO"` publishes a standard upload. `videoTitle` sets the title with a 100-character ceiling, `tags` takes up to 20 strings, `categoryId` takes YouTube's numeric category id, and the post `text` travels with the video as its body copy. Nothing beyond that object is settable: there are no thumbnail, chapter, end-screen, caption or premiere fields in this API.
Shorts on the Same Endpoint
Switch `postType` to `"SHORTS"` to upload YouTube Shorts via API - same endpoint, same youtubeConfigs, same upload-urls pipeline. The deciding constraint is the media, not the flag: a Short requires a 9:16 aspect ratio and a duration of 60 seconds or less, so validate dimensions and duration before you call rather than after.
Privacy, Notifications and the Audience Flag
`privacyStatus` accepts PUBLIC, UNLISTED or PRIVATE. `notifySubscribers` decides whether the channel's subscribers are pinged, `allowEmbedding` sets embed permission, `madeForKids` carries the audience designation, and `license` sets the video license. All of them are per-post, so a backlog of archive uploads can go out private and silent while one launch video goes public and notifies.
Adding the Upload to an Existing Playlist
Set `playlistId` in youtubeConfigs and the finished upload is filed into that playlist. It has to exist already - the API can add to a playlist but cannot create, rename, reorder or list one - so copy the id out of YouTube Studio (the `list=` value in the playlist URL) and store it in your own config. If the id is wrong, that shows up on the YouTube entry returned by `/results`.
Wire up Your First YouTube Upload
Create a key in Settings > API Tokens, import GET /openapi.json into your HTTP client, Make or n8n, and the first upload is one POST away. Test with privacyStatus PRIVATE before you go public.