API Reference
The Upload-Post API provides comprehensive endpoints for content management across multiple social media platforms. All endpoints require authentication via API key in the Authorization header.
Core Upload APIs
Video Upload API
Upload videos to TikTok, Instagram, LinkedIn, YouTube, Facebook, X (Twitter), Threads, Pinterest, Bluesky, Discord, Telegram, and Google Business Profile. Supports both synchronous and asynchronous uploads with scheduling capabilities. Reddit posting is currently unavailable (HTTP 503 error_code: "reddit_unavailable").
Endpoint: POST /api/upload
Supported Platforms: TikTok, Instagram, LinkedIn, YouTube, Facebook, X (Twitter), Threads, Pinterest, Bluesky, Discord, Telegram, Google Business Profile, Mastodon, WordPress. Reddit posting is currently unavailable (reddit_unavailable).
Photo Upload API
Upload photos and image carousels to LinkedIn, Facebook, X (Twitter), Instagram, TikTok, Threads, Pinterest, Bluesky, Discord, Telegram, and Google Business Profile. Perfect for visual content distribution across platforms. Reddit posting is currently unavailable.
Endpoint: POST /api/upload_photos
Supported Platforms: LinkedIn, Facebook, X (Twitter), Instagram, TikTok, Threads, Pinterest, Bluesky, Discord, Telegram, Google Business Profile, Mastodon, Lemmy, WordPress. Reddit posting is currently unavailable (reddit_unavailable).
Text Upload API
Create and distribute text-only posts across social platforms. Ideal for announcements, updates, and text-based content.
Endpoint: POST /api/upload_text
Supported Platforms: X (Twitter), LinkedIn, Facebook, Threads, Bluesky, Discord, Telegram, Google Business Profile, Slack, Mastodon, Nostr, Lemmy, Dev.to, Hashnode, WordPress, Whop, Listmonk. Reddit posting is currently unavailable (reddit_unavailable).
Also covers: LinkedIn polls (linkedin_poll_question + linkedin_poll_options[]) and long-form X Articles (x_article_title, publish or save as draft).
Platform How-To Guides
Step-by-step guides for the most requested platforms, with cURL, Python and JavaScript examples:
- Post to TikTok via API — no TikTok developer app or audit required
- Post to Instagram via API — without your own Meta app approval
- Post to YouTube via API — no Google Cloud quota setup
- Post to LinkedIn via API — profiles, company pages and documents
- Post to X (Twitter) via API — tweets, threads and media
- Labeling AI-Generated Content — the
is_ai_generatedflag and per-platform AI-disclosure mapping (TikTok, Instagram, YouTube, X)
Upload Management APIs
Webhooks & Notifications
Real-time POST notifications for upload results and social account connection changes, signed with HMAC-SHA256 (X-Upload-Post-Signature). Account-level and per-profile webhooks.
Endpoints: GET/POST/DELETE /api/uploadposts/users/notifications, POST /api/uploadposts/users/webhook-secret, GET/POST/DELETE /api/uploadposts/users/profile-webhook
Upload Status
Track the progress and results of asynchronous uploads initiated with async_upload=true or scheduled posts. Essential for monitoring long-running upload operations and checking scheduled post execution status.
Endpoint: GET /api/uploadposts/status
Parameters: request_id (for async uploads) or job_id (for scheduled posts)
Use Case: Check status of background uploads and scheduled posts, get detailed results per platform
Upload History
Retrieve a paginated history of all your past uploads across platforms. Includes detailed metadata, success/failure status, and platform-specific information.
Endpoint: GET /api/uploadposts/history
Features: Pagination, filtering, comprehensive upload metadata
Filters: platform, status, profile_username, start/end, and exact request_id / job_id / external_id lookups
Schedule Management
Schedule posts for future publication across supported platforms. Manage your content calendar programmatically.
Endpoint: Various scheduling endpoints
Supported Platforms: X (Twitter), LinkedIn, Facebook, Instagram, TikTok, Bluesky, Threads, Pinterest, YouTube, Discord, Telegram
Correlation: Send an external_id on upload to map scheduled jobs back to records in your own system without matching on the (editable) title.
AI Shorts API
Send a short-form video and get AI-written titles, descriptions, captions and hashtags per platform, or rewrite existing captions into another language. Uses the monthly AI Shorts quota of your plan.
Endpoints: POST /api/uploadposts/analyze-shorts, POST /api/uploadposts/rewrite-captions
Supported Platforms: YouTube, Instagram, TikTok, Facebook
Set YouTube Thumbnail
Set or replace the custom thumbnail of an already-published YouTube video from a file or a public URL.
Endpoint: POST /api/uploadposts/youtube/thumbnail
Supported Platforms: YouTube
Instagram Interactions
Media List
Retrieve a list of recent media (posts, reels, videos, pins, tweets, etc.) from any connected social media account. Supports Instagram, TikTok, YouTube, LinkedIn, Facebook, X, Threads, Pinterest, Bluesky, and Reddit.
Endpoint: GET /api/uploadposts/media
Returns: Media IDs, captions, media types, permalinks, timestamps, thumbnail URLs
Pagination: limit (default 25, max 100, capped per platform) and cursor for cursor-based paging. LinkedIn, Discord and Telegram support limit only.
Comments (all platforms)
List, create and delete comments on your posts across Instagram, Facebook, YouTube, LinkedIn, TikTok, X, Threads and Bluesky with one consistent API. Reddit comments return 503 reddit_unavailable.
Endpoints:
GET /api/uploadposts/comments- List comments on a post; addcomment_idto get the replies under one comment insteadPOST /api/uploadposts/comments/create- Comment on a post or reply to a commentDELETE /api/uploadposts/comments/delete- Delete a commentPOST /api/uploadposts/comments/action- platform-specific verbs (hide/unhide,like/unlike,pin/unpin, Facebookedit, YouTubehold, Instagramenable_comments/disable_comments, Threadsapprove/ignore)
TikTok: supported on accounts that report the comments capability, i.e. reconnected accounts. post_id is the video id. A comment created on TikTok takes ~10 s to appear in a listing.
Instagram Comments
Retrieve comments on Instagram posts and send private replies (DMs) to commenters. Supports both media IDs and post URLs.
Endpoints:
GET /api/uploadposts/comments- Get comments on an Instagram postPOST /api/uploadposts/comments/reply- Send a private reply DM to a commenter
Required Permission: instagram_business_manage_comments
Instagram Direct Messages
Send direct messages to Instagram users and retrieve DM conversations. Supports customer support workflows and follow-up messaging within Instagram's 24-hour messaging window policy.
Endpoints:
POST /api/uploadposts/dms/send- Send a DM to an Instagram user by IGSIDGET /api/uploadposts/dms/conversations- Retrieve Instagram DM conversations
Required Permission: instagram_business_manage_messages
AutoDM Monitors
Set up persistent monitors that automatically send private DMs to users who comment on your Instagram posts. Monitors run in the background 24/7 with built-in duplicate prevention and rate limiting.
Endpoints:
POST /api/uploadposts/autodms/start- Start a new comment monitorGET /api/uploadposts/autodms/status- Get status of all monitors (supports?include_inactive=trueto also return stopped/expired ones)GET /api/uploadposts/autodms/logs- Get activity logs for a monitorPOST /api/uploadposts/autodms/pause- Pause a monitorPOST /api/uploadposts/autodms/resume- Resume a paused monitorPOST /api/uploadposts/autodms/stop- Stop a monitorPOST /api/uploadposts/autodms/delete- Delete a monitor
Limits: 2 monitors per profile per day, auto-expires after 15 days
Platform Integration APIs
Analytics API
Retrieve detailed analytics and performance metrics for your social media profiles across connected platforms.
Endpoint: GET /api/analytics/{profile_username}
Supported Platforms: Instagram, TikTok, LinkedIn, Facebook, X (Twitter), YouTube, Threads, Pinterest, Reddit
Metrics: Followers, impressions, reach, profile views, time-series data, metric_type, Instagram follower_demographics and engaged_audience_demographics
Total Impressions & Post Analytics
Get unified total impressions aggregated across platforms, per-post analytics, and platform metrics config. All analytics endpoints are consolidated in the Analytics API page.
Endpoints: GET /api/uploadposts/total-impressions/{profile_username} · GET /api/uploadposts/post-analytics/{request_id} · GET /api/uploadposts/post-analytics?platform_post_id= · GET /api/uploadposts/post-analytics/cached
Features: Date range filtering, per-platform breakdown, live post metrics, profile snapshots, analytics for organic posts via platform_post_id, and the full TikTok per-post breakdown (retention curve, impression sources, audience types, reach, favorites, new followers)
Cached Post Analytics
Bulk replay of per-post metrics Upload-Post already fetched, instead of calling the platforms again. Only contains posts previously read through a live endpoint; there is no background refresh. Not subject to the 100 requests / 5 minutes platform analytics rate limit.
Endpoint: GET /api/uploadposts/post-analytics/cached
Features: Cursor pagination (up to 200 posts per page), platform filter, since/until date range, per-row captured_at freshness marker
Audience Insights
Who follows an account, when they are online, what they tap on the profile and
how it compares to its category. One endpoint with a platform, the same shape
as /comments and /post-analytics. activity_by_hour is the field to build a
publishing schedule on.
Endpoint: GET /api/uploadposts/audience
Returns: range (the window actually used, after trimming), audience (countries / cities / ages / genders), activity_by_hour, followers_daily, profile_actions, bio_description, benchmark_categories, and benchmark when benchmark_category is sent
Supported platforms: tiktok
Required capability: profile_analytics
Get Facebook Pages
Retrieve all Facebook pages accessible through connected accounts. Required for posting to specific Facebook pages.
Endpoint: GET /api/uploadposts/facebook/pages
Returns: Page IDs, names, profile pictures, account associations
Pin a Facebook Page to a Profile
Pin one Facebook Page to a profile so every upload from that profile targets it without passing facebook_page_id. The pin takes precedence over the request parameter.
Endpoint: GET/POST/DELETE /api/uploadposts/users/facebook-page
Returns: Available Pages plus the pinned facebook_page_id / facebook_page_name
Get LinkedIn Pages
Fetch LinkedIn company pages associated with your connected accounts. Essential for business page posting.
Endpoint: GET /api/uploadposts/linkedin/pages
Returns: Organization URNs, company names, vanity URLs, page logos
Pin a LinkedIn Page to a Profile
Pin one LinkedIn company Page to a profile so every upload from that profile posts as that Page without passing target_linkedin_page_id. The pin takes precedence over the request parameter.
Endpoint: GET/POST/DELETE /api/uploadposts/users/linkedin-page
Returns: Available Pages plus the pinned linkedin_page_id / linkedin_page_name
Get Google Business Locations
List the Google Business Profile locations available to an account. Essential for agencies and SaaS platforms where users manage multiple locations. Pass the chosen location's name as gbp_location_id on the upload request, or pin it to the profile once and omit the parameter.
Endpoint: GET /api/uploadposts/google-business/locations
Returns: Location IDs and business names
Post destinations: Local Posts (the "Updates" tab, default) or the location's Media/Gallery tab via gbp_post_type=MEDIA + gbp_media_category
Pin a Google Business Location to a Profile
Pin one Google Business location to a profile so every upload from that profile publishes there without passing gbp_location_id. Google's OAuth chooser only picks the Google account, so this is how a multi-location account stops being asked to select one on every post. The pin takes precedence over the request parameter.
Endpoint: GET/POST/DELETE /api/uploadposts/users/google-business-location
Returns: Available locations plus the pinned gbp_location_id / gbp_location_name
Get Pinterest Boards
List all Pinterest boards (public and secret) from connected accounts. Required for targeting specific boards when pinning content.
Endpoint: GET /api/uploadposts/pinterest/boards
Returns: Board IDs, names, associated Pinterest accounts
Get TikTok Trending Music
List trending tracks from TikTok's Commercial Music Library — the catalogue of
songs you can attach to a video through the API with tiktok_music_id.
Endpoint: GET /api/uploadposts/tiktok/music/trending
Returns: Track id (what you send as tiktok_music_id), titles, artists, duration, artwork and audio previews
Search TikTok Music
Search the Commercial Music Library by song title or artist. TikTok has no music search endpoint, so the search runs over the trending charts Upload-Post caches — not over TikTok's whole catalogue.
Endpoint: GET /api/uploadposts/tiktok/music/search
Returns: The same track objects as the trending endpoint, ranked by relevance
Get TikTok Locations
Search TikTok places to tag a location on a post with tiktok_location_id +
tiktok_location_name.
Endpoint: GET /api/uploadposts/tiktok/locations
Returns: location_id, location_name and postal address (max 20 matches)
Get TikTok Publishing Settings
What a connected TikTok account is actually allowed to publish. TikTok narrows
the four privacy_level values per account — a private account has no
PUBLIC_TO_EVERYONE — so ask here before offering them.
Endpoint: GET /api/uploadposts/tiktok/settings
Returns: privacy_level_options, max_video_post_duration_sec and the account's comment / duet / stitch switches
Instagram Publishing Limit
Remaining Instagram content-publishing quota for a connected profile.
Endpoint: GET /api/uploadposts/instagram/publishing_limit
Threads Publishing Limit
Remaining Threads posts and replies quota (250 posts / 1000 replies per 24 hours).
Endpoint: GET /api/uploadposts/threads/publishing_limit
Retry a Failed Upload
Re-enqueue platforms that failed on an upload. The original media snapshot is reused.
Endpoint: POST /api/uploadposts/posts/retry
Unpublish a Published Post
Delete a live post. Instagram, TikTok and Threads are not supported.
Endpoint: POST /api/uploadposts/posts/unpublish
Edit a Published Post
Update caption or metadata on a live Facebook, LinkedIn, X, YouTube or Google Business post.
Endpoint: POST /api/uploadposts/posts/edit
Repost
Reshare a LinkedIn post or retweet an X post.
Endpoint: POST /api/uploadposts/posts/repost
Save a Pinterest Pin
Save (repin) a Pinterest pin onto a board.
Endpoint: POST /api/uploadposts/posts/save
Suggestions
What to tag a post with and what people search around a keyword. One endpoint
with a platform and a type, not one per network.
Endpoint: GET /api/uploadposts/suggestions
Returns: hashtags[] with name (no leading #) and view_count for type=hashtags; keywords[] with each term and its search volume for type=keywords
Supported platforms: tiktok
Required capability: profile_analytics for type=hashtags; trend_search (reconnected account) for type=keywords
Paid Ads APIs
ChatGPT Ads
Run ads inside ChatGPT from the same API key you publish with. Connect an OpenAI
Ads account once, then create campaigns, ad groups and ads, upload creatives and
pull performance insights. Spend runs on your own OpenAI billing; every object is
created paused unless you ask for active.
Endpoints: POST /api/uploadposts/ads/chatgpt/connect, GET/DELETE /api/uploadposts/ads/chatgpt/accounts, GET/POST /api/uploadposts/ads/chatgpt/campaigns, GET/POST /api/uploadposts/ads/chatgpt/adgroups, GET/POST /api/uploadposts/ads/chatgpt/ads, POST /api/uploadposts/ads/chatgpt/creatives, POST /api/uploadposts/ads/chatgpt/promote, GET /api/uploadposts/ads/chatgpt/insights
Requires: an OpenAI Ads Manager account and an API key from ads.openai.com (one key per ad account)
User Management APIs
User Profiles API
Manage user profiles and generate JWTs for linking social accounts when integrating Upload-Post into your own platform. Essential for white-label integrations and multi-user applications.
Endpoints:
POST /api/uploadposts/users- Create user profilesGET /api/uploadposts/users- Retrieve user profilesDELETE /api/uploadposts/users- Delete user profilesPOST /api/uploadposts/users/generate-jwt- Generate authentication tokensGET /api/uploadposts/users/validate-jwt- Validate tokens
White-label: the connect page supports en, es, de, fr, pt, pl and tr, plus per-key text overrides via ui_labels.
See the User Profile Integration Guide for implementation workflow.
Connect API
Build your own social account connection page instead of using the hosted one. Server-side OAuth start endpoints return the authorize URL for each platform; a single-use state authenticates the callback, and the end user returns to your redirect_url with connect_status=success|cancelled|error and a stable error_code on failure.
Endpoint:
POST /api/uploadposts/oauth/{platform}/start- Get the authorize URL for a platform
Supported Platforms: TikTok, Instagram, Facebook, LinkedIn, YouTube, X (Twitter), Threads, Reddit, Pinterest, Google Business Profile, Snapchat
Current User API
Validate your API key and retrieve basic account information including email and subscription plan.
Endpoint: GET /api/uploadposts/me
Use Case: API key validation, plan verification, account confirmation
Content Requirements
Photo Requirements
Comprehensive format specifications, file size limits, aspect ratios, and technical requirements for photo uploads across all supported platforms.
Covers: Instagram, TikTok, Facebook, X (Twitter), LinkedIn, Threads, Pinterest, Reddit, Bluesky, Discord, Telegram
Video Requirements
Detailed video format requirements, codec specifications, resolution limits, and encoding guidelines for optimal compatibility across platforms.
Covers: TikTok, Instagram, YouTube, LinkedIn, Facebook, X (Twitter), Threads, Pinterest, Reddit, Bluesky, Discord, Telegram
Includes: FFmpeg re-encoding solutions for compatibility issues
MCP Server (AI Agents)
MCP Server Integration
Every endpoint on this page is also exposed through Upload-Post's official, open-source Model Context Protocol server. Point ChatGPT, claude.ai, Claude Desktop, Claude Code or Cursor at it and your agent can publish, schedule and analyze content without a hand-written REST client.
Hosted endpoint: https://mcp.upload-post.com/mcp
In ChatGPT: listed as a reviewed app in the ChatGPT app directory — add Upload-Post in ChatGPT in one click, no Developer mode required
Authentication: API key, or OAuth 2.1 with PKCE for agents that authorize themselves
Source: github.com/Upload-Post/upload-post-mcp (MIT)
Getting Started
- Authentication: All requests require an API key in the
Authorization: Apikey your-api-key-hereheader - Base URL:
https://api.upload-post.com/api - Rate Limits: Free tier includes 10 uploads per month
- Content Guidelines: Review platform-specific requirements before uploading
For implementation examples and integration guides, see our SDK Examples and Integration Guides.