Skip to main content

Content API

The Content API covers the full asset lifecycle from planning to moderation.

Main endpoints

  • POST /api/v1/content/generate
  • POST /api/v1/content/generate-week
  • GET /api/v1/content/queue
  • GET /api/v1/content/calendar
  • PATCH /api/v1/content/{id}
  • POST /api/v1/content/{id}/variants
  • GET /api/v1/content/{id}/variants
  • PUT /api/v1/content/{id}/variants/{idx}/select
  • POST /api/v1/content/video/generate
  • GET /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}/approve
  • POST /api/v1/characters/{id}/content/{contentId}/reject
  • POST /api/v1/characters/{id}/content/{contentId}/regenerate
  • POST /api/v1/characters/{id}/content/{contentId}/media/{mediaIndex}/approve
  • POST /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: 2 to 3
  • 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: short on TikTok or YouTube, else reel
  • duration: 5 to 60 seconds
  • 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/preview
  • POST /api/v1/characters/{id}/talking-head/generate

Motion transfer:

  • POST /api/v1/characters/{id}/motion-transfer
  • GET /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.