Skip to main content
Glama

Create a short / reel (async)

create_short

Start making vertical 9:16 short(s) from a video link or an upload. Returns project ids immediately — rendering takes ~2–10 min; then call wait_for_project or get_project until status is "complete" and share videoUrl. tool=story (8 credits each): AI story script + natural voiceover + best footage + animated captions + headline — talent-show auditions, animals, sports, satisfying, wholesome, food, kids. edit_mode="whole" keeps a short clip as it is (its own order and sound) and only adds the narration on top, same price. tool=transformation (14 credits each): haircut/makeover suspense story with a BEFORE/AFTER reveal: the result is shown (reveal_mode "show"), or blurred / hidden on request — blurred is the default with ending "comments". tool=clips (3 credits each): best moment with the ORIGINAL audio, captions, headline and music. Pass template_id to apply a niche template's defaults (tool is then optional). Credits are charged now and refunded automatically if the job fails. Use urls for a batch (up to the plan's batch limit).

Input Schema

NameRequiredDescriptionDefault
urlNoPublic video link (YouTube, TikTok, Instagram, Facebook, X, Vimeo…) or a direct https link to a video file (.mp4, .mov, .webm, .m4v).
hookNoStart with an AI hook / cold open.
nameNoProject name (default: the source title).
toolNoWhich short to make (default: the template's tool, else story).
urlsNoSeveral links → one short per link (batch).
genreNoStory genre for the script (story/transformation).
musicNo"auto" (AI picks royalty-free music by mood), "none", or a Brand Kit music id (list_brand_assets).
endingNoHow the video ends (default "none", no call to action): "below" = "Full video below", "comments" = "Full video in the comments", "follow" = "Follow for part 2" (worded in the video's language), "custom" = your own text in ending_text. Story / transformation: the last spoken line; clips: the end card.
headlineNoAnimated headline card on top (default true).
languageNoLanguage of script, voiceover, captions and headline (default: the account's preference or en).
voice_idNoNarrator voice id (list_voices); story/transformation.
edit_modeNoStory only: "cut" (default) cuts the best moments into a new edit (hook, story, payoff); "whole" keeps the video as it is, in its own order with its own sound, and adds a timed narration on top — for short clips (20–60 s). A source up to 90 s is used whole; from a longer one, one continuous stretch of target_seconds. Music defaults to none for "whole".
upload_idNoId of a file uploaded with POST /api/v1/uploads, or of an image given to import_image.
ending_ctaNoOld form of ending: true = "below" (story) / "comments" (clips), false = "none". Use ending instead.
ending_textNoThe words of ending "custom": one line, at most 60 characters.
reveal_modeNoTransformation: "show" the result, "blurred" = a two-second glimpse of the reveal with faces blurred and the AFTER hidden, "hidden" = stop before the reveal (cliffhanger). Default: "blurred" with ending "comments", "show" otherwise.
template_idNoNiche template (list_templates) — presets genre, length, captions, music mood, hook.
trim_pausesNoClips: cut the long pauses (over 0.7 s of silence) out of the clip (default false).
caption_styleNoCaption style id (list_caption_styles).
headline_textNoCustom headline text (otherwise the AI writes it).
logo_asset_idNoLogo burned into the video: a logo id from list_brand_assets, or null for no logo (default: the Brand Kit default logo, if one is set).
logo_positionNoCorner of the logo (default: the Brand Kit setting, else top-right).
target_secondsNoTarget length in seconds (15–60).
idempotency_keyNoOptional unique key (e.g. a uuid) — repeating the same call with the same key within 24 h returns the first result instead of charging again.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / url / description
      Previous value: -"Public video link (YouTube, TikTok, Instagram, Facebook, X, Vimeo…)."New value: +"Public video link (YouTube, TikTok, Instagram, Facebook, X, Vimeo…) or a direct https link to a video file (.mp4, .mov, .webm, .m4v)."
    • changedInput schema / properties / urls / items / description
      Previous value: -"Public video link (YouTube, TikTok, Instagram, Facebook, X, Vimeo…)."New value: +"Public video link (YouTube, TikTok, Instagram, Facebook, X, Vimeo…) or a direct https link to a video file (.mp4, .mov, .webm, .m4v)."
  2. Changed1 schema field changed
    • addedInput schema / properties / edit_mode
      Added value: +{
      +  "description": "Story only: \"cut\" (default) cuts the best moments into a new edit (hook, story, payoff); \"whole\" keeps the video as it is, in its own order with its own sound, and adds a timed narration on top — for short clips (20–60 s). A source up to 90 s is used whole; from a longer one, one continuous stretch of target_seconds. Music defaults to none for \"whole\".",
      +  "enum": [
      +    "cut",
      +    "whole"
      +  ],
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / reveal_mode / description
      Previous value: -"Transformation: show the reveal with faces blurred, or hide it (cliffhanger)."New value: +"Transformation: \"show\" the result, \"blurred\" = a two-second glimpse of the reveal with faces blurred and the AFTER hidden, \"hidden\" = stop before the reveal (cliffhanger). Default: \"blurred\" with ending \"comments\", \"show\" otherwise."
    • changedInput schema / properties / reveal_mode / enum
      Previous value: -[
      -  "blurred",
      -  "hidden"
      -]New value: +[
      +  "show",
      +  "blurred",
      +  "hidden"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / language / enum
      Previous value: -[
      -  "en",
      -  "es",
      -  "pt",
      -  "fr",
      -  "de",
      -  "it",
      -  "ru",
      -  "hi",
      -  "ar"
      -]New value: +[
      +  "en",
      +  "es",
      +  "pt",
      +  "fr",
      +  "de",
      +  "it",
      +  "ru",
      +  "hi",
      +  "ar",
      +  "bn",
      +  "ur",
      +  "id",
      +  "fil",
      +  "vi",
      +  "tr",
      +  "ta",
      +  "te",
      +  "th",
      +  "ms",
      +  "ja",
      +  "ko",
      +  "zh",
      +  "pl",
      +  "uk",
      +  "mr",
      +  "pa",
      +  "sw"
      +]
  5. Changed3 schema fields changed
    • addedInput schema / properties / ending
      Added value: +{
      +  "description": "How the video ends (default \"none\", no call to action): \"below\" = \"Full video below\", \"comments\" = \"Full video in the comments\", \"follow\" = \"Follow for part 2\" (worded in the video's language), \"custom\" = your own text in ending_text. Story / transformation: the last spoken line; clips: the end card.",
      +  "enum": [
      +    "none",
      +    "below",
      +    "comments",
      +    "follow",
      +    "custom"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / ending_cta / description
      Previous value: -"Story: end with \"Full video below\"."New value: +"Old form of ending: true = \"below\" (story) / \"comments\" (clips), false = \"none\". Use ending instead."
    • addedInput schema / properties / ending_text
      Added value: +{
      +  "description": "The words of ending \"custom\": one line, at most 60 characters.",
      +  "maxLength": 60,
      +  "type": "string"
      +}
  6. Changed2 schema fields changed
    • addedInput schema / properties / trim_pauses
      Added value: +{
      +  "description": "Clips: cut the long pauses (over 0.7 s of silence) out of the clip (default false).",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / upload_id / description
      Previous value: -"Id of a file uploaded with POST /api/v1/uploads."New value: +"Id of a file uploaded with POST /api/v1/uploads, or of an image given to import_image."
  7. Changed3 schema fields changed
    • addedInput schema / properties / logo_asset_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "exclusiveMinimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Logo burned into the video: a logo id from list_brand_assets, or null for no logo (default: the Brand Kit default logo, if one is set)."
      +}
    • addedInput schema / properties / logo_position
      Added value: +{
      +  "description": "Corner of the logo (default: the Brand Kit setting, else top-right).",
      +  "enum": [
      +    "top-left",
      +    "top-right"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / music / description
      Previous value: -"\"auto\" (AI picks royalty-free music by mood), \"none\", or a Brand Kit music asset id."New value: +"\"auto\" (AI picks royalty-free music by mood), \"none\", or a Brand Kit music id (list_brand_assets)."
  8. Changed1 schema field changed
    • changedInput schema / properties / caption_style / enum
      Previous value: -[
      -  "capcut_green",
      -  "capcut_yellow",
      -  "neon_pop",
      -  "minimal_white",
      -  "fire",
      -  "gradient_glow",
      -  "pop_bounce",
      -  "highlight_box",
      -  "clean_reveal",
      -  "punch_word"
      -]New value: +[
      +  "capcut_green",
      +  "capcut_yellow",
      +  "neon_pop",
      +  "minimal_white",
      +  "fire",
      +  "gradient_glow",
      +  "pop_bounce",
      +  "highlight_box",
      +  "clean_reveal",
      +  "punch_word",
      +  "karaoke_fill",
      +  "neon_sign",
      +  "outline_fill",
      +  "marker_pen",
      +  "comic_pop",
      +  "typewriter",
      +  "elegant_serif",
      +  "glitch_rgb",
      +  "label_white",
      +  "label_dark",
      +  "slide_up",
      +  "pixel_arcade"
      +]
  9. First observed

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the call is asynchronous, returns project ids immediately, takes ~2–10 minutes to render, and must be polled via wait_for_project/get_project. It also states the billing model (credits charged now, auto-refunded on failure) and the batch-limit constraint, which are exactly the traits an agent needs before committing to a paid write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly: the first sentence covers purpose and async behavior, then the mode/cost block follows. The mode paragraphs are dense but each carries decision-relevant information; the structure would be cleaner as bullets, and a few clauses (e.g. 'same price') are near-filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 24-parameter, zero-required, no-output-schema tool, the description covers the essentials: what comes back (project ids), how to resolve to a finished asset, cost, and failure refund. It does not spell out what a partial failure in a batch returns or how project ids map to input urls, which would matter at this parameter count.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3; the description adds real value on top by pricing each tool= mode, noting template_id makes tool optional, explaining that edit_mode='whole' is meant for 20–60 s clips, and clarifying the urls batch ceiling. Only minor gaps remain, such as not hinting at how hook/headline/target_seconds interact across modes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource+format: 'Start making vertical 9:16 short(s) from a video link or an upload', which tells an agent exactly what is produced and from what input. It names follow-up siblings (wait_for_project, get_project) but never distinguishes itself from generation siblings like start_clipper, generate_clips, or create_compilation, so the boundary is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives substantive decision guidance for the internal modes — which content maps to tool=story vs transformation vs clips, credit cost per mode, and when edit_mode='whole' applies. It also explains the batch path via urls. What it lacks is any explicit when-to-use-this-instead-of statement relative to the sibling generation tools, so exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources