# VEED subtitles

Needs video url and preset. Served by fal.ai.

Subtitles, served by fal.ai. The OpenAPI schema for the veed/subtitles queue. Price: Your request will cost $0.10 per minute of input video, with a 2x multiplier for resolutions above 1080p and a 2x multiplier for dynamic styling. Setting a translation_language adds a flat +$0.20 / minute surcharge on top. Minimum charge: 1 minute. The Fal model page specifies a maximum video duration of 2 hours at <=1080p and 1 hour above 1080p. Reserve the maximum across both published tiers: max(120 * (0.10 * 2 + 0.20), 60 * (0.10 * 2 * 2 + 0.20)) = $48. This is a temporary reservation, not a flat generation price; smaller-media quoting awaits verified media inspection. Queued execution; final USD charge comes from the unique billing event matching this exact endpoint and request_id. A missing receipt retains the reservation; no guessed final fee. Provider enforcement of the published duration limit remains to be proved by a live boundary test. Asynchronous: returns a request_id; poll fal/status and fetch fal/result with model "veed/subtitles" and that request_id. Billed once, when the result is ready; a generation that fails is refunded.

- Tool ID: `fal/veed-subtitles`
- Name in the catalog: Subtitles
- Provider: [fal.ai](/providers/fal.md)
- Capability: [AI video generation](/tools/video-generation.md)
- Price: usage based, the maximum is shown before a run
- Authentication: an authorised Agentik workspace is required for execution, including zero-price tools.

## Pricing contract

Billed at the cost the provider reports for the call, never above $48. Your agent sees the maximum before running.


```json
{
  "model": "reported",
  "costPath": "cost_usd",
  "requireCost": true,
  "maxUsdDefault": 48,
  "maxUsdCap": 48
}
```

Pricing source: [https://fal.ai/models/veed/subtitles](https://fal.ai/models/veed/subtitles). Your request will cost $0.10 per minute of input video, with a 2x multiplier for resolutions above 1080p and a 2x multiplier for dynamic styling. Setting a translation_language adds a flat +$0.20 / minute surcharge on top. Minimum charge: 1 minute. The Fal model page specifies a maximum video duration of 2 hours at <=1080p and 1 hour above 1080p. Reserve the maximum across both published tiers: max(120 * (0.10 * 2 + 0.20), 60 * (0.10 * 2 * 2 + 0.20)) = $48. This is a temporary reservation, not a flat generation price; smaller-media quoting awaits verified media inspection. Queued execution; final USD charge comes from the unique billing event matching this exact endpoint and request_id. A missing receipt retains the reservation; no guessed final fee. Provider enforcement of the published duration limit remains to be proved by a live boundary test..

Price verification date: 2026-10-07.

## Complete input schema


```json
{
  "type": "object",
  "properties": {
    "translation_language": {
      "title": "Translation Language",
      "anyOf": [
        {
          "enum": [
            "ab",
            "ace",
            "ach",
            "af-ZA",
            "ak",
            "alz",
            "am-ET",
            "ar-AE",
            "ar-BH",
            "ar-DZ",
            "ar-EG",
            "ar-IL",
            "ar-IQ",
            "ar-JO",
            "ar-KW",
            "ar-LB",
            "ar-MA",
            "ar-OM",
            "ar-PS",
            "ar-QA",
            "ar-SA",
            "ar-TN",
            "awa",
            "ay",
            "az-AZ",
            "ban",
            "bbc",
            "be-BY",
            "bem",
            "bew",
            "bg-BG",
            "bho",
            "bik",
            "bm",
            "bs-BA",
            "bts",
            "btx",
            "bua",
            "ca-ES",
            "ceb-PH",
            "cgg",
            "chm",
            "ckb-IQ",
            "cnh",
            "co",
            "crh",
            "crs",
            "cs-CZ",
            "cv",
            "cy-GB",
            "da-DK",
            "de-DE",
            "din",
            "doi",
            "dov",
            "dv",
            "dz",
            "ee",
            "el-GR",
            "en-AU",
            "en-GB",
            "en-IN",
            "en-NZ",
            "en-US",
            "eo",
            "es-AR",
            "es-BO",
            "es-CL",
            "es-CO",
            "es-CR",
            "es-DO",
            "es-EC",
            "es-ES",
            "es-GT",
            "es-HN",
            "es-MX",
            "es-NI",
            "es-PA",
            "es-PE",
            "es-PR",
            "es-PY",
            "es-SV",
            "es-US",
            "es-UY",
            "es-VE",
            "et-EE",
            "eu-ES",
            "fa-IR",
            "ff",
            "fi-FI",
            "fil-PH",
            "fj",
            "fr-CA",
            "fr-FR",
            "fy",
            "ga",
            "gaa",
            "gd",
            "gl-ES",
            "gn",
            "gom",
            "ha-NG",
            "haw",
            "he-IL",
            "hil",
            "hmn",
            "hr-HR",
            "hrx",
            "ht",
            "hu-HU",
            "hy-AM",
            "id-ID",
            "ig",
            "ilo",
            "is-IS",
            "it-IT",
            "ja-JP",
            "ja-Latn-JP",
            "jv-ID",
            "ka-GE",
            "kk-KZ",
            "ko-KR",
            "kri",
            "ktu",
            "ku",
            "ky-KG",
            "la",
            "lb-LU",
            "lg",
            "li",
            "lij",
            "lmo",
            "ln-CD",
            "lo-LA",
            "lt-LT",
            "ltg",
            "luo-KE",
            "lus",
            "lv-LV",
            "mai",
            "mak",
            "mg",
            "mi-NZ",
            "min",
            "mk-MK",
            "mn-MN",
            "mni-Mtei",
            "ms-Arab",
            "ms-MY",
            "mt-MT",
            "nb-NO",
            "new",
            "nl-NL",
            "nr",
            "nso-ZA",
            "nus",
            "ny-MW",
            "oc-FR",
            "om",
            "pag",
            "pam",
            "pap",
            "pl-PL",
            "ps-AF",
            "pt-BR",
            "pt-PT",
            "qu",
            "rn",
            "ro-RO",
            "rom",
            "ru-RU",
            "rw-RW",
            "scn",
            "sg",
            "shn",
            "sk-SK",
            "sl-SI",
            "sm",
            "sn-ZW",
            "so-SO",
            "sq-AL",
            "sr-Latn-RS",
            "sr-RS",
            "ss",
            "st",
            "su-ID",
            "sv-SE",
            "sw-KE",
            "sw-TZ",
            "szl",
            "tet",
            "tg-TJ",
            "th-TH",
            "ti",
            "tk",
            "tn",
            "tr-TR",
            "ts-ZA",
            "tt",
            "ug",
            "uk-UA",
            "ur-IN",
            "ur-PK",
            "uz-UZ",
            "vi-VN",
            "xh-ZA",
            "yi",
            "yo-NG",
            "yua",
            "yue-Hant-HK",
            "zh",
            "zh-HK",
            "zh-TW",
            "zu-ZA"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Translate the subtitles into this language. Omit to keep the original spoken language. If you also pass srt_content or srt_file_url, set `language` to its source language for the most reliable translation."
    },
    "customization": {
      "anyOf": [
        {
          "x-fal-order-properties": [
            "position",
            "shadow",
            "text_customizations"
          ],
          "title": "PresetCustomization",
          "properties": {
            "shadow": {
              "title": "Shadow",
              "anyOf": [
                {
                  "enum": [
                    "none",
                    "min",
                    "mid",
                    "max"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Improves readability over bright or busy backgrounds."
            },
            "text_customizations": {
              "title": "Text customizations",
              "anyOf": [
                {
                  "x-fal-order-properties": [
                    "baseline",
                    "highlighted"
                  ],
                  "title": "TextCustomizations",
                  "properties": {
                    "highlighted": {
                      "title": "Highlighted (mid-rank)",
                      "anyOf": [
                        {
                          "x-fal-order-properties": [
                            "font",
                            "weight",
                            "color"
                          ],
                          "title": "TextCustomization",
                          "properties": {
                            "font": {
                              "title": "Font",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Override the font used for this text tier. Must be a supported Google Font — see https://www.veed.io/api/v1/subtitle-renders/fonts for the canonical list. Unrecognized fonts are rejected with a 400."
                            },
                            "weight": {
                              "title": "Weight",
                              "anyOf": [
                                {
                                  "minimum": 100,
                                  "maximum": 900,
                                  "type": "integer"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Font weight 100-900. Values >= 700 render as bold"
                            },
                            "color": {
                              "title": "Color",
                              "anyOf": [
                                {
                                  "pattern": "^#([0-9A-Fa-f]{3}){1,2}$",
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Override the text color for this tier."
                            }
                          },
                          "type": "object",
                          "description": "Per-tier text overrides. No italic field (preset-dictated, see ENR-2516).",
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Mid-rank words (automatically marked as noteworthy: key nouns, action verbs, salient adjectives). Presets typically bump size or weight on these."
                    },
                    "baseline": {
                      "title": "Baseline (all words)",
                      "anyOf": [
                        {
                          "x-fal-order-properties": [
                            "font",
                            "weight",
                            "color"
                          ],
                          "title": "TextCustomization",
                          "properties": {
                            "font": {
                              "title": "Font",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Override the font used for this text tier. Must be a supported Google Font — see https://www.veed.io/api/v1/subtitle-renders/fonts for the canonical list. Unrecognized fonts are rejected with a 400."
                            },
                            "weight": {
                              "title": "Weight",
                              "anyOf": [
                                {
                                  "minimum": 100,
                                  "maximum": 900,
                                  "type": "integer"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Font weight 100-900. Values >= 700 render as bold"
                            },
                            "color": {
                              "title": "Color",
                              "anyOf": [
                                {
                                  "pattern": "^#([0-9A-Fa-f]{3}){1,2}$",
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Override the text color for this tier."
                            }
                          },
                          "type": "object",
                          "description": "Per-tier text overrides. No italic field (preset-dictated, see ENR-2516).",
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Baseline styling applied to every word in the transcript. This is what a reader sees by default, before any per-word emphasis is applied."
                    }
                  },
                  "type": "object",
                  "description": "Text customization keyed by word-importance tier.",
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ],
              "description": "Per-tier text styling for baseline and highlighted words."
            },
            "position": {
              "title": "Position",
              "anyOf": [
                {
                  "enum": [
                    "top",
                    "center",
                    "bottom"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Vertical placement of static subtitles on screen."
            }
          },
          "type": "object",
          "description": "Runtime customization of a preset. Fields are Optional all the way down\nso this block can sit under the playground's 'Additional Settings' section\nwithout flagging required-field asterisks the user didn't ask for.",
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional preset overrides: vertical position, shadow intensity, and per-tier text styling (font, weight, hex colour) for each word-importance tier. Any omitted field keeps the preset's default."
    },
    "vocabulary": {
      "title": "Vocabulary",
      "anyOf": [
        {
          "items": {
            "additionalProperties": false,
            "x-fal-order-properties": [
              "word",
              "replaces"
            ],
            "title": "VocabularyEntry",
            "properties": {
              "word": {
                "minLength": 1,
                "maxLength": 100,
                "title": "Word",
                "type": "string",
                "description": "The correctly-spelled term. Brand names, product names, and domain jargon work best."
              },
              "replaces": {
                "title": "Replaces",
                "minItems": 1,
                "items": {
                  "minLength": 1,
                  "maxLength": 100,
                  "type": "string"
                },
                "type": "array",
                "description": "Misspellings that should be replaced with `word`. Matched whole-word and case-insensitively — list each misspelling once; you don't need to enumerate casings (e.g. `['vid']` already covers `Vid`, `VID`).",
                "maxItems": 20
              }
            },
            "type": "object",
            "description": "A term auto-transcription should recognise correctly, plus its common misspellings.",
            "required": [
              "word",
              "replaces"
            ]
          },
          "type": "array",
          "maxItems": 100
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional list of terms to help auto-transcription correctly recognise brand names and domain jargon that providers commonly mis-spell (e.g. \"VEED\" → \"vid\"). Ignored when srt_content / srt_file_url is set."
    },
    "preset": {
      "title": "Preset",
      "enum": [
        "glass",
        "whisper",
        "glide2",
        "fusion",
        "glide",
        "terminal",
        "handwritten",
        "backdrop",
        "backdrop2",
        "simple",
        "plain",
        "beans",
        "corpo",
        "boo",
        "shadeplay",
        "casper",
        "capri",
        "lowkey",
        "vinta",
        "diego",
        "ali",
        "slay",
        "kitty",
        "hustle",
        "karl",
        "sprout",
        "flex",
        "mint",
        "rizz",
        "vegas"
      ],
      "description": "Each style defines fonts, colors, layout, and animation. Two tiers with different pricing:\n\n- Dynamic presets (2x multiplier): glass, whisper, glide2, fusion, glide, terminal, handwritten, backdrop, backdrop2. Richer, context-aware rendering that adapts to the input.\n- Basic presets (1x multiplier): simple, plain, beans, corpo, boo, shadeplay, casper, capri, lowkey, vinta, diego, ali, slay, kitty, hustle, karl, sprout, flex, mint, rizz, vegas. Fixed, lightweight styling with predictable output.",
      "type": "string"
    },
    "video_url": {
      "minLength": 1,
      "format": "uri",
      "maxLength": 2083,
      "description": "Upload or paste a URL to the video you want to subtitle.",
      "title": "Video Url",
      "type": "string"
    },
    "srt_content": {
      "title": "SRT Content",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Paste raw SRT subtitle text. Alternative to srt_file_url. When provided, transcription is skipped."
    },
    "language": {
      "title": "Language",
      "anyOf": [
        {
          "enum": [
            "af-ZA",
            "am-ET",
            "ar-AE",
            "ar-BH",
            "ar-DZ",
            "ar-EG",
            "ar-IL",
            "ar-IQ",
            "ar-JO",
            "ar-KW",
            "ar-LB",
            "ar-MA",
            "ar-OM",
            "ar-PS",
            "ar-QA",
            "ar-SA",
            "ar-TN",
            "ast-ES",
            "az-AZ",
            "ba",
            "bas",
            "be-BY",
            "bg-BG",
            "br",
            "bs-BA",
            "ca-ES",
            "ceb-PH",
            "ckb-IQ",
            "cs-CZ",
            "cy-GB",
            "da-DK",
            "de-DE",
            "dyu",
            "el-GR",
            "en-AU",
            "en-GB",
            "en-IN",
            "en-NZ",
            "en-US",
            "eo",
            "es-AR",
            "es-BO",
            "es-CL",
            "es-CO",
            "es-CR",
            "es-DO",
            "es-EC",
            "es-ES",
            "es-GT",
            "es-HN",
            "es-MX",
            "es-NI",
            "es-PA",
            "es-PE",
            "es-PR",
            "es-PY",
            "es-SV",
            "es-US",
            "es-UY",
            "es-VE",
            "et-EE",
            "eu-ES",
            "fa-IR",
            "ff",
            "fi-FI",
            "fil-PH",
            "fo",
            "fr-CA",
            "fr-FR",
            "fy",
            "ga",
            "gd",
            "gl-ES",
            "ha-NG",
            "haw",
            "he-IL",
            "hr-HR",
            "hsb",
            "ht",
            "hu-HU",
            "hy-AM",
            "id-ID",
            "ig",
            "is-IS",
            "it-IT",
            "ja-JP",
            "ja-Latn-JP",
            "jv-ID",
            "ka-GE",
            "kab",
            "kam-KE",
            "kea-CV",
            "kk-KZ",
            "ko-KR",
            "ku",
            "ky-KG",
            "la",
            "lb-LU",
            "lg",
            "lij",
            "ln-CD",
            "lo-LA",
            "lt-LT",
            "luo-KE",
            "lv-LV",
            "mg",
            "mi-NZ",
            "mk-MK",
            "mn-MN",
            "ms-MY",
            "mt-MT",
            "nb-NO",
            "nl-NL",
            "nso-ZA",
            "ny-MW",
            "oc-FR",
            "pl-PL",
            "ps-AF",
            "pt-BR",
            "pt-PT",
            "ro-RO",
            "roh",
            "ru-RU",
            "rw-RW",
            "sah",
            "sk-SK",
            "sl-SI",
            "sm",
            "sn-ZW",
            "so-SO",
            "sq-AL",
            "sr-Latn-RS",
            "sr-RS",
            "srd",
            "ss",
            "su-ID",
            "sv-SE",
            "sw-KE",
            "sw-TZ",
            "tg-TJ",
            "th-TH",
            "tk",
            "tn",
            "tok",
            "ton",
            "tr-TR",
            "ts-ZA",
            "tt",
            "uk-UA",
            "umb-AO",
            "ur-IN",
            "ur-PK",
            "uz-UZ",
            "vi-VN",
            "vro",
            "wo-SN",
            "xh-ZA",
            "yi",
            "yo-NG",
            "yue-Hant-HK",
            "zh",
            "zh-HK",
            "zh-TW",
            "zu-ZA"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Improves transcription accuracy, and should match the source audio (not output subtitles)."
    },
    "srt_file_url": {
      "title": "SRT File Url",
      "anyOf": [
        {
          "minLength": 1,
          "format": "uri",
          "maxLength": 2083,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Upload or paste a URL to your .srt subtitles file. When provided, transcription is skipped."
    }
  },
  "required": [
    "video_url",
    "preset"
  ],
  "additionalProperties": false
}
```

## Published example

This is the provider tool’s published example. Replace example values with the user’s requested inputs, respecting the schema; do not execute an example merely to test a connection.


```json
{
  "tool_id": "fal/veed-subtitles",
  "input": {
    "video_url": "https://v3b.fal.media/files/b/0a967ce5/iARc_J0kLN9OEmiXnxT3l_substyle-example-input.mp4",
    "preset": "glass"
  }
}
```

## Execute and retrieve

Inspect again before execution, explain the price and obtain the required authority. Use MCP run_tool or POST /v1/run with this tool ID, valid input and an idempotency key. Save the returned run ID and follow the actual state. If Agentik answers that the tool is temporarily unavailable, do not retry it blindly; use discovery to propose an alternative.

This tool uses deferred settlement. Follow its returned task/run instructions; preserve the existing reservation until the result is reconciled.

A partial or uncertain result can still have consumed provider resources. Consult [billing](/docs/billing.md), [idempotency](/docs/idempotency.md) and [asynchronous results](/docs/async.md).

[Provider documentation](https://fal.ai/models/veed/subtitles)

[REST inspection](https://api.agentik.cc/v1/tools/fal/veed-subtitles) · [OpenAPI](/openapi.json) · [Connection guide](/connect.md)

---

[HTML page](/providers/fal/veed-subtitles) · [Agent index](/llms.txt)
