MMetadata /docs
Docs/Tools/upload_video_creative

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.

                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"
                    }
                ]

                CHANNEL READINESS: success and id mean the platform library accepted
                the file. Meta uploads are asynchronous and may still be UPLOADING.
                Use fetch_creative_details to read per-channel status; a Facebook or
                Instagram VIDEO ad must wait until that channel is READY.

                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

ArgumentTypeNotes
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.
usage_type string 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.
one of: CTV

Request

Request template, not a complete runnable example. Replace placeholders, empty objects, arrays, and zero values with valid account-specific inputs. Read required fields and nested constraints in the full schema. Confirm the account, connected channels, and referenced assets before calling a write tool.

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 is an illustrative template. Fill required fields and check the current schema before calling it. No response is fabricated.

Other creative tools:

Browse the tool catalog · machine-readable index