Upload Video Creative
upload_video_creativeUpload videos directly to the Metadata platform library to create video creatives. Downloads videos from provided URLs and uploads them to the platform.
WARNING: VIDEO-ONLY: The downloaded file MUST have a `video/*` content-type
(e.g. video/mp4, video/quicktime). GIFs and image formats are
rejected — use `upload_image_creative` for those.
WARNING: WHEN YOU NEED TO CALL THIS:
Call this BEFORE `create_update_video_ad` ONLY when you don't already
have a videoLibraryId. If the user (or an earlier step) has
already given you a creativeID for the video, skip the upload
and pass that id straight to `create_update_video_ad`.
WORKFLOW INTEGRATION (when an upload IS needed):
1. Upload your video URL with this tool → response contains the integer `id` (the videoLibraryId).
2. Pass that integer `id` as `creativeID` in `create_update_video_ad`.
COMMON WORKFLOWS:
- Upload existing video → Get videoLibraryId → Use as creativeID in `create_update_video_ad`.
- For Reddit VIDEO ads, ALSO upload a thumbnail image via `upload_image_creative` and pass that image
library id as `redditThumbnailLibraryId` to `create_update_video_ad`.
REQUIRED PARAMETERS:
- videos: Array of video URLs to upload.
OPTIONAL PARAMETERS:
- thumbnail_library_id: Existing imageLibraryId to attach to the
uploaded video as its platform thumbnail. Most callers don't
need this — Reddit VIDEO ads handle thumbnails at ad-creation
time via `redditThumbnailLibraryId`, not here.
- usage_type: "CTV" to upload the video for a LinkedIn CTV
(Connected TV) ad. The platform then validates the file as CTV
inventory (6 to 60 seconds, 1920x1080 or 1280x720, at most
500 MB; LinkedIn recommends exactly 15, 30, 45 or 60 seconds)
and only such an upload can back `create_update_ctv_ad`. A
non-compliant file is rejected at upload with the platform's
reason. Omit for in-feed video ads.
VIDEO REQUIREMENTS:
- URLs must be valid and publicly accessible.
- Supported formats: MP4 (recommended), MOV, and other video/* MIME types.
- For GIFs (image/gif): use `upload_image_creative` instead.
RESPONSE FORMAT:
Returns array of objects, one per video. `id` is returned as a
string (the platform's library ids are integers but the upload
response stringifies them); pass it to `create_update_video_ad` as an
integer (Python `int(id)` if you need the cast).
[
{
"url": "https://example.com/video.mp4",
"name": "video.mp4",
"id": "12345", # videoLibraryId — use as creativeID in create_update_video_ad
"success": true
},
{
"url": "https://example.com/bad.mp4",
"name": "bad.mp4",
"id": null,
"success": false,
"error": "Download failed: Connection timeout"
}
]
ERROR HANDLING:
- If one upload fails, others continue.
- Each result includes a success flag and (on failure) an error message.
- A content-type that does not start with `video/` is rejected
with a clear error pointing the caller at `upload_image_creative`.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| videos | Yes | Array of video URLs to upload to the platform library. | |
| usage_type | No | Set to CTV when the video is for a LinkedIn Connected TV ad; the platform validates the CTV spec at upload. Omit for in-feed video ads. | |
| thumbnail_library_id | No | Optional existing imageLibraryId to attach as the video's platform thumbnail. |