[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Add captions to Vimeo videos in bulk

> Upload WebVTT or SRT captions to the Vimeo videos that lack them and list the ones with no file. Runs weekly from your agent, nothing to maintain.

Source: https://cotlet.dev/integrations/vimeo-api-mcp-server/add-captions-to-videos

You finished a batch of training videos and the caption files are ready. Vimeo takes them one video at a time, so someone opens each video, picks a language and a type, and uploads.

Cotlet does it in your own Vimeo account with search\_videos, get\_video and upload\_captions, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=vimeo) [All Vimeo tools](https://cotlet.dev/integrations/vimeo-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Vimeo do this on its own?

Vimeo has no bulk caption upload in the app. The API can upload a text track, but it takes three calls per track (create the track, upload the file, set it active) and a token with the upload and edit scopes (checked 17 Oct 2026). Paid plans also get automatic captions for videos uploaded after 25 May 2022, which are machine transcripts, not your own files.

## How you do it in Vimeo today

1. Open Library and click the video.
2. Click the Languages button in the toolbar to the left of the player.
3. Click the + button at the top of the languages window.
4. Upload the file from your computer.
5. Use the dropdown menus next to the file name to choose the Language and the Type, Subtitle or Caption.
6. Click Upload. Then repeat for the next video and the next language.

## How to add captions to Vimeo videos in bulk

Prompt

```
Find videos in my Vimeo library that have no captions. For each one, upload the WebVTT file with the same name from my captions folder as English captions. List the videos with no matching file.
```

1. 01  
### Find videos without captions  
search\_videos pages through the library, and get\_video shows whether each video already has a text track in your language. A video that has one is skipped, so a rerun never doubles a track.
2. 02  
### Match files to videos  
The agent pairs each video with the caption file that carries its title or ID. A video with no matching file is reported at the end, not guessed.
3. 03  
### Check the file  
Before upload the agent checks the format. A WebVTT file must start with WEBVTT, an SRT file must start with the first cue number, and both must be UTF-8\. A file that fails is reported with the reason.
4. 04  
### Upload with language and type  
upload\_captions sets the Language and the Type for each file, Caption or Subtitle, the same two choices as the dropdowns in the Languages window. Every call asks for your OK until you switch confirmation off for upload\_captions.
5. 05  
### Report the rest  
The agent lists what it uploaded, what it skipped because a track existed, and what had no file.

### What you get back

Example data

```
Videos checked: 12
Captions uploaded (English): 9
- Onboarding 01 to Onboarding 07
- Pricing walkthrough
- Security overview
Skipped, track already there: 1 (Welcome video)
No file found: 2
- Admin training part 1
- Admin training part 2
```

### Other ways to ask

- Upload the Spanish subtitles for the same videos, type Subtitle, and change nothing else.
- Every Friday, list videos uploaded this week that still have no captions and tell me.
- Check my caption files for format errors and upload nothing.

## What Vimeo allows, and what to know first

- Vimeo accepts SRT and WebVTT caption files and recommends WebVTT.
- Caption files must be UTF-8 for special characters to display correctly.
- A WebVTT file must start with WEBVTT and use timecodes like 00:00:00.000\. An SRT file uses a comma in the timecode, 00:00:00,000.
- The "Unexpected Text Track Upload Type" error means the file is not SRT or WebVTT.
- Every Vimeo plan has captions, but some options depend on the plan. Vimeo also sells captions through Rev from the same Languages tab.

upload\_captions asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: [Vimeo Help: How to add captions or subtitles to my video](https://help.vimeo.com/hc/en-us/articles/21956884955537-How-to-add-captions-or-subtitles-to-my-video) · [Vimeo Help: Troubleshooting caption file types](https://help.vimeo.com/hc/en-us/articles/21957353918609-Troubleshooting-Caption-file-types) · [Vimeo developers: Working with Text Track Uploads](https://developer.vimeo.com/api/upload/texttracks)

## Call upload\_captions from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/vimeo/videos/912345601/captions \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"language":"en","type":"caption","content":"WEBVTT\n\n00:00:00.000 --> 00:00:03.500\nWelcome to the onboarding series.\n"}'
```

Example response

```
{
"video_id": "912345601",
"language": "en",
"type": "caption",
"format": "webvtt",
"active": true
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is vimeo\_write → upload\_captions. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/vimeo-api-mcp-server.md#automations)

## Vimeo tools this automation uses

__Cotlet Vimeo tools used to add captions to Vimeo videos in bulk__
| Tool | Parameters |
| ---------------- | ---------------------------------- |
| search\_videos | query, tag, folder\_id, cursor |
| get\_video | video\_id |
| upload\_captions | video\_id, language, type, content |

[All 13 Vimeo tools with descriptions](https://cotlet.dev/integrations/vimeo-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Vimeo to Cotlet?

Yes. You sign in to Vimeo yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Vimeo once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Vimeo automations

- [Sort Vimeo videos into folders automatically](https://cotlet.dev/integrations/vimeo-api-mcp-server/organize-videos-into-folders.md)
- [Weekly Vimeo video performance report](https://cotlet.dev/integrations/vimeo-api-mcp-server/report-video-performance.md)
- [Vimeo API and MCP server: every tool](https://cotlet.dev/integrations/vimeo-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Vimeo.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Vimeo.

[Sign up free](https://cotlet.dev/app/signup?app=vimeo)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
