Create a notebook

September 29, 2026

Table of contents

  1. Request Headers
  2. Request Body
  3. Responses
  4. Model
  5. Examples
  6. Try It

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
Request Body
{
  "email": "[email protected]",
  "title": "Apollo 11"
}
  • email is optional, the account to create the notebook on, see GET /accounts. When omitted, the least busy healthy account is used.
  • title is optional, the notebook title. Up to 200 characters. When omitted, the notebook is created untitled.
Responses
  • 201 Created

    {
      "notebook": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55",
      "email": "[email protected]",
      "title": "Apollo 11"
    }
    
  • 400 Bad Request

    {
      "error": "Parameter title length exceeds 200 characters",
      "code": 400
    }
    
  • 401 Unauthorized

    Invalid API token.

    {
      "error": "useapi.net ⁝ Unauthorized",
      "code": 401
    }
    
  • 404 Not Found

    The email account 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, 596 also means no healthy account is left:

    {
      "error": "No healthy Gemini Notebook accounts available. Check GET /accounts",
      "code": 596
    }
    
  • 503 Service Unavailable

    Google is temporarily unavailable or is challenging our network. Retry in a few minutes. A 502 means 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())
    
Try It