Goodreads API: Get book
Gets one Goodreads book's details, reader ratings and edition information. The book can be a title, an ISBN or a book link; a title uses the best search match.
Unofficial. Not affiliated with or endorsed by Goodreads.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Book, required
book Book title, ISBN, or Goodreads book link, for example Atomic Habits.
9780735211292
- Author optional
author Author to distinguish books with similar titles, for example James Clear.
Default
.
Input as JSON
{ "book": "9780735211292", "author": ""}Output
{ "title": "Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones", "awards": [ "Goodreads Choice Award — Nonfiction (Nominee)" ], "format": "Kindle Edition", "genres": [ "Self Help", "Nonfiction", "Psychology" ], "authors": [ "James Clear" ], "isbn_13": "9780735211292", "description": "The instant New York Times bestseller. Over 1 million copies sold! Tiny Changes, Remarkable Results No matter your goals, Atomic Habits offers a proven framework for improving--every day. James Clear, one of the world's leading experts on habit formation, reveals practical strategies that will teach…", "series_name": null, "series_number": null, "average_rating": 4.3, "goodreads_link": "https://www.goodreads.com/book/show/59910150-atomic-habits" , "number_of_pages": 306, "cover_image_link": "https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1736660900i/59910150.jpg" , "rating_breakdown": { "1_stars": 15269, "2_stars": 37030, "3_stars": 177944, "4_stars": 476760, "5_stars": 734396 }, "goodreads_book_id": "59910150", "number_of_ratings": 1441399, "number_of_reviews": 84378, "first_published_date": "2018-10-18"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"goodreads.com/get_book","input":{"book":"9780735211292","author":""}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "goodreads.com/get_book" , "input": { "book": "9780735211292", "author": "" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "goodreads.com/get_book" , "input": { "book": "9780735211292", "author": "" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run goodreads.com/get_book# with {"book":"9780735211292","author":""}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "book" ], "properties": { "book": { "type": "string", "minLength": 1, "description": "Book title, ISBN, or Goodreads book link, for example Atomic Habits." }, "author": { "type": "string", "default": "", "description": "Author to distinguish books with similar titles, for example James Clear." } }}Output schema
{ "type": "object", "required": [ "title", "authors", "rating_breakdown", "genres", "awards", "goodreads_link", "goodreads_book_id" ], "properties": { "title": { "type": "string" }, "awards": { "type": "array", "items": { "type": "string" } }, "format": { "type": [ "string", "null" ] }, "genres": { "type": "array", "items": { "type": "string" } }, "authors": { "type": "array", "items": { "type": "string" } }, "isbn_13": { "type": [ "string", "null" ] }, "description": { "type": [ "string", "null" ] }, "series_name": { "type": [ "string", "null" ] }, "series_number": { "type": [ "string", "null" ] }, "average_rating": { "type": [ "number", "null" ] }, "goodreads_link": { "type": "string" }, "number_of_pages": { "type": [ "integer", "null" ] }, "cover_image_link": { "type": [ "string", "null" ] }, "rating_breakdown": { "type": "object", "properties": { "1_stars": { "type": [ "integer", "null" ] }, "2_stars": { "type": [ "integer", "null" ] }, "3_stars": { "type": [ "integer", "null" ] }, "4_stars": { "type": [ "integer", "null" ] }, "5_stars": { "type": [ "integer", "null" ] } } }, "goodreads_book_id": { "type": "string" }, "number_of_ratings": { "type": [ "integer", "null" ] }, "number_of_reviews": { "type": [ "integer", "null" ] }, "first_published_date": { "type": [ "string", "null" ] } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
goodreads.com/get_book- Returns
- title, authors, ratings, rating breakdown, description, genres, pages, format, first published date, series, ISBN-13, awards, cover, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method goodreads.com/get_book with the inputs above.
Ask your agent
- Can you pull up the details for Atomic Habits by James Clear, including its rating breakdown and page count?
- I need the ISBN-13, format, and first publication date for The Name of the Wind by Patrick Rothfuss.
- What are the reader ratings and genres for the book with ISBN 9780143127741 on Goodreads?
- Find me the series information and description for Dune by Frank Herbert.
- Look up The Hobbit, the edition with the cover image and awards, and tell me how many pages it has.
See more
Looks up a Google Books book by title or ISBN. Returns its details, reader ratings and the Google Play ebook offer in a chosen country.
books.google.com/get_bookLooks up an audiobook in an Audible store by title (optionally narrowed by author) or by Audible book link, and returns its details, narrators, length, rating, visitor price, series, publisher summary and whether that store's Plus Catalog includes it.
audible.com/get_audiobookGets a book's catalog details from Open Library by its title, with an optional author or ISBN to identify the right book. Reading availability reflects listed editions; details may be missing when the catalog has none.
openlibrary.org/get_bookSearches Google Books by words, author, subject or ISBN, with language, free-ebook and newest-first options. Ratings counts are not shown by the public book feed; newest sorts the available matches by publication date.
books.google.com/search_booksFinds a Discogs release by title, artist or release link and returns its edition details, tracks, community counts, current price and sold price statistics.
discogs.com/get_releaseGets a movie or TV show's IMDb details from its name, IMDb title link or title ID; a year picks between titles with the same name. Unavailable details are null.
imdb.com/get_movie_or_showGets the plain text of a public-domain Project Gutenberg book by title, optionally matching its author and language. Chooses the most downloaded matching edition with a plain-text file, removes the Gutenberg header and license, and can cut the text after a chosen number of words.
gutenberg.org/get_book_textFinds free public-domain Project Gutenberg books by title, author or topic, with authors, languages, subjects, recent downloads, and reading and download links. Public-domain status is based on the United States.
gutenberg.org/search_free_books