はじめに
こんにちは。DX開発事業部の鹿嶋です。ねこ、吸ってますか?
NotebookLM Enterprise 版にて、API 経由でノートブックの作成・管理が可能となったようなので、さっそく試してみました!
https://cloud.google.com/agentspace/notebooklm-enterprise/docs/api-notebooks?hl=en
ノートブックの新規作成
以下のようにノートブックが1件も作成されていない状態から、新規作成を行います。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks" \
-d '{
"title": "API Notebook Creation Test"
}'
以下の結果が返され、ノートブックが新規作成されました。
{
"title": "API Notebook Creation Test",
"notebookId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"emoji": "",
"metadata": {
"userRole": "PROJECT_ROLE_OWNER",
"isShared": false,
"isShareable": true
},
"name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}"
}

ノートブックの詳細情報を取得
先ほど作成したノートブックの詳細情報を取得してみます。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks/${GLOBAL_NOTEBOOK_ID}"
結果は以下のとおりです。ノートブックの権限、共有状況、作成・更新日時や、ノートブックのアイコン(絵文字)を取得してくれました。
現在はデータソースが1件もないためこのような結果ですが、すでに追加されている場合は、合わせて情報として出力されます。
{
"title": "API Notebook Creation Test",
"notebookId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"emoji": "🤖",
"metadata": {
"userRole": "PROJECT_ROLE_OWNER",
"isShared": false,
"isShareable": true,
"lastViewed": "2025-09-07T05:01:33.993144Z",
"createTime": "2025-09-07T04:19:30.302434Z"
},
"name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}"
}
データソースの追加
データソースとして、以下の要素を個別または一括で追加することが可能です。
- テキストコンテンツ
- Web コンテンツ
- YouTube 動画
- Google Drive コンテンツ
- Google Agentspace コンテンツ
今回は「テキスト」「Web」「YouTube」の3つを一括登録してみます。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks/${NOTEBOOK_ID}/sources:batchCreate" \
-d '{
"userContents": [
{
"textContent": {
"sourceName": "API Test Document",
"content": "これはNotebookLM APIのテストドキュメントです。このテキストを使ってAIが要約や質問応答を行います。機械学習、人工知能、自然言語処理について説明しています。"
}
},
{
"webContent": {
"url": "https://cloud.google.com/?hl=ja",
"sourceName": "Google Cloud Japan"
}
},
{
"videoContent": {
"youtubeUrl": "https://www.youtube.com/watch?v=WForD3asu4g"
}
}
]
}'
以下の結果が返され、先ほど作成したノートブックにソースが追加されました。
{
"sources": [
{
"sourceId": {
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"title": "API Test Document",
"metadata": {
"wordCount": 2,
"tokenCount": 38
},
"settings": {
"status": "SOURCE_STATUS_COMPLETE"
},
"name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}"
},
{
"sourceId": {
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"title": "Google Cloud Japan",
"metadata": {
"wordCount": 3631,
"tokenCount": 12488
},
"settings": {
"status": "SOURCE_STATUS_COMPLETE"
},
"name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}"
},
{
"sourceId": {
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"title": "5 分で解説!NotebookLM Enterprise とは?",
"metadata": {
"wordCount": 960,
"tokenCount": 1629
},
"settings": {
"status": "SOURCE_STATUS_COMPLETE"
},
"name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}"
}
]
}

データソースの削除
登録したデータソースを削除します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks/${NOTEBOOK_ID}/sources:batchDelete" \
-d '{
"names": [
"projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}"
]
}'
以下の結果が返ってくれば成功のようなのですが、いささか不安になりますね…
{ }
実際に削除されているかどうかは、Web UI もしくはコマンドから確認可能です。
また、複数のデータソースを一度に削除しようとするとエラーが返されたので、単一での削除しか対応していないのかもしれません。
{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
}
ノートブックの削除
最後に、ノートブックの削除を行なってみます。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks:batchDelete" \
-d '{
"names": [
"projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}"
]
}'
成功の場合、先ほどのソースの削除と同様に以下の結果が返ってくるようです。
{ }
Web UI から確認すると、ノートブック作成前の状態に戻っていることが確認できました。

おわりに
実際に手を動かしてみると、データソースの複数削除ができなかったり、削除成功時のレスポンスが空で少し不安になったりしましたが、こうした試行錯誤も新しい技術に触れる醍醐味かもしれません(ということにしておきます)。
まだまだ alpha 版ということで、今後も仕様変更や新機能追加が予想されますが、例えば「プロジェクトが作成されたら自動で議事録用のノートブックを生成する」「毎日特定のWebサイトをソースとして更新する」といった、より高度なワークフロー連携が実現できるのではないかと、今からワクワクしています!