List Play Books

October 15, 2026

Table of contents

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

List the ebooks in the account’s Google Play Books library. An ebook the account owns can be added to a notebook as a source with the books parameter of POST /sources. Gemini Notebook then answers questions and builds Studio artifacts from the whole book, the same way it does from a PDF or a web page.

Only books whose publisher allows it can be added. Those have addable: true. The others are listed with addable: false and a reason, and the Gemini Notebook web app shows them greyed out. On a book’s Google Play page, an eligible book shows Gemini Notebook as available under Tools. Books you uploaded to Play Books yourself are not listed. Add such a file with POST /sources/upload instead.

The book must be bought (or claimed, if it is free) on the Google account itself.

https://api.useapi.net/v1/gemini-notebook/sources/books?email=email

Request Headers
Authorization: Bearer {API token}
Query Parameters
  • email is optional when the API token has a single account, and required otherwise.
Responses
  • 200 OK

    An empty library returns "books": [].

    {
      "email": "[email protected]",
      "books": [
        {
          "book": "-OQ2q5JqOdEC",
          "title": "What Is Data Science?",
          "authors": [
            "Mike Loukides"
          ],
          "cover": "https://play.google.com/books/content/images/frontcover/-OQ2q5JqOdEC",
          "addable": true
        },
        {
          "book": "khsZEAAAQBAJ",
          "title": "Howards End",
          "authors": [
            "E. M. Forster"
          ],
          "cover": "https://play.google.com/books/publisher/content/images/frontcover/khsZEAAAQBAJ",
          "addable": true
        },
        {
          "book": "Hfn4AAAAQBAJ",
          "title": "The Raven (Illustrated)",
          "authors": [
            "Edgar Allan Poe"
          ],
          "cover": "https://play.google.com/books/publisher/content/images/frontcover/Hfn4AAAAQBAJ",
          "addable": false,
          "reason": "the publisher opted out"
        }
      ]
    }
    
  • 400 Bad Request

    {
      "error": "email is required: this API token has several accounts",
      "code": 400
    }
    
  • 401 Unauthorized

    Invalid API token.

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

    The email is not one of your configured accounts.

    {
      "error": "Account [email protected] is not configured",
      "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
    }
    
  • 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
  email: string
  books: {
    book: string               // the Google Play Books id, pass it in POST /sources books
    title: string
    authors: string[]
    cover?: string             // cover image URL
    addable: boolean           // false: Google does not allow this book as a source
    reason?: string            // why not, when addable is false, e.g. "the publisher opted out"
  }[]
}

Errors return:

{
  error: string
  code: number                 // the HTTP status
}
Examples
  • curl -G "https://api.useapi.net/v1/gemini-notebook/sources/books" \
       -H "Authorization: Bearer …" \
       --data-urlencode "[email protected]"
    
  • const token = "API token";
    const email = "[email protected]";
    const apiUrl = `https://api.useapi.net/v1/gemini-notebook/sources/books?email=${encodeURIComponent(email)}`;
    const response = await fetch(apiUrl, {
      headers: {
        "Authorization": `Bearer ${token}`,
      },
    });
    const result = await response.json();
    console.log("response", {response, result});
    
  • import requests
    token = "API token"
    apiUrl = "https://api.useapi.net/v1/gemini-notebook/sources/books"
    headers = {
        "Authorization" : f"Bearer {token}"
    }
    response = requests.get(apiUrl, headers=headers, params={"email": "[email protected]"})
    print(response, response.json())
    
Try It