YouTubeVideoUploadService מאפשר לכם להעלות סרטונים ישירות ל-YouTube דרך Google Ads API. אחר כך אפשר להשתמש בסרטונים האלה כדי ליצור נכסי וידאו בסוגים שונים של מודעות, כמו קמפיינים למיקסום הביצועים או קמפיינים ליצירת ביקוש.
השירות הזה מייעל את תהליך העבודה של יצירת מודעות וידאו. הוא מטפל בתהליך ההעלאה ל-YouTube, ומבטיח שהסרטונים ישויכו לחשבון שלכם בצורה נכונה.
מושגים מרכזיים
לפני שמתחילים, חשוב להבין איך מתנהלת העלאת סרטונים ואת המצבים השונים שהם יכולים לעבור.
תהליך עבודה מקצה לקצה
כדי להעלות קובץ וידאו ולהציג אותו במודעה, צריך לבצע ארבעה שלבים ברצף:
| שלב | שירות ושיטה | סיכום |
|---|---|---|
| 1. הפעלה והעלאה של בייטים של סרטונים | CreateYouTubeVideoUpload ב-YouTubeVideoUploadService |
מעלים את המטא-נתונים של הסרטון ואת הקובץ הבינארי כדי ליצור משאב YouTubeVideoUpload (customers/{customer_id}/youTubeVideoUploads/{video_upload_id}). |
| 2. מצב עיבוד הסקר | SearchStream ב-GoogleAdsService |
מריצים שאילתה על you_tube_video_upload עד state = 'PROCESSED' ומאכלסים את video_id של YouTube באורך 11 תווים. |
| 3. יצירת נכס וידאו לשימוש חוזר | MutateAssets ב-AssetService |
יוצרים YoutubeVideoAsset (youtube_video_id = video_id) כדי לקבל שם משאב של נכס (customers/{customer_id}/assets/{asset_id}). |
| 4. קישור הנכס לקמפיינים או למודעות | MutateAssetGroupAssets ב-AssetGroupAssetService או MutateAdGroupAds ב-AdGroupAdService |
מקשרים את הנכס לקמפיין למיקסום הביצועים AssetGroupAsset (field_type = YOUTUBE_VIDEO) או לקמפיין ליצירת ביקוש DemandGenVideoResponsiveAdInfo (videos[].asset). |
בעלות על ערוץ
כשאתם מעלים סרטון, אתם יכולים לציין את ערוץ YouTube היעד באמצעות השדה channel_id במשאב YouTubeVideoUpload:
- ערוץ בבעלות המפרסם (מותג): צריך לספק את
channel_idשל ערוץ YouTube קיים בבעלות המפרסם. האפשרות הזו נתמכת רק בתהליך אימות המשתמש, ולא ניתן להשתמש בה עם חשבונות שירות. - ערוץ בניהול Google: אם לא מציינים את
channel_id, הסרטון מועלה לערוץ YouTube בניהול Google שמשויך לחשבון Google Ads.
סטטוסים של העלאות
מחזור החיים של העלאת סרטון ל-YouTube מתועד בשדה state.
ה-enum YouTubeVideoUploadState מגדיר את הסטטוסים הבאים:
| מדינה (State) | תיאור |
|---|---|
PENDING |
הסרטון בתהליך העלאה. |
UPLOADED |
הסרטון הועלה בהצלחה ועובר עיבוד על ידי YouTube. |
PROCESSED |
העיבוד של הסרטון הסתיים והוא מוכן לשימוש. |
FAILED |
ההעלאה או העיבוד נכשלו ואי אפשר להשלים אותם. |
REJECTED |
הסרטון נדחה בגלל בעיות באימות או בגלל הפרות מדיניות. |
UNAVAILABLE |
סטטוס הסרטון לא זמין. יכול להיות שהוא הוסר מ-YouTube. |
הגדרות פרטיות
השדה video_privacy קובע מי יכול לראות את הסרטון שהועלה. enum YouTubeVideoPrivacy תומך בערכים הבאים:
PUBLIC: הסרטון זמין לכולם ב-YouTube. (מותר רק בערוצי מותג).-
UNLISTED: אי אפשר לחפש את הסרטון, אבל כל מי שיש לו את הקישור יכול לצפות בו. זוהי אפשרות ברירת המחדל והאפשרות היחידה לערוצים בניהול Google.
גילוי נאות לגבי תוכן שנוצר על ידי AI
החל מגרסה 26, בהתאם לתקנות כמו EU AI Act (חוק הבינה המלאכותית של האיחוד האירופי), מפרסמים יכולים לציין אם קטע וידאו שהועלה מכיל תוכן שנוצר על ידי AI או מדיה סינתטית.
השדה video_content_metadata ב-YouTubeVideoUpload מכיל את הערך VideoContentMetadata. מגדירים את השדה המקונן generative_content_disclosure באמצעות הערך YouTubeVideoUploadGenerativeContentDisclosure enum:
| ערך | תיאור |
|---|---|
NON_GENERATIVE_CONTENT |
המפרסם הצהיר שהסרטון לא נוצר באמצעות AI. |
GENERATIVE_CONTENT |
המפרסם ציין שהסרטון נוצר על ידי AI. |
העלאת סרטון
כדי להעלות סרטון, צריך להשתמש בבקשה מרובת חלקים ל-method CreateYouTubeVideoUpload. הבקשה מכילה גם את המטא-נתונים של ההעלאה וגם את קובץ הווידאו עצמו.
1. התחלת ההעלאה
יוצרים CreateYouTubeVideoUploadRequest עם השדות הבאים:
| שדה | דרישה | תיאור ומגבלות |
|---|---|---|
customer_id |
חובה | מספר הלקוח ב-Google Ads שכולל 10 ספרות (ללא מקפים). |
you_tube_video_upload.video_title |
חובה (INPUT_ONLY, IMMUTABLE) |
שם הסרטון שהועלה ל-YouTube (עד 100 תווים, לא יכול להכיל את התווים < או >). |
you_tube_video_upload.video_description |
אופציונלי (INPUT_ONLY, IMMUTABLE) |
תיאור הסרטון ב-YouTube (עד 5,000 תווים, לא יכול להכיל את התווים < או >). |
you_tube_video_upload.channel_id |
אופציונלי (IMMUTABLE) |
מזהה ערוץ היעד ב-YouTube (24 תווים שמתחילים ב-UC) של ערוץ מותג בבעלות המפרסם. אם משמיטים את הפרמטר הזה, ההעלאה תתבצע לערוץ בניהול Google. |
you_tube_video_upload.video_privacy |
אופציונלי (ניתן לשינוי בערוצי מותג) | YouTubeVideoPrivacy (ברירת המחדל היא UNLISTED, או PUBLIC לערוצי מותג בבעלות המפרסם). |
you_tube_video_upload.video_content_metadata |
אופציונלי (INPUT_ONLY, IMMUTABLE) |
זמין החל מגרסה 26: VideoContentMetadata עם generative_content_disclosure שמוגדר לערך YouTubeVideoUploadGenerativeContentDisclosure (NON_GENERATIVE_CONTENT או GENERATIVE_CONTENT). |
אם אתם משתמשים בספריית לקוח, צריך להפעיל את ה-method CreateYouTubeVideoUpload, להעביר את קובץ הווידאו והעלאת הסרטון תטופל באופן פנימי.
Java
String videoUploadResourceName; try (YouTubeVideoUploadServiceClient youTubeVideoUploadServiceClient = googleAdsClient.getLatestVersion().createYouTubeVideoUploadServiceClient()) { YouTubeVideoUpload youTubeVideoUpload = YouTubeVideoUpload.newBuilder() .setVideoTitle("Test Video") .setVideoDescription("Test Video Description") .setVideoPrivacy(YouTubeVideoPrivacy.UNLISTED) .build(); CreateYouTubeVideoUploadRequest createUploadRequest = CreateYouTubeVideoUploadRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setYouTubeVideoUpload(youTubeVideoUpload) .build(); CreateYouTubeVideoUploadResponse response = youTubeVideoUploadServiceClient.createYouTubeVideoUpload( createUploadRequest, () -> new FileInputStream(videoFile), null); videoUploadResourceName = response.getResourceName(); System.out.printf("Created YouTube video upload: %s%n", videoUploadResourceName); }
C#
YouTubeVideoUploadServiceClient ytService = client.GetService( Services.V26.YouTubeVideoUploadService); CreateYouTubeVideoUploadRequest createUploadRequest = new CreateYouTubeVideoUploadRequest() { CustomerId = customerId.ToString(), YouTubeVideoUpload = new YouTubeVideoUpload() { VideoTitle = "Test Video", VideoDescription = "Test Video Description", VideoPrivacy = YouTubeVideoPrivacy.Unlisted } }; string videoUploadResourceName; using (FileStream stream = File.OpenRead(videoFilePath)) { ResumableUploadSession<CreateYouTubeVideoUploadRequest, CreateYouTubeVideoUploadResponse> session = ytService.CreateYouTubeVideoUpload(); CreateYouTubeVideoUploadResponse response = session.BeginUploadAsync(createUploadRequest, stream).Result; videoUploadResourceName = response.ResourceName; Console.WriteLine($"Created YouTube video upload: {videoUploadResourceName}"); }
PHP
$youTubeVideoUploadServiceClient = $googleAdsClient->getYouTubeVideoUploadServiceClient(); $youTubeVideoUpload = new YouTubeVideoUpload([ 'video_title' => 'Test Video', 'video_description' => 'Test Video Description', 'video_privacy' => YouTubeVideoPrivacy::UNLISTED ]); $createYouTubeVideoUploadRequest = CreateYouTubeVideoUploadRequest::build( $customerId, $youTubeVideoUpload ); /** @var ResumableUpload $resumableUpload */ $resumableUpload = $youTubeVideoUploadServiceClient->createYouTubeVideoUpload( $createYouTubeVideoUploadRequest ); $stream = Utils::streamFor(fopen($videoFilePath, 'rb')); /** @var CreateYouTubeVideoUploadResponse $response */ $response = $resumableUpload->startUpload($stream); $videoUploadResourceName = $response->getResourceName(); printf("Created YouTube video upload: '%s'%s", $videoUploadResourceName, PHP_EOL);
Python
yt_service: YouTubeVideoUploadServiceClient = client.get_service( "YouTubeVideoUploadService" ) create_upload_request: CreateYouTubeVideoUploadRequest = ( youtube_video_upload_service.CreateYouTubeVideoUploadRequest() ) create_upload_request.customer_id = customer_id create_upload_request.you_tube_video_upload.video_title = "Test Video" create_upload_request.you_tube_video_upload.video_description = ( "Test Video Description" ) create_upload_request.you_tube_video_upload.video_privacy = ( client.enums.YouTubeVideoPrivacyEnum.UNLISTED ) video_upload_resource_name: str with open(video_file_path, "rb") as stream: response: CreateYouTubeVideoUploadResponse = ( yt_service.create_you_tube_video_upload( stream=stream, request=create_upload_request, retry=None, ) ) video_upload_resource_name = response.resource_name print(f"Created YouTube video upload: {video_upload_resource_name}")
Ruby
video_upload = client.resource.you_tube_video_upload do |v| v.video_title = "Test Video" v.video_description = "Test Video Description" v.video_privacy = :UNLISTED end upload = client.service.you_tube_video_upload.create_you_tube_video_upload( customer_id: customer_id, you_tube_video_upload: video_upload, ) video_upload_resource_name = nil File.open(video_file_path, "rb") do |stream| response = upload.start( stream: stream, content_type: "application/octet-stream", ) video_upload_resource_name = response.resource_name puts "Created YouTube video upload: #{video_upload_resource_name}" end
Perl
This example is not yet available in Perl; you can take a look at the other languages.
curl
# # Use the --i curl parameter to capture response headers in the $RESPONSE # variable. FILE_SIZE=$(wc -c < "${VIDEO_FILE_NAME}" | tr -d '\r') RESPONSE=$(curl -i -f -v -s --request POST \ "https://googleads.googleapis.com/resumable/upload/v${API_VERSION}/customers/${CUSTOMER_ID}/youTubeVideoUploads:create" \ --header "Content-Type: application/json" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Protocol: resumable" \ --header "X-Goog-Upload-Command: start" \ --header "X-Goog-Upload-Header-Content-Length: ${FILE_SIZE}" \ --data @- <<EOF { "customer_id": "${CUSTOMER_ID}", "you_tube_video_upload": { "video_title": "${VIDEO_TITLE}", "video_description": "${VIDEO_DESCRIPTION}", "video_privacy": "UNLISTED" } } EOF ) # Extract the value of the "x-goog-upload-url" header from the HTTP response. UPLOAD_URL=$(echo "${RESPONSE}" \ | grep -i '^x-goog-upload-url' \ | awk '{print $2}' \ | tr -d '\r') CHUNK_SIZE=$(echo "${RESPONSE}" \ | grep -i '^x-goog-upload-chunk-granularity' \ | awk '{print $2}' \ | tr -d '\r')
אם אתם משתמשים ב-REST, בקטע הבא מוסבר איך לנהל את העלאת הסרטון.
2. מעלים את הסרטון
כשמעלים באמצעות REST, CreateYouTubeVideoUpload משתמש בפרוטוקול העלאה שניתן להמשיך בשני שלבים:
- התחלת סשן ההעלאה: שולחים בקשת
POSTראשונית לנקודת הקצה להעלאהCreateYouTubeVideoUpload(/upload/v26/customers/{customer_id}/youTubeVideoUploads:create) עםx-goog-upload-command: start(ואפשר גם עםx-goog-upload-header-content-lengthכדי להצהיר על גודל הקובץ). התגובה מחזירה את כתובת ה-URL של סשן ההעלאה בכותרת התגובהx-goog-upload-urlשל HTTP, יחד עם מטא-נתונים כמו גודל החלק הצפוי. - הזרמת בייטים של הסרטון וסגירת ההעלאה: שליחת מטען ייעודי בינארי של הסרטון לנקודת הקצה
x-goog-upload-urlעםx-goog-upload-command: upload, finalize. בסיום ההעלאה, התגובה מחזירה את ה-resource_nameשנוצר (customers/{customer_id}/youTubeVideoUploads/{video_upload_id}).
כדי לקבל תיאור מלא של כותרות ה-HTTP שמשמשות בפרוטוקול להעלאת סרטונים, עיינו בדוגמת הקוד הבאה:
# Take the first ${CHUNK_SIZE} bytes of the video file and upload them. head -c ${CHUNK_SIZE} ${VIDEO_FILE_NAME} | curl -i -v -X PUT "${UPLOAD_URL}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Offset: 0" \ --header "X-Goog-Upload-Command: upload" \ --header "Content-Length: ${CHUNK_SIZE}" \ --data-binary @- # Query the status of the upload. QUERY_RESPONSE=$(curl -i -s -X POST "${UPLOAD_URL}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Command: query") # Extract the value of the "x-goog-upload-size-received" header from the HTTP # response. UPLOADED_BYTES=$(echo "${QUERY_RESPONSE}" \ | grep -i '^x-goog-upload-size-received' \ | awk '{print $2}' \ | tr -d '\r') echo "Uploaded ${UPLOADED_BYTES} bytes." REMAINING_BYTES=$((FILE_SIZE - UPLOADED_BYTES)) echo "${REMAINING_BYTES} bytes remaining to upload." FINALIZE_RESPONSE=$(tail -c ${REMAINING_BYTES} ${VIDEO_FILE_NAME} | curl -v -X PUT "${UPLOAD_URL}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Offset: ${UPLOADED_BYTES}" \ --header "X-Goog-Upload-Command: upload, finalize" \ --data-binary @-) UPLOADED_VIDEO_RESOURCE_NAME=$(echo $FINALIZE_RESPONSE | jq -r '.resourceName')
3. אחזור מצב העלאת הסרטון
אחרי שמתחילים להעלות סרטון, שולחים שאילתה ל-GAQL כדי לבדוק את מצב העיבוד שלו. השאילתה צריכה לכלול את השדות שאפשר לבחור במשאב you_tube_video_upload (resource_name, video_upload_id, channel_id, video_id, state ו-video_privacy) עד שמקבלים את הערך state = 'PROCESSED' (אי אפשר לבחור את השדות INPUT_ONLY ב-GAQL):
Java
// Retrieve the metadata of the newly uploaded video. String query = String.format( "SELECT " + "you_tube_video_upload.resource_name, " + "you_tube_video_upload.video_id, " + "you_tube_video_upload.state " + "FROM you_tube_video_upload " + "WHERE you_tube_video_upload.resource_name = '%s'", videoUploadResourceName); try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { SearchGoogleAdsStreamRequest request = SearchGoogleAdsStreamRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setQuery(query) .build(); ServerStream<SearchGoogleAdsStreamResponse> stream = googleAdsServiceClient.searchStreamCallable().call(request); for (SearchGoogleAdsStreamResponse response : stream) { for (GoogleAdsRow googleAdsRow : response.getResultsList()) { YouTubeVideoUpload video = googleAdsRow.getYouTubeVideoUpload(); System.out.printf( "Video with ID %s was found in state %s.%n", video.getVideoId(), video.getState()); } } }
C#
// Retrieve the metadata of the newly uploaded video. string query = $@" SELECT you_tube_video_upload.resource_name, you_tube_video_upload.video_id, you_tube_video_upload.state FROM you_tube_video_upload WHERE you_tube_video_upload.resource_name = '{videoUploadResourceName}'"; GoogleAdsServiceClient gaService = client.GetService( Services.V26.GoogleAdsService); gaService.SearchStream(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse resp) { foreach (GoogleAdsRow row in resp.Results) { Console.WriteLine( $"Video with ID {row.YouTubeVideoUpload.VideoId} was found in " + $"state {row.YouTubeVideoUpload.State}."); } } );
PHP
// Retrieve the metadata of the newly uploaded video. $query = sprintf( "SELECT you_tube_video_upload.resource_name, " . "you_tube_video_upload.video_id, " . "you_tube_video_upload.state " . "FROM you_tube_video_upload " . "WHERE you_tube_video_upload.resource_name = '%s'", $videoUploadResourceName ); $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $stream = $googleAdsServiceClient->searchStream( SearchGoogleAdsStreamRequest::build($customerId, $query) ); foreach ($stream->iterateAllElements() as $googleAdsRow) { /** @var GoogleAdsRow $googleAdsRow */ printf( "Video with ID '%s' was found in state '%s'.%s", $googleAdsRow->getYouTubeVideoUpload()->getVideoId(), YouTubeVideoUploadState::name($googleAdsRow->getYouTubeVideoUpload()->getState()), PHP_EOL ); }
Python
# Retrieve the metadata of the newly uploaded video. query: str = f""" SELECT you_tube_video_upload.resource_name, you_tube_video_upload.video_id, you_tube_video_upload.state FROM you_tube_video_upload WHERE you_tube_video_upload.resource_name = '{video_upload_resource_name}'""" ga_service: GoogleAdsServiceClient = client.get_service("GoogleAdsService") stream: Iterator[SearchGoogleAdsStreamResponse] = ga_service.search_stream( customer_id=customer_id, query=query ) for row in itertools.chain.from_iterable(batch.results for batch in stream): video = row.you_tube_video_upload print( f"Video with ID {row.you_tube_video_upload.video_id} was found in state {row.you_tube_video_upload.state}." )
Ruby
# Retrieve the metadata of the newly uploaded video. query = <<~EOQ SELECT you_tube_video_upload.resource_name, you_tube_video_upload.video_id, you_tube_video_upload.state FROM you_tube_video_upload WHERE you_tube_video_upload.resource_name = '#{video_upload_resource_name}' EOQ responses = client.service.google_ads.search_stream( customer_id: customer_id, query: query, ) responses.each do |batch| batch.results.each do |row| puts "Video with ID #{row.you_tube_video_upload.video_id} was found in " \ "state #{row.you_tube_video_upload.state}." end end
Perl
This example is not yet available in Perl; you can take a look at the other languages.
curl
curl -i -v -X POST \ "https://qa-prod-googleads.sandbox.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \ --header "Content-Type: application/json" \ --header "Developer-Token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data @- <<EOF { "query": "SELECT you_tube_video_upload.resource_name, you_tube_video_upload.video_id, you_tube_video_upload.state FROM you_tube_video_upload WHERE you_tube_video_upload.resource_name = '$UPLOADED_VIDEO_RESOURCE_NAME'" } EOF
נהל העלאות
אחרי שהעלאת הסרטון מסתיימת, אפשר להשתמש בו כנכס וידאו.
שימוש בסרטון שהועלה
אחרי שהסרטון מגיע למצב PROCESSED, אפשר למצוא את מזהה הסרטון ב-YouTube (שמורכב מ-11 תווים) בשדה video_id של המשאב YouTubeVideoUpload.
משתמשים ב-video_id הזה כדי ליצור YoutubeVideoAsset עם MutateAssets, ומקשרים את שם המשאב של הנכס שנוצר (customers/{customer_id}/assets/{asset_id}) לקמפיינים או למודעות:
יוצרים את
YoutubeVideoAssetעל ידי העברתyoutube_video_idאלAssetService.MutateAssets:POST https://googleads.googleapis.com/v26/customers/{customer_id}/assets:mutate { "operations": [ { "create": { "name": "Product Launch Video", "youtubeVideoAsset": { "youtubeVideoId": "dQw4w9WgXcQ" } } } ] }מקשרים את
AssetאלAssetGroupאוAdGroupAd:קמפיינים למיקסום הביצועים: יוצרים
AssetGroupAssetבאמצעותAssetGroupAssetService.MutateAssetGroupAssets, ומגדירים אתfield_typeלערךYOUTUBE_VIDEO:POST https://googleads.googleapis.com/v26/customers/{customer_id}/assetGroupAssets:mutate { "operations": [ { "create": { "assetGroup": "customers/{customer_id}/assetGroups/{asset_group_id}", "asset": "customers/{customer_id}/assets/{asset_id}", "fieldType": "YOUTUBE_VIDEO" } } ] }קמפיין ליצירת ביקוש: צריך להפנות אל
customers/{customer_id}/assets/{asset_id}ברשימהvideosשל אובייקטDemandGenVideoResponsiveAdInfoכשמבצעים קריאה אלAdGroupAdService.MutateAdGroupAds:POST https://googleads.googleapis.com/v26/customers/{customer_id}/adGroupAds:mutate { "operations": [ { "create": { "adGroup": "customers/{customer_id}/adGroups/{ad_group_id}", "status": "PAUSED", "ad": { "name": "Demand Gen Video Ad", "finalUrls": ["https://www.example.com"], "demandGenVideoResponsiveAd": { "videos": [ { "asset": "customers/{customer_id}/assets/{asset_id}" } ], "logoImages": [ { "asset": "customers/{customer_id}/assets/{logo_asset_id}" } ], "headlines": [ { "text": "Example Headline" } ], "longHeadlines": [ { "text": "Example Long Headline" } ], "descriptions": [ { "text": "Example Description" } ], "businessName": { "text": "Example Business" } } } } } ] }
שליחת שאילתה לגבי נכסי
YOUTUBE_VIDEOקיימים באמצעותGoogleAdsService.SearchStream:SELECT asset.id, asset.resource_name, asset.name, asset.type, asset.youtube_video_asset.youtube_video_id, asset.youtube_video_asset.youtube_video_title FROM asset WHERE asset.type = 'YOUTUBE_VIDEO' AND asset.youtube_video_asset.youtube_video_id = '{video_id}'
עדכון של מטא-נתונים
כדי לעדכן את הגדרת הפרטיות של סרטון שהועלה באמצעות ה-API הזה, צריך להשתמש ב-method UpdateYouTubeVideoUpload ולהגדיר את update_mask בתור "video_privacy". אחרי היצירה, אפשר לעדכן רק את השדה video_privacy (PUBLIC או UNLISTED, לסרטונים שהועלו לערוץ מותג בבעלות המפרסם). השדות video_title, video_description, channel_id ו-video_content_metadata הם קבועים.
הסרת העלאות
אם אתם צריכים למחוק סרטונים שהועלו באמצעות Google Ads API, אתם צריכים להעביר את שמות המשאבים שלהם ב-customers/{customer_id}/youTubeVideoUploads/{video_upload_id} בשדה resource_names של השיטה RemoveYouTubeVideoUpload. הפעולה הזו מסירה את הסרטון גם מספריית הנכסים הדיגיטליים של Google Ads וגם מ-YouTube.