MARKETING · MESSAGING
Videos, playlists, comments, and analytics for the channel that person owns.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
youtube_add_analytics_group_itemWRITEAdd a video, playlist or channel to an analytics group. Its kind must match the group's item type. Reversible by youtube_remove_analytics_group_item. Separate quota from the Data API.
youtube_add_live_chat_moderatorWRITEGive another channel moderator powers in a live chat - they can then delete messages and ban viewers. This is an access-control change, reversible by youtube_remove_live_chat_moderator. YouTube publishes no quota cost for this resource.
youtube_add_playlist_itemWRITEAppend or insert a video into a playlist. Reversible by youtube_remove_playlist_item. Costs 50 quota units, so building a 200-video playlist spends the whole daily budget - batch nothing and plan for it.
youtube_ban_live_chat_userWRITEBan a viewer from a live chat, permanently or for a set number of seconds. Unlike YouTube's channel-wide comment ban, this one HAS a published inverse - youtube_unban_live_chat_user - which is why it ships. Prefer type='temporary' with a duration. YouTube publishes no quota cost for this resource.
youtube_batch_get_video_statsREADRead view, like and comment counts for many videos in one call. Added to the API on 2026-06-03 and it has its OWN quota bucket - 1 unit per call against a separate 10,000/day allowance - so it does not spend the main budget at all. Prefer it over youtube_list_videos whenever only the numbers are wanted.
youtube_bind_live_broadcastWRITEAttach a live stream to a broadcast, or - by omitting stream_id - detach whatever is attached. That omission is this action's own inverse. A broadcast with no bound stream cannot go on air. YouTube publishes no quota cost for this resource.
youtube_create_analytics_groupWRITECreate an empty analytics group of one item type, then fill it with youtube_add_analytics_group_item. Reversible by youtube_delete_analytics_group. Separate quota from the Data API.
youtube_create_channel_sectionWRITEAdd a shelf to the channel homepage. This changes what every visitor sees first. Reversible by youtube_delete_channel_section. Costs 50 quota units.
youtube_create_comment_threadWRITEPost a new top-level comment on a video or a channel, as the connected account. The comment is PUBLIC immediately, attributed to the channel, and deleting it later does not retract replies, notifications or screenshots. Costs 50 quota units.
youtube_create_live_broadcastWRITECreate a scheduled broadcast. Creating one does not put anything on air: it has to be bound to a stream with youtube_bind_live_broadcast and then transitioned with youtube_transition_live_broadcast. Defaults to PRIVATE. Reversible by youtube_delete_live_broadcast. YouTube publishes no quota cost for this resource; it behaves like a 50-unit write.
youtube_create_live_streamWRITECreate an ingestion configuration a broadcast can be bound to. The stream key YouTube mints is WITHHELD from the response for the same reason youtube_list_live_streams withholds it; collect it in YouTube Studio. Reversible by youtube_delete_live_stream. YouTube publishes no quota cost for this resource.
youtube_create_playlistWRITECreate an empty playlist on the connected channel. Defaults to PRIVATE, which is not YouTube's default: a public playlist publishes its title, description and every video in it. Reversible by youtube_delete_playlist. Costs 50 quota units.
youtube_create_report_jobWRITEAsk YouTube to start generating a daily bulk report. IT IS NOT IMMEDIATE: the first report appears within about 48 hours and covers the previous day. Once running, YouTube also backfills roughly the previous 30 days. Reversible by youtube_delete_report_job. Separate quota from the Data API.
youtube_delete_analytics_groupWRITEDESTRUCTIVE - delete an analytics group and its membership list. The videos are untouched, but every saved report and every automation keyed on this group id stops resolving, and the membership has to be rebuilt by hand. List it with youtube_list_analytics_group_items first.
youtube_delete_captionWRITEDESTRUCTIVE - delete a caption track. YouTube publishes no restore and keeps no copy, so a hand-timed translation is gone. Download it with youtube_download_caption first. Setting is_draft with youtube_update_caption hides a track reversibly instead. Costs 50 quota units.
youtube_delete_channel_sectionWRITEDESTRUCTIVE - remove a shelf from the channel homepage. YouTube publishes no restore; the shelf's configuration and ordering are gone and must be rebuilt by hand. The playlists and videos it featured are untouched. Costs 50 quota units.
youtube_delete_commentWRITEDESTRUCTIVE - delete a comment. YouTube publishes no restore. Deleting a top-level comment deletes every reply under it, including replies by other people. It is also the only way to retract a comment an agent posted, so it is sometimes the right call. Costs 50 quota units. Rejecting a comment with youtube_set_comment_moderation_status hides it reversibly instead.
youtube_delete_live_broadcastWRITEDESTRUCTIVE - delete a broadcast. For a COMPLETED broadcast this deletes the recorded video and its view count and comments with it; YouTube publishes no restore. For an upcoming one it cancels the event and any scheduled-premiere notifications already sent. YouTube publishes no quota cost for this resource.
youtube_delete_live_chat_messageWRITEDESTRUCTIVE - remove a message from a live chat. No restore, and everyone watching at the time has already seen it. It is also the only way to retract a message an agent posted. YouTube publishes no quota cost for this resource.
youtube_delete_live_streamWRITEDESTRUCTIVE - delete an ingestion configuration. Its stream KEY dies with it, so every encoder configured with that key stops working and has to be reconfigured by a human, and a broadcast bound to it can no longer go on air. YouTube publishes no quota cost for this resource.
youtube_delete_playlistWRITEDESTRUCTIVE - delete a playlist. YouTube publishes no restore. The VIDEOS survive (a playlist holds references, not copies) but the curation, the ordering and every note on every entry are gone. Read the item list with youtube_list_playlist_items first if it might be wanted again. Costs 50 quota units.
youtube_delete_playlist_imageWRITERemove a playlist's custom cover image, restoring YouTube's generated one. Reversible by uploading the image again, which is why this is not flagged destructive. YouTube publishes no quota cost for this resource.
youtube_delete_report_jobWRITEDESTRUCTIVE - stop a reporting job and make every report it has already produced inaccessible. Recreating the job does NOT restore the history: a new job backfills only about 30 days, so anything older is gone for good. Separate quota from the Data API.
youtube_delete_videoWRITEDESTRUCTIVE - permanently delete a video from the channel. YouTube publishes NO undelete: the file, its view history, its comments and every link to it are gone, and re-uploading produces a different video with a different id and zero views. Costs 50 quota units. Setting privacy_status to 'private' with youtube_update_video hides a video reversibly and is almost always what was wanted.
youtube_download_captionREADDownload a caption track's text, optionally converted to SRT or VTT and optionally machine-translated. Agentic Fabriq caps the returned text at 1 MB and says so in the result when it truncates. YouTube publishes no quota cost for captions.download; the rest of the captions family is billed at 50 units and above.
youtube_download_reportREADFetch a generated bulk report's CSV. Agentic Fabriq resolves the download URL from the report's metadata, checks it points at youtubereporting.googleapis.com, fetches it with the connection's token and returns at most max_bytes of text - a full daily report can be hundreds of megabytes and no tool result can carry that. The result says plainly when it was truncated. Separate quota from the Data API.
youtube_get_reportREADRead one report file's period, creation time and download URL, without downloading it. Separate quota from the Data API.
youtube_get_report_jobREADRead one reporting job's type, name and creation time. Separate quota from the Data API.
youtube_get_video_ratingREADReport whether the connected channel has liked, disliked or not rated each of up to 50 videos. This is the read that makes youtube_rate_video idempotent - call it first and a repeat like is skipped. Costs 1 quota unit. Note it needs the account-management scope, not the read-only one: YouTube publishes no read-only form.
youtube_get_video_trainabilityREADReport whether the creator has allowed third parties to train AI models on a video. The diagnostic answer to 'may we use this footage'. YouTube publishes no quota cost for this method; it reads like every other 1-unit list.
youtube_insert_cuepointWRITETrigger a mid-roll ad break in a broadcast that is on air. Viewers see an advertisement immediately; there is no cancel. Only meaningful on a monetised channel. YouTube publishes no quota cost for this resource.
youtube_list_abuse_report_reasonsREADList the reason ids youtube_report_video_abuse accepts, with their secondary reasons. Costs 1 quota unit and it is the only way to get a valid reason id.
youtube_list_activitiesREADRead a channel's activity feed - uploads and playlist changes, newest first, filterable by date. Costs 1 quota unit. Note YouTube removed the like, favorite and subscription activity types from this feed on 2026-08-06; they are no longer returned however the request is shaped.
youtube_list_analytics_group_itemsREADList what is in an analytics group. The group-item ids here are what youtube_remove_analytics_group_item requires; it does not take a video id. Separate quota from the Data API.
youtube_list_analytics_groupsREADList the custom groups of videos, playlists or channels defined for analytics. A group is how you ask 'how did the tutorial series do' without listing every video id in every query. Separate quota from the Data API.
youtube_list_captionsREADList the caption tracks on a video, with their language, whether they are auto-generated and whether they are drafts. Costs 50 quota units - fifty times an ordinary read, because captions are billed as a separate class.
youtube_list_channel_sectionsREADRead the shelves that make up a channel's homepage layout - featured playlists, recent uploads, subscriptions and the rest, in order. Costs 1 quota unit. The ids and positions here are what the section writes need.
youtube_list_channelsREADRead a channel by id, by @handle, or the connected account's own channel with mine=true. START HERE: the channel's uploads playlist id (contentDetails.relatedPlaylists.uploads) is how you list a channel's videos for 1 unit instead of spending one of the 100 daily search calls. Costs 1 quota unit.
youtube_list_comment_threadsREADRead top-level comments and their first few replies, on one video, one channel, or everything on a channel. moderation_status='heldForReview' is the moderation queue. Costs 1 quota unit. YouTube's whole comment surface is gated on the force-ssl scope, which is the same scope that can delete a video - see the scope description before granting it.
youtube_list_commentsREADRead comments by id, or every reply under one top-level comment. Use youtube_list_comment_threads to find the parent first. Costs 1 quota unit.
youtube_list_i18n_languagesREADList the application languages YouTube supports, for the hl and default_language arguments elsewhere in this connector. Costs 1 quota unit.
youtube_list_i18n_regionsREADList the content regions YouTube supports, for the region_code arguments elsewhere in this connector. Costs 1 quota unit.
youtube_list_live_broadcastsREADList the channel's broadcasts - upcoming, active or completed - with their scheduled times, privacy and bound stream. YouTube publishes no quota cost for the liveBroadcasts resource; it behaves like a 1-unit list.
youtube_list_live_chat_messagesREADRead messages from a live chat. Get live_chat_id from youtube_list_live_broadcasts (snippet.liveChatId). Poll with the nextPageToken; the response carries pollingIntervalMillis, and polling faster than that wastes quota and is refused by YouTube. YouTube publishes no quota cost for this resource.
youtube_list_live_chat_moderatorsREADList who can moderate a live chat. The moderator ids here are what youtube_remove_live_chat_moderator requires. YouTube publishes no quota cost for this resource.
youtube_list_live_streamsREADList the channel's ingestion configurations - resolution, frame rate, protocol, health - and the RTMP ingestion addresses. THE STREAM KEY IS WITHHELD: cdn.ingestionInfo.streamName is replaced with a marker because anyone holding it can broadcast to this channel from any encoder with no Google account at all. Read it in YouTube Studio. YouTube publishes no quota cost for this resource.
youtube_list_membersREADList the channel's paying members, their level and when they joined. Requires the memberships scope AND a channel with memberships enabled, which means the YouTube Partner Program: 1,000 subscribers plus 4,000 valid public watch hours, or 1,000 subscribers plus 10 million Shorts views. Costs 1 quota unit. This is third-party personal data about paying customers - grant it deliberately.
youtube_list_membership_levelsREADList the membership tiers the channel offers. The level ids here are what youtube_list_members' has_access_to_level filter needs. Costs 1 quota unit. Same Partner Programme gate as youtube_list_members.
youtube_list_playlist_imagesREADRead the custom cover images set on a playlist. YouTube publishes no quota cost for the playlistImages resource; it behaves like a 1-unit list.
youtube_list_playlist_itemsREADRead a playlist's entries. This is the CHEAP way to list a channel's uploads: take contentDetails.relatedPlaylists.uploads from youtube_list_channels and page through it for 1 unit a page, instead of spending one of the 100 daily search calls. Costs 1 quota unit.
youtube_list_playlistsREADRead playlists by id, by channel, or the connected account's own with mine=true. Costs 1 quota unit. The ids returned here are what youtube_list_playlist_items and every playlist write require.
youtube_list_report_jobsREADList the reporting jobs on this account, with the report type each one generates and when it was created. Separate quota from the Data API.
youtube_list_report_typesREADList the bulk report types YouTube can generate - the daily CSV feeds behind Studio's downloads. This is where a reporting job starts: the id from here is what youtube_create_report_job needs. Separate quota from the Data API.
youtube_list_reportsREADList the report files a job has produced, with the period each covers and its download URL. Filter with created_after to pick up only what is new since the last run. Separate quota from the Data API.
youtube_list_subscriptionsREADRead the channels an account subscribes to, or - with my_subscribers=true - the channels subscribed to the connected one. Costs 1 quota unit. Subscription ids returned here are what youtube_unsubscribe requires; it does not take a channel id.
youtube_list_super_chat_eventsREADList Super Chat and Super Sticker purchases on the channel's live streams, with the amount, the currency and the buyer's public channel. YouTube publishes no quota cost for this method; it behaves like a 1-unit read.
youtube_list_video_categoriesREADList the video category ids valid in one region. youtube_update_video takes a category id and rejects a name, so this is the read that makes that write callable. Costs 1 quota unit.
youtube_list_videosREADRead one or more YouTube videos by id, or the most-popular chart, or the videos this channel has rated. Returns title, description, tags, publication time, statistics and status. Costs 1 quota unit out of the project's 10,000/day. Exactly one of id, chart or my_rating must be given - YouTube refuses the call otherwise and still charges for it.
youtube_post_live_chat_messageWRITEPost a message into a live chat as the connected channel. Visible to everyone watching, immediately, attributed to the channel - and on a busy stream it is seen before it can be deleted. YouTube publishes no quota cost for this resource.
youtube_query_analytics_reportREADTHE ANSWER TO 'HOW IS MY CHANNEL DOING'. Query views, watch time, subscribers gained, average view duration, traffic sources, demographics and revenue over any date range, grouped by any dimension. ids is normally 'channel==MINE'. Runs against the YouTube Analytics API, which has its own project quota in the Cloud console - it does NOT spend the Data API's 10,000 units. REVENUE METRICS (estimatedRevenue, estimatedAdRevenue, cpm, rpm) additionally need the monetary analytics scope granted on this connection, and the channel must be in the YouTube Partner Programme.
youtube_rate_videoWRITESet the connected channel's rating on a video. A like is PUBLIC on the channel's liked-videos list. Fully reversible: rating='none' removes whatever rating is there, which is this action's own inverse. Costs 50 quota units.
youtube_remove_analytics_group_itemWRITERemove one member from an analytics group. Takes the GROUP ITEM id from youtube_list_analytics_group_items. Reversible by youtube_add_analytics_group_item. Separate quota from the Data API.
youtube_remove_live_chat_moderatorWRITERevoke a moderator's powers in a live chat. Takes the MODERATOR id from youtube_list_live_chat_moderators, not a channel id. Reversible by youtube_add_live_chat_moderator. YouTube publishes no quota cost for this resource.
youtube_remove_playlist_itemWRITERemove one entry from a playlist. The video itself is untouched and the entry can be put back with youtube_add_playlist_item, which is why this is not flagged destructive. Costs 50 quota units.
youtube_reply_to_commentWRITEPost a reply under an existing top-level comment, as the connected account. Public immediately and it notifies the person replied to. Costs 50 quota units.
youtube_report_abuseWRITEFile a general abuse report about a channel, video or comment, in the connected account's name. YouTube publishes no API that withdraws it. PREFER youtube_report_video_abuse FOR A VIDEO: its reason ids come from youtube_list_abuse_report_reasons, while this operation's subject_type_id and abuse_type_ids come from NO read YouTube publishes - they have to be taken from Google's reference by a human, which is why the video-specific tool is the usable one. YouTube publishes no quota cost for this method either; it behaves like a 50-unit write.
youtube_report_video_abuseWRITEFlag somebody else's video to YouTube for review, in the connected account's name. YouTube publishes NO API that withdraws a report, so this cannot be taken back by another call. Get reason_id from youtube_list_abuse_report_reasons - a made-up id is a wasted, billed refusal. Costs 50 quota units.
youtube_searchREADSearch YouTube for videos, channels or playlists. THE SCARCEST CALL IN THIS CONNECTOR: since YouTube's 2026-06-01 move to granular quota buckets, a project gets 100 search.list CALLS PER DAY - a bucket of its own, separate from the 10,000-unit budget - and every page of results is another call. Before searching a known channel's own videos, use youtube_list_channels to get its uploads playlist and page that with youtube_list_playlist_items for 1 unit a page instead. Search results carry no statistics; pass the ids to youtube_batch_get_video_stats, which is free of both budgets.
youtube_set_comment_moderation_statusWRITEPublish, reject or hold up to 50 comments on the connected channel's own videos in one call. Fully reversible - a rejected comment can be published again. YouTube's banAuthor parameter is NOT available: it bans a viewer from the channel permanently and YouTube publishes no un-ban. Costs 50 quota units.
youtube_set_playlist_imageWRITEUpload a custom cover image for a playlist. The image travels as base64 and is capped at 2 MB decoded by Agentic Fabriq, well under the 50 MB the endpoint would take, because a tool argument is not a file transfer. YouTube publishes no quota cost for this resource; it behaves like a 50-unit write.
youtube_set_thumbnailWRITEUpload a custom thumbnail image for a video. The image travels as base64 inside the tool call, so it is capped at 2 MB DECODED - YouTube's own documented limit for thumbnails, well under the 50 MB its upload endpoint would accept. Custom thumbnails require a verified YouTube channel. Costs 50 quota units. The previous thumbnail is replaced and YouTube keeps no copy of it.
youtube_set_watermarkWRITEUpload the branding watermark that appears over every video on the channel and set when it shows. Reversible by youtube_unset_watermark. The image travels as base64, capped at 10 MB decoded. Costs 50 quota units.
youtube_subscribeWRITESubscribe the connected account to a channel. A subscription is PUBLIC unless the account's subscription list is private, and it is a visible statement of affiliation. Reversible by youtube_unsubscribe. Costs 50 quota units.
youtube_transition_live_broadcastWRITEMove a broadcast between testing, live and complete. 'live' PUTS THE CHANNEL ON AIR to whatever audience its privacy allows and notifies subscribers; 'complete' ends the broadcast and cannot be undone - a completed broadcast cannot go back on air, a new one has to be made. Both directions require the confirmation token. YouTube publishes no quota cost for this resource.
youtube_transition_live_chat_messageWRITEClose a durable chat event, such as an open poll. Closing a poll finalises it and it cannot be reopened. YouTube publishes no quota cost for this resource.
youtube_unban_live_chat_userWRITELift a ban, letting the viewer chat again. Takes the BAN id returned by youtube_ban_live_chat_user. YouTube publishes no list of active bans, so the id has to be kept from the ban call - that gap is recorded in docs/coverage/youtube.md. YouTube publishes no quota cost for this resource.
youtube_unset_watermarkWRITERemove the branding watermark from the channel's videos. The inverse of youtube_set_watermark; the image itself is discarded, so restoring it means uploading it again. Costs 50 quota units.
youtube_unsubscribeWRITERemove one subscription. Takes the SUBSCRIPTION id from youtube_list_subscriptions, not a channel id. Reversible by youtube_subscribe. Costs 50 quota units.
youtube_update_analytics_groupWRITEChange an analytics group's title. The group's members and item type are untouched. Separate quota from the Data API.
youtube_update_captionWRITEReplace a caption track's file, or flip its draft flag. 450 quota units, the most expensive call in the API. The previous version of the track is not retained anywhere, so download it with youtube_download_caption first if it might be wanted.
youtube_update_channel_brandingWRITEChange the channel's title, description, keywords, country, default language, unsubscribed trailer or banner image. Agentic Fabriq reads the current brandingSettings first and merges only the fields named here - YouTube's channels.update replaces the whole brandingSettings object, so a bare title would blank the description and the keywords. Costs 1 unit for the read plus 50 for the write.
youtube_update_channel_sectionWRITEChange a shelf's title, position, style or contents. Agentic Fabriq reads the section first and merges the named fields, because channelSections.update requires the whole snippet. Costs 1 unit for the read plus 50 for the write.
youtube_update_commentWRITEEdit the text of a comment the connected account wrote. YouTube marks the comment as edited and re-notifies anyone mentioned, so this is outbound communication rather than a silent correction. Costs 50 quota units.
youtube_update_live_broadcastWRITEChange a broadcast's title, schedule, privacy or recording settings. Agentic Fabriq reads it first and merges the named fields, because liveBroadcasts.update requires the whole snippet. YouTube publishes no quota cost for this resource.
youtube_update_live_streamWRITEChange a stream's title, description or ingestion settings. Agentic Fabriq reads it first and merges the named fields. The stream key is withheld from the response as everywhere else. YouTube publishes no quota cost for this resource.
youtube_update_playlistWRITEChange a playlist's title, description, tags or privacy. Agentic Fabriq reads the playlist first and merges only the named fields; YouTube's playlists.update would otherwise clear the description and tags whenever they are omitted. Costs 1 unit for the read plus 50 for the write. The playlist's ITEMS are untouched.
youtube_update_playlist_imageWRITEReplace an existing playlist cover image. Same 2 MB base64 cap as youtube_set_playlist_image, and the same reason for it. The previous image is not retained. YouTube publishes no quota cost for this resource; it behaves like a 50-unit write.
youtube_update_playlist_itemWRITEChange an entry's position in a playlist, or its note and clip range. Agentic Fabriq reads the entry first and merges the named fields, because YouTube requires the whole snippet on this call and would otherwise re-point the entry at nothing. Costs 1 unit for the read plus 50 for the write.
youtube_update_videoWRITEChange a video's title, description, tags, category, privacy, licence, publish time or made-for-kids declaration. Agentic Fabriq READS THE VIDEO FIRST and merges only the fields named here: YouTube's raw videos.update clears every mutable property the request body omits, so sending a title alone would erase the description and every tag. Costs 1 unit for the read plus 50 for the write.
youtube_upload_captionWRITEAdd a caption track to a video. THE MOST EXPENSIVE CALL IN THIS CONNECTOR at 400 quota units - 4% of the daily budget per track. The file must carry its own timecodes: YouTube's sync parameter has been unsupported since 2024-04-12 and Agentic Fabriq refuses it by name. Text travels inline, capped at 1 MB.
youtube_upload_channel_bannerWRITEUpload a banner image and return the bannerExternalUrl YouTube assigns to it. THIS ALONE CHANGES NOTHING: pass the returned URL to youtube_update_channel_branding to actually put the banner on the channel. The image travels as base64 and is capped at 6 MB decoded, which is YouTube's own limit for this endpoint. Costs 50 quota units.
youtube_upload_videoWRITEUpload a video to the connected channel from a publicly reachable https URL and return the created video resource. The file is fetched server-side WITHOUT credentials and must be 64 MB or less — Agentic Fabriq's cap for a tool-driven transfer, well under YouTube's own limit. Defaults to privacyStatus=private so nothing goes public by accident; pass privacy_status explicitly to change that. Costs 1600 quota units against a SEPARATE 100-uploads/day bucket (the API's default until a quota extension is granted).
Put YouTube behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.