Summary
The NotebookLM API documentation for adding video sources shows an incorrect field name. The documentation states url should be used, but the actual API requires youtubeUrl.
Documentation Link
Issue Details
The documentation shows:
"videoContent": {
"url": "URL_YOUTUBE"
}
However, this does not work with the actual API.
Actual Behavior
Using documented field name (url) - FAILS
Request:
curl -X POST \
"https://global-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global/notebooks/NOTEBOOK_ID/sources:batchCreate" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"userContents": [
{
"videoContent": {
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
}
]
}'
Response (Error):
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unknown name \"url\" at 'user_contents[0].video_content': Cannot find field.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "user_contents[0].video_content",
"description": "Invalid JSON payload received. Unknown name \"url\" at 'user_contents[0].video_content': Cannot find field."
}
]
}
]
}
}
Using actual field name (youtubeUrl) - SUCCEEDS
Request:
curl -X POST \
"https://global-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global/notebooks/NOTEBOOK_ID/sources:batchCreate" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"userContents": [
{
"videoContent": {
"youtubeUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
}
]
}'
Response (Success):
{
"sources": [
{
"sourceId": {
"id": "d9c2b9d4-6c3e-4516-a713-ef7315b93de8"
},
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"metadata": {
"wordCount": 487,
"tokenCount": 633
},
"settings": {
"status": "SOURCE_STATUS_COMPLETE"
}
}
]
}
Expected Fix
The documentation should be updated to show the correct field name:
"videoContent": {
"youtubeUrl": "URL_YOUTUBE"
}
Additional Notes
This discrepancy makes it difficult for developers to integrate with the API, as following the documentation results in API errors. The correct field name was discovered through trial and error.