Authenticate by creating an app at developer.vimeo.com and using OAuth 2.0 (authorization code or client credentials) to obtain an access token with the upload scope.
Initiate the upload by POSTing to https://api.vimeo.com/me/videos with Authorization: Bearer {token}, Content-Type: application/json, and a body containing upload.approach set to tus, upload.size (exact file size in bytes), and any video metadata (name, description, privacy).
From the response, extract upload.upload_link — this is the tus endpoint URL for the actual binary upload.
Upload the file using the tus protocol: send a PATCH request to the upload_link with Content-Type: application/offset+octet-stream, Upload-Offset: 0 (or the current offset for resumption), and the binary file data; for large files, use multiple PATCH requests incrementing the offset.
Confirm completion by sending a HEAD request to the upload_link and verifying the Upload-Length equals Upload-Offset; then the video will enter Vimeo's transcoding queue.
Update privacy settings via PATCH https://api.vimeo.com/videos/{video_id} with privacy.view set to anybody, nobody, password, unlisted, or contacts.
Known gotchas
The upload.size in the initiation request must be the exact byte size of the file; providing an incorrect size causes the tus endpoint to reject the upload when the actual data size diverges.
Free Vimeo accounts have a weekly upload quota (currently 500 MB/week); API uploads count toward this quota and uploading large files or many files will exhaust it quickly, returning 403 errors with a quota message.
Tus upload links expire; if a resumed upload session is too old, the upload_link becomes invalid and the upload must be re-initiated, meaning the video metadata is created again and may produce duplicates.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp