はじめに

こんにちは。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サイトをソースとして更新する」といった、より高度なワークフロー連携が実現できるのではないかと、今からワクワクしています!