Skip to main content
POST
/
v1
/
videos
/
generations
curl --request POST \
  --url https://api.apimart.ai/v1/videos/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "skyreels-v4-fast",
    "prompt": "A serene forest at sunset with golden light filtering through the trees.",
    "duration": 5,
    "resolution": "1080p",
    "aspect_ratio": "16:9",
    "prompt_optimizer": true
  }'
{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_01KPEY5H3NQ2W8D7T6VB3F9GR4"
    }
  ]
}
curl --request POST \
  --url https://api.apimart.ai/v1/videos/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "skyreels-v4-fast",
    "prompt": "A serene forest at sunset with golden light filtering through the trees.",
    "duration": 5,
    "resolution": "1080p",
    "aspect_ratio": "16:9",
    "prompt_optimizer": true
  }'
{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_01KPEY5H3NQ2W8D7T6VB3F9GR4"
    }
  ]
}

Authorization

Authorization
string
required
All API endpoints require Bearer Token authenticationGet your API Key:Visit the API Key Management Page to get your API KeyAdd it to the request header:
Authorization: Bearer YOUR_API_KEY

Generation Modes

SkyReels V4 auto-routes to the correct mode based on request fields — no mode field needed:
ModeTriggerCapability
T2V (Text-to-Video)Only prompt + general fieldsPure text-driven generation
I2V (Image-to-Video)Any of first_frame_image / end_frame_image / mid_frame_imagesFirst/end/key frame control
Omni (Multimodal Reference)Any of ref_images / ref_videosSubject reference, grid collage, motion reference, video extension, audio sync
Strict mutual exclusion: I2V fields (first_frame_image / end_frame_image / mid_frame_images) and Omni fields (ref_images / ref_videos) cannot be used together, otherwise returns 422.
@tag mechanism: When using mid_frame_images / ref_images / ref_videos, each element must declare a tag starting with @ (e.g., @image1, @Actor-1, @video1), and the tag must appear in the prompt.Think of prompt as the “script” and tag as a “character pointer” to specific assets (images / videos). For example, a prompt like "@Actor-1 walks into the scene of @video1" instructs the system to inject the reference image subject tied to @Actor-1 and the motion reference tied to @video1 into the generation process.

Request Parameters

General Fields

model
string
required
Two model tiers are available:
ModelPositioningUse Cases
skyreels-v4-fastSpeed-firstQuick previews, batch generation, daily content
skyreels-v4-stdQuality-first (25~30% higher price than Fast)Key shots, high-detail requirements, formal delivery
The model field must be explicitly provided — no default value.
Pricing is strongly tied to resolution and whether ref_videos is used: 1080p is significantly more expensive than 480p / 720p; tiers with ref_videos (video input) cost ~1.5 ~ 2× compared to those without. See the Pricing Page for exact rates.
prompt
string
required
Text prompt, max 1280 tokensDescribe scenes, subjects, actions, styles in detail for better generation results.When using ref_images / ref_videos / mid_frame_images, the prompt must contain the corresponding @tag (e.g., @Actor-1, @video1, @image1).Example: "@Actor-1 walks through a neon-lit street at night."
duration
integer
default:"5"
Output video duration (seconds)
  • Range: [3, 15]
  • Default: 5
When ref_videos.type=reference is provided, duration is overridden by the reference video length (max 10 seconds).
resolution
string
default:"1080p"
Video resolutionOptions:
  • 480p
  • 720p
  • 1080p (default)
aspect_ratio
string
default:"16:9"
Aspect ratioOptions:
  • 16:9 (default)
  • 4:3
  • 1:1
  • 9:16
  • 3:4
aspect_ratio is ignored in I2V mode (output ratio is determined by the input image); also ignored when Omni is combined with ref_videos.
prompt_optimizer
boolean
default:"true"
Whether to auto-optimize the promptWhen enabled, the system automatically optimizes your prompt for better generation results.

I2V-Specific Fields

first_frame_image
string
First frame image URL (jpg / jpeg / png / gif / bmp)When provided, this image is used as the starting frame of the video.
end_frame_image
string
End frame image URL (jpg / jpeg / png / gif / bmp)When provided, this image is used as the ending frame of the video. Can be combined with first_frame_image for first-and-last-frame control.
mid_frame_images
object[]
Mid keyframe list, up to 6. Each element has the following structure:

Omni-Specific Fields

ref_images
object[]
Reference image list (all elements must share the same type). Each element has the following structure:
ref_videos
object[]
Reference video list, up to 1. Each element has the following structure:

Supported Scenarios

The following scenarios are supported by both skyreels-v4-fast and skyreels-v4-std:
ScenarioModeRequired FieldsTypical Use Case
Text-to-VideoT2VpromptPure text-driven, rapid concept shots
Image-to-Video - First FrameI2Vfirst_frame_imageStill-to-video with a specified starting frame
Image-to-Video - End FrameI2Vend_frame_imageSpecifies the closing frame
Image-to-Video - KeyframesI2Vmid_frame_images (1 ~ 6)First + end + mid keyframes for precise pacing
Omni Single/Multi-SubjectOmniref_images (type=image)Character consistency, multi-subject framing
Omni Grid CollageOmniref_images (type=grid, 1 image)Step-by-step process videos (tutorials, recipes, demos)
Omni Motion ReferenceOmniref_videos (type=reference)Replicate the motion, subject, or style of a reference video
Omni Video ExtensionOmniref_videos (type=extend)Continue an existing video with new content
Omni Audio SyncOmniref_images (type=image) + audio_urlDigital human narration, audio-driven lip-sync

Parameter Constraints

Violating any of the following will cause the request to be rejected with a 422 response, no billing occurs:
ParameterConstraint
promptMax 1280 tokens
duration[3, 15] seconds; overridden by reference video length (max 10s) when ref_videos.type=reference
resolutionOnly 480p / 720p / 1080p
aspect_ratio16:9 / 4:3 / 1:1 / 9:16 / 3:4; ignored in I2V; ignored when Omni carries ref_videos
mid_frame_imagesUp to 6; time_stamp must be -1 or within (0, duration)
ref_images overallAll elements must share the same type; cannot coexist with I2V fields
ref_images.type=gridList length must = 1; image_urls must be 1 image
ref_images.type=imageList length 1 ~ 3; each image_urls length 1 ~ 5
ref_images.audio_urlOnly supported when type=image, audio ≤ 15 seconds
ref_videosUp to 1; video_url MP4 / MOV, ≤ 15 seconds
ref_videos.type=referenceOverrides requested duration (max 10s), can combine with ref_images.type=image, carries input video audio by default
ref_videos.type=extendBilled by requested duration; cannot combine with ref_images
tag fieldMust start with @ and appear in the prompt
I2V / Omni exclusionI2V fields and Omni fields cannot be used together

Response

code
integer
Response status code, 200 on success
data
array
Response data array

Request Examples

Case 1: Text-to-Video (Minimal)

{
  "model": "skyreels-v4-fast",
  "prompt": "A serene forest at sunset with golden light filtering through the trees."
}

Case 2: Text-to-Video (Full Parameters)

{
  "model": "skyreels-v4-std",
  "prompt": "A serene forest at sunset.",
  "duration": 5,
  "resolution": "720p",
  "aspect_ratio": "16:9",
  "prompt_optimizer": true
}

Case 3: Image-to-Video - First Frame

{
  "model": "skyreels-v4-fast",
  "prompt": "Slowly pull the camera back to reveal the entire scene.",
  "first_frame_image": "https://example.com/start.png",
  "duration": 5
}

Case 4: Image-to-Video - First/End Frame + Mid Keyframes

{
  "model": "skyreels-v4-std",
  "prompt": "The King summons a flying dragon. @image1 The dragon lowers. The King mounts and flies away.",
  "duration": 8,
  "resolution": "1080p",
  "first_frame_image": "https://example.com/k2v_0.png",
  "end_frame_image":   "https://example.com/k2v_2.png",
  "mid_frame_images": [
    { "tag": "@image1", "image_url": "https://example.com/k2v_1.png", "time_stamp": 3 }
  ]
}

Case 5: Omni - Single Subject Reference

{
  "model": "skyreels-v4-fast",
  "prompt": "@Actor-1 walks through a neon-lit street at night.",
  "ref_images": [
    { "tag": "@Actor-1", "type": "image", "image_urls": ["https://example.com/actor.jpg"] }
  ]
}

Case 6: Omni - Multi-Subject + Video Motion Reference

{
  "model": "skyreels-v4-fast",
  "prompt": "The man from @image_1 imitates the move on the left in @video_1. The woman from @image_2 imitates the right side.",
  "duration": 5,
  "ref_images": [
    { "tag": "@image_1", "type": "image", "image_urls": ["https://example.com/a.png"] },
    { "tag": "@image_2", "type": "image", "image_urls": ["https://example.com/b.png"] }
  ],
  "ref_videos": [
    { "tag": "@video_1", "type": "reference", "video_url": "https://example.com/motion.mp4" }
  ]
}
This case uses ref_videos.type=reference, so the requested duration will be overridden by the actual reference video length (max 10 seconds). Even though "duration": 5 is passed here, the final video length follows the reference video.

Case 7: Omni - Grid Collage

{
  "model": "skyreels-v4-fast",
  "prompt": "Create a video showing how to make tomato and egg noodles based on @image1.",
  "ref_images": [
    { "tag": "@image1", "type": "grid", "image_urls": ["https://example.com/recipe_grid.png"] }
  ]
}

Case 8: Omni - Video Extension (extend)

{
  "model": "skyreels-v4-fast",
  "prompt": "Video extended @video1, someone walks over and sits on the sofa.",
  "duration": 8,
  "ref_videos": [
    { "tag": "@video1", "type": "extend", "video_url": "https://example.com/source.mp4" }
  ]
}

Case 9: Omni - Audio Sync (Voice-Driven)

{
  "model": "skyreels-v4-std",
  "prompt": "@Actor-1 speaks with a calm tone.",
  "ref_images": [
    {
      "tag": "@Actor-1",
      "type": "image",
      "image_urls": ["https://example.com/actor.jpg"],
      "audio_url":  "https://example.com/voice.mp3"
    }
  ]
}
Query Task ResultsVideo generation is an async task that returns a task_id upon submission. Use the Get Task Status endpoint to query generation progress and results.