Create upload
create_video_uploadReserves a NEW video/image library slot and returns a presigned S3 PUT URL for the caller to upload bytes directly. Use this when you have the file locally and don't want to host it publicly first (create_video_upload_from_url is the URL-based alternative). Response: { upload_id, presigned_url, method: 'PUT', expires_at, required_headers? }. PUT the raw bytes to presigned_url with Content-Type set to the file's MIME (video/mp4, video/quicktime, video/webm, image/jpeg, image/png, image/webp, image/gif). S3 records whatever type you send and finalize validates it against the allow-list. If required_headers is present, echo those verbatim on the PUT or S3 will 403 with SignatureDoesNotMatch. After the PUT completes, call finalize_video_upload with upload_id to get the video_upload_id back. Video max 950 MB, image max 20 MB.
DO NOT use this tool to set a cover / thumbnail on an existing video post. This creates a separate library entry, not a cover image. To set a cover on an existing post, call update_post with custom_thumbnail_url (public https URL to an image) or with custom_thumbnail_upload_id (a video_upload_id of an image already in the workspace).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Optional original filename (max 255 chars, no path separators). Preserved on the video_uploads row after finalize so the dashboard and platform validators can read the extension. When provided the response includes a required_headers map that the client MUST echo on the PUT. | |
| workspace_id | Yes | Workspace to attach the upload to. Get one from list_workspaces. | |
| idempotency_key | No | Optional client-generated key (e.g., a UUID) to make retries safe. Identical calls with the same key within 10 minutes return the original result instead of running the write twice. |