Books — entry 008 of 22
Google Books
Google Books searches the metadata and, where licensed, previewable text of the tens of millions of scanned books, magazines, and public-domain works in Google's digitization project, returning volume details and ISBN/LCCN/OCLC lookups. A project API key is sufficient for search and volume data; the OAuth 2.0 this entry used to require only applies when reading or writing a signed-in user's own bookshelves. There's no separate pricing tier — usage is metered by a free per-project quota in the Google Cloud console rather than billed.
GreatAPIs Score
Auth quickstart
- Sign up with the provider to get an API key.
- Send it on every request as a query param
?key=<key>
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Endpoints
bookshelves3
GET/books/v1/users/{userId}/bookshelves
| Name | In | Required | Type |
|---|---|---|---|
userId | path | yes | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Bookshelves |
GET/books/v1/users/{userId}/bookshelves/{shelf}
| Name | In | Required | Type |
|---|---|---|---|
userId | path | yes | string |
shelf | path | yes | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Bookshelf |
GET/books/v1/users/{userId}/bookshelves/{shelf}/volumes
| Name | In | Required | Type |
|---|---|---|---|
userId | path | yes | string |
shelf | path | yes | string |
maxResults | query | no | integer |
showPreorders | query | no | boolean |
source | query | no | string |
startIndex | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
cloudloading3
POST/books/v1/cloudloading/addBook
| Name | In | Required | Type |
|---|---|---|---|
drive_document_id | query | no | string |
mime_type | query | no | string |
name | query | no | string |
upload_client_token | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BooksCloudloadingResource |
POST/books/v1/cloudloading/deleteBook
| Name | In | Required | Type |
|---|---|---|---|
volumeId | query | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
POST/books/v1/cloudloading/updateBook
application/json — BooksCloudloadingResource
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BooksCloudloadingResource |
dictionary1
GET/books/v1/dictionary/listOfflineMetadata
| Name | In | Required | Type |
|---|---|---|---|
cpksver | query | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Metadata |
familysharing3
GET/books/v1/familysharing/getFamilyInfo
| Name | In | Required | Type |
|---|---|---|---|
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | FamilyInfo |
POST/books/v1/familysharing/share
| Name | In | Required | Type |
|---|---|---|---|
docId | query | no | string |
source | query | no | string |
volumeId | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
POST/books/v1/familysharing/unshare
| Name | In | Required | Type |
|---|---|---|---|
docId | query | no | string |
source | query | no | string |
volumeId | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
layers6
GET/books/v1/volumes/{volumeId}/layers/{layerId}
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
layerId | path | yes | string |
contentVersion | query | yes | string |
endOffset | query | no | string |
endPosition | query | no | string |
locale | query | no | string |
maxResults | query | no | integer |
pageToken | query | no | string |
showDeleted | query | no | boolean |
source | query | no | string |
startOffset | query | no | string |
startPosition | query | no | string |
updatedMax | query | no | string |
updatedMin | query | no | string |
volumeAnnotationsVersion | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumeannotations |
GET/books/v1/volumes/{volumeId}/layers/{layerId}/annotations/{annotationId}
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
layerId | path | yes | string |
annotationId | path | yes | string |
locale | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumeannotation |
GET/books/v1/volumes/{volumeId}/layers/{layerId}/data
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
layerId | path | yes | string |
contentVersion | query | yes | string |
annotationDataId | query | no | array |
h | query | no | integer |
locale | query | no | string |
maxResults | query | no | integer |
pageToken | query | no | string |
scale | query | no | integer |
source | query | no | string |
updatedMax | query | no | string |
updatedMin | query | no | string |
w | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Annotationsdata |
GET/books/v1/volumes/{volumeId}/layers/{layerId}/data/{annotationDataId}
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
layerId | path | yes | string |
annotationDataId | path | yes | string |
contentVersion | query | yes | string |
allowWebDefinitions | query | no | boolean |
h | query | no | integer |
locale | query | no | string |
scale | query | no | integer |
source | query | no | string |
w | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | DictionaryAnnotationdata |
GET/books/v1/volumes/{volumeId}/layersummary
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
contentVersion | query | no | string |
maxResults | query | no | integer |
pageToken | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Layersummaries |
GET/books/v1/volumes/{volumeId}/layersummary/{summaryId}
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
summaryId | path | yes | string |
contentVersion | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Layersummary |
myconfig5
GET/books/v1/myconfig/getUserSettings
| Name | In | Required | Type |
|---|---|---|---|
country | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Usersettings |
POST/books/v1/myconfig/releaseDownloadAccess
| Name | In | Required | Type |
|---|---|---|---|
cpksver | query | yes | string |
volumeIds | query | yes | array |
locale | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | DownloadAccesses |
POST/books/v1/myconfig/requestAccess
| Name | In | Required | Type |
|---|---|---|---|
cpksver | query | yes | string |
nonce | query | yes | string |
source | query | yes | string |
volumeId | query | yes | string |
licenseTypes | query | no | string |
locale | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | RequestAccessData |
POST/books/v1/myconfig/syncVolumeLicenses
| Name | In | Required | Type |
|---|---|---|---|
cpksver | query | yes | string |
nonce | query | yes | string |
source | query | yes | string |
features | query | no | array |
includeNonComicsSeries | query | no | boolean |
locale | query | no | string |
showPreorders | query | no | boolean |
volumeIds | query | no | array |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
POST/books/v1/myconfig/updateUserSettings
application/json — Usersettings
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Usersettings |
mylibrary14
GET/books/v1/mylibrary/annotations
| Name | In | Required | Type |
|---|---|---|---|
contentVersion | query | no | string |
layerId | query | no | string |
layerIds | query | no | array |
maxResults | query | no | integer |
pageToken | query | no | string |
showDeleted | query | no | boolean |
source | query | no | string |
updatedMax | query | no | string |
updatedMin | query | no | string |
volumeId | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Annotations |
POST/books/v1/mylibrary/annotations
| Name | In | Required | Type |
|---|---|---|---|
annotationId | query | no | string |
country | query | no | string |
showOnlySummaryInResponse | query | no | boolean |
source | query | no | string |
application/json — Annotation
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Annotation |
POST/books/v1/mylibrary/annotations/summary
| Name | In | Required | Type |
|---|---|---|---|
layerIds | query | yes | array |
volumeId | query | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | AnnotationsSummary |
PUT/books/v1/mylibrary/annotations/{annotationId}
| Name | In | Required | Type |
|---|---|---|---|
annotationId | path | yes | string |
source | query | no | string |
application/json — Annotation
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Annotation |
DELETE/books/v1/mylibrary/annotations/{annotationId}
| Name | In | Required | Type |
|---|---|---|---|
annotationId | path | yes | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
GET/books/v1/mylibrary/bookshelves
| Name | In | Required | Type |
|---|---|---|---|
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Bookshelves |
GET/books/v1/mylibrary/bookshelves/{shelf}
| Name | In | Required | Type |
|---|---|---|---|
shelf | path | yes | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Bookshelf |
POST/books/v1/mylibrary/bookshelves/{shelf}/addVolume
| Name | In | Required | Type |
|---|---|---|---|
shelf | path | yes | string |
volumeId | query | yes | string |
reason | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
POST/books/v1/mylibrary/bookshelves/{shelf}/clearVolumes
| Name | In | Required | Type |
|---|---|---|---|
shelf | path | yes | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
POST/books/v1/mylibrary/bookshelves/{shelf}/moveVolume
| Name | In | Required | Type |
|---|---|---|---|
shelf | path | yes | string |
volumeId | query | yes | string |
volumePosition | query | yes | integer |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
POST/books/v1/mylibrary/bookshelves/{shelf}/removeVolume
| Name | In | Required | Type |
|---|---|---|---|
shelf | path | yes | string |
volumeId | query | yes | string |
reason | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
GET/books/v1/mylibrary/bookshelves/{shelf}/volumes
| Name | In | Required | Type |
|---|---|---|---|
shelf | path | yes | string |
country | query | no | string |
maxResults | query | no | integer |
projection | query | no | string |
q | query | no | string |
showPreorders | query | no | boolean |
source | query | no | string |
startIndex | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
GET/books/v1/mylibrary/readingpositions/{volumeId}
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
contentVersion | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | ReadingPosition |
POST/books/v1/mylibrary/readingpositions/{volumeId}/setPosition
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
position | query | yes | string |
timestamp | query | yes | string |
action | query | no | string |
contentVersion | query | no | string |
deviceCookie | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
notification1
GET/books/v1/notification/get
| Name | In | Required | Type |
|---|---|---|---|
notification_id | query | yes | string |
locale | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Notification |
onboarding2
GET/books/v1/onboarding/listCategories
| Name | In | Required | Type |
|---|---|---|---|
locale | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Category |
GET/books/v1/onboarding/listCategoryVolumes
| Name | In | Required | Type |
|---|---|---|---|
categoryId | query | no | array |
locale | query | no | string |
maxAllowedMaturityRating | query | no | string |
pageSize | query | no | integer |
pageToken | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volume2 |
personalizedstream1
GET/books/v1/personalizedstream/get
| Name | In | Required | Type |
|---|---|---|---|
locale | query | no | string |
maxAllowedMaturityRating | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Discoveryclusters |
promooffer3
POST/books/v1/promooffer/accept
| Name | In | Required | Type |
|---|---|---|---|
androidId | query | no | string |
device | query | no | string |
manufacturer | query | no | string |
model | query | no | string |
offerId | query | no | string |
product | query | no | string |
serial | query | no | string |
volumeId | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
POST/books/v1/promooffer/dismiss
| Name | In | Required | Type |
|---|---|---|---|
androidId | query | no | string |
device | query | no | string |
manufacturer | query | no | string |
model | query | no | string |
offerId | query | no | string |
product | query | no | string |
serial | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Empty |
GET/books/v1/promooffer/get
| Name | In | Required | Type |
|---|---|---|---|
androidId | query | no | string |
device | query | no | string |
manufacturer | query | no | string |
model | query | no | string |
product | query | no | string |
serial | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Offers |
series2
GET/books/v1/series/get
| Name | In | Required | Type |
|---|---|---|---|
series_id | query | yes | array |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Series |
GET/books/v1/series/membership/get
| Name | In | Required | Type |
|---|---|---|---|
series_id | query | yes | string |
page_size | query | no | integer |
page_token | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Seriesmembership |
volumes7
GET/books/v1/volumes
| Name | In | Required | Type |
|---|---|---|---|
q | query | yes | string |
download | query | no | string |
filter | query | no | string |
langRestrict | query | no | string |
libraryRestrict | query | no | string |
maxAllowedMaturityRating | query | no | string |
maxResults | query | no | integer |
orderBy | query | no | string |
partner | query | no | string |
printType | query | no | string |
projection | query | no | string |
showPreorders | query | no | boolean |
source | query | no | string |
startIndex | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
GET/books/v1/volumes/mybooks
| Name | In | Required | Type |
|---|---|---|---|
acquireMethod | query | no | array |
country | query | no | string |
locale | query | no | string |
maxResults | query | no | integer |
processingState | query | no | array |
source | query | no | string |
startIndex | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
GET/books/v1/volumes/recommended
| Name | In | Required | Type |
|---|---|---|---|
locale | query | no | string |
maxAllowedMaturityRating | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
POST/books/v1/volumes/recommended/rate
| Name | In | Required | Type |
|---|---|---|---|
rating | query | yes | string |
volumeId | query | yes | string |
locale | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | BooksVolumesRecommendedRateResponse |
GET/books/v1/volumes/useruploaded
| Name | In | Required | Type |
|---|---|---|---|
locale | query | no | string |
maxResults | query | no | integer |
processingState | query | no | array |
source | query | no | string |
startIndex | query | no | integer |
volumeId | query | no | array |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
GET/books/v1/volumes/{volumeId}
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
country | query | no | string |
includeNonComicsSeries | query | no | boolean |
partner | query | no | string |
projection | query | no | string |
source | query | no | string |
user_library_consistent_read | query | no | boolean |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volume |
GET/books/v1/volumes/{volumeId}/associated
| Name | In | Required | Type |
|---|---|---|---|
volumeId | path | yes | string |
association | query | no | string |
locale | query | no | string |
maxAllowedMaturityRating | query | no | string |
source | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Volumes |
Try it
Developer reference
https://books.googleapis.comGoogle doesn't publish a single fixed public ceiling on the Books API's own docs page; the per-project default shown on the Cloud Console's Quotas page is a 1,000 requests/day courtesy limit at up to 1 request/second per user, raisable through the console's standard 'request more quota' flow used across Google Cloud APIs -- confirmed against Google's own quota-capping documentation (docs.cloud.google.com/apis/docs/capping-api-usage) plus multiple developers' live Cloud Console quota screenshots showing this exact Books API default, and consistent with the getting-started guide's note that usage is metered by project quota rather than billed per call.
- GET/books/v1/volumes
- GET/books/v1/volumes/{volumeId}
- GET/books/v1/users/{userId}/bookshelves
- GET/books/v1/users/{userId}/bookshelves/{shelf}
- GET/books/v1/users/{userId}/bookshelves/{shelf}/volumes