Skip to main content
Authenticated API

This endpoint requires a valid JWT Bearer token with content_creator roles. Accessible via the API gateway.

Social Publishing API

Multi-platform social media publishing, scheduling, and distribution for the Creator Revolution platform.

Overview

AttributeValue
Base Path/api/v1/creator/social
AuthenticationBearer Token
Required Rolescreator, content_manager, manager, tenant_admin, platform_admin, system_admin, super_admin

Supported Platforms

PlatformPost TypesFeatures
Twitter/XText, Images, Video, ThreadsScheduling, Analytics
LinkedInText, Images, Video, ArticlesScheduling, Analytics
InstagramImages, Video, Reels, StoriesScheduling, Analytics
YouTubeVideo, Shorts, CommunityScheduling, Analytics
TikTokVideoScheduling, Analytics
FacebookText, Images, VideoScheduling, Analytics

Publishing

Publish Content

Publish content to one or more social platforms.

POST /api/v1/creator/social/publish

Request Body

{
"content": {
"text": "Excited to announce our new AI-powered features! 🚀\n\nCheck out what's new in the latest update.",
"media": [
{
"type": "image",
"url": "https://cdn.example.com/images/announcement.png",
"alt_text": "New features announcement graphic"
}
],
"link": {
"url": "https://example.com/blog/new-features",
"title": "New AI Features",
"description": "Discover our latest innovations"
}
},
"platforms": [
{
"platform": "twitter",
"account_id": "acc_twitter_001",
"options": {
"reply_settings": "everyone"
}
},
{
"platform": "linkedin",
"account_id": "acc_linkedin_001",
"options": {
"visibility": "public"
}
}
],
"publish_at": "2026-01-24T20:00:00Z"
}

Response

{
"publish_id": "pub_001",
"status": "scheduled",
"scheduled_for": "2026-01-24T20:00:00Z",
"platforms": [
{
"platform": "twitter",
"account_id": "acc_twitter_001",
"status": "scheduled",
"estimated_reach": 15000
},
{
"platform": "linkedin",
"account_id": "acc_linkedin_001",
"status": "scheduled",
"estimated_reach": 8500
}
],
"created_at": "2026-01-24T19:30:00Z"
}

Create Post

Create a social post for later publishing.

POST /api/v1/creator/social/posts

Request Body

{
"title": "Product Launch Announcement",
"content": {
"text": "Big news coming tomorrow! Stay tuned for our major product launch.",
"hashtags": ["launch", "innovation", "tech"],
"mentions": ["@partner_company"]
},
"media": [],
"platforms": ["twitter", "linkedin", "instagram"],
"status": "draft",
"campaign_id": "campaign_001",
"tags": ["product_launch", "q1_2026"]
}

Response

{
"id": "post_001",
"title": "Product Launch Announcement",
"content": {...},
"platforms": ["twitter", "linkedin", "instagram"],
"status": "draft",
"campaign_id": "campaign_001",
"created_at": "2026-01-24T19:30:00Z",
"created_by": "user_001"
}

Post Status Values

StatusDescription
draftPost created, not scheduled
scheduledScheduled for future publish
publishingCurrently being published
publishedSuccessfully published
failedPublishing failed
cancelledCancelled before publish

Get Post

GET /api/v1/creator/social/posts/{post_id}

Response

{
"id": "post_001",
"title": "Product Launch Announcement",
"content": {
"text": "Big news coming tomorrow!",
"hashtags": ["launch", "innovation"],
"mentions": ["@partner_company"]
},
"media": [],
"platforms": ["twitter", "linkedin", "instagram"],
"status": "published",
"published_at": "2026-01-24T20:00:00Z",
"platform_posts": [
{
"platform": "twitter",
"post_id": "1234567890",
"url": "https://twitter.com/user/status/1234567890",
"status": "published"
},
{
"platform": "linkedin",
"post_id": "urn:li:share:7890",
"url": "https://linkedin.com/posts/...",
"status": "published"
}
],
"analytics": {
"total_impressions": 25000,
"total_engagements": 450,
"engagement_rate": 1.8
}
}

Update Post

PUT /api/v1/creator/social/posts/{post_id}

Request Body

{
"content": {
"text": "Updated announcement text!"
},
"platforms": ["twitter", "linkedin"]
}

Delete Post

DELETE /api/v1/creator/social/posts/{post_id}

Publish Post

Publish an existing draft post.

POST /api/v1/creator/social/posts/{post_id}/publish

Request Body

{
"publish_now": true
}

Schedule Post

Schedule a post for future publishing.

POST /api/v1/creator/social/posts/{post_id}/schedule

Request Body

{
"scheduled_at": "2026-01-25T14:00:00Z",
"timezone": "America/Los_Angeles"
}

Cancel Scheduled Post

POST /api/v1/creator/social/posts/{post_id}/cancel

Threads & Series

Create Thread

Create a multi-part thread (Twitter/X).

POST /api/v1/creator/social/threads

Request Body

{
"platform": "twitter",
"account_id": "acc_twitter_001",
"posts": [
{
"text": "🧵 Here's everything you need to know about our new AI features (thread):"
},
{
"text": "1/ First, we've added intelligent order prediction that learns from your customers' habits...",
"media": [{"type": "image", "url": "https://..."}]
},
{
"text": "2/ Next, our voice AI can now handle complex modifications and allergen questions...",
"media": [{"type": "image", "url": "https://..."}]
},
{
"text": "3/ Finally, the new analytics dashboard gives you real-time insights...\n\nTry it today! Link in bio 👇"
}
],
"schedule_at": "2026-01-25T10:00:00Z"
}

Response

{
"thread_id": "thread_001",
"platform": "twitter",
"post_count": 4,
"status": "scheduled",
"scheduled_at": "2026-01-25T10:00:00Z"
}

Media Management

Upload Media

POST /api/v1/creator/social/media/upload

Request (multipart/form-data)

file: announcement.png
platform_hints: ["twitter", "linkedin", "instagram"]
alt_text: "Product announcement graphic"

Response

{
"media_id": "media_001",
"type": "image",
"url": "https://cdn.example.com/media/media_001.png",
"thumbnails": {
"small": "https://cdn.example.com/media/media_001_sm.png",
"medium": "https://cdn.example.com/media/media_001_md.png"
},
"dimensions": {
"width": 1200,
"height": 628
},
"platform_compatibility": {
"twitter": {"compatible": true, "optimized": true},
"linkedin": {"compatible": true, "optimized": true},
"instagram": {"compatible": false, "reason": "Aspect ratio not supported", "suggestion": "Crop to 1:1 or 4:5"}
}
}

Get Media

GET /api/v1/creator/social/media/{media_id}

Delete Media

DELETE /api/v1/creator/social/media/{media_id}

Connected Accounts

List Connected Accounts

GET /api/v1/creator/social/accounts

Response

{
"accounts": [
{
"id": "acc_twitter_001",
"platform": "twitter",
"username": "@mycompany",
"display_name": "My Company",
"profile_image": "https://...",
"followers": 15420,
"status": "connected",
"connected_at": "2025-06-01T00:00:00Z",
"permissions": ["post", "read_analytics"]
},
{
"id": "acc_linkedin_001",
"platform": "linkedin",
"username": "my-company",
"display_name": "My Company",
"followers": 8500,
"status": "connected",
"account_type": "company_page"
}
]
}

Connect Account

POST /api/v1/creator/social/accounts/connect

Request Body

{
"platform": "instagram",
"redirect_uri": "https://app.example.com/oauth/callback"
}

Response

{
"authorization_url": "https://api.instagram.com/oauth/authorize?...",
"state": "state_abc123",
"expires_in": 300
}

Disconnect Account

DELETE /api/v1/creator/social/accounts/{account_id}

Analytics

Get Post Analytics

GET /api/v1/creator/social/posts/{post_id}/analytics

Response

{
"post_id": "post_001",
"total": {
"impressions": 25000,
"reach": 18500,
"engagements": 450,
"engagement_rate": 1.8,
"clicks": 125,
"shares": 45,
"comments": 32,
"likes": 248
},
"by_platform": [
{
"platform": "twitter",
"impressions": 15000,
"engagements": 280,
"engagement_rate": 1.87,
"retweets": 35,
"likes": 180,
"replies": 22
},
{
"platform": "linkedin",
"impressions": 10000,
"engagements": 170,
"engagement_rate": 1.7,
"reactions": 120,
"comments": 25,
"shares": 25
}
],
"timeseries": [
{"timestamp": "2026-01-24T20:00:00Z", "impressions": 5000, "engagements": 150},
{"timestamp": "2026-01-24T21:00:00Z", "impressions": 8000, "engagements": 120}
]
}

Get Distribution Metrics

GET /api/v1/creator/social/distribution/metrics

Query Parameters

ParameterTypeDescription
start_datedatePeriod start
end_datedatePeriod end
platformstringFilter by platform

Response

{
"period": {
"start": "2026-01-01",
"end": "2026-01-24"
},
"summary": {
"total_posts": 45,
"total_impressions": 850000,
"total_engagements": 12500,
"avg_engagement_rate": 1.47,
"followers_gained": 2500
},
"by_platform": [
{
"platform": "twitter",
"posts": 20,
"impressions": 450000,
"engagement_rate": 1.8,
"followers_gained": 1200,
"best_performing_post": "post_015"
},
{
"platform": "linkedin",
"posts": 15,
"impressions": 250000,
"engagement_rate": 1.5,
"followers_gained": 800
}
],
"top_posts": [
{
"id": "post_015",
"title": "AI Feature Launch",
"impressions": 45000,
"engagements": 1200
}
],
"optimal_posting_times": {
"twitter": ["09:00", "12:00", "17:00"],
"linkedin": ["08:00", "12:00", "16:00"]
}
}

Scheduling

Get Optimal Times

Get AI-recommended optimal posting times.

GET /api/v1/creator/social/scheduling/optimal-times

Query Parameters

ParameterTypeDescription
platformstringTarget platform
content_typestringType of content
timezonestringTarget timezone

Response

{
"platform": "twitter",
"recommendations": [
{
"day": "tuesday",
"times": [
{"time": "09:00", "score": 92, "reason": "Peak morning engagement"},
{"time": "12:30", "score": 88, "reason": "Lunch break browsing"}
]
},
{
"day": "wednesday",
"times": [
{"time": "10:00", "score": 90},
{"time": "15:00", "score": 85}
]
}
],
"avoid": [
{"day": "sunday", "times": ["06:00-09:00"], "reason": "Low engagement"}
]
}

Get Queue

GET /api/v1/creator/social/scheduling/queue

Response

{
"queue": [
{
"id": "post_002",
"title": "Weekly Tips",
"scheduled_at": "2026-01-25T10:00:00Z",
"platforms": ["twitter", "linkedin"],
"status": "scheduled"
},
{
"id": "post_003",
"title": "Product Update",
"scheduled_at": "2026-01-26T14:00:00Z",
"platforms": ["twitter"],
"status": "scheduled"
}
],
"total_scheduled": 8
}

Webhooks

EventDescription
social.post_publishedPost published successfully
social.post_failedPost publishing failed
social.engagement_spikeUnusual engagement detected
social.account_disconnectedAccount auth expired
social.mention_receivedBrand mention detected

Error Responses

StatusCodeDescription
400invalid_contentContent validation failed
400media_unsupportedMedia format not supported
401account_disconnectedPlatform auth expired
403rate_limitedPlatform rate limit reached
404post_not_foundPost ID not found
413media_too_largeMedia exceeds size limit