upload_video_creative
Upload videos directly to the Metadata platform library to create video creatives.
Writes creative
Creates or changes something in the account. Put it behind whatever review your agent uses.
What it does
Upload videos directly to the Metadata platform library to create video creatives.
Downloads videos from provided URLs and uploads them to the platform.
⚠️ 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.
⚠️ 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.
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`.Arguments
| Argument | Type | Notes | |
|---|---|---|---|
videos |
array | required | Array of video URLs to upload to the platform library. |
thumbnail_library_id |
integer | Optional existing imageLibraryId to attach as the video's platform thumbnail. |
Request
curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
-H "Authorization: $METADATA_PAT" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"upload_video_creative","arguments":{"videos":[]}}}'
Response
No recorded response. This tool writes to the account, so it is never executed to build these docs.
The request above is still the exact shape to send. Nothing on this page is invented.
Related
Other creative tools: