Status: Active Last Updated: 2026-01-14
This document describes the stability guarantees and versioning policy for notebooklm-py.
This library uses undocumented Google APIs. Unlike official Google APIs, there are:
- No stability guarantees from Google
- No deprecation notices before changes
- No SLAs or support
Google can change the underlying APIs at any time, which may break this library without warning.
We follow Semantic Versioning with modifications for our unique situation:
| Change Type | Version Bump | Example |
|---|---|---|
| RPC method ID fixes (Google changed something) | PATCH | 0.1.0 → 0.1.1 |
| Bug fixes | PATCH | 0.1.1 → 0.1.2 |
| New features (backward compatible) | MINOR | 0.1.2 → 0.2.0 |
| Public API breaking changes | MAJOR | 0.2.0 → 1.0.0 |
-
RPC ID Changes = Patch Release
- When Google changes internal RPC method IDs, we release a patch
- These are "bug fixes" from our perspective, not breaking changes
- Users should always use the latest patch version
-
Python API Stability
- Public API (items in
__all__) is stable within a major version - Breaking changes require a major version bump
- Deprecated APIs are marked with
DeprecationWarningand documented
- Public API (items in
The following are considered public API and are subject to stability guarantees:
# Client
NotebookLMClient
NotebookLMClient.from_storage()
NotebookLMClient.notebooks
NotebookLMClient.sources
NotebookLMClient.artifacts
NotebookLMClient.chat
NotebookLMClient.research
NotebookLMClient.notes
# Types
Notebook, Source, Artifact, Note
GenerationStatus, AskResult
NotebookDescription, ConversationTurn
# Exceptions
SourceError, SourceProcessingError, SourceTimeoutError, SourceNotFoundError
RPCError
# Enums
AudioFormat, VideoFormat, StudioContentType, ExportType, etc.
# Auth
AuthTokens, DEFAULT_STORAGE_PATH# These are NOT part of the public API:
notebooklm.rpc.* # RPC protocol internals
notebooklm._core.* # Core infrastructure
notebooklm._*.py # All underscore-prefixed modules
notebooklm.auth.* # Auth internals (except AuthTokens)To use internal APIs, import them explicitly:
# Explicit import for power users (may break)
from notebooklm.rpc import RPCMethod, encode_rpc_request- Deprecation Notice: Deprecated features emit
DeprecationWarning - Documentation: Deprecations are noted in docstrings and CHANGELOG
- Removal Timeline: Deprecated features are removed in the next major version
- Migration Guide: Breaking changes include migration instructions
None at this time.
When Google changes their internal APIs:
- Detection: Automated RPC health check runs nightly (see below)
- Investigation: Identify changed method IDs using browser devtools
- Fix: Update
rpc/types.pywith new method IDs - Release: Push patch release as soon as possible
A nightly GitHub Action (rpc-health.yml) monitors all 35+ RPC methods for ID changes.
What it verifies:
- The RPC method ID we send matches the ID returned in the response envelope
- Example:
LIST_NOTEBOOKSsendswXbhsf→ response must containwXbhsf
What it does NOT verify:
- Response data correctness (E2E tests cover this)
- Response schema validation (too fragile across 35+ methods)
- Business logic (out of scope for monitoring)
Why this design:
- Google's breaking change pattern is silent ID changes, not schema changes
- Error responses still contain the method ID, so we detect mismatches even on API errors
- A mismatch means
rpc/types.pyneeds updating, triggering a patch release
On mismatch detection:
- GitHub Issue auto-created with
bug,rpc-breakage, andautomatedlabels - Report shows expected vs actual IDs and which
RPCMethodentries need updating
Configuration:
NOTEBOOKLM_RPC_DELAY: Delay between RPC calls in seconds (default: 1.0)
Manual trigger: gh workflow run rpc-health.yml
- Check GitHub Issues for existing reports
- If not reported, open an issue with:
- Error message (especially any RPC error codes)
- Which operation failed
- When it started failing
- See RPC Development Guide for debugging
If the library breaks before we release a fix:
- Open browser devtools on NotebookLM
- Perform the failing operation manually
- Find the new RPC method ID in Network tab
- Temporarily patch your local copy:
# In your code, before using the library from notebooklm.rpc.types import RPCMethod RPCMethod.SOME_METHOD._value_ = "NewMethodId"
# Always use latest patch version
pip install --upgrade notebooklm-py# pyproject.toml - recommended
dependencies = [
"notebooklm-py>=0.1,<1.0", # Accept patches and minors
]
# requirements.txt - for reproducibility
notebooklm-py==0.1.0 # Exact version (but update regularly!)# Test in development first
pip install notebooklm-py==X.Y.Z
pytest- Bug reports: GitHub Issues
- Discussions: GitHub Discussions
- Security issues: See SECURITY.md