Create a notebook
September 29, 2026
Table of contents
Create a new, empty notebook. A notebook holds the sources that chat answers from and that Studio artifacts are generated from. Add sources next with POST /sources (web pages, YouTube videos, pasted text, Google Drive files) or POST /sources/upload (files).
The returned notebook id names the account it lives on, so every later call on the notebook, its sources and its artifacts goes to that account automatically. This is the only notebook endpoint that picks an account. When email is omitted, the notebook goes to a healthy account with the fewest running jobs (chosen at random among equally busy ones).
Google caps the number of notebooks per account and the sources per notebook by plan — 100 notebooks and 50 sources on the free plan, 500 notebooks and 300 sources on Google AI Pro. GET /accounts/email shows the limits of each account.
https://api.useapi.net/v1/gemini-notebook/notebooks
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
API tokenis required, see Setup useapi.net for details.
Request Body
{
"email": "[email protected]",
"title": "Apollo 11"
}
emailis optional, the account to create the notebook on, see GET /accounts. When omitted, the least busy healthy account is used.titleis optional, the notebook title. Up to 200 characters. When omitted, the notebook is created untitled.
Responses
-
{ "notebook": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55", "email": "[email protected]", "title": "Apollo 11" } -
{ "error": "Parameter title length exceeds 200 characters", "code": 400 } -
Invalid API token.
{ "error": "useapi.net ⁝ Unauthorized", "code": 401 } -
The
emailaccount is not configured.{ "error": "Account [email protected] not found", "code": 404 } -
596 Account Error
Google reported the account as signed out. While we re-check it, the answer is the first message below. Retry in about a minute. If it stays signed out, the account is paused, you receive an email, and the answer becomes the second message until you re-add it via Setup Gemini Notebook.
{ "error": "Google reported this account as signed out. We are re-checking it — please retry in about a minute. If it stays signed out, you will receive a re-add email.", "code": 596 }{ "error": "Account [email protected]: Google signed this account out. Re-add it at https://useapi.net/docs/start-here/setup-gemini-notebook", "code": 596 }Without
email,596also means no healthy account is left:{ "error": "No healthy Gemini Notebook accounts available. Check GET /accounts", "code": 596 } -
Google is temporarily unavailable or is challenging our network. Retry in a few minutes. A
502means Google answered with an unexpected error.{ "error": "GOOGLE_BOT_CHECK: Google is challenging our network right now, please retry in a few minutes", "code": 503 }
Model
{ // TypeScript, all fields are optional
notebook: string // user:<userId>-<email>-notebook:<uuid>, URL-encode it when used in a path
email: string // the account the notebook lives on
title: string // '' when no title was given
error: string // error responses only
code: number // error responses only, the HTTP status
}
Examples
-
curl -X POST "https://api.useapi.net/v1/gemini-notebook/notebooks" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -d '{ "title": "Apollo 11" }' -
const token = "API token"; const apiUrl = "https://api.useapi.net/v1/gemini-notebook/notebooks"; const response = await fetch(apiUrl, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${token}`, }, body: JSON.stringify({ title: "Apollo 11" }) }); const result = await response.json(); console.log("response", {response, result}); -
import requests token = "API token" apiUrl = "https://api.useapi.net/v1/gemini-notebook/notebooks" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "title": "Apollo 11" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json())