🔒Private Notebooks
Private Notebooks gives you a dedicated notebook account for keeping reusable sources, asking grounded questions with citations, and generating finished assets from the same source workspace.
The subscription is €99 per month. One license provides one dedicated notebook account and is activated within one business day after payment. Private Notebook operations do not consume AutoContent API credits; the subscription limits below apply instead.
Private Notebooks is an independent AutoContent API service. It is not provided, sponsored, endorsed, or officially affiliated with Google or NotebookLM. Notebook content, prompts, and generated outputs are processed by third-party AI and platform providers to fulfill requests. Only send content you are authorized to process, and account for this processing in your privacy notices.
Authentication and Idempotency
Use your AutoContent API token on every request:
Authorization: Bearer YOUR_API_TOKENAn active Private Notebooks license is required. A notebook belongs to the customer that created it; another customer cannot read, change, query, or delete that notebook ID.
Every operation that changes state or asks a question also requires an Idempotency-Key header:
Idempotency-Key: pn-create-018f4f6e-23b1-7ef1-a867-acde48001122Use an opaque printable ASCII value between 8 and 192 characters. Keep the same key when retrying the same operation. Reusing it with different input returns 409 Conflict.
The header is required for:
POST /dedicated-account/notebooksDELETE /dedicated-account/notebooks/:notebookIdPOST /dedicated-account/notebooks/:notebookId/sourcesPOST /dedicated-account/notebooks/:notebookId/questionsPOST /Content/Createwhen the body containsnotebookId
It is not required for the GET endpoints.
Endpoints
POST
/dedicated-account/notebooks
Create a notebook, optionally with initial sources
GET
/dedicated-account/notebooks
List your notebooks
GET
/dedicated-account/notebooks/:notebookId
Get one owned notebook
DELETE
/dedicated-account/notebooks/:notebookId
Delete one owned notebook and its sources
POST
/dedicated-account/notebooks/:notebookId/sources
Add sources to an owned notebook
POST
/dedicated-account/notebooks/:notebookId/questions
Ask a grounded question
GET
/dedicated-account/usage
Read capacity and current rolling 24-hour usage
POST
/Content/Create
Generate an asset from an owned notebook's saved sources
GET
/Content/Status/:requestId
Poll a generated asset until it completes
Individual source deletion is not supported. Delete the notebook when all of its sources should be removed.
Supported Sources
Each source has a type, content, and, for uploaded files, an optional fileName.
Type
content
Notes
text
Plain text
Up to 500,000 characters
website
An http or https URL
The provider reads the page
youtube
A YouTube URL
youtube.com and youtu.be URLs are accepted
pdf
Base64-encoded PDF bytes
Up to 50 MB; a base64 data URL is also accepted
file
Base64-encoded file bytes
Up to 50 MB; include fileName
file accepts .pdf, .txt, .md, .csv, .docx, .pptx, .xlsx, .mp3, .wav, .m4a, .png, .jpg, .jpeg, and .webp files.
Create a Notebook with cURL
Creating a notebook may include an empty sources array or up to 20 initial sources. Add more in batches of 20 until the notebook reaches its 100-source capacity:
A new request returns 201 Created:
An idempotent replay returns 200 OK with replay: true. Source ingestion can partially succeed, so inspect every item in sources even when the HTTP request succeeds. A failed item has success: false and an errorMessage.
Add a PDF Source
Base64-encode the file bytes and send them as content:
The response identifies the result for each submitted source:
Ask a Question and Read Citations
Questions can contain up to 5,000 characters:
citations is an object keyed by the citation marker used in the answer:
Citation fields depend on the underlying source and may be empty. Treat the citations keys as strings and render only citations returned by the API.
Licensed Generation Capacity
Every notebook-bound generation runs on the same dedicated account assigned to your license. It uses the notebook's existing sources, does not consume AutoContent generation credits, and never rotates through the shared account pool.
The supported outputType values are:
audiovideotextfaqstudy_guidetimelinebriefing_docquizinfographicslide_deckdatatable
Submit the job through /Content/Create with the owned notebookId, then poll /Content/Status/:requestId exactly as you would for other AutoContent jobs. Do not add resources, topic, projects, feeds, research IDs, channels, or episode IDs to a notebook-bound request. Add sources to the notebook first so the persistent source workspace remains the only generation context.
The create response contains request_id. Poll its status until status is 100. Depending on the output, the terminal response contains grounded response_text and citations, or a downloadable field such as audio_url, video_url, image_url, briefing_doc_url, slide_deck_url, or datatable_url. Replaying the same request with the same idempotency key returns the same request ID and does not submit a second provider generation.
Node.js Example
This example creates a notebook and asks it a question using the built-in fetch available in Node.js 18 and later:
Python Example
This example creates an empty notebook, uploads a PDF, and asks a question. Install the requests package first.
In production, retain each idempotency key with its operation so a network retry sends the same key instead of generating a new one.
List, Read, Delete, and Check Usage
These examples use the same Bearer token. Only deletion needs an idempotency key.
The list response wraps records in notebooks; the single-notebook response returns one record directly:
A successful deletion returns success: true, the deleted notebookId, and a replay flag.
Usage response:
Plan Limits
Dedicated accounts per license
1
Notebooks
200
Sources per notebook
100
Grounded questions
200 after each 24-hour reset
Audio overview account capacity
6 after each 24-hour reset
Video overview account capacity
6 after each 24-hour reset
Reports: FAQ, study guide, timeline, briefing document
20 after each 24-hour reset
Quizzes
20 after each 24-hour reset
Infographics, slide decks, and data tables
Provider-governed capacity; no invented numeric limit
text generation uses the same question allowance as the direct questions endpoint. All listed output request and retrieval paths have been verified end to end. Upstream capacity can still change, and the API returns a clear provider error if the assigned account reaches a provider limit that has no published numeric allowance.
Google's published help says daily quotas reset after 24 hours but does not expose an account reset timestamp to this API. AutoContent therefore applies a conservative rolling 24-hour admission window and also surfaces upstream quota errors. Use GET /dedicated-account/usage instead of calculating availability locally; each used capability includes its next local resetsOn timestamp.
Error Handling
400
Invalid body, source, notebook ID, question, or idempotency key
Correct the request before retrying
401
Missing or invalid Bearer token
Supply a valid AutoContent API token
403
No active Private Notebooks license
Wait for activation or restore the subscription
404
Notebook not found or not owned by the authenticated customer
Verify the notebook ID and token
409
The key was reused with different input, work is already in flight, or the prior mutation must be reconciled
If Retry-After is present, wait and retry the identical request with the same key; otherwise inspect the error code
429
Notebook/source capacity or a rolling 24-hour allowance was reached
Read /dedicated-account/usage and wait until resetsOn when applicable
503
The service, dedicated account, or third-party provider is temporarily unavailable
Retry the identical request with the same key and exponential backoff
Private Notebook endpoints commonly return error, errorMessage, and optional details. Managed mutation conflicts may instead include success: false, code, and error. Parse the HTTP status first and preserve these fields in logs.
Last updated