YouTube Integration
Connect YouTube to import video content into your knowledge base.
Overview
The YouTube integration allows you to:
- Add individual YouTube videos
- Import entire channels
- Import playlists
- Automatic transcription
Connecting YouTube
- Go to "Integrations" > "YouTube"
- Click "Connect YouTube"
- Sign in with your Google account
- Grant WizChat access to YouTube
- Click "Allow"
A YouTube connection belongs to the individual who connected it — your Google login is never shared with anyone else.
Sharing a Connected Channel With Your Team
You don't share your Google credentials to let teammates pull videos from your channel. Instead, you link the channel to a chatbot and then grant per-member access, so chosen members can browse and load videos under your connection.
- As the chatbot's owner or an admin, open the chatbot's Add Content → YouTube screen and browse your channel once. This first browse links the channel to that chatbot — it now uses your connection.
- Open the chatbot's Manage Access dialog → select the member → tick "YouTube channel access" → Save. (See Sharing Chatbots → YouTube Channel Access.)
- The granted member can now browse and load that channel's videos from the chatbot's Add Content → YouTube screen, under your connection.
Keep in mind:
- Off by default for regular members — owners, per-chatbot Admins, and team owners/admins can already browse a linked channel; everyone else needs the explicit grant. The toggle stays disabled until a channel is linked.
- Loading still requires document-upload permission (see who can upload). Browse access alone lets a member view the channel; loading also needs upload permission.
- Private videos are hidden from granted members unless you enable "Let granted members see private videos" on the chatbot. You (the member who connected the channel) always see its private videos.
- A video a member loads is attributed to that member, but it is fetched and transcribed under your connection.
Adding Videos
From Connected Account
- Go to "Knowledge Base"
- Click "Add Content" > "YouTube"
- Browse your videos
- Select videos to import
- Click "Import"
Importing Channels
Import all videos from a channel:
- Go to "Knowledge Base"
- Click "Add Content" > "YouTube Channel"
- Enter the channel URL or search
- Select the channel
- Choose import options:
- All videos
- Recent videos only
- Specific playlists
- Click "Import"
Importing Playlists
- Go to "Knowledge Base"
- Click "Add Content" > "YouTube Playlist"
- Enter the playlist URL
- Click "Import"
Processing
When you add a video:
- Fetch - Video metadata is retrieved
- Transcribe - Audio is transcribed to text
- Process - Text is chunked and embedded
- Ready - Content is searchable
Processing Time
| Video Length | Estimated Time |
|---|---|
| < 10 minutes | 1-2 minutes |
| 10-30 minutes | 2-5 minutes |
| 30-60 minutes | 5-10 minutes |
| > 60 minutes | 10+ minutes |
Automatic Updates
Keep channel content synced:
- Go to "Integrations" > "YouTube"
- Click on a connected channel
- Enable "Auto-sync"
- Set frequency (daily, weekly)
- Click "Save"
Viewing Transcripts
- Go to "Knowledge Base"
- Find the video document
- Click to view
- See full transcript
You can edit transcripts to fix errors.
Limits and Constraints
YouTube imports are subject to:
- Your plan's storage limits
- Provider/API rate limits
- Processing timeouts for very long videos
For direct video file uploads, see Subscription Plans.
Troubleshooting
Video Not Processing
- Check if video is public
- Very long videos may hit processing timeouts
- Ensure video has audio
Poor Transcription
- Original audio quality affects results
- Non-English may have lower accuracy
- Edit transcript manually if needed
OAuth Issues
- Reconnect YouTube if tokens expire
- Check Google account permissions
- Verify API access in Google Console
Management API
The YouTube integration is accessible via the Management API. Connection and video-list endpoints are account-scoped: they operate on the authenticated caller's YouTube connection. Ingesting videos into a chatbot additionally requires edit/upload access to that chatbot.
Check connection status
GET /api/v1/youtube/status
Required scope: videos:read
Returns { connected: boolean, channelTitle?: string }. Account-scoped (not per-chatbot).
Start the YouTube OAuth flow
POST /api/v1/youtube/connect
Required scope: videos:write
Returns an authorizeUrl to redirect the user to in order to grant YouTube access. The connection is completed by the browser callback. Account-scoped.
List your YouTube videos
GET /api/v1/youtube/videos
Required scope: videos:read
Lists videos from the caller's connected YouTube channel. Supports pagination (nextPageToken) and title search (search query parameter). Returns connected: false as a data field (not an error) when no channel is connected.
Response fields vary by mode:
- Normal pagination:
connected,videos,nextPageToken,totalResults - Title search (
?search=):connected,videos,search,totalScanned,totalResults,truncated
Both modes may include message when the connected account has no YouTube channel or another non-error condition needs to be shown to the user.
Each video includes: id (YouTube video ID), title, publishedAt, thumbnail.
Ingest YouTube videos into a chatbot
POST /api/v1/chatbots/{chatbotId}/youtube/videos
Required scope: videos:write
Ingests videos into the chatbot's knowledge base. Videos already in the knowledge base are skipped (returned in skippedAlreadyImported). Returns a jobId to track the async ingest.
Request body:
| Field | Type | Description |
|---|---|---|
videoIds | string[] | YouTube video IDs to ingest. Optional when links is provided. |
links | string[] | YouTube video links (watch, youtu.be, embed, or shorts URLs) or bare 11-character IDs, parsed to video IDs. Useful for adding a video that is not shown in the channel list. |
scopeId | string | Optional knowledge scope to attach the videos to. |
isPublic | boolean | Whether the ingested videos are public. Defaults to false. |
Provide at least one video via videoIds and/or links — you can mix both. Any link that cannot be parsed to a valid video ID is ignored and returned in the response's invalidLinks array.
See the full API reference for details.