Read a book’s reviews
Reader reviews of a book in Goodreads’ popular order, or newest or oldest first, filtered by stars, language or words in the text. Each review has its rating, full text, dates, likes, comment count, the reader’s shelf and tags, and the reviewer. Up to 300 in one request, continuing with a cursor. 1 credit per 30 reviews returned.
/book-reviews Reviews https://api.fetchlayer.dev/goodreads/book-reviews Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
book integer | string required The book: a Goodreads book id (5907), a book URL (https://www.goodreads.com/book/show/5907), or an ISBN-10/ISBN-13.
sort string optional popular (Goodreads’ own ranking), newest or oldest. (default: popular)
rating integer optional Only reviews with this star rating (1–5).
language string optional Only reviews in this language (a code like en, es, de, zh-TW). book-detail lists the languages a book has reviews in.
search string optional Only reviews whose text contains these words (up to 100 characters).
scope string optional Reviews of every edition (all_editions) or of this edition only (this_edition). (default: all_editions)
limit integer optional How many reviews to return, 1–300; a larger value is served at 300. Billed at 1 credit per 30 reviews returned, so 30 is 1 credit and 100 is 4. (default: 30)
cursor string optional The nextCursor from a previous response, passed back with the same other parameters, to continue where it stopped.
format string optional json or markdown, lowercase; any other value is a 400. Over MCP, markdown returns the result rendered as text; the REST API accepts it and returns JSON. (default: json)
timeoutMs number optional Per-request time limit in milliseconds (max 600000).
Response Fields
book-reviews
Read a book’s reviews
transport string The data source: always the platform id, "goodreads".
notes string[] Caveats about this response you can act on, such as a series listing fewer works than its total. Empty when there are none.
book object { id, workId, title, url } of the book.
scope string The scope served.
sort string The order served.
filters object { rating, language, search } as applied; null for a filter not used.
reviewCount number Reviews in this response, which sets the cost: 1 credit per 30.
reviews object[] The reviews, in the order requested.
reviews[].id string The review id; pass it to review-comments.
reviews[].url string | null Link to the review on goodreads.com.
reviews[].rating number | null Stars given, 1–5; null for a review without a rating.
reviews[].text string The review as plain text; textHtml keeps its formatting.
reviews[].createdAt string | null When it was written (ISO 8601); updatedAt is the last edit.
reviews[].hasSpoilers boolean Whether the reader marked it as containing spoilers.
reviews[].likes number | null Likes on the review.
reviews[].comments number | null How many comments it has; review-comments reads them.
reviews[].shelf string | null The reader’s shelf for the book, e.g. read or currently-reading.
reviews[].tags string[] The reader’s own shelves and tags for the book.
reviews[].preReleaseSource string | null Where the reader got an advance copy, when the review says so.
reviews[].reviewer object { id, name, url, imageUrl, isAuthor, reviewCount, followers } for the reader.
totalCount number | null How many reviews Goodreads has for this request in all, when it says.
nextCursor string | null Pass back as cursor, with the same other parameters, to continue. null when there is nothing further.
hasNextPage boolean Whether more reviews remain.
pagesScraped number Pages of results this response covers. Reviews are billed on reviewCount instead.
Request
curl -X POST "https://api.fetchlayer.dev/goodreads/book-reviews" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"book":5907,"sort":"popular","limit":5}'Response
{
"transport": "goodreads",
"notes": [],
"book": {
"id": 5907,
"workId": 1540236,
"title": "The Hobbit, or There and Back Again",
"url": "https://www.goodreads.com/book/show/5907.The_Hobbit_or_There_and_Back_Again"
},
"scope": "all_editions",
"sort": "popular",
"filters": {
"rating": null,
"language": null,
"search": null
},
"totalCount": 95956,
"reviewCount": 5,
"reviews": [
{
"id": "kca://review:goodreads/amzn1.gr.review:goodreads.v1.K57x5TdipsgcUAYo53Udhg",
"url": "https://www.goodreads.com/review/show/36953286",
"rating": 5,
"text": "In a hole in the ground there lived a hobbit.\n\nBooks exist in time and place and our experience of them is affected by the specific time and place in which we encounter them. Sometimes an uplifting or inspiring book can…",
"textHtml": "<blockquote>\n <b>In a hole in the ground there lived a hobbit.</b>\n</blockquote>Books exist in time and place and our experience of them is affected by the specific time and place in which we encounter them. Sometimes a…",
"createdAt": "2008-11-05T15:18:37.000Z",
"updatedAt": "2026-10-23T05:36:45.147Z",
"hasSpoilers": false,
"likes": 927,
"comments": 155,
"shelf": "read",
"tags": [
"all-time-favorites-fiction"
],
"preReleaseSource": null,
"reviewer": {
"id": 1526851,
"name": "Will Byrnes",
"url": "https://www.goodreads.com/user/show/1526851-will-byrnes",
"imageUrl": "https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/users/1291462190i/1526851._UX200_CR0,50,200,200_.jpg",
"isAuthor": false,
"reviewCount": 1373,
"followers": 121527
}
}
],
"nextCursor": "NDc0MDIsMTI5MTU4NTUwNzAwMA",
"hasNextPage": true,
"pagesScraped": 1
}