API Documentation
The Status 200 Uploads API lets you upload media and publish to TikTok, Instagram, Facebook, YouTube, X (Twitter), LinkedIn, Pinterest, and Threads programmatically.
Base URL
https://app.status200uploads.com/functions/v1
All API requests use this base URL
Protocol
HTTPS
All requests must use HTTPS
Format
JSON
Request and response bodies are JSON
Supported Platforms
TikTok
Video, Photo slideshow
Image, Reel, Story, Carousel
Photo, Video, Reel, Text
YouTube
Video
X (Twitter)
Text, Image, Video
Text, Image, Video
Image Pin
Authentication
All API requests require a valid API key passed in the Authorization header using Bearer token format.
Generating API Keys
- Sign in to your dashboard
- Navigate to API Management
- Click "Generate Key" and give it a descriptive name
- Copy the key immediately - it will only be shown once
Using Your API Key
Authorization: Bearer rl_your_api_key_hereKeep Your Keys Secure
Never expose API keys in client-side code, public repositories, or logs. Use environment variables and server-side proxies. Rotate keys periodically and revoke any that may have been compromised.
Key Rotation Best Practices
- 1. Generate a new key before revoking the old one
- 2. Update all services to use the new key
- 3. Verify traffic is flowing with the new key
- 4. Revoke the old key from your dashboard
MCP server (Claude Code, Cursor, Windsurf …)
Recommended — hosted MCP: Integrations hublists every client snippet. Endpoint https://mcp.status200uploads.com/mcp terminates TLS publicly; each user attaches Authorization: Bearer rl_… (dashboard API key) or a Supabase access JWT on MCP initialization so tenants never share a password. Probe readiness with https://mcp.status200uploads.com/health.
Hosted operators keep SUPABASE_SERVICE_ROLE_KEY on the MCP container only — never expose it to agents, repos, or the browser bundle. Operational detail lives in mcp-server/README.md.
Cursor / MCP clients supporting remote HTTPS
{
"mcpServers": {
"status200-uploads": {
"url": "https://mcp.status200uploads.com/mcp",
"headers": {
"Authorization": "Bearer rl_put_your_dashboard_key_here"
}
}
}
}Rate Limits
Daily post limits are enforced per platform per account. Your plan determines how many posts you can publish each day to each connected platform. When you use the REST API at POST https://status200uploads.com/api/v2/posts, a request that would exceed your daily cap is still accepted: the server responds with HTTP 202 and queues the post for the next calendar day (see the Post endpoint reference).
Limits by Plan
| Parameter | Type | Description |
|---|---|---|
Free | 5 / day | Per platform, per account |
Beginner | 20 / day | Per platform, per account |
Apprentice | 50 / day | Per platform, per account |
Skilled | 100 / day | Per platform, per account |
Expert | 150 / day | Per platform, per account |
Agency | Unlimited | Per platform, per account |
Rate Limit Headers
Responses include headers indicating your current rate limit status:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97
X-RateLimit-Reset: 2026-04-17T00:00:00Z
Quick Start
Get up and running in two steps: upload media, then publish a post.
Upload Media
curl -X POST 'https://app.status200uploads.com/functions/v1/api-media-upload' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer rl_your_api_key' \
-d '{"url": "https://example.com/video.mp4"}'{
"success": true,
"file_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"size": 5242880,
"type": "video/mp4"
}Publish a Post
curl -X POST 'https://app.status200uploads.com/functions/v1/api-posts' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer rl_your_api_key' \
-d '{
"post": {
"accountId": "@yourprofile",
"platform": "tiktok",
"content": {
"text": "My first API post! #automation",
"mediaID": ["YOUR_FILE_ID"]
},
"tiktok": {
"privacyLevel": "PUBLIC_TO_EVERYONE"
}
}
}'{
"success": true,
"post_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"platform": "tiktok",
"status": "published"
}API Reference
/v1/postsCreate and publish a post to a connected social media platform. Each request publishes to one platform at a time.
REST v2 — Use POST https://status200uploads.com/api/v2/posts with the same JSON body for TikTok, Instagram, Facebook, and YouTube. If you have already hit your plan's daily post limit for that platform, the server responds with 202 Accepted and queues the post for the next calendar day (response shape below). On immediate success the status is 200 with the platform payload.
Request Headers
| Parameter | Type | Description |
|---|---|---|
Content-Typerequired | string | application/json |
Authorizationrequired | string | Bearer rl_your_api_key |
Body Parameters
| Parameter | Type | Description |
|---|---|---|
post.accountIdrequired | string | Profile handle from your Connections page (e.g. "@myprofile") |
post.platformrequired | string | Target platform: tiktok, instagram, facebook, youtube, x, linkedin, pinterest |
post.content.textrequired | string | Caption, title, or tweet text |
post.content.mediaID | string[] | Array of file IDs from the media upload endpoint (preferred) |
post.content.mediaUrls | string[] | Array of public URLs (alternative to mediaID) |
post.scheduledFor | string | ISO 8601 timestamp to schedule the post for a future time |
Platform-Specific Options
Include a platform object in the request body alongside the required fields above. Each platform supports different options:
Example
curl -X POST 'https://app.status200uploads.com/functions/v1/api-posts' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer rl_your_api_key' \
-d '{
"post": {
"accountId": "@myprofile",
"platform": "instagram",
"content": {
"text": "Check out this reel! #trending",
"mediaID": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
},
"instagram": {
"postType": "reel",
"shareToFeed": true
}
}
}'{
"success": true,
"post_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"platform": "instagram",
"status": "published"
}POST /api/v2/posts when the daily post cap for that platform is already reached (scheduled in dashboard as a scheduled post).{
"queued": true,
"code": "queued_for_next_day",
"message": "Daily post limit reached for instagram (5/5 today). Post queued for 2026-05-17T14:30:00.000Z.",
"scheduled_post_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"scheduled_at": "2026-05-17T14:30:00.000Z",
"limit": 5,
"used": 5,
"plan": "free"
}| Status | Error | Description |
|---|---|---|
| 400 | Bad Request | Missing required fields or invalid platform |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | Account not connected or insufficient permissions |
| 429 | Too Many Requests | Cooldown between rapid requests to the same platform on the legacy Supabase endpoint, or other spacing limits — not the daily-post cap (v2 uses 202 for daily cap) |
| 500 | Server Error | Publishing failed, or v2 could not save the queued post (error code queue_failed) |
/v1/postsList all posts for the authenticated user. Returns posts in reverse chronological order with pagination support.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
platform | string | Filter by platform (tiktok, instagram, facebook, youtube, x, linkedin, pinterest) |
status | string | Filter by status (published, failed, scheduled, pending)Default: all |
limit | number | Number of results to returnDefault: 20 |
offset | number | Number of results to skip for paginationDefault: 0 |
curl 'https://app.status200uploads.com/functions/v1/api-posts?platform=tiktok&limit=10' \
-H 'Authorization: Bearer rl_your_api_key'{
"posts": [
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"platform": "tiktok",
"account_id": "@myprofile",
"caption": "Check this out! #viral",
"status": "published",
"platform_post_id": "7123456789012345678",
"created_at": "2026-04-15T10:30:00Z",
"published_at": "2026-04-15T10:30:05Z"
}
],
"total": 42,
"limit": 10,
"offset": 0
}/v1/posts/{id}Retrieve a single post by its ID. Returns full post details including platform-specific metadata.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
idrequired | string | The unique post ID returned when the post was created |
curl 'https://app.status200uploads.com/functions/v1/api-posts/b2c3d4e5-f6a7-8901-bcde-f12345678901' \
-H 'Authorization: Bearer rl_your_api_key'{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"platform": "tiktok",
"account_id": "@myprofile",
"caption": "Check this out! #viral",
"status": "published",
"platform_post_id": "7123456789012345678",
"media": [
{
"file_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "video/mp4",
"size": 5242880
}
],
"platform_options": {
"privacyLevel": "PUBLIC_TO_EVERYONE"
},
"created_at": "2026-04-15T10:30:00Z",
"published_at": "2026-04-15T10:30:05Z"
}| Status | Error | Description |
|---|---|---|
| 401 | Unauthorized | Missing or invalid API key |
| 404 | Not Found | Post does not exist or belongs to another user |
/v1/posts/{id}Cancel a scheduled post. Only posts with status 'scheduled' can be cancelled. Published posts cannot be deleted via the API.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
idrequired | string | The unique post ID of the scheduled post to cancel |
curl -X DELETE 'https://app.status200uploads.com/functions/v1/api-posts/b2c3d4e5-f6a7-8901-bcde-f12345678901' \
-H 'Authorization: Bearer rl_your_api_key'{
"success": true,
"message": "Scheduled post cancelled"
}| Status | Error | Description |
|---|---|---|
| 400 | Bad Request | Post is not in scheduled status and cannot be cancelled |
| 401 | Unauthorized | Missing or invalid API key |
| 404 | Not Found | Post does not exist or belongs to another user |
/v1/mediaUpload media by providing a publicly accessible URL. The file is downloaded, validated, and stored in your media library.
Request Body
| Parameter | Type | Description |
|---|---|---|
urlrequired | string | Public URL to the media file (JPG, PNG, WebP, MP4, MOV, WebM) |
Images
JPG, PNG, WebP - Max 20 MB
Videos
MP4, MOV, WebM - Max 250 MB
curl -X POST 'https://app.status200uploads.com/functions/v1/api-media-upload' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer rl_your_api_key' \
-d '{"url": "https://example.com/photo.jpg"}'{
"success": true,
"file_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"size": 2048576,
"type": "image/jpeg"
}| Status | Error | Description |
|---|---|---|
| 400 | Bad Request | Invalid URL or unsupported file format |
| 401 | Unauthorized | Missing or invalid API key |
| 413 | Payload Too Large | File exceeds maximum size limit |
| 422 | Unprocessable | File could not be downloaded from the provided URL |
/v1/profilesList all connected social media profiles for the authenticated user. Use accountId values from this response when creating posts.
curl 'https://app.status200uploads.com/functions/v1/api-posts?action=profiles' \
-H 'Authorization: Bearer rl_your_api_key'{
"profiles": [
{
"account_id": "@creator_studio",
"platform": "tiktok",
"display_name": "Creator Studio",
"status": "active",
"connected_at": "2026-03-01T12:00:00Z"
},
{
"account_id": "@mybrand",
"platform": "instagram",
"display_name": "My Brand",
"status": "active",
"connected_at": "2026-03-05T08:30:00Z"
}
]
}/v1/platformsList all supported platforms and their capabilities, including supported media types, character limits, and file size restrictions.
curl 'https://app.status200uploads.com/functions/v1/api-posts?action=platforms' \
-H 'Authorization: Bearer rl_your_api_key'{
"platforms": [
{
"id": "tiktok",
"name": "TikTok",
"media_types": ["video", "photo_slideshow"],
"max_caption_length": 4000,
"max_video_size_mb": 287,
"max_image_size_mb": 20
},
{
"id": "instagram",
"name": "Instagram",
"media_types": ["image", "reel", "story", "carousel"],
"max_caption_length": 2200,
"max_video_size_mb": 250,
"max_image_size_mb": 8
}
]
}/v1/analytics/{post_id}Get engagement metrics for a published post including views, likes, comments, shares, and platform-specific metrics.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
post_idrequired | string | The unique post ID returned when the post was created |
curl 'https://app.status200uploads.com/functions/v1/poll-engagement?post_id=b2c3d4e5-f6a7-8901' \
-H 'Authorization: Bearer rl_your_api_key'{
"post_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"platform": "tiktok",
"metrics": {
"views": 15420,
"likes": 892,
"comments": 47,
"shares": 123,
"saves": 56
},
"polled_at": "2026-04-16T08:00:00Z"
}| Status | Error | Description |
|---|---|---|
| 401 | Unauthorized | Missing or invalid API key |
| 404 | Not Found | Post not found or no metrics available yet |
Guides
Your First API Call
This guide walks you through making your first successful API call to publish a post.
Get your API key
Sign in to your dashboard, navigate to API Management, and click "Generate Key". Copy the key - you will only see it once.
Connect a social account
Go to Connections and link at least one social media account. Note the account handle (e.g. @myprofile) - you will need this for the API call.
Upload your media
curl -X POST 'https://app.status200uploads.com/functions/v1/api-media-upload' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer rl_YOUR_KEY' \
-d '{"url": "https://example.com/video.mp4"}'Save the file_id from the response.
Publish your post
curl -X POST 'https://app.status200uploads.com/functions/v1/api-posts' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer rl_YOUR_KEY' \
-d '{
"post": {
"accountId": "@myprofile",
"platform": "tiktok",
"content": {
"text": "Hello world! #firstpost",
"mediaID": ["YOUR_FILE_ID"]
},
"tiktok": { "privacyLevel": "PUBLIC_TO_EVERYONE" }
}
}'Check the result
A successful response returns {"success": true} with the post_id. You can view the post in your History page or via the GET /v1/posts endpoint.
Scheduling Posts in Bulk
Automate publishing across multiple platforms and time slots using the scheduling API.
import requests
from datetime import datetime, timedelta
API_KEY = "rl_your_api_key"
BASE_URL = "https://app.status200uploads.com/functions/v1"
HEADERS = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
# Define your content schedule
schedule = [
{"platform": "tiktok", "account": "@mytiktok", "hour": 9},
{"platform": "instagram", "account": "@myinsta", "hour": 12},
{"platform": "x", "account": "@mytwitter", "hour": 15},
{"platform": "linkedin", "account": "@mylinkedin", "hour": 17},
]
# Upload media once
media_resp = requests.post(
f"{BASE_URL}/api-media-upload",
headers=HEADERS,
json={"url": "https://example.com/content.mp4"}
)
file_id = media_resp.json()["file_id"]
# Schedule posts across platforms
tomorrow = datetime.now() + timedelta(days=1)
for item in schedule:
scheduled_time = tomorrow.replace(
hour=item["hour"], minute=0, second=0
).isoformat() + "Z"
resp = requests.post(
f"{BASE_URL}/api-posts",
headers=HEADERS,
json={
"post": {
"accountId": item["account"],
"platform": item["platform"],
"content": {
"text": "Check out our latest content!",
"mediaID": [file_id]
},
"scheduledFor": scheduled_time
}
}
)
status = "OK" if resp.json().get("success") else "FAIL"
print(f"{item['platform']}: {status} at {scheduled_time}")Handling Media Uploads
Best practices for uploading images and videos through the API.
Supported Formats
Images
JPEG, PNG, WebP - up to 20 MB
Videos
MP4, MOV, WebM - up to 250 MB
Upload Flow
- 1. Host your media on a publicly accessible URL (S3, CloudFlare R2, any CDN)
- 2. Call
POST /v1/mediawith the URL - 3. The API downloads, validates, and stores the file
- 4. Use the returned
file_idwhen creating posts - 5. A single
file_idcan be reused across multiple posts and platforms
Pro Tip
For Instagram carousels and TikTok photo slideshows, upload multiple media files and pass all file_id values in the mediaID array.
Using Webhooks for Status Updates
Receive real-time notifications when posts are published, fail, or when profiles disconnect.
Set up an endpoint
Create an HTTPS endpoint on your server that accepts POST requests. The endpoint should respond with a 200 status within 5 seconds.
Register your webhook URL
Configure your webhook URL in the dashboard under API Management. Select which events you want to receive.
Handle incoming events
app.post('/webhooks/status200', (req, res) => {
const signature = req.headers['x-webhook-signature'];
// Verify the signature (see Signature Verification section)
const event = req.body;
switch (event.type) {
case 'post.published':
console.log('Post published:', event.data.post_id);
break;
case 'post.failed':
console.log('Post failed:', event.data.error);
break;
case 'profile.disconnected':
console.log('Profile disconnected:', event.data.account_id);
break;
}
res.status(200).send('OK');
});Integrating with n8n
Use n8n workflows to automate social media publishing with Status 200 Uploads.
Add an HTTP Request node
Set the method to POST and the URL to https://app.status200uploads.com/functions/v1/api-posts
Configure headers
Add Authorization: Bearer rl_your_key and Content-Type: application/json as headers.
Set the JSON body
Use the standard post body structure. You can dynamically reference values from previous nodes using n8n expressions like {{ $json.caption }}.
Connect your trigger
Connect any trigger node (Schedule, Webhook, RSS, etc.) to automate when posts are created. For example, use a Schedule node to post every day at 9 AM.
Integrating with Make.com
Build automated scenarios in Make.com that publish content through the Status 200 Uploads API.
Create a new scenario
Start a new scenario in Make.com and add an HTTP module (Make a request).
Configure the HTTP module
Set URL to https://app.status200uploads.com/functions/v1/api-posts, method to POST, and body type to JSON. Add your Authorization header.
Map your data
Use Make.com's data mapping to dynamically populate the post body. Connect to Google Sheets, Airtable, or any data source for content.
Schedule and activate
Set the scenario to run on a schedule or trigger from another module. Activate the scenario to start publishing automatically.
Integrating with Zapier
Connect Status 200 Uploads to thousands of apps through Zapier's webhook integration.
Create a new Zap
Choose your trigger app (e.g., Google Sheets, Airtable, or Schedule by Zapier).
Add a Webhooks action
Select "Webhooks by Zapier" as the action and choose "Custom Request".
Configure the request
Set method to POST, URL to https://app.status200uploads.com/functions/v1/api-posts. Add headers for Authorization and Content-Type. Set the data field to your JSON post body.
Test and publish
Test the Zap with sample data. Once confirmed working, turn on the Zap to automate publishing.
SDKs
Official SDKs
Use our official SDKs to integrate with the Status 200 Uploads API in your language of choice. SDKs handle authentication, retries, and type safety out of the box.
Node.js
beta@status200/uploads-node@1.0.0
npm install @status200/uploads-nodePython
betastatus200-uploads@1.0.0
pip install status200-uploadsCommunity SDKs
Building an SDK in another language? We would love to list it here. Reach out to us at info@status200uploads.com
Node.js SDK
Full TypeScript support with automatic type inference.
Installation
npm install @status200/uploads-nodeQuick Start
import { Status200 } from '@status200/uploads-node';
const client = new Status200({ apiKey: process.env.STATUS200_API_KEY });
// Upload media
const media = await client.media.upload({
url: 'https://example.com/video.mp4'
});
// Create a post
const post = await client.posts.create({
accountId: '@myprofile',
platform: 'tiktok',
content: {
text: 'Automated with the Node SDK!',
mediaID: [media.file_id]
},
tiktok: {
privacyLevel: 'PUBLIC_TO_EVERYONE'
}
});
console.log('Published:', post.post_id);
// List posts
const { posts } = await client.posts.list({
platform: 'tiktok',
limit: 10
});
// Get analytics
const metrics = await client.analytics.get(post.post_id);
console.log('Views:', metrics.views);Python SDK
Pythonic interface with full type hints and async support.
Installation
pip install status200-uploadsQuick Start
from status200 import Status200Client
client = Status200Client(api_key="rl_your_api_key")
# Upload media
media = client.media.upload(url="https://example.com/video.mp4")
# Create a post
post = client.posts.create(
account_id="@myprofile",
platform="tiktok",
content={
"text": "Automated with Python SDK!",
"mediaID": [media.file_id]
},
tiktok={"privacyLevel": "PUBLIC_TO_EVERYONE"}
)
print(f"Published: {post.post_id}")
# List posts
posts = client.posts.list(platform="tiktok", limit=10)
# Async support
import asyncio
from status200 import AsyncStatus200Client
async def main():
async_client = AsyncStatus200Client(api_key="rl_your_api_key")
post = await async_client.posts.create(...)
await async_client.close()
asyncio.run(main())Webhooks
Webhooks
Webhooks let you receive real-time HTTP notifications when events occur in your account. Instead of polling the API, configure a webhook endpoint to get push notifications for post status changes and profile events.
How It Works
- 1. Register your HTTPS endpoint URL in the dashboard
- 2. Select which event types to subscribe to
- 3. We send POST requests to your endpoint when events occur
- 4. Respond with a 2xx status within 5 seconds to acknowledge
Retry Policy
If your endpoint fails to respond with a 2xx status, we retry up to 3 times with exponential backoff:
1st retry
after 1 minute
2nd retry
after 5 minutes
3rd retry
after 30 minutes
Event Types
Subscribe to the events relevant to your integration.
| Parameter | Type | Description |
|---|---|---|
post.published | event | A post was successfully published to the platform |
post.failed | event | A post failed to publish (includes error details) |
post.scheduled | event | A post was scheduled for future publishing |
profile.disconnected | event | A connected social account was disconnected or token expired |
Example Payloads
post.published
{
"id": "evt_abc123",
"type": "post.published",
"created_at": "2026-04-16T10:30:00Z",
"data": {
"post_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"platform": "tiktok",
"account_id": "@myprofile",
"platform_post_id": "7123456789012345678",
"published_at": "2026-04-16T10:30:05Z"
}
}post.failed
{
"id": "evt_def456",
"type": "post.failed",
"created_at": "2026-04-16T10:30:00Z",
"data": {
"post_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"platform": "instagram",
"account_id": "@mybrand",
"error_code": "MEDIA_ERROR",
"error_message": "Video format not supported by Instagram"
}
}profile.disconnected
{
"id": "evt_ghi789",
"type": "profile.disconnected",
"created_at": "2026-04-16T10:30:00Z",
"data": {
"account_id": "@myprofile",
"platform": "facebook",
"reason": "token_expired",
"message": "Facebook access token has expired. Please reconnect."
}
}Signature Verification
Every webhook request includes an X-Webhook-Signature header. Verify this signature to ensure the request came from Status 200 Uploads and was not tampered with.
Signature Format
The signature is an HMAC-SHA256 hash of the raw request body, using your webhook signing secret as the key. The result is hex-encoded and prefixed with sha256=.
Node.js Example
import crypto from 'crypto';
function verifyWebhookSignature(body, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(body, 'utf8')
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
// In your webhook handler:
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const sig = req.headers['x-webhook-signature'];
const isValid = verifyWebhookSignature(req.body, sig, WEBHOOK_SECRET);
if (!isValid) {
return res.status(401).send('Invalid signature');
}
const event = JSON.parse(req.body);
// Process the event...
res.status(200).send('OK');
});Python Example
import hmac
import hashlib
def verify_signature(body: bytes, signature: str, secret: str) -> bool:
expected = 'sha256=' + hmac.new(
secret.encode(),
body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
# In your Flask handler:
@app.route('/webhook', methods=['POST'])
def webhook():
sig = request.headers.get('X-Webhook-Signature', '')
if not verify_signature(request.data, sig, WEBHOOK_SECRET):
return 'Invalid signature', 401
event = request.json
# Process the event...
return 'OK', 200Resources
Changelog
API version history and breaking changes.
Engagement Analytics & Scheduled Posts
- +GET /v1/analytics/{post_id} endpoint for engagement metrics
- +Post scheduling with scheduledFor parameter
- +DELETE /v1/posts/{id} to cancel scheduled posts
- +Webhook events for post.scheduled
Pinterest & LinkedIn Carousel Support
- +Pinterest platform support with board selection
- +LinkedIn carousel posts with multiple images
- +X (Twitter) community posting support
- *Instagram carousel ordering now respects array order
X (Twitter) & LinkedIn Platforms
- +X (Twitter) platform support with text, image, and video
- +LinkedIn platform support with text, image, and video
- +Per-platform rate limiting
- ~Rate limit headers now included in all responses
YouTube Support & Media Library
- +YouTube video upload support
- +Media library with file_id reuse across posts
- +GET /v1/profiles endpoint
- ~mediaUrls now optional when mediaID is provided
Initial Release
- +POST /v1/posts for TikTok, Instagram, and Facebook
- +POST /v1/media for URL-based media uploads
- +Bearer token authentication
- +Webhook notifications for post.published and post.failed
OpenAPI Specification
The full API is described using the OpenAPI 3.1 specification. Use it to generate client libraries, validate requests, or import into tools like Postman or Insomnia.
openapi.yaml
OpenAPI 3.1 specification
Import the spec into your preferred tool:
- - Postman: Import as API definition
- - Insomnia: Import from URL
- - openapi-generator: Generate typed clients in 40+ languages
Ready to get started?
Create an account to get your API key and start automating your social media posts.
Get Started Free