List Play Books
October 15, 2026
Table of contents
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=
Request Headers
Authorization: Bearer {API token}
API tokenis required, see Setup useapi.net for details.
Query Parameters
emailis optional when the API token has a single account, and required otherwise.
Responses
-
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" } ] } -
{ "error": "email is required: this API token has several accounts", "code": 400 } -
Invalid API token.
{ "error": "useapi.net ⁝ Unauthorized", "code": 401 } -
The
emailis 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 } -
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
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())