Authenticated API
This endpoint requires a valid JWT Bearer token with content_creator roles. Accessible via the API gateway.
Creator Content API
Content creation, campaign management, AI-generated content, and digital asset management for creators.
Overview
| Attribute | Value |
|---|---|
| Base Path | /api/v1/creator/content |
| Authentication | Bearer Token |
| Required Roles | creator, content_manager, manager, tenant_admin, platform_admin, system_admin, super_admin |
Campaigns
List Campaigns
GET /api/v1/creator/content/campaigns
Query Parameters
| Parameter | Type | Description |
|---|---|---|
status | string | draft, active, paused, completed |
type | string | Campaign type filter |
start_date | date | Filter by start date |
Response
{
"campaigns": [
{
"id": "campaign_001",
"name": "Q1 Product Launch",
"description": "Multi-platform campaign for new product line",
"status": "active",
"type": "product_launch",
"date_range": {
"start": "2026-01-15",
"end": "2026-02-28"
},
"platforms": ["twitter", "linkedin", "instagram", "youtube"],
"content_items": 24,
"published_items": 12,
"scheduled_items": 8,
"draft_items": 4,
"metrics": {
"total_impressions": 125000,
"total_engagements": 4500,
"engagement_rate": 3.6
},
"created_at": "2026-01-10T00:00:00Z"
}
],
"total": 5
}
Create Campaign
POST /api/v1/creator/content/campaigns
Request Body
{
"name": "Summer Menu Launch",
"description": "Promote new summer menu items across all channels",
"type": "product_launch",
"date_range": {
"start": "2026-06-01",
"end": "2026-08-31"
},
"platforms": ["twitter", "instagram", "facebook"],
"goals": {
"impressions": 500000,
"engagements": 15000,
"conversions": 1000
},
"budget": {
"total": 5000.00,
"currency": "USD"
},
"tags": ["summer", "menu", "seasonal"]
}
Response
{
"id": "campaign_002",
"name": "Summer Menu Launch",
"status": "draft",
"created_at": "2026-01-24T19:30:00Z"
}
Get Campaign
GET /api/v1/creator/content/campaigns/{campaign_id}
Response
{
"id": "campaign_001",
"name": "Q1 Product Launch",
"description": "Multi-platform campaign for new product line",
"status": "active",
"type": "product_launch",
"date_range": {
"start": "2026-01-15",
"end": "2026-02-28"
},
"platforms": ["twitter", "linkedin", "instagram", "youtube"],
"goals": {
"impressions": {"target": 200000, "current": 125000, "progress": 62.5},
"engagements": {"target": 8000, "current": 4500, "progress": 56.25},
"conversions": {"target": 500, "current": 285, "progress": 57.0}
},
"content_calendar": [
{
"date": "2026-01-24",
"items": [
{"id": "item_001", "title": "Feature Spotlight", "platform": "twitter", "status": "published"},
{"id": "item_002", "title": "Behind the Scenes", "platform": "instagram", "status": "scheduled", "time": "14:00"}
]
}
],
"team": [
{"user_id": "user_001", "role": "owner"},
{"user_id": "user_002", "role": "contributor"}
]
}
Update Campaign
PUT /api/v1/creator/content/campaigns/{campaign_id}
Delete Campaign
DELETE /api/v1/creator/content/campaigns/{campaign_id}
Content Items
List Content Items
GET /api/v1/creator/content/items
Query Parameters
| Parameter | Type | Description |
|---|---|---|
campaign_id | string | Filter by campaign |
status | string | draft, scheduled, published, archived |
platform | string | Filter by platform |
content_type | string | post, video, story, article |
Response
{
"items": [
{
"id": "item_001",
"title": "New Feature Announcement",
"content_type": "post",
"status": "published",
"campaign_id": "campaign_001",
"platforms": [
{
"platform": "twitter",
"content": "Excited to announce our new AI-powered features! 🚀 #innovation",
"status": "published",
"published_at": "2026-01-24T10:00:00Z",
"metrics": {
"impressions": 5200,
"engagements": 180
}
},
{
"platform": "linkedin",
"content": "We're thrilled to share our latest innovation...",
"status": "published",
"published_at": "2026-01-24T10:00:00Z"
}
],
"media": [
{
"id": "media_001",
"type": "image",
"url": "https://cdn.example.com/content/feature_announcement.png"
}
],
"created_at": "2026-01-20T00:00:00Z",
"created_by": "user_001"
}
],
"total": 24
}
Create Content Item
POST /api/v1/creator/content/items
Request Body
{
"title": "Weekly Tips: Kitchen Efficiency",
"content_type": "post",
"campaign_id": "campaign_001",
"platforms": [
{
"platform": "twitter",
"content": "💡 Tip of the week: Use our speed-of-service dashboard to identify bottlenecks in real-time!\n\n#RestaurantTech #Efficiency"
},
{
"platform": "linkedin",
"content": "This week's restaurant efficiency tip:\n\nOur speed-of-service analytics can help you identify kitchen bottlenecks before they impact customer experience.\n\nHere's how leading restaurants are using data to optimize their operations..."
}
],
"media_ids": ["media_001"],
"schedule": {
"publish_at": "2026-01-25T10:00:00Z",
"timezone": "America/New_York"
},
"tags": ["tips", "efficiency", "kitchen"]
}
Get Content Item
GET /api/v1/creator/content/items/{item_id}
Update Content Item
PUT /api/v1/creator/content/items/{item_id}
Delete Content Item
DELETE /api/v1/creator/content/items/{item_id}
Duplicate Content Item
POST /api/v1/creator/content/items/{item_id}/duplicate
AI Content Generation
Generate Content
Use AI to generate content based on prompts and context.
POST /api/v1/creator/content/generate
Request Body
{
"content_type": "social_post",
"context": {
"topic": "New summer menu launch",
"key_points": [
"Fresh seasonal ingredients",
"New salad options",
"Limited time availability"
],
"brand_voice": "friendly_professional",
"call_to_action": "Visit us this weekend"
},
"platforms": ["twitter", "instagram", "linkedin"],
"options": {
"variations": 3,
"include_hashtags": true,
"include_emoji": true,
"max_length": {
"twitter": 280,
"instagram": 2200,
"linkedin": 3000
}
}
}
Response
{
"generation_id": "gen_001",
"variations": [
{
"id": "var_001",
"platforms": {
"twitter": "🌿 Summer is here and so is our NEW seasonal menu! Fresh salads, vibrant flavors, and ingredients picked at peak freshness. Available for a limited time only!\n\nVisit us this weekend! 🥗☀️\n\n#SummerMenu #FreshFood #LimitedTime",
"instagram": "Summer has officially arrived at [Restaurant Name]! 🌞\n\nWe're thrilled to introduce our brand new seasonal menu featuring:\n\n🥬 Farm-fresh salads with locally sourced ingredients\n🍅 Vibrant seasonal flavors you won't find anywhere else\n⏰ Available for a limited time only!\n\nDon't miss out on these summer favorites. Visit us this weekend and taste the season!\n\n#SummerMenu #FreshFood #SeasonalEating #FarmToTable",
"linkedin": "We're excited to announce the launch of our new summer menu!\n\nOur culinary team has been working to bring you the freshest seasonal ingredients and innovative new salad options that celebrate the best of summer produce.\n\nKey highlights:\n• Fresh, locally-sourced ingredients\n• New signature salad creations\n• Limited time availability\n\nWe invite you to visit us this weekend and experience our summer offerings.\n\n#RestaurantIndustry #SeasonalMenu #Hospitality"
},
"score": 0.92,
"tone_match": "excellent"
},
{
"id": "var_002",
"platforms": {...},
"score": 0.88
}
],
"metadata": {
"model": "claude-haiku-4.5",
"tokens_used": 850
}
}
Generate Image
Generate AI images for content.
POST /api/v1/creator/content/generate/image
Request Body
{
"prompt": "A beautifully plated summer salad with fresh vegetables, warm lighting, professional food photography",
"style": "photorealistic",
"aspect_ratio": "1:1",
"variations": 4
}
Response
{
"generation_id": "img_gen_001",
"images": [
{
"id": "img_001",
"url": "https://cdn.example.com/generated/img_001.png",
"thumbnail_url": "https://cdn.example.com/generated/img_001_thumb.png"
},
{
"id": "img_002",
"url": "https://cdn.example.com/generated/img_002.png"
}
],
"metadata": {
"model": "stable-diffusion-xl",
"processing_time_seconds": 12
}
}
Repurpose Content
Transform content for different platforms.
POST /api/v1/creator/content/repurpose
Request Body
{
"source_item_id": "item_001",
"target_platforms": ["tiktok", "youtube_shorts"],
"options": {
"adapt_length": true,
"adapt_tone": true,
"generate_hooks": true
}
}
Response
{
"repurposed": [
{
"platform": "tiktok",
"content": "POV: You just discovered the BEST new summer menu 🤯🥗 #foodtok #summervibes #newmenu",
"suggestions": {
"hook": "Wait until you see this new salad...",
"trending_sounds": ["original_sound_123", "summer_vibes_456"]
}
},
{
"platform": "youtube_shorts",
"content": "Our NEW summer menu just dropped! Fresh ingredients, amazing flavors, limited time only. Link in bio! #shorts #food",
"suggestions": {
"thumbnail_text": "NEW MENU 🔥"
}
}
]
}
Media Library
List Media
GET /api/v1/creator/content/media
Query Parameters
| Parameter | Type | Description |
|---|---|---|
type | string | image, video, audio, document |
folder | string | Folder path |
search | string | Search filename/tags |
Response
{
"media": [
{
"id": "media_001",
"filename": "summer_salad.jpg",
"type": "image",
"mime_type": "image/jpeg",
"size_bytes": 2456789,
"dimensions": {
"width": 1920,
"height": 1080
},
"url": "https://cdn.example.com/media/summer_salad.jpg",
"thumbnails": {
"small": "https://cdn.example.com/media/summer_salad_sm.jpg",
"medium": "https://cdn.example.com/media/summer_salad_md.jpg"
},
"folder": "/campaigns/summer-2026",
"tags": ["food", "salad", "summer"],
"alt_text": "Fresh summer salad with mixed greens",
"usage_count": 5,
"created_at": "2026-01-20T00:00:00Z"
}
],
"total": 156,
"storage_used_bytes": 5678901234,
"storage_limit_bytes": 10737418240
}
Upload Media
POST /api/v1/creator/content/media/upload
Request (multipart/form-data)
file: summer_dish.jpg
folder: /campaigns/summer-2026
tags: ["food", "summer", "dish"]
alt_text: "Grilled summer vegetables"
Response
{
"id": "media_002",
"filename": "summer_dish.jpg",
"type": "image",
"url": "https://cdn.example.com/media/summer_dish.jpg",
"processing": {
"status": "complete",
"optimized_versions": ["webp", "avif"]
}
}
Get Media
GET /api/v1/creator/content/media/{media_id}
Update Media
PUT /api/v1/creator/content/media/{media_id}
Request Body
{
"tags": ["food", "summer", "featured"],
"alt_text": "Updated alt text",
"folder": "/campaigns/summer-2026/featured"
}
Delete Media
DELETE /api/v1/creator/content/media/{media_id}
Create Folder
POST /api/v1/creator/content/media/folders
Request Body
{
"path": "/campaigns/summer-2026/videos",
"name": "Videos"
}
Templates
List Templates
GET /api/v1/creator/content/templates
Response
{
"templates": [
{
"id": "template_001",
"name": "Product Announcement",
"category": "announcements",
"platforms": ["twitter", "linkedin", "instagram"],
"preview": {
"twitter": "🎉 Introducing [PRODUCT]! [DESCRIPTION]\n\n[CTA]\n\n#[HASHTAG1] #[HASHTAG2]"
},
"variables": ["PRODUCT", "DESCRIPTION", "CTA", "HASHTAG1", "HASHTAG2"],
"usage_count": 45
}
]
}
Create Template
POST /api/v1/creator/content/templates
Request Body
{
"name": "Weekly Special",
"category": "promotions",
"platforms": ["twitter", "instagram"],
"content": {
"twitter": "🌟 This week's special: [DISH_NAME]!\n\n[DESCRIPTION]\n\nAvailable [DATES]. Don't miss out!\n\n#WeeklySpecial #[RESTAURANT]",
"instagram": "✨ WEEKLY SPECIAL ALERT ✨\n\n[DISH_NAME]\n\n[DESCRIPTION]\n\n📅 Available: [DATES]\n📍 [LOCATION]\n\nTag someone who needs to try this!\n\n#WeeklySpecial #FoodLover"
}
}
Analytics
Get Content Analytics
GET /api/v1/creator/content/analytics
Query Parameters
| Parameter | Type | Description |
|---|---|---|
campaign_id | string | Filter by campaign |
start_date | date | Period start |
end_date | date | Period end |
Response
{
"period": {
"start": "2026-01-01",
"end": "2026-01-24"
},
"summary": {
"content_items_created": 48,
"content_items_published": 36,
"total_impressions": 450000,
"total_engagements": 15000,
"avg_engagement_rate": 3.33
},
"top_performing": [
{
"item_id": "item_015",
"title": "AI Feature Launch",
"impressions": 45000,
"engagements": 2100,
"engagement_rate": 4.67
}
],
"by_platform": [
{"platform": "twitter", "impressions": 180000, "engagement_rate": 2.8},
{"platform": "linkedin", "impressions": 120000, "engagement_rate": 4.2},
{"platform": "instagram", "impressions": 150000, "engagement_rate": 3.5}
],
"by_content_type": [
{"type": "image_post", "count": 20, "avg_engagement": 380},
{"type": "video", "count": 8, "avg_engagement": 650},
{"type": "text_post", "count": 8, "avg_engagement": 220}
],
"optimal_times": {
"best_days": ["tuesday", "thursday"],
"best_hours": [9, 12, 17]
}
}
Webhooks
| Event | Description |
|---|---|
content.item_created | Content item created |
content.item_published | Content published |
content.item_scheduled | Content scheduled |
content.generation_complete | AI generation finished |
content.campaign_started | Campaign activated |
content.campaign_ended | Campaign completed |
Error Responses
| Status | Code | Description |
|---|---|---|
| 400 | invalid_content | Content validation failed |
| 400 | generation_failed | AI generation failed |
| 404 | item_not_found | Content item not found |
| 404 | campaign_not_found | Campaign not found |
| 413 | media_too_large | Media exceeds size limit |
| 429 | generation_limit | AI generation rate limit |
Related Documentation
- Social Publishing API - Platform publishing
- Podcast API - Podcast distribution
- AI Insights - Content performance insights