API Reference v1
Complete REST API documentation for Influencer Studio. Generate images, videos, and manage your account programmatically.
Quick Links
Authentication
All API requests require authentication using a Bearer token. Include your API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY You can generate API keys from your account settings.
Base URL
https://influencerstudio.com/api/v1 Influencers
/api/v1/influencersList influencers
Get a list of all influencers belonging to your team with their basic information and generation readiness status.
Responses
curl -X GET "https://influencerstudio.com/api/v1/influencers" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "clxxxx_influencer_001",
"name": "Sofia Martinez",
"face_image": "https://cdn.influencerstudio.com/influencers/sofia_face.jpg",
"best_full_image": "https://cdn.influencerstudio.com/influencers/sofia_full.jpg",
"training_status": "completed",
"ready_for_generation": true,
"created_at": "2026-01-15T14:30:00.000Z"
},
{
"id": "clxxxx_influencer_002",
"name": "Marcus Chen",
"face_image": "https://cdn.influencerstudio.com/influencers/marcus_face.jpg",
"best_full_image": "https://cdn.influencerstudio.com/influencers/marcus_full.jpg",
"training_status": "training",
"ready_for_generation": false,
"created_at": "2026-02-01T09:15:00.000Z"
}
]/api/v1/influencers/createCreate influencer
Create a new influencer from a set of images. The first image will be used as the face image. Images are automatically analyzed for pose and content. Costs 250 credits.
Request Body
| Field | Type | Description |
|---|---|---|
name | string | Name for the influencer (auto-generated if not provided) |
image_urls* | array | Array of image URLs (1-20 images). First image will be used as face image. |
workspace_id | string | Optional workspace ID to associate the influencer with |
age | integer default: 25 | Age of the influencer (must be 18 or older). Defaults to 25 if not provided. |
Responses
curl -X POST "https://influencerstudio.com/api/v1/influencers/create" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Sofia Martinez",
"image_urls": [
"https://example.com/photo1.jpg",
"https://example.com/photo2.jpg",
"https://example.com/photo3.jpg",
"https://example.com/photo4.jpg",
"https://example.com/photo5.jpg"
]
}'{
"influencer_id": "clxxxx_influencer_003",
"name": "Sofia Martinez",
"status": "completed",
"ready_for_generation": true,
"credits_used": 250
}/api/v1/influencers/generateGenerate influencer images
Generate images of a trained influencer using Studio 1. Provide high-level parameters like outfit, location, and product placement instead of crafting detailed prompts.
Request Body
| Field | Type | Description |
|---|---|---|
influencer_id* | string | ID of a trained influencer |
prompt | string | Optional text prompt to guide the generation (e.g., 'professional headshot', 'smiling') |
outfit_image | string | URL of an outfit image - the influencer will be dressed in this outfit |
location_image | string | URL of a location/background image - the influencer will be placed in this setting |
reference_pose_image | string | URL of a reference pose image - the influencer will match this pose |
product_image | string | URL of a product image - the product will be placed naturally in the scene |
camera_style | string2 options available default: pro | Camera style: 'pro' for studio quality or 'smartphone' for casual social media style |
lora_url | string | URL to a LoRA .safetensors file. When provided, routes generation through the LoRA flow. Pair with lora_type to select the correct base model. |
lora_type | string6 options available | LoRA base model. Accepted values: 'flux-2-klein', 'z-image', 'flux-lora', 'flux-1-dev', 'qwen-image-2512', 'qwen-image-edit-2511'. Defaults to 'flux-1-dev'. |
batch | integer default: 1 | Number of images to generate (1-4) |
settings | object | - |
settings.aspect_ratio | string default: 1:1 | Image aspect ratio |
workspace_id | string | Workspace ID to save results |
Responses
curl -X POST "https://influencerstudio.com/api/v1/influencers/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"influencer_id": "your-influencer-id",
"prompt": "professional portrait photo, smiling",
"outfit_image": "https://example.com/outfit.jpg",
"location_image": "https://example.com/beach-background.jpg",
"reference_pose_image": "https://example.com/pose-reference.jpg",
"product_image": "https://example.com/iphone.jpg",
"camera_style": "pro",
"lora_url": "https://example.com/my-style.safetensors",
"lora_type": "flux-2-klein",
"batch": 2,
"settings": {
"aspect_ratio": "1:1"
}
}'{
"generation_id": "clxxxx1234567890",
"status": "queued",
"images": [
"https://cdn.influencerstudio.com/generations/influencer_001.jpg",
"https://cdn.influencerstudio.com/generations/influencer_002.jpg"
],
"estimated_time": 30,
"credits_used": 48
}/api/v1/influencers/videoGenerate influencer video
Generate a video of a trained influencer using AI-powered planning and Veo 3.1 Quality. Provide a video concept and optional images for product, outfit, and location. The system uses OpenAI to plan the video frames and motion, generates the frames with Studio 1, and creates the video with Veo 3.1 Quality including native audio. If the influencer has a trained voice, voice conversion is automatically applied.
Request Body
| Field | Type | Description |
|---|---|---|
influencer_id* | string | ID of a trained influencer |
prompt* | string | Video concept/description (e.g., 'influencer walking on beach, picks up product and shows it to camera') |
dialog | string | Optional script/dialog for the video (used for audio context and motion planning) |
product_image | string | URL of a product image to feature in the video |
outfit_image | string | URL of an outfit image - the influencer will be dressed in this outfit |
location_image | string | URL of a location/background image - the influencer will be placed in this setting |
aspect_ratio | string2 options available default: 9:16 | Video aspect ratio (Veo 3.1 only supports 16:9 and 9:16) |
workspace_id | string | Workspace ID to save results |
Responses
curl -X POST "https://influencerstudio.com/api/v1/influencers/video" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"influencer_id": "your-influencer-id",
"prompt": "Influencer walks toward camera on a beach, picks up a product, and shows it while smiling",
"dialog": "Hey everyone! Check out this amazing new product!",
"product_image": "https://example.com/product.jpg",
"outfit_image": "https://example.com/summer-outfit.jpg",
"location_image": "https://example.com/tropical-beach.jpg",
"aspect_ratio": "9:16"
}'{
"generation_id": "clxxxx_video_001",
"status": "queued",
"first_frame_url": "https://cdn.influencerstudio.com/generations/frame_first.jpg",
"last_frame_url": "https://cdn.influencerstudio.com/generations/frame_last.jpg",
"video_url": null,
"estimated_time": 180,
"credits_used": 328,
"has_voice_conversion": true
}Music
/api/v1/musicList music tracks
Get a list of all music tracks generated by your team. Optionally filter by workspace.
Responses
curl -X GET "https://influencerstudio.com/api/v1/music" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "clxxxx_audio_001",
"title": "Summer Vibes",
"style": "pop, upbeat, electronic",
"url": "https://cdn.influencerstudio.com/music/summer_vibes.mp3",
"status": "completed",
"generation_id": "clxxxx_gen_001",
"created_at": "2026-02-15T10:00:00.000Z"
}
]/api/v1/music/generateGenerate music
Generate a music track using Suno AI. Provide a title, optional style, lyrics, and vocal preferences. The track is generated asynchronously — poll GET /api/v1/generations/{id}/status for the result.
Request Body
| Field | Type | Description |
|---|---|---|
title* | string | Title for the music track |
style | string | Music style/genre description (e.g., 'pop, upbeat, electronic') |
lyrics | string | Lyrics for the song. Leave empty for instrumental. |
instrumental | boolean default: false | Generate instrumental only (no vocals) |
vocal_gender | string2 options available | Vocal gender preference: 'm' for male, 'f' for female |
model | string5 options available default: V4_5PLUS | Suno model version |
workspace_id | string | Optional workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/music/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Summer Vibes",
"style": "pop, upbeat, electronic, feel-good",
"lyrics": "Walking on sunshine, feeling alive\nEvery moment is a reason to thrive",
"instrumental": false,
"vocal_gender": "m",
"model": "V4_5PLUS"
}'{
"generation_id": "clxxxx_gen_music_001",
"status": "queued",
"estimated_time": 30,
"credits_used": 50
}/api/v1/music/{id}Get music track
Get details of a specific music track by its ID, including title, style, audio URL, and status.
Responses
curl -X GET "https://influencerstudio.com/api/v1/music/{id}" \
-H "Authorization: Bearer YOUR_API_KEY"{
"id": "clxxxx_audio_001",
"title": "Summer Vibes",
"style": "pop, upbeat, electronic",
"url": "https://cdn.influencerstudio.com/music/summer_vibes.mp3",
"status": "completed",
"generation_id": "clxxxx_gen_001",
"created_at": "2026-02-15T10:00:00.000Z"
}Voices
/api/v1/voicesList voices
Get a list of all voices belonging to your team. Optionally filter by influencer_id using a query parameter.
Responses
curl -X GET "https://influencerstudio.com/api/v1/voices" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "clxxxx_voice_001",
"name": "Sofia Voice #1",
"description": null,
"type": "cloned",
"audio_url": "https://cdn.influencerstudio.com/voices/sofia_preview.mp3",
"influencer_id": "clxxxx_influencer_001",
"influencer_name": "Sofia Martinez",
"created_at": "2026-02-10T14:30:00.000Z"
},
{
"id": "clxxxx_voice_002",
"name": "Narrator Voice",
"description": null,
"type": "designed",
"audio_url": "https://cdn.influencerstudio.com/voices/narrator_preview.mp3",
"influencer_id": null,
"influencer_name": null,
"created_at": "2026-02-12T09:00:00.000Z"
}
]/api/v1/voices/generateGenerate voice
Create a new AI voice by cloning from an audio file or designing from a text description. Optionally associate with an influencer. Clone uses Cartesia voice cloning; design uses MiniMax voice design.
Request Body
| Field | Type | Description |
|---|---|---|
method* | string2 options available | Voice creation method: 'clone' from audio or 'design' from text prompt |
influencer_id | string | Optional influencer ID to associate the voice with |
audio_url | string | Required for 'clone' method: public URL of audio to clone |
prompt | string | Required for 'design' method: text description of the desired voice |
name | string | Optional name for the voice |
workspace_id | string | Optional workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/voices/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "clone",
"audio_url": "https://example.com/voice-sample.mp3",
"name": "My Custom Voice"
}'{
"voice_id": "clxxxx_voice_003",
"name": "My Custom Voice",
"type": "cloned",
"audio_url": "https://cdn.influencerstudio.com/voices/custom_preview.mp3",
"influencer_id": null,
"status": "completed",
"credits_used": 0
}/api/v1/voices/{id}Get voice
Get details of a specific voice by its ID, including the Cartesia voice ID for TTS generation.
Responses
curl -X GET "https://influencerstudio.com/api/v1/voices/{id}" \
-H "Authorization: Bearer YOUR_API_KEY"{
"id": "clxxxx_voice_001",
"name": "Sofia Voice #1",
"description": null,
"type": "cloned",
"audio_url": "https://cdn.influencerstudio.com/voices/sofia_preview.mp3",
"custom_voice_id": "cartesia_xxxxx",
"influencer_id": "clxxxx_influencer_001",
"influencer_name": "Sofia Martinez",
"created_at": "2026-02-10T14:30:00.000Z"
}Models
/api/v1/models/imagesList image models
Returns all supported image models with their capabilities, settings, and LoRA support. Models with supports_lora: true also include a lora_types array listing accepted lora_type values (e.g. 'flux-2-klein', 'z-image') for use alongside lora_url.
Responses
curl -X GET "https://influencerstudio.com/api/v1/models/images" \
-H "Authorization: Bearer YOUR_API_KEY"/api/v1/models/videosList video models
Returns all supported video models with their capabilities and settings.
Responses
curl -X GET "https://influencerstudio.com/api/v1/models/videos" \
-H "Authorization: Bearer YOUR_API_KEY"Images
/api/v1/images/generate-faceGenerate face images
Generate face images using multiple AI models for maximum variety. Each image is generated by a different model. Batch 1-10 faces per request. Poll GET /api/v1/generations/{id}/status for results.
Request Body
| Field | Type | Description |
|---|---|---|
prompt* | string | Text description of the face to generate (e.g., 'beautiful woman with green eyes, natural lighting') |
negative_prompt | string | Things to avoid in the generated face |
batch | integer default: 4 | Number of face images to generate (1-10) |
gender | string | Gender for the face (e.g., 'female', 'male') |
ethnicity | string | Ethnicity for the face (e.g., 'Asian', 'White Caucasian') |
hair_color | string | Hair color (e.g., 'blonde hair', 'brown hair') |
seed | number | Optional seed for reproducibility |
workspace_id | string | Optional workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/images/generate-face" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "beautiful woman with green eyes, natural lighting, professional headshot",
"batch": 4,
"gender": "female",
"ethnicity": "White Caucasian",
"hair_color": "blonde hair"
}'{
"generation_id": "clxxxx_gen_face_001",
"status": "queued",
"batch": 4,
"estimated_time": 60,
"credits_used": 0
}/api/v1/images/generateGenerate images
Generate images using a unified model name (e.g., 'nano-banana-2', 'flux-ultra', 'seedream-5'). If init_image is provided, the model's image-to-image variant is used automatically; otherwise text-to-image. Use lora_url to apply a custom LoRA (.safetensors) and lora_type to select the base model (e.g. 'flux-2-klein', 'z-image'). See GET /api/v1/models/images for all models and their accepted lora_types.
Request Body
| Field | Type | Description |
|---|---|---|
prompt* | string | Text description of the image to generate. |
negative_prompt | string | Things to avoid in the generated image |
model | string34 options available default: studio-1 | AI model to use for generation. Use short names like 'nano-banana-2', 'flux-ultra', 'seedream-5'. Auto-routes to text-to-image or image-to-image based on whether init_image is provided. |
influencer_id | string | Optional: ID of a trained influencer. If an influencer is used, studio-1 model will be used. |
lora_url | string | Optional: URL of a LoRA weights file (.safetensors) to apply custom style or character consistency. Only works with LoRA-compatible models — see GET /api/v1/models/images for models marked with supports_lora. |
lora_type | string6 options available | LoRA base model. Accepted values: 'flux-2-klein', 'z-image', 'flux-lora', 'flux-1-dev', 'qwen-image-2512', 'qwen-image-edit-2511'. Defaults to 'flux-1-dev'. |
batch | integer default: 1 | Number of images to be generated. |
settings | object | - |
settings.aspect_ratio | string default: 1:1 | Image aspect ratio |
settings.num_inference_steps | integer default: 28 | - |
init_image | string | Optional: URL of an initial image |
webhook | string | - |
workspace_id | string | - |
Responses
curl -X POST "https://influencerstudio.com/api/v1/images/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A professional headshot of a person in business attire, studio lighting",
"model": "studio-1",
"lora_url": "https://example.com/my-custom-style.safetensors",
"batch": 2,
"settings": {
"aspect_ratio": "1:1"
},
"lora_type": "flux-2-klein"
}'{
"generation_id": "clxxxx1234567890",
"status": "queued",
"images": [
"https://cdn.influencerstudio.com/generations/img_001.jpg",
"https://cdn.influencerstudio.com/generations/img_002.jpg"
],
"estimated_time": 30,
"credits_used": 48
}/api/v1/images/editEdit image
Edit an existing image using AI inpainting with a text prompt
Request Body
| Field | Type | Description |
|---|---|---|
image_url* | string | Public URL of the image to edit |
prompt* | string | Description of the edits to make to the image |
additional_images | array | Optional: Additional reference images for context |
model | string12 options available default: SEEDREAM | AI model for editing |
width | integer | Optional: Output image width in pixels. Honored by models that accept custom dimensions (QWEN_IMAGE_2, SEEDREAM, SEEDREAM_V5_LITE, WAN_26, WAN_27_PRO, FLUX_2_KLEIN, FLUX_2_MAX, Z_IMAGE_TURBO, GPT_IMAGE_2, FIRERED). Ignored by NANO_BANANA / NANO_BANANA_2 / JOYAI. Must be set together with height. |
height | integer | Optional: Output image height in pixels. See width for support details. |
webhook | string | Optional: Webhook URL to receive completion notifications |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/images/edit" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/image.jpg",
"prompt": "change the background to a beach",
"model": "SEEDREAM"
}'{
"generation_id": "clxxxx1234567890",
"status": "queued",
"image_id": "clxxxx0987654321",
"estimated_time": 15,
"credits_used": 18
}Videos
/api/v1/videos/generateGenerate video
Generate a video using a unified model name (e.g., 'kling-3', 'veo-3.1', 'sora-2'). If first_frame_image is provided, the model's image-to-video variant is used automatically; otherwise text-to-video.
Request Body
| Field | Type | Description |
|---|---|---|
prompt* | string | Text description of the video to generate. |
model | string23 options available default: kling-3 | Video generation model. Use short names like 'kling-3', 'veo-3.1', 'sora-2', 'seedance-2'. Auto-routes to text-to-video or image-to-video based on whether first_frame_image is provided. |
settings | object | - |
settings.aspect_ratio | string5 options available default: 16:9 | Video aspect ratio. Default: '16:9'. Note: not all models support all ratios. |
settings.duration | integer default: 5 | Video duration in seconds. Range: 1-15 (model-dependent), Default: 5. |
settings.provider | string5 options available | Seedance 2 only: provider tier. Defaults to 'muapi' for API traffic (57 cr/sec). Other options: 'fal-enterprise-1080p' (720p fast, 119 cr/sec), 'fal-enterprise-1080p-hq' (1080p HQ, 143 cr/sec), 'fal' (legacy 720p), 'piapi'. Ignored for other models. |
settings.quality | string2 options available | Seedance 2 only: 'basic' or 'high'. Default: 'high'. |
settings.remove_watermark | boolean | Seedance 2 only: remove provider watermark. Default: true. |
first_frame_image | string | Optional: URL of image to use as first frame (auto-routes to image-to-video). |
webhook | string | Optional: Webhook URL to receive completion notifications. |
workspace_id | string | Optional: Specific workspace ID. |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A person walking through a city, cinematic",
"model": "kling-3",
"settings": {
"aspect_ratio": "16:9",
"duration": 5,
"provider": "fal",
"quality": "basic"
}
}'{
"generation_id": "clxxxx1234567890",
"status": "queued",
"videos": [
"https://cdn.influencerstudio.com/generations/video_001.mp4"
],
"estimated_time": 120,
"credits_used": 50
}/api/v1/videos/lipsyncCreate lip sync video
Generate a lip-synced video by synchronizing video with audio
Request Body
| Field | Type | Description |
|---|---|---|
video_url* | string | Public URL of the video file to lip-sync |
audio_url* | string | Public URL of the audio file to sync with |
model | string4 options available default: sync-lipsync/v3 | Lip-sync model to use |
generation_id | string | Optional: Existing generation ID to add this lip-sync to |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/lipsync" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"audio_url": "https://example.com/audio.mp3",
"model": "sync-lipsync/v3"
}'{
"generation_id": "clxxxx1234567890",
"status": "queued",
"estimated_time": 60,
"credits_used": 25
}/api/v1/videos/motion-controlMotion control video
Transfer movements from a reference video to a character image using Kling 3.0 Pro motion control. Supports element binding for facial consistency (requires character_orientation="video"). Automatically handles video compression.
Request Body
| Field | Type | Description |
|---|---|---|
video_url* | string | Public URL of the reference video containing the motion to transfer |
image_url* | string | Public URL of the character/subject image to apply motion to |
prompt | string | Optional: Text description to guide the motion control generation. Use @Element1 to reference a bound element. |
character_orientation | string2 options available default: video | Character orientation relative to the reference video. 'video' keeps the orientation from the reference video (max 30s), 'image' preserves the orientation from the character image (max 10s). Default: 'video' |
element | object | Optional: Face element for identity preservation (Kling 3.0 only). Requires character_orientation='video'. Reference in prompt as @Element1. |
element.frontal_image_url* | string | Frontal face image URL for the element. Used for facial consistency binding. |
element.reference_image_urls | array | Optional: Additional reference images from different angles (1-3 images) |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/motion-control" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/reference-video.mp4",
"character_image_url": "https://example.com/character.jpg",
"character_orientation": "video",
"element_binding": [
{
"element_index": 0,
"source_video_url": "https://example.com/face-reference.mp4"
}
]
}'{
"generation_id": "clxxxx_motion_001",
"status": "queued",
"estimated_time": 180
}/api/v1/videos/wan22Generate video with WAN 2.2 + LoRA
Generate a video using WAN 2.2 14B with custom LoRA weights. Pass multiple LoRAs (e.g. high-noise + low-noise variants) together for best results. When image_url is provided, runs image-to-video (I2V); otherwise runs text-to-video (T2V). This call is synchronous and returns the video URL directly — no polling required.
Request Body
| Field | Type | Description |
|---|---|---|
mode* | string2 options available | Generation mode: 't2v' for text-to-video, 'i2v' for image-to-video. |
prompt* | string | Text prompt describing the video content. |
image_url | string | Source image URL. Required when mode is 'i2v'. |
influencer_id | string | Optional influencer ID for tracking. |
loras* | array | LoRA weights to apply. Include both high-noise and low-noise variants together for best results, each with their own scale. |
settings | object | - |
settings.resolution | string3 options available default: 720p | Output resolution. Default: 720p |
settings.aspect_ratio | string3 options available default: 16:9 | Aspect ratio. Default: 16:9 |
settings.num_frames | integer default: 81 | Number of frames to generate (17–161). Default: 81 |
settings.frames_per_second | integer default: 16 | Playback FPS (4–60). Default: 16 |
settings.num_inference_steps | integer default: 27 | Inference steps. Higher = better quality, slower. Default: 27 |
settings.guidance_scale | number default: 3.5 | Prompt adherence strength. Default: 3.5 |
settings.enable_prompt_expansion | boolean default: false | Use LLM to expand the prompt with extra detail. Default: false |
settings.seed | integer | Random seed for reproducibility |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/wan22" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "t2v",
"prompt": "A beautiful woman walks confidently along a sunlit beach, slow motion, cinematic",
"loras": [
{
"path": "https://example.com/loras/T2V_14b_HighNoise_v2.safetensors",
"scale": 1,
"transformer": "high"
},
{
"path": "https://example.com/loras/T2V_14b_LowNoise_v2.safetensors",
"scale": 1,
"transformer": "low"
}
],
"settings": {
"resolution": "720p",
"aspect_ratio": "16:9",
"num_frames": 81,
"frames_per_second": 16
}
}'{
"generation_id": "clxxxx_wan22_001",
"video_url": "https://cdn.influencerstudio.com/generations/wan22_video_001.mp4",
"mode": "text-to-video"
}/api/v1/videos/reference-to-videoReference to video
Generate a video from reference images and text. Supports three models via the `model` field: 'kling-3' (default), 'seedance-2', and 'happy-horse'. Use the same prompt syntax for all three (@Element1, @Image1) — the backend translates references to each model's native format. Supports character/object elements for identity consistency, multi-shot prompts, start/end frames, voice conversion, and product/outfit/location images.
Request Body
| Field | Type | Description |
|---|---|---|
prompt* | string | Text description of the video. Use @Element1, @Element2, … to reference character/object elements and @Image1, @Image2, … to reference free style/location images. The backend translates these to the model's native syntax (Kling keeps @Element, Seedance 2 maps to @image, Happy Horse maps to character1/character2). If influencer_id is provided, the influencer is automatically mapped to @Element1. |
model | string3 options available default: kling-3 | Reference-to-video model. Options: 'kling-3' (default), 'seedance-2', 'happy-horse'. Each model supports the same prompt syntax (@Element1, @Image1) — the backend handles per-model translation. |
resolution | string2 options available | Optional: Video resolution. Only meaningful for 'seedance-2' and 'happy-horse'. Default is the model's highest tier. |
influencer_id | string | Optional: ID of a trained influencer to use as a character element. The influencer's images are automatically resolved and mapped to @Element1 in the prompt. Requires the influencer to be ready for generation. |
elements | array | Optional: Character/object elements for identity-consistent video generation. Each element gets an @Element{N} reference for the prompt. Cannot be used together with influencer_id. |
image_urls | array | Optional: Style or background reference images (max 2). Referenced as @Image1, @Image2 in the prompt. |
start_image_url | string | Optional: Image to use as the first frame of the video |
end_image_url | string | Optional: Image to use as the last frame of the video |
multi_prompt | array | Optional: Multi-shot video with different prompts per segment. When provided, the main prompt is ignored and each segment uses its own prompt and duration. Note: only Kling 3 natively supports per-segment shot changes; for Seedance 2 / Happy Horse the segments are concatenated into a single timestamped prompt. |
duration | string default: 5 | Video duration in seconds. Kling 3 supports 5–15s, Seedance 2 / Happy Horse support 3–15s. Default: '5'. Ignored when multi_prompt is provided. |
aspect_ratio | string5 options available default: 16:9 | Video aspect ratio. Kling 3 supports 16:9 / 9:16 / 1:1; Seedance 2 / Happy Horse additionally support 4:3 / 3:4. Default: '16:9'. |
script | string | Optional: Dialogue script for the character. Embedded into the prompt to generate lip movements. Models with native audio (Seedance 2, Happy Horse) bake the script into the audio track; Kling 3 uses post-generation voice conversion. |
voice_id | string | Optional: Voice ID for post-generation voice conversion or TTS. Use a voice from GET /api/v1/voices. |
product_image_urls | array | Optional: Product images to incorporate into the video as elements |
outfit_image_url | string | Optional: Outfit image to apply to the character. For Happy Horse / Seedance 2 the outfit is auto-baked into a character composite (no need to say 'wearing @Image1' — the model picks it up from the composite reference). |
location_image_urls | array | Optional: Location/background images for the scene |
workspace_id | string | Optional: Specific workspace ID |
Responses
Demonstrates Kling-native features: structured elements with multiple reference angles, a dedicated start frame, a multi-shot prompt array, and post-generation voice conversion with a custom voice. Use this shape when you need identity-consistent multi-angle character tracking and shot-by-shot control.
Change the model dropdown in the request body table to switch examples.
curl -X POST "https://influencerstudio.com/api/v1/videos/reference-to-video" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3",
"prompt": "@Element1 holds @Image1 up to the camera and smiles, then walks into the scene shown in @Image2.",
"elements": [
{
"frontal_image_url": "https://example.com/character-front.jpg",
"reference_image_urls": [
"https://example.com/character-side.jpg",
"https://example.com/character-back.jpg",
"https://example.com/character-three-quarter.jpg"
]
}
],
"image_urls": [
"https://example.com/product.jpg",
"https://example.com/golden-hour-cafe.jpg"
],
"start_image_url": "https://example.com/opening-frame.jpg",
"multi_prompt": [
{
"prompt": "Medium close-up: @Element1 holds @Image1, smiles warmly, soft natural window light.",
"duration": "5"
},
{
"prompt": "Wide shot: @Element1 turns and walks into @Image2, cinematic, golden hour.",
"duration": "5"
}
],
"duration": "5",
"aspect_ratio": "16:9",
"script": "You're going to love this — it completely changed my morning routine.",
"voice_id": "your-voice-id",
"resolution": "720p"
}'{
"generation_id": "clxxxx_ref_video_001",
"status": "queued",
"estimated_time": 180
}/api/v1/videos/talking-headGenerate talking head video
Create a talking head video from a start image and script/audio. Supports multiple models (veed-lipsync, seedance-2-talking-head, kling-3, veo-3.1, etc.), voice selection, emotion tags in scripts ([excited], [calm], [pause:1s]), and preset location templates (podcast studio, tech studio, etc.). Poll GET /api/v1/generations/{id}/status for results.
Request Body
| Field | Type | Description |
|---|---|---|
script | string | Script for TTS audio generation. Supports Cartesia emotion tags: [excited], [calm], [pause:1s], etc. Required when audio_mode is 'generate'. |
audio_url | string | URL of pre-recorded audio file. Required when audio_mode is 'upload'. |
audio_mode | string2 options available default: generate | Audio source: 'generate' uses script + the influencer's most recently created voice for TTS, 'upload' uses audio_url directly. Default: 'generate'. |
audio_settings | object | TTS audio settings (used when audio_mode is 'generate'). |
audio_settings.speed | number default: 1 | Speech speed multiplier. Default: 1.0 |
audio_settings.volume | number default: 1 | Volume multiplier. Default: 1.0 |
audio_settings.emotion | string default: neutral | Default emotion for TTS. Options: neutral, excited, happy, calm, sad, angry, enthusiastic, curious, frustrated. Default: 'neutral'. |
audio_settings.language | string default: en | Language code (e.g. 'en', 'es', 'fr', 'de', 'ja', 'ko', 'zh'). Default: 'en'. |
model | string default: veed-lipsync | Talking head model. Options: veed-lipsync (default), veed, seedance-2-talking-head, kling-3, kling-3-video, veo-3.1, creatify-aurora, heygen-avatar4, omnihuman. |
duration | string | Video duration in seconds (e.g. '5', '10'). Model-dependent. |
resolution | string | Video resolution (e.g. '720p'). |
aspect_ratio | string2 options available default: 9:16 | Video aspect ratio. Default: '9:16'. |
influencer_id | string | Influencer ID. Required for seedance-2-talking-head, when using template-based start images, and whenever audio_mode is 'generate' on a model that requires audio (the influencer's most recently created voice is used for TTS). |
start_image_url | string | URL of the start frame / location image. Mutually exclusive with template_id + angle_id. |
template_id | string | Talking head template ID (e.g. 'podcast', 'tech-studio', 'modern-home'). Use with angle_id. Requires influencer_id. |
angle_id | string | Template angle ID (e.g. 'front-16-9', 'left-9-16'). Must match a valid angle for the chosen template. |
static_camera | boolean default: true | Seedance 2 only: keep camera static. Default: true. |
camera_motion_prompt | string | Seedance 2 only: camera motion instruction when static_camera is false. |
workspace_id | string | Optional workspace ID. |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/talking-head" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"script": "[excited] Hey everyone! Welcome to my channel. [calm] Today I want to talk about something really important.",
"model": "veed-lipsync",
"influencer_id": "your-influencer-id",
"template_id": "tech-studio",
"angle_id": "front-16-9",
"aspect_ratio": "9:16",
"audio_settings": {
"speed": 1,
"emotion": "neutral",
"language": "en"
},
"audio_mode": "generate"
}'{
"generation_id": "clxxxx_talking_head_001",
"status": "queued",
"estimated_time": 120
}/api/v1/videos/upscaleUpscale video
Upscale a video using either `topaz` (default) or `seedvr`. Pass `upscale_factor` as `2` or `4`. For Topaz, optionally select a specific enhancement model via `topaz_video_model` (e.g. `Proteus`, `Starlight Precise 2.5`) and fine-tune with `target_fps`, `h264_output`, `compression`, `noise`, `halo`, `grain`, and `recover_detail`. Poll GET /api/v1/generations/{id}/status for the result.
Request Body
| Field | Type | Description |
|---|---|---|
video_url* | string | Public URL of the video to upscale. |
model | string2 options available default: topaz | Upscaler model. Default: 'topaz' |
upscale_factor | number | number default: 2 | Upscale multiplier. Either 2x or 4x. Default: 2 |
output_format | string default: X264 (.mp4) | Output video format. Default: 'X264 (.mp4)' |
output_quality | string4 options available default: high | Output quality level. Default: 'high' |
topaz_video_model | string18 options available | Optional (topaz only): Specific Topaz enhancement model. Proteus is best for most videos; Artemis for denoise+sharpen; Nyx for dedicated denoising; Gaia for AI-generated/CG content; Starlight for generative diffusion-based upscaling. Default: 'Starlight Precise 2.5' |
target_fps | integer | Optional (topaz only): Target frame rate for the output video (16-60 fps). Doubles the processing cost when set. |
h264_output | boolean | Optional (topaz only): Force H.264 codec for the output video. |
compression | number | Optional (topaz only): Compression artifact correction (0-1). |
noise | number | Optional (topaz only): Noise reduction strength (0-1). |
halo | number | Optional (topaz only): Halo reduction strength (0-1). |
grain | number | Optional (topaz only): Film grain amount (0-1). |
recover_detail | number | Optional (topaz only): Source detail preservation strength (0-1). |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/upscale" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"model": "topaz",
"upscale_factor": 2,
"topaz_video_model": "Proteus",
"output_quality": "high",
"target_fps": 30
}'{
"generation_id": "clxxxx_gen_upscale_001",
"status": "queued",
"estimated_time": 180
}/api/v1/videos/upscale/seedvrUpscale video with SeedVR (deprecated)
**[DEPRECATED]** Use `POST /api/v1/videos/upscale` with `model: "seedvr"` instead. This endpoint is kept for backward compatibility and will be removed in a future API version. Upscale a video using SeedVR. Supports factor-based or target-resolution upscaling. Priced per output megapixel.
Request Body
| Field | Type | Description |
|---|---|---|
video_url* | string | Public URL of the video to upscale. |
upscale_mode | string2 options available default: factor | Upscale mode. 'factor' scales by a multiplier, 'target' scales to a specific resolution. Default: 'factor' |
upscale_factor | number default: 2 | Upscale multiplier. Used when upscale_mode is 'factor'. Default: 2 |
target_resolution | string4 options available | Target output resolution. Used when upscale_mode is 'target'. |
output_format | string default: X264 (.mp4) | Output video format. Default: 'X264 (.mp4)' |
output_quality | string4 options available default: high | Output quality level. Default: 'high' |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/upscale/seedvr" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"upscale_mode": "factor",
"upscale_factor": 2,
"output_quality": "high",
"target_resolution": "720p"
}'{
"generation_id": "clxxxx_gen_upscale_001",
"status": "queued",
"estimated_time": 180
}/api/v1/videos/upscale/topazUpscale video with Topaz (deprecated)
**[DEPRECATED]** Use `POST /api/v1/videos/upscale` with `model: "topaz"` instead. This endpoint is kept for backward compatibility and will be removed in a future API version. Upscale a video using Topaz. Supports 1-4x upscaling, optional FPS boost (16-60 fps), and H.264 output. Priced per second based on output resolution tier.
Request Body
| Field | Type | Description |
|---|---|---|
video_url* | string | Public URL of the video to upscale. |
upscale_mode | string2 options available default: factor | Upscale mode. 'factor' scales by a multiplier, 'target' scales to a specific resolution. Default: 'factor' |
upscale_factor | number default: 2 | Upscale multiplier (1-4x). Used when upscale_mode is 'factor'. Default: 2 |
target_resolution | string4 options available | Target output resolution. Used when upscale_mode is 'target'. |
output_format | string default: X264 (.mp4) | Output video format. Default: 'X264 (.mp4)' |
output_quality | string4 options available default: high | Output quality level. Default: 'high' |
target_fps | integer | Optional: Target frame rate for the output video (16-60 fps). Doubles the processing cost when set. |
h264_output | boolean | Optional: Force H.264 codec for the output video. |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/videos/upscale/topaz" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"upscale_mode": "factor",
"target_resolution": "720p",
"output_quality": "high",
"target_fps": 30
}'{
"generation_id": "clxxxx_gen_upscale_002",
"status": "queued",
"estimated_time": 180
}3D Models
/api/v1/models-3d/generateGenerate 3D model
Generate a 3D model from a text prompt using Meshy v6.
Request Body
| Field | Type | Description |
|---|---|---|
prompt* | string | Text description of the 3D model to generate. |
init_image | string | Optional: Image URL for image-to-3D generation |
model | string4 options available default: meshy/v6/text-to-3d | Model ID for 3D generation |
settings | object | Model settings |
settings.mode | string2 options available | Generation mode. 'preview' is faster, 'full' is higher quality. Default: full |
settings.art_style | string2 options available | Art style for the 3D model. Default: realistic |
settings.topology | string2 options available | Mesh topology. 'quad' is better for animation/rigging. Default: triangle |
settings.target_polycount | integer | Target polygon count. Range: 1000-100000. Default: 30000 |
settings.symmetry_mode | string3 options available | Symmetry mode. 'auto' detects automatically. Default: auto |
settings.should_remesh | boolean | Enable remeshing for cleaner topology. Default: true |
settings.is_a_t_pose | boolean | Generate character in A/T pose for rigging. Default: false |
settings.enable_pbr | boolean | Generate PBR texture maps (normal, roughness, metallic). Default: false |
settings.enable_prompt_expansion | boolean | Expand prompt with AI for better results. Default: false |
webhook | string | Optional: Webhook URL to receive completion notifications |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/models-3d/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A medieval knight in full armor",
"settings": {
"mode": "preview",
"art_style": "realistic",
"topology": "quad",
"target_polycount": 50000,
"symmetry_mode": "off",
"should_remesh": true,
"is_a_t_pose": true,
"enable_pbr": true,
"enable_prompt_expansion": true
},
"model": "meshy/v6/text-to-3d"
}'{
"generation_id": "clxxxx1234567890",
"status": "queued",
"model_url": "https://cdn.influencerstudio.com/generations/model_001.glb",
"estimated_time": 180,
"credits_used": 100
}Text
/api/v1/text/generateGenerate text
Generate text using supported Venice, Gemini, and OpenAI models.
Request Body
| Field | Type | Description |
|---|---|---|
prompt* | string | The text prompt to generate a response for |
model | string14 options available default: venice-uncensored | AI model to use. Default: venice-uncensored |
settings | object | Generation settings: temperature, max_tokens, system_prompt |
settings.temperature | number | Controls randomness. Lower = more focused, Higher = more creative. Range: 0-2. Default: 0.7 |
settings.max_tokens | integer | Maximum tokens to generate. Range: 1-16000. Default: 16000 |
settings.system_prompt | string | Optional system prompt to set AI behavior and context |
workspace_id | string | Optional: Specific workspace ID |
Responses
curl -X POST "https://influencerstudio.com/api/v1/text/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Write a creative story about a dog",
"model": "venice-uncensored",
"settings": {
"temperature": 0.5,
"max_tokens": 2000,
"system_prompt": "You are a helpful teacher who explains complex topics simply"
}
}'{
"generation_id": "clxxxx1234567890",
"text": "Once upon a time, there was a fluffy golden retriever named Max who loved to chase butterflies in the meadow...",
"model": "gpt-5.4",
"usage": {
"prompt_tokens": 25,
"completion_tokens": 150,
"total_tokens": 175
}
}Generations
/api/v1/generations/{id}/statusGet generation status
Check the status of any generation by its generation_id. Use this to poll for completion after creating an image, video, music, 3D model, or any async generation. The response includes the overall status (queued, processing, completed, failed), result URLs for completed items, per-item details with individual statuses, and credits used. Poll every 2-5 seconds until status is "completed" or "failed".
Responses
curl -X GET "https://influencerstudio.com/api/v1/generations/{id}/status" \
-H "Authorization: Bearer YOUR_API_KEY"{
"generation_id": "clxxxx1234567890",
"status": "completed",
"result_urls": [
"https://cdn.influencerstudio.com/generations/img_001.jpg",
"https://cdn.influencerstudio.com/generations/img_002.jpg"
],
"credits_used": 48,
"total_items": 2,
"completed_items": 2,
"failed_items": 0,
"items": [
{
"id": "clxxxx_img_001",
"type": "image",
"status": "COMPLETED",
"url": "https://cdn.influencerstudio.com/generations/img_001.jpg",
"created_at": "2026-02-03T10:00:00.000Z",
"updated_at": "2026-02-03T10:00:30.000Z"
},
{
"id": "clxxxx_img_002",
"type": "image",
"status": "COMPLETED",
"url": "https://cdn.influencerstudio.com/generations/img_002.jpg",
"created_at": "2026-02-03T10:00:00.000Z",
"updated_at": "2026-02-03T10:00:35.000Z"
}
]
}Billing
/api/v1/billing/plansGet available credit plans
Returns all available one-time credit purchase plans
Responses
curl -X GET "https://influencerstudio.com/api/v1/billing/plans" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "plan_starter",
"name": "Starter Pack",
"description": "500 credits for basic usage",
"storeId": "store_123",
"variants": [
{
"id": "497267",
"active": true,
"price": 9.99,
"currency": "USD",
"interval": "one_time",
"interval_count": 1
}
]
}
]/api/v1/billing/creditsGet current credit balance
Returns the total credit balance for the authenticated team
Responses
curl -X GET "https://influencerstudio.com/api/v1/billing/credits" \
-H "Authorization: Bearer YOUR_API_KEY"1500/api/v1/billing/top-upPurchase credits
Create a Stripe checkout session to purchase credits (one-time purchases only)
Request Body
| Field | Type | Description |
|---|---|---|
plan_id* | string | Plan ID from GET /api/v1/billing/plans |
variant_id | string | Optional: Specific variant ID |
success_url | string | Optional: URL to redirect after successful payment |
cancel_url | string | Optional: URL to redirect if payment is cancelled |
dispute_policy_acknowledged | boolean default: true | Must be true. By calling this endpoint you acknowledge the dispute evidence policy described at /dispute-policy. See https://influencerstudio.com/dispute-policy |
signature_name | string | Optional: your typed-name signature acknowledging the dispute policy for this charge. |
Responses
curl -X POST "https://influencerstudio.com/api/v1/billing/top-up" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"plan_id": "497267"
}'{
"checkoutUrl": "https://checkout.stripe.com/c/pay/cs_test_xxxxx"
}Storyboards
/api/v1/storyboardList storyboards
Get a list of all storyboard projects belonging to your team, including per-scene summary info (scene count, first-frame and video URLs). Optionally filter by workspace_id.
Responses
curl -X GET "https://influencerstudio.com/api/v1/storyboard" \
-H "Authorization: Bearer YOUR_API_KEY"/api/v1/storyboard/{projectId}Get storyboard project
Get the full storyboard project graph by its ID, including scenes, shots, frames with image versions, video versions, and the project-level outfits, locations, and custom elements. All asset URLs are public BunnyCDN links and can be downloaded directly.
Responses
curl -X GET "https://influencerstudio.com/api/v1/storyboard/{projectId}" \
-H "Authorization: Bearer YOUR_API_KEY"