# Revid API — Video to clips (`video-to-clips`)

> Cut a long YouTube video into short captioned clips.

Endpoint: `POST https://www.revid.ai/api/public/v3/render` — auth header `key: YOUR_API_KEY` (get a key at https://www.revid.ai/account).
Cost: 10 credits per call + generation costs. Estimate first with `POST https://www.revid.ai/api/public/v3/calculate-credits` (same body, no auth).

## Required input

- source.url

## Defaults for this workflow

- media.type: `moving-image`
- AI voice-over: disabled by default
- Background music: disabled by default
- Captions: enabled by default (preset `Wrap 1`, position `bottom`)
- Aspect ratio: `9:16` (portrait) by default
- autoCrop: true

## Minimal request

```bash
curl -X POST 'https://www.revid.ai/api/public/v3/render' \
  -H 'Content-Type: application/json' \
  -H 'key: YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0' \
  -d '{"workflow":"video-to-clips","source":{"url":"https://www.youtube.com/watch?v=ip30oRP9BP0"}}'
```

## Full example

```json
{
  "webhookUrl": "https://your-server.com/revid/webhook",
  "workflow": "video-to-clips",
  "source": {
    "url": "https://www.youtube.com/watch?v=ip30oRP9BP0"
  },
  "captions": {
    "enabled": true,
    "preset": "Wrap 1",
    "position": "bottom",
    "autoCrop": true
  },
  "options": {
    "outputCount": 3,
    "clipDuration": 45,
    "searchQuery": "the most surprising moments"
  },
  "aspectRatio": "9:16"
}
```

## Parameters for this workflow

Top-level fields:

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `workflow` | string | **Yes** |  | `script-to-video` / `prompt-to-video` / `audio-to-video` / `music-to-video` / `lyrics-to-video` / `song-ad` / `article-to-video` / `avatar-to-video` / `static-background-video` / `motion-transfer` / `character-swap` / `caption-video` / `video-to-clips` / `ad-generator` | The generation workflow. Decides which source input is required and every default below. |
| `webhookUrl` | string | No |  |  | Public URL called when the render finishes (success or failure). Strongly recommended over polling. Accepted aliases: webhook. |
| `projectId` | string | No |  |  | Reuse an existing project instead of creating a new one. The project must belong to the API key's workspace. Accepted aliases: pid. |
| `aspectRatio` | string | No | `"9:16"` | `9:16` / `16:9` / `1:1` / `4:5` / `auto` | Output aspect ratio. Accepted aliases: ratio. |
| `metadata` | object\|null | No |  |  | Free-form object stored with the project and echoed in webhooks. For URL sources, metadata.duration (seconds) speeds up processing. |
| `characterIds` | string[] | No |  |  | IDs of saved consistent characters to feature in the video. Get IDs from GET /api/public/v3/consistent-characters. Selecting characters can force media.imageModel to ultra when the preset requires it. Accepted aliases: selectedCharacters, options.characterIds, options.selectedCharacters. |

### `source` (required for this workflow)

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `source.url` | string | audio-to-video, music-to-video, article-to-video, motion-transfer, caption-video, video-to-clips |  |  | The source content URL: audio file, video file, YouTube link, Spotify track, article page, or PDF depending on the workflow. http(s) is enforced; bare domains get https:// prepended. For character-swap, the video whose people are replaced (a file URL, or a YouTube, TikTok or Instagram link). Workflows: audio-to-video, music-to-video, article-to-video, motion-transfer, caption-video, video-to-clips, static-background-video, character-swap. |
| `source.websiteToRecord` | string | No |  |  | URL of a website to screen-record as footage for the video. Accepted aliases: websiteToRecord. |
| `source.quizzData` | object | No |  |  | Quiz definition for quiz videos: { title, questions: [{ id, question, answers: [{ id, answer, isCorrect }] }] }. Accepted aliases: options.quizzData, quizzData. |

### `media` (optional, disabled by default)

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `media.type` | string | No | moving-image for most workflows; ai-video for prompt-to-video and audio-to-video | `moving-image` / `ai-video` / `motion-graphics` / `stock-video` / `custom` | The visual engine for the video. Default: moving-image for most workflows; ai-video for prompt-to-video and audio-to-video. |
| `media.quality` | string | No | `"pro"` | `standard` / `pro` / `ultra` | Convenience profile that picks imageModel + videoModel for you. Explicit media.imageModel / media.videoModel override it. |
| `media.imageModel` | string | No |  | `cheap` / `good` / `ultra` | Image generation model. Auto-adjusted when needed: ai-video forces ultra, and presets/characters can upgrade it. Accepted aliases: imageGenerationModel. |
| `media.videoModel` | string | No |  | `base` / `pro` / `ultra` / `veo3` / `sora2` / `seedance-25-1080p` / `seedance-1080p` / `seedance-4k` / `minimax-h3-768p` / `minimax-h3-2k` / `wan-3-1080p` | Video generation model used when video clips are generated. The Ultra variants (seedance-1080p, seedance-4k, ...) pick the model and resolution of the ultra tier, like the create form's Ultra menu. media.type motion-graphics has three director tiers, the same as the create form, base directed by Sonnet 5.5 (2 credits/s), pro by Opus 5.5 (3 credits/s, default), ultra by Opus 5.5 at maximum effort (5 credits/s); each has a 15s minimum per generation, and veo3/sora2/the Ultra variants are automatically mapped to pro. character-swap takes base (Wan 3.0, default), pro (Seedance 2.5) or ultra (MiniMax Recast, swaps public figures too), billed per second of video. Accepted aliases: videoGenerationModel. |
| `media.density` | string | No |  | `low` / `medium` / `high` | How many distinct visuals per minute of video. More visuals = livelier video and higher generation cost. Accepted aliases: mediaMultiplier. |
| `media.animation` | string | No | `"soft"` | `none` / `soft` / `dynamic` / `depth` / `overlay` / `parallax` / `multiplane` / `cinemagraph` / `dust` / `hook` / `eco` | How still images are animated. Ignored for other media types. Only applies when media.type = moving-image. Accepted aliases: typeMovingImageAnim. |
| `media.mediaPreset` | string | No | `"DEFAULT"` |  | Visual style preset slug (e.g. DEFAULT, ANIME, PIXAR, GHIBLI, REALISM, ...). See the preset list in the docs. A preset can override media.imageModel when it requires a specific model. With media.type motion-graphics it is the motion graphics category instead, the create form's category cards: MOTION_INSPIRATION_AUTO (Auto, default: Let the agent choose the best category and reference for your brief), MOTION_INSPIRATION_CLEAN_WORDMARK (Minimal & type: Spacious layouts, expressive typography and focused graphic reveals), MOTION_INSPIRATION_PRODUCT_DEMOS (Product demos: Interface walkthroughs, cursor actions and clear feature demonstrations), MOTION_INSPIRATION_DARK_SAAS (Immersive SaaS: Layered interfaces, dramatic depth and polished feature launches), MOTION_INSPIRATION_WARM_LAUNCH (Mixed media: Photography, cutouts and textures woven into animated graphics), MOTION_INSPIRATION_FOOTAGE_LED (Footage-led: People, places and product footage with supporting motion graphics), MOTION_INSPIRATION_MASCOT (Mascot: A character mascot that acts and talks over clean product UI), MOTION_INSPIRATION_EDITORIAL (Editorial: Paper collage, archive photos, highlighted documents and maps, like a news explainer), MOTION_INSPIRATION_DIAGRAM (Diagram: Step-by-step schematics and labelled parts that build an idea), MOTION_INSPIRATION_ILLUSTRATED (Illustrated: Flat illustrated scenes and characters that turn each idea into a picture), MOTION_INSPIRATION_DATA_STORY (Data story: Charts, counters, rankings and maps that make numbers mean something), MOTION_INSPIRATION_MAPS (Maps: Animated maps: borders, routes and zooms from the world down to a city). Values match case-insensitively, with or without the MOTION_INSPIRATION_ prefix, or by label ("footage-led", "Minimal & type"); no value, DEFAULT or an image preset sent with motion-graphics means Auto, like the create form. Only applies when media.type = moving-image, ai-video or motion-graphics. Accepted aliases: media.generationPreset, options.generationPreset, generationPreset. |
| `media.maxItems` | integer | No |  | min 1 | Hard cap on the number of generated/selected media items. Accepted aliases: maxNbMedias. |
| `media.provided` | array | media.type = custom (>= 1 item); motion-transfer (target image) |  |  | Your own media items. Used as the only visuals when media.type = custom or media.useOnlyProvided = true; otherwise used as references/anchors. Items: { url (required), type, title, ... }. Accepted aliases: inputMedias. |
| `media.useOnlyProvided` | boolean | No | `false` |  | Use only media.provided[] items; disable AI media generation/search. Default: true for motion-transfer and ad-generator. Accepted aliases: options.useOnlyProvidedMedia, useOnlyProvidedMedia. |
| `media.useProvidedInOrder` | boolean | No | `false` |  | Map media.provided[] items to script sections in order (no AI picking). Forces useOnlyProvided. Fewer media than sections: adjacent sections are grouped; extra media are ignored. Requires at least one image/video item. Only applies when media.type = custom. |
| `media.search` | boolean | No | `false` |  | Add B-roll to the clips: visuals that illustrate what is said, made from media.type. Always on for the AI summary. Workflows: video-to-clips. |
| `media.bRollType` | string | No |  |  | B-roll composition mode: how generated B-roll mixes with the main footage. Common values: split-screen, fullscreen. Workflows: avatar-to-video, audio-to-video, caption-video, video-to-clips. |
| `media.bRollFrequency` | number | No | `0.5` | min 0, max 1 | How often B-roll appears, from 0 to 1. Only applies when media.search = true. Workflows: video-to-clips. |
| `media.mergeVideos` | boolean | No | `false` |  | Merge multiple provided videos into one sequence. |
| `media.mergeVideosFull` | boolean | No | `false` |  | Merge provided videos keeping their full length. |
| `media.addAudioToVideos` | boolean | No | true for prompt-to-video with media.type = ai-video, false otherwise |  | Generate ambient audio/sound for AI video clips. Default: true for prompt-to-video with media.type = ai-video, false otherwise. |
| `media.turnImagesIntoVideos` | boolean | No | `false` |  | Animate provided still images into video clips. |
| `media.applyStyleTransfer` | boolean | No | `false` |  | Re-style provided media to match the selected preset. |

### `voice` (optional, disabled by default)

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `voice.enabled` | boolean | No | on for script/prompt/article/avatar/static/ad workflows; off for audio/music/caption/motion/clips workflows |  | Generate an AI voice-over for the script. Default: on for script/prompt/article/avatar/static/ad workflows; off for audio/music/caption/motion/clips workflows. Accepted aliases: hasToGenerateVoice. |
| `voice.voiceId` | string | No | `"cgSgspJ2msm6clMCkdW9"` |  | Voice ID available in Revid (including personal clones). Browse voices at revid.ai or clone one via POST /api/public/v3/voice-clone. An unknown voice used for narration or voice replacement returns HTTP 400 before credits are charged or a project is created. Accepted aliases: voice.id, selectedVoice. |
| `voice.stability` | number | No | Balanced (the voice engine's middle setting) | min 0, max 1 | Voice stability. Lower = more expressive, higher = more consistent. Default: Balanced (the voice engine's middle setting). |
| `voice.speed` | number | No | `1` | min 0.5, max 2 | Speech speed multiplier. |
| `voice.useLegacyModel` | boolean | No | `false` |  | Use the previous-generation voice model. |
| `voice.enhanceAudio` | boolean | No | `false` |  | Post-process the voice track for cleaner audio. Accepted aliases: options.hasToEnhanceAudio, hasToEnhanceAudio. |
| `voice.language` | string | No |  |  | Language code for voice-over and script generation (e.g. "en", "fr", "es"). 70+ languages supported. Accepted aliases: options.language, language, lang. |

### `captions` (optional, enabled by default)

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `captions.enabled` | boolean | No | `true` |  | Burn animated captions into the video. Accepted aliases: disableCaptions (inverted). |
| `captions.preset` | string | No | `"Wrap 1"` |  | Caption style preset. Available: Basic, Revid, Karaoke, Hormozi, Ali, Wrap 1, Wrap 2, Faceless, Elegant, Difference, Opacity, Glass, Playful, Bold Punch, Movie, Outline, Cove, Beat, Floating, Editorial Emphasis, Gram, Morph Text, Typewriter, Sing-Along, Spotlight, Cinema, Boil, Editorial, Behind Subject, Word by Word, Contextual. Behind Subject puts the captions behind each scene's subject, a person or an object, cutting it out of every full-frame scene: 20 credits per started 30 seconds of each video file, pictures free. Where the subject leaves no room above it, the captions go beside it, or low in the frame when it fills the frame. When a person under the captions can't be cut out (an auto-reframed, split-screen, blurred or looping clip, or a video over 2 minutes), the video gets Wrap 1 captions at the bottom instead, with no cut-out charge. Contextual writes the captions' look for the video and replaces them, on its figures, names, lists and dates, with motion-graphics moments timed on the words: 1 credit per started second of narration, charged only when moments are added. |
| `captions.position` | string | No | `"bottom"` | `top` / `middle` / `bottom` | Vertical position of the captions. Behind Subject defaults to top. |
| `captions.autoCrop` | boolean | No | true for video-to-clips, false otherwise |  | Auto-reframe the source video for the target aspect ratio (face tracking). Costs extra credits. Default: true for video-to-clips, false otherwise. Workflows: caption-video, audio-to-video, video-to-clips. |

### `music` (optional, disabled by default)

> Recommended for background music: `music: { generateMusic: true }`. Revid generates an original instrumental track from this video's script, so it fits the topic and mood (20 credits per started minute of video). Add `music.generationMusicPrompt` to steer the mood, tempo and instruments. Use `music.trackName` only when the user asks for a specific library track: an agent cannot listen to the library, so a track picked by name rarely fits the video. With music on and no track, file or generated music, the neutral `Presentation` track plays. To make the music quieter or louder, set `music.volume` to `low`, `normal` or `high`, or to an exact level from 0 to 100.

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `music.enabled` | boolean | No | off for every workflow unless the request configures music explicitly. Auto-enabled when any other music field is set. |  | Add background music. To add music, set music.generateMusic to true (recommended) rather than picking a library track. Music on with no track, file or generated music plays the neutral `Presentation` track. The whole music block also accepts the legacy alias name `audio`. Default: off for every workflow unless the request configures music explicitly. Auto-enabled when any other music field is set.. Accepted aliases: audio.enabled, disableAudio (inverted). |
| `music.generateMusic` | boolean | No | `false` |  | Recommended way to add background music. Generates an original instrumental track from this video's script, so it fits the topic and mood. Turns music on by itself. 20 credits per started minute of video. Takes precedence over music.trackName and music.audioUrl. Accepted aliases: music.generate, options.generateMusic, hasToGenerateMusic. |
| `music.generationMusicPrompt` | string | No |  |  | Optional brief for generated music: mood, tempo, instruments (e.g. "calm premium explainer, soft piano, warm acoustic guitar, no drums"). Without it, the brief is written from the video's script. For lyrics-to-video and song-ad, the style of the song itself (genre, tempo, voice). Accepted aliases: music.generationPrompt, options.generationMusicPrompt, generationMusicPrompt. |
| `music.trackName` | string | No | `"Presentation"` |  | Name of a track from the Revid library (115+ tracks, e.g. Presentation, Snaps, Bright Morning, Chill Wave, Epic Battle Orchestra). Use it only when the user asks for a specific track: an agent cannot listen to the library, so prefer music.generateMusic. Matched case-insensitively, also by slug (e.g. startup-energy). Unknown names are rejected with a 400. Ignored when music.audioUrl is set. Accepted aliases: audio.trackName, selectedAudio. |
| `music.audioUrl` | string | No |  |  | Custom background music URL. Checked for reachability (HEAD request) before the render starts. Accepted aliases: music.url, audioUrl. |
| `music.volume` | number\|string | No | normal | `low` / `normal` / `high`, or a number from 0 to 100 | How loud the background music plays. Each workflow mixes its music at its own level under the voice-over: `low` and `high` scale that level, an exact number from 0 to 100 replaces it (the editor's music volume scale). 0 turns the music off. It does not turn music on by itself. Default: normal. Accepted aliases: audio.volume. |
| `music.musicGenerationModel` | string | No | `"base"` |  | Model used for AI music generation. |

### `options` (optional)

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `options.outputCount` | integer | No | `1` | min 1, max 3 | How many highlight clips to extract from the source (audio-to-video and video-to-clips only). Each clip consumes credits. Other workflows always produce a single video and reject values above 1. Workflows: audio-to-video, video-to-clips. Accepted aliases: nbGenerations. |
| `options.clipDuration` | number | No | `60` | min 10, max 120 | Target length of each AI-picked clip, in seconds (approximate). Workflows: video-to-clips. |
| `options.searchQuery` | string | No |  |  | What the AI should look for when it picks the clips (e.g. "the pricing discussion"), in more than 3 characters. Omit to get the strongest moments. Workflows: video-to-clips. |
| `options.clipRange` | string | No |  |  | Clip one exact time range instead of letting the AI pick: "start:end" in seconds (e.g. "30:90"), or "start:end" with the word end (e.g. "30:end") to run to the end of the source. At least 10 seconds. Always a single clip, so options.outputCount above 1 is rejected with it. For character-swap, the part of the source to swap (up to 2 minutes, billed per second). Workflows: video-to-clips, character-swap. |
| `options.videoEditor` | boolean | No | `false` |  | Let the AI video editor edit the clip: its key lines become motion graphics, with camera punch-ins. Always a single clip, at its own flat price (estimate it with /calculate-credits). It replaces B-roll and only runs with captions on. Workflows: video-to-clips. |
| `options.videoEditorInstructions` | string | No |  |  | How the AI video editor should cut the clip, in up to 500 characters. Omit it and the editor keeps the most exciting moments. Only applies when options.videoEditor = true. Workflows: video-to-clips. |
| `options.videoEditorStyle` | string | No | `"clean"` | `clean` / `bold` / `paper` | The look of the AI video editor's edit. Every style picks the key lines the same way, at the same price. Only applies when options.videoEditor = true. Workflows: video-to-clips. |
| `options.videoEditorAiPictures` | string | No | `"off"` | `off` / `pictures` / `moving` | AI pictures in the edit, made only where the talk calls for one and charged on top of the edit's price. Only applies when options.videoEditor = true. Workflows: video-to-clips. |
| `options.videoEditorVideoModel` | string | No | `"base"` | `base` / `pro` / `ultra` | The model that brings the AI pictures to life, priced per 5 seconds of moving picture. Only applies when options.videoEditorAiPictures = moving. Workflows: video-to-clips. |
| `options.videoEditorSoundEffects` | boolean | No | `true` |  | Short sounds on each graphic, card and cut, from Revid's sound library, in the bold and paper styles (clean has none). Included in the edit's price. Only applies when options.videoEditor = true. Workflows: video-to-clips. |
| `options.disableAudio` | boolean | No |  |  | Hard override: strip background music from the output regardless of the music block. Accepted aliases: disableAudio. |
| `options.disableVoice` | boolean | No |  |  | Hard override: no voice-over regardless of the voice block. Accepted aliases: disableVoice. |
| `options.soundEffects` | boolean | No | `false` |  | Generate sound effects matched to the scenes. Accepted aliases: hasToGenerateSoundEffects. |
| `options.addStickers` | boolean | No | `false` |  | Add animated stickers/emojis matched to the script. Accepted aliases: addStickers. |
| `options.nsfwFilter` | boolean | No | `false` |  | Filter NSFW content in generated media. Accepted aliases: enableNsfwFilter. |
| `options.language` | string | No |  |  | Language override for the whole generation (same as voice.language). Accepted aliases: language, lang, voice.language. |
| `options.watermark` | object\|null | No |  |  | Custom watermark object forwarded as-is ({ url, position, opacity, ... }). null removes it. Accepted aliases: watermark. |
| `options.selectedPalette` | string | No |  |  | Color palette name for generated visuals. |
| `options.preventSummarization` | boolean | No | `false` |  | Never shorten the provided text (overrides summarization heuristics). |
| `options.hasToGenerateCover` | boolean | No | `false` |  | Generate a cover/thumbnail image for the video. |
| `options.coverTextType` | string | No | `"layers"` |  | Style of the text on the generated cover. |
| `options.coverStyle` | string | No |  | `depth` / `editorial` / `magazine` / `journal` / `scrapbook` / `viral` | Look of the title on the generated cover. Omit for the plain title box. Only applies when options.coverTextType = layers. |
| `options.coverPrompt` | string | No |  |  | What the cover should show, up to 1200 characters (longer is truncated). Steers the cover concept; omit to design it from the script. |
| `options.hasTextSmallAtBottom` | boolean | No | `false` |  | Show a small text line at the bottom of the video. |

### `render` (optional)

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `render.resolution` | string | No | `"1080p"` | `720p` / `1080p` / `4k` | Output resolution. 4k exports cost extra credits. Accepted aliases: resolution. |
| `render.compression` | number | No | `18` | min 0, max 50 | H.264 CRF-style compression. Lower = better quality and bigger files. Accepted aliases: compression. |
| `render.frameRate` | number | No | `30` | min 1, max 60 | Output frame rate. Accepted aliases: frameRate. |

### `advanced` (optional)

| Field | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
| `advanced.customCreationParams` | object | No |  |  | Expert escape hatch: extra legacy creationParams merged into the final payload. Workflow identity keys (slug, flowType) stay locked. Use only with guidance from the Revid team. Accepted aliases: customCreationParams. |

## Notes

- source.url is the link of one YouTube video (youtube.com/watch?v=... or youtu.be/...), not a channel or a playlist.
- By default the AI picks the best moments: options.outputCount sets how many clips (1 to 3), options.clipDuration their target length, options.searchQuery what to look for.
- options.clipRange clips one exact time range instead ("start:end" in seconds).
- voice.enabled = true makes an AI summary instead of clips: an AI voice (voice.voiceId) summarises the video over extracts of it.
- media.search = true adds B-roll to the clips: media.bRollType places it, media.bRollFrequency sets how often it appears, media.type what it is made of.
- options.videoEditor = true has the AI video editor turn the clip's key lines into motion graphics with camera moves. It replaces B-roll and has its own flat price. options.videoEditorStyle picks its look (clean, bold or paper), options.videoEditorAiPictures adds AI pictures where the talk calls for one, options.videoEditorSoundEffects its short sounds.
- A time range, the AI summary and the AI video editor each produce a single video.
- Each clip is its own project: the response returns the first clip's pid, and the webhook is called once per finished clip.
- captions.autoCrop defaults to true for this workflow, so clips are auto-reframed. Set it to false to keep the source framing.

## Response

Success: `{ "success": 1, "pid": "...", ... }` — the render is asynchronous. Get the result via your `webhookUrl` or poll `GET /api/public/v3/status?pid=...`.

Errors: 400 — validation error. The message names the exact field, e.g. "voice.speed must be between 0.5 and 2." 401 — missing or invalid API key (header `key`). 402 — the API key is valid but the account has no active plan. Generation endpoints require one; see https://www.revid.ai/pricing. 403 — the request was blocked in front of the API and never reached it; the body is plain text `error code: 1010`, not JSON. Usual cause: the HTTP client sent its default `User-Agent`. Set an explicit, descriptive `User-Agent` (for example `my-app/1.0`) and retry. 500 — internal error. Credits consumed by a failed render are refunded automatically.

---

All workflows: [script-to-video](https://www.revid.ai/llm/api/script-to-video.md) · [prompt-to-video](https://www.revid.ai/llm/api/prompt-to-video.md) · [audio-to-video](https://www.revid.ai/llm/api/audio-to-video.md) · [music-to-video](https://www.revid.ai/llm/api/music-to-video.md) · [lyrics-to-video](https://www.revid.ai/llm/api/lyrics-to-video.md) · [song-ad](https://www.revid.ai/llm/api/song-ad.md) · [article-to-video](https://www.revid.ai/llm/api/article-to-video.md) · [avatar-to-video](https://www.revid.ai/llm/api/avatar-to-video.md) · [static-background-video](https://www.revid.ai/llm/api/static-background-video.md) · [motion-transfer](https://www.revid.ai/llm/api/motion-transfer.md) · [character-swap](https://www.revid.ai/llm/api/character-swap.md) · [caption-video](https://www.revid.ai/llm/api/caption-video.md) · [video-to-clips](https://www.revid.ai/llm/api/video-to-clips.md) · [ad-generator](https://www.revid.ai/llm/api/ad-generator.md)

More: [endpoint reference](https://www.revid.ai/llm/api/endpoints.md) · [interactive docs](https://www.revid.ai/docs) · [OpenAPI spec](https://www.revid.ai/postman/revid-public-v3-render.openapi.json) · [MCP server](https://www.revid.ai/mcp)
