Imagina que cada mañana guardas los enlaces de tres anuncios oficiales para revisarlos más tarde. Copiarlos a mano en un cuaderno funciona una vez; repetirlo durante semanas consume tiempo y facilita que una fuente quede fuera. La API de Gemini Notebook permite crear el cuaderno, añadir una URL y comprobar si terminó de procesarla. Esta guía reproduce ese flujo con un solo enlace y deja claro dónde termina la automatización.
Qué harás: cargarás una página pública en un cuaderno con la API oficial de Google y esperarás el estado ACTIVE. No se extraerán respuestas ni se publicará un resumen automáticamente: la API de vista previa no ofrece una herramienta de chat o preguntas sobre las fuentes.
Antes de empezar: acceso y límites reales
Según la guía oficial de Google, esta vista previa requiere una cuenta personal de Google que haya iniciado sesión al menos una vez en Gemini Notebook, un proyecto de Google Cloud con notebook.googleapis.com habilitada y un token OAuth con el alcance https://www.googleapis.com/auth/notebook. Las cuentas de Google Workspace aún reciben 403. Una cuenta que nunca abrió Notebook puede recibir 404 al crear su primer cuaderno. No sirve una API key común de Gemini.
La API es gratuita durante la vista previa, con límites: Google documenta 20 llamadas CreateSource por minuto por usuario, y el plan gratuito admite 100 cuadernos y 50 fuentes por cuaderno. Estos límites pueden cambiar; consulta la tabla oficial antes de programar un lote grande.
1. Prepara el proyecto y la autenticación
Instala gcloud si aún no lo tienes. Sustituye el identificador de proyecto y ejecuta estos comandos en tu propia terminal. El inicio de sesión abre el navegador y solicita autorización: no pegues el token en un repositorio ni en un chat compartido.
export PROJECT_ID="TU_PROYECTO"
gcloud services enable notebook.googleapis.com --project="$PROJECT_ID"
gcloud auth application-default login \
--scopes="https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/notebook"
export ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
La cabecera x-goog-user-project es necesaria cuando usas estas credenciales locales. El token suele caducar aproximadamente en una hora; genera uno nuevo para la siguiente ejecución. Para una aplicación de producción se necesita un flujo OAuth propio, no conservar ese token en una tarea programada.
2. Crea un cuaderno y carga una URL
Este ejemplo usa curl y la página pública de documentación de Gemini como fuente. Comprueba el JSON antes de extraer name; si el servicio devuelve un error, detén el flujo en vez de continuar con una variable vacía. Necesitas Python 3 solo para leer el JSON.
set -euo pipefail
API_ROOT="https://notebook.googleapis.com/v1"
NOTEBOOK_JSON="$(curl --fail-with-body -sS -X POST "$API_ROOT/notebooks" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "x-goog-user-project: $PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{"display_name":"Fuentes oficiales de IA"}')"
NOTEBOOK_NAME="$(printf '%s' "$NOTEBOOK_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["name"])')"
SOURCE_JSON="$(curl --fail-with-body -sS -X POST "$API_ROOT/$NOTEBOOK_NAME/sources" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "x-goog-user-project: $PROJECT_ID" \
-H "Content-Type: application/json" \
-d '{"display_name":"Documentación Gemini API","web_content":{"url":"https://ai.google.dev/gemini-api/docs"}}')"
SOURCE_NAME="$(printf '%s' "$SOURCE_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["name"])')"
printf 'Cuaderno: %s\nFuente: %s\n' "$NOTEBOOK_NAME" "$SOURCE_NAME"
Google acepta URL web pública, enlace de YouTube o texto/Markdown. Para otras fuentes ajusta el cuerpo JSON según la documentación. Si automatizas varias URLs, guarda el nombre del cuaderno y el de cada fuente: el ejemplo crea un cuaderno nuevo cada vez y no evita duplicados.
3. Espera a que la fuente esté lista
La creación es asíncrona. No trates la respuesta del POST como prueba de que el contenido ya es utilizable. Este bucle revisa durante un minuto y sale tanto en éxito como en fallo; ajusta el tiempo para fuentes grandes.
for intento in $(seq 1 30); do
STATE_JSON="$(curl --fail-with-body -sS "$API_ROOT/$SOURCE_NAME" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "x-goog-user-project: $PROJECT_ID")"
STATE="$(printf '%s' "$STATE_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("state","UNKNOWN"))')"
case "$STATE" in
ACTIVE) printf 'Fuente lista: %s\n' "$SOURCE_NAME"; break ;;
FAILED) printf 'Falló el procesamiento: %s\n' "$STATE_JSON" >&2; exit 1 ;;
*) sleep 2 ;;
esac
done
if [ "$STATE" != ACTIVE ]; then
printf 'Aún no está ACTIVE. Revisa: %s\n' "$SOURCE_NAME" >&2
exit 1
fi

Qué automatizar después, y qué sigue manual
Para un radar de IA, conserva una lista de URLs oficiales, selecciona solo las que tengan una fecha y un cambio aplicable, y envía esas fuentes al cuaderno. Luego abre Gemini Notebook para contrastar afirmaciones y citas antes de escribir. Ese último paso editorial importa: una fuente cargada no demuestra por sí sola que una noticia sea correcta ni que la función esté disponible para todos.
El MCP oficial expone siete herramientas de gestión de cuadernos y fuentes; no incluye una herramienta para conversar con el cuaderno. Si tu objetivo es preguntar desde Claude Code sobre los documentos, esta API todavía no completa esa tarea. Y si ya leíste nuestra guía para conectar NotebookLM a Claude Code, esta es una tarea distinta: aquí automatizamos la ingesta y comprobación de estado, no el chat.
Prueba mínima de hoy: carga una URL oficial, registra NOTEBOOK_NAME y SOURCE_NAME, comprueba ACTIVE y abre el cuaderno para verificar que el contenido corresponde a la página. No ejecuté el flujo contra una cuenta personal de Google para este artículo; el código sigue el quickstart oficial y debes validarlo en tu propio proyecto.
