API Reference
Create Project
Create a new video project using a video URL for AI-powered caption generation
POST
Create Project
Create a new video project by providing a video URL. This endpoint will download the video, transcribe the audio, and apply the specified template with AI-generated captions and effects.This endpoint requires authentication and has a rate limit of 500 requests per
hour.
Authentication
Your Submagic API key starting with
sk-Request Body
A descriptive title for your video project (1-100 characters)
Language code for transcription (e.g., “en”, “es”, “fr”). Use the languages
endpoint to get available options.
Public URL to your video file. Must be accessible without authentication and
in a supported format.
Name of an AI edit template to apply. AI edit templates automatically apply
AI-powered scene splitting, B-roll, music, and styling to your video. Available templates:
"kelly" (minimal, design), "karl"
(effective, modern), "ella" (dynamic, bold).When aiEditTemplate is provided, the only other fields you can pass
alongside it are title, language, videoUrl, webhookUrl, and
dictionary. All other fields will be ignored or rejected.ID of a saved preset to apply to the project. A preset is a snapshot of your
project settings — including captions style, hook title, music, effects, and
more. When provided, all preset settings are automatically applied after
transcription completes. To get your preset ID, go to the Presets page in the
app, open the dropdown menu on any preset card, and click “Copy ID”.Cannot be combined with
templateName, userThemeId, hookTitle, music,
items, magicZooms, magicBrolls, magicBrollsPercentage,
removeSilencePace, or removeBadTakes — the preset already controls these
settings.Template to apply for styling. Use the templates
endpoint to get available options. Defaults to
“Sara” if not specified. Cannot be used together with
userThemeId.ID of a custom user theme to apply for styling. Must be a valid UUID of a
theme that belongs to you or your team. Cannot be used together with
templateName. You can find the id of your custom theme by opening a project,
selecting the theme, pressing the pen icon to edit it. You’ll see the id of
the theme under theme’s name.Adds an animated opening caption (hook) to the video. Set to
true to let AI
generate using the default style or pass an object to customize the
appearance:text(optional): Custom hook, 1-100 characterstemplate(optional): Hook title template name. Defaults to"tiktok". Use the hook title templates endpoint to retrieve valid options.top(optional): Vertical position (0-80). Defaults to50.size(optional): Font size (0-80). Defaults to30.
URL to receive webhook notifications when processing is complete. Must be a
valid HTTPS URL.
Array of custom words or phrases to improve transcription accuracy (max 100
items, 50 characters each).
Optional array of items to insert into the video. Each item must include
a
type field to specify whether it’s user media from your library or
AI-generated content.Important: Each item must have a type field. Items cannot overlap with
each other in time. Requests that include invalid durations, overlapping
ranges, or prompts outside the allowed length will be rejected.Enable automatic zoom effects on the video to enhance visual engagement.
Optional, defaults to false.
Enable automatic B-roll insertion to enhance video content with relevant
supplementary footage. Optional, defaults to false.
Percentage of automatic B-rolls to include in the video (0-100). Only
effective when magicBrolls is enabled. Optional, defaults to 50.
Automatically remove silence from the video at the specified pace. Optional.
Allowed values:
natural, fast, extra-fast. - extra-fast: 0.1-0.2
seconds of silence removal - fast: 0.2-0.6 seconds of silence removal -
natural: 0.6+ seconds of silence removalAutomatically detect and remove bad takes and silence from the video using AI
analysis. Optional, defaults to false.
Enable AI-powered audio cleanup that removes background noises from the video.
Optional, defaults to false.
Hide captions from the exported video. Optional, defaults to
false.Whether to automatically render the final video once transcription completes.
Optional, defaults to
true.Set to false to keep the project editable: after transcription the project
stays in completed status without a rendered video, and the completed
webhook fires so you know it’s ready. You can then fetch the transcript with
Get Project, edit the captions with
Update Project (the words field), and
trigger the render yourself with Export Project.Optional background music track that spans the full project duration.
Supported Formats & Limits
Supported Formats
- MP4 (.mp4) - MOV (.mov)
File Limits
- Max size: 2GB - Max duration: 2 hours
Response
Unique identifier for the created project (UUID format)
The title you provided for the project
Language code used for transcription
Current processing status:
processing, transcribing, exporting,
completed, or failedWebhook URL if provided in the request
Template name applied to the project
User theme ID applied to the project
Preset ID applied to the project
AI edit template applied to the project (if any):
kelly, karl, or ellaWhether automatic zoom effects are enabled for the video
Whether automatic B-roll insertion is enabled for the video
Percentage of automatic B-rolls to include in the video (0-100)
Pace setting for automatic silence removal:
natural, fast, or extra-fastWhether automatic bad takes and silence removal is enabled
Whether AI-powered audio cleanup is enabled
ISO 8601 timestamp when the project was created
ISO 8601 timestamp when the project was last updated
Custom Dictionary
Improve transcription accuracy by providing custom terms:- Include brand names, product names, or technical terms
- Add words that are frequently mispronounced or misunderstood
- Keep terms under 50 characters each
- Limit to 100 terms per project
Webhook Integration
Receive notifications when your project is complete:Error Responses
Returned when
videoUrl is a Google Drive folder or other Drive link that
doesn’t point to a single file. Share a direct file link with access set to
“Anyone with the link”.Returned when
videoUrl can’t be reached or serves a web page instead of a
media file (e.g. a broken link, a login wall, or a share page rather than a
direct download).
