Content API
The Content API covers the full asset lifecycle from planning to moderation.
Main endpoints
POST /api/v1/content/generatePOST /api/v1/content/generate-weekGET /api/v1/content/queueGET /api/v1/content/calendarPATCH /api/v1/content/{id}POST /api/v1/content/{id}/variantsGET /api/v1/content/{id}/variantsPUT /api/v1/content/{id}/variants/{idx}/selectPOST /api/v1/content/video/generateGET /api/v1/content/video/{id}/status
Character-scoped mirrors also exist for queue, calendar, weekly generation, and moderation.
Generate one content item
curl https://api.influgen.ai/api/v1/content/generate \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"character_id": "char_01HZX6FQJ5N6E7T2M3A4B5C6D7",
"type": "single",
"platform": "instagram",
"prompt": "Editorial rooftop portrait at sunrise in ivory athleisure, warm light, confident expression.",
"caption": "Early light, strong core, zero excuses.",
"hashtags": ["#pilates", "#wellnesscreator"],
"cta": "Save this for your next studio session."
}'
Example response:
{
"item": {
"id": "cnt_01HZX6V1P2Q3R4S5T6U7V8W9X0",
"character_id": "char_01HZX6FQJ5N6E7T2M3A4B5C6D7",
"status": "queued",
"platform": "instagram",
"content_type": "single",
"image_prompt": "Editorial rooftop portrait at sunrise in ivory athleisure, warm light, confident expression."
},
"job": {
"status": "pending",
"job_type": "generate_image"
}
}
Generate a week
curl https://api.influgen.ai/api/v1/content/generate-week \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"character_id": "char_01HZX6FQJ5N6E7T2M3A4B5C6D7",
"week": "2026-03-23",
"posts_per_day": 1,
"platforms": ["instagram", "pinterest"],
"trending_topics": ["spring reset", "morning routine"],
"guidance": "Keep the week education-led and premium.",
"target_language": "en"
}'
This endpoint returns 202 Accepted with a job record because the planner runs asynchronously.
Queue and moderation
Useful moderation routes:
POST /api/v1/characters/{id}/content/{contentId}/approvePOST /api/v1/characters/{id}/content/{contentId}/rejectPOST /api/v1/characters/{id}/content/{contentId}/regeneratePOST /api/v1/characters/{id}/content/{contentId}/media/{mediaIndex}/approvePOST /api/v1/characters/{id}/content/{contentId}/media/{mediaIndex}/reject
Reject bodies can include an optional reason:
curl https://api.influgen.ai/api/v1/characters/char_.../content/cnt_.../reject \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason":"Face drifted too far from the reference set."}'
Caption variants
Variant rules:
- supported count:
2to3 - built-in styles:
story-led,question-led,cta-led,punchy - variants are locked after publish
Create variants:
curl https://api.influgen.ai/api/v1/content/cnt_01HZX6V1P2Q3R4S5T6U7V8W9X0/variants \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"count":3}'
Select a winning variant:
curl -X PUT https://api.influgen.ai/api/v1/content/cnt_01HZX6V1P2Q3R4S5T6U7V8W9X0/variants/1/select \
-H "Authorization: Bearer $ACCESS_TOKEN"
Video generation
The dedicated video route requires scene_description.
Rules:
- default type:
shorton TikTok or YouTube, elsereel - duration:
5to60seconds - default duration:
8 - aspect ratios:
9:16,1:1,16:9
curl https://api.influgen.ai/api/v1/content/video/generate \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"character_id": "char_01HZX6FQJ5N6E7T2M3A4B5C6D7",
"platform": "youtube",
"scene_description": "Walking through a marble hotel lobby at golden hour with confident luxury travel energy.",
"duration_seconds": 12,
"aspect_ratio": "9:16"
}'
Poll status:
curl https://api.influgen.ai/api/v1/content/video/cnt_01HZX6V1P2Q3R4S5T6U7V8W9X0/status \
-H "Authorization: Bearer $ACCESS_TOKEN"
Talking head and motion transfer
Talking head:
POST /api/v1/characters/{id}/talking-head/previewPOST /api/v1/characters/{id}/talking-head/generate
Motion transfer:
POST /api/v1/characters/{id}/motion-transferGET /api/v1/characters/{id}/motion-transfer/{jobId}
Motion transfer supports either reference_video_url or multipart file upload and returns credits-per-five-seconds metadata in the response.