Create Short
Submit a new video short creation request.
POST /shorts/create
Creates a new video short from a YouTube URL or uploaded file URL. The AI analyzes your video content, identifies the most engaging segments, and generates short-form clips with captions, overlays, and effects based on your configuration.
Each request consumes 1 credit regardless of how many clips are generated.
Request body
Video source parameters
You must provide exactly one of the following — not both.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes* | YouTube video URL. Required if fileUrl is not provided. |
fileUrl | string | Yes* | Direct URL to a video file (must start with http:// or https://). Required if url is not provided. |
Providing both url and fileUrl in the same request will return a 400 error.
YouTube URL — Provide a standard YouTube video URL. The API downloads and processes the video automatically. YouTube Shorts URLs (/shorts/) are not supported.
File URL — Provide a publicly accessible URL pointing to a video file. The API fetches the file directly. Useful for videos hosted on S3, GCS, Azure Blob, or any CDN.
Time range parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
start | number | Yes | — | Start time in seconds. Must be >= 0. |
end | number | Yes | — | End time in seconds. Must be greater than start. |
The start and end parameters define the segment of the source video to analyze. The AI clips within this time range.
Constraints:
- Minimum time window: 1 second. If
end - start < 1, the request is rejected with a400error. - Maximum time window: 1,200 seconds (20 minutes). If
end - start > 1200, the request is rejected with a400error. - Maximum video duration: 18,000 seconds (5 hours). Videos exceeding this are rejected.
- If the specified range exceeds the actual video duration, the range is automatically adjusted. The response will include a
timeAdjustmentobject showing the original and adjusted values.
This tells the AI to analyze the first 10 minutes of the video and find the best clips within that range.
Content parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
preferredLength | string | No | under60sec | Target duration for generated clips. |
language | string | No | en | Language of the video content for transcription. |
captionLanguage | string | No | Same as language | Caption language, if different from the spoken language. |
templateId | string | No | Default template | Caption template ID from GET /templates. Must be a valid 24-character hex string that exists in the template library. |
noClipping | boolean | No | false | Skip AI clipping — process the entire time range as a single clip. |
Preferred length options
The preferredLength parameter controls the target duration of each generated clip. The AI uses this as a guideline — actual clip lengths may vary slightly based on content.
| Value | Description |
|---|---|
under30sec | Short clips under 30 seconds — ideal for TikTok and Instagram Reels |
under60sec | Clips under 60 seconds — works well across all platforms (default) |
under90sec | Clips under 90 seconds — allows for more context |
under3min | Clips under 3 minutes — suitable for YouTube Shorts |
under5min | Clips under 5 minutes — longer highlights |
under10min | Clips under 10 minutes — extended segments |
No clipping mode
When noClipping is set to true, the AI skips segment detection and processes the entire start to end range as a single clip. This is useful when you already know the exact segment you want and just need captions, effects, and formatting applied.
Overlay parameters
These parameters add visual elements to your generated shorts. Each overlay type can be enabled independently.
| Parameter | Type | Default | Description |
|---|---|---|---|
hookTitle | boolean | false | Adds an animated hook title at the beginning of each clip. |
memeHook | boolean | false | Prepends a short meme clip before the main content. |
memeHookName | string | Random | Specific meme hook name from GET /meme-hooks. Must match an existing hook name exactly (case-sensitive). |
gameVideo | boolean | false | Adds a split-screen gameplay overlay in the bottom half. |
gameVideoName | string | Random | Specific game video name from GET /game-videos. Must match an existing video name exactly (case-sensitive). |
ctaEnabled | boolean | false | Adds a call-to-action text overlay. |
ctaText | string | — | CTA text content (max 200 characters). Required when ctaEnabled is true. |
Meme hooks
Meme hooks are short, attention-grabbing clips (typically 2–5 seconds) prepended to the start of your shorts. They help increase view retention by immediately capturing the viewer's attention.
Browse available meme hooks with GET /meme-hooks. If memeHookName is omitted, a random hook is selected.
Game video overlays
Game video overlays create a split-screen effect with your main content on top and gameplay footage on the bottom. This is a popular format on TikTok for increasing watch time.
Browse available game videos with GET /game-videos. If gameVideoName is omitted, a random video is selected.
Call-to-action
The CTA overlay adds a text banner at the end of the clip. Useful for directing viewers to your website, channel, or product.
Music parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
music | boolean | false | Adds background music to the generated clips. |
musicName | string | Random | Specific music track name from GET /music. Must match an existing track name exactly (case-sensitive). |
musicVolume | number | 10 | Volume level from 0 (silent) to 100 (full volume). Only applies when music is true. |
Background music is mixed with the original video audio. The musicVolume parameter controls the relative loudness of the music compared to the original audio — lower values keep the music subtle, higher values make it more prominent.
Browse available music tracks with GET /music. If musicName is omitted, a random track is selected.
Volume guidelines:
5–15— Subtle background ambiance, good for dialogue-heavy content15–30— Balanced mix, noticeable but doesn't overpower speech30–50— Prominent music, suitable for montage-style clips50+— Music-forward, best when the original audio isn't important
Layout parameter
| Parameter | Type | Default | Description |
|---|---|---|---|
layout | string | auto | Controls how the source video is framed for vertical output. |
The layout parameter determines how the source video (typically horizontal/landscape) is reframed for vertical short-form output (1080x1920).
| Value | Description |
|---|---|
auto | AI automatically determines the best layout based on the source video's aspect ratio and content (default) |
fill | Fills the entire vertical frame by zooming in and cropping the sides. Best for landscape videos where the main subject is centered. |
fit | Fits the full video within the frame with black padding above and below. Preserves all visual content. |
square | Crops to a 1:1 square aspect ratio. Good for Instagram feed posts. |
When to use each layout:
auto— Best default choice. The AI analyzes the video and picks the optimal framing.fill— Use for talking-head videos, interviews, or content where the main subject is centered.fit— Use for screen recordings, presentations, or content where all edges matter.square— Use specifically for Instagram feed or other platforms that favor square content.
Supported languages
The language parameter accepts ISO 639-1 language codes. This controls the transcription and caption language.
| Code | Language | Code | Language |
|---|---|---|---|
en | English | ko | Korean |
es | Spanish | zh | Chinese |
fr | French | ar | Arabic |
de | German | hi | Hindi |
it | Italian | tr | Turkish |
pt | Portuguese | pl | Polish |
ru | Russian | nl | Dutch |
ja | Japanese | sv | Swedish |
no | Norwegian | da | Danish |
fi | Finnish | cs | Czech |
vi | Vietnamese | id | Indonesian |
fa | Farsi | uk | Ukrainian |
Example request
Example with all overlays
Response
Response fields
| Field | Type | Description |
|---|---|---|
requestId | string | Unique identifier for tracking. Use this with GET /shorts/:id/status and GET /shorts/:id. |
status | string | Initial status — always processing. Use GET /shorts/:id/status to track progress. |
creditsUsed | number | Number of credits consumed (always 1). |
estimatedCompletionTime | string | ISO 8601 timestamp for estimated completion. |
queuePosition | number | null | Position in the processing queue, if applicable. |
Time adjustment response
If the requested time range exceeds the video duration, the API automatically adjusts it and returns details in the response:
Error responses
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Missing required fields, invalid parameter values, start >= end, time window exceeds 1,200s or is less than 1s, both url and fileUrl provided, non-existent templateId, invalid musicName/gameVideoName/memeHookName, invalid captionLanguage, ctaText exceeds 200 characters |
| 400 | invalid_youtube_url | YouTube URL is unreachable, private, or a Shorts URL |
| 400 | video_too_long | Video exceeds the 5-hour duration limit |
| 401 | missing_api_key | No API key header provided |
| 401 | invalid_api_key | Invalid key format, key not found, or key revoked |
| 403 | subscription_required | No active subscription on the account |
| 403 | insufficient_credits | No credits remaining on the account |
| 429 | rate_limit_exceeded | Too many creation requests — wait and retry |
Important notes
- Each request consumes 1 credit regardless of the number of clips generated.
- The time window (
end - start) must be between 1 second and 1,200 seconds (20 minutes). Requests outside this range are rejected with a400error. - YouTube Shorts URLs (
youtube.com/shorts/...) are not supported — use the full video URL instead. - Maximum video duration is 5 hours (18,000 seconds).
- Processing typically takes 5–30 minutes depending on video length and queue position.
- After creating a request, poll
GET /shorts/:id/statusevery 10 seconds until completion.
