Search books
Books matching a title, author, ISBN or keywords, in Goodreads’ relevance order, each with its authors, series, cover, rating, rating and review counts and first publication year. Up to 200 in one request, continuing with a cursor. 1 credit per 50 books.
/search-books Books https://api.fetchlayer.dev/goodreads/search-books Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
query string required A title, author, ISBN or keywords.
limit integer optional How many books to return, 1–200; a larger value is served at 200. Books come 50 to a page, and each page is 1 credit. (default: 20)
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
search-books
Search books
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.
query string The query served.
bookCount number Books in this response.
books object[] The matching books, in relevance order.
books[].id number The book id, which every route that takes a book accepts.
books[].workId number | null The work id shared by all of the book’s editions; quotes accepts it as workId.
books[].title string The title, with the series in brackets when Goodreads shows it that way.
books[].url string Link to the book on goodreads.com.
books[].coverUrl string | null Cover image.
books[].authors object[] Authors, each with id, name, url, and where Goodreads gives them, role (Author, Illustrator, Translator…), isGoodreadsAuthor and imageUrl.
books[].rating object { average, count, reviewCount }: the average star rating, how many ratings and how many reviews. reviewCount is null where the listing does not show it.
books[].firstPublishedYear number | null Year of first publication.
books[].series object[] { id, title, url, position } for the series it belongs to.
books[].pages number | null Page count.
totalCount number | null How many books 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 books remain.
pagesScraped number Pages of results this response covers, which is what it costs: one credit per page.
Request
curl -X POST "https://api.fetchlayer.dev/goodreads/search-books" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"query":"the hobbit","limit":10}'Response
{
"transport": "goodreads",
"notes": [],
"query": "the hobbit",
"totalCount": 1336,
"bookCount": 10,
"books": [
{
"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",
"coverUrl": "https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1546071216i/5907.jpg",
"authors": [
{
"id": 656983,
"name": "J.R.R. Tolkien",
"url": "https://www.goodreads.com/author/show/656983.J_R_R_Tolkien",
"role": "Author",
"isGoodreadsAuthor": false,
"imageUrl": null
}
],
"rating": {
"average": 4.3,
"count": 4663469,
"reviewCount": 96247
},
"firstPublishedYear": 1937,
"series": [
{
"id": 66175,
"title": "Middle Earth",
"url": "https://www.goodreads.com/series/66175-middle-earth",
"position": "1"
}
],
"pages": 366
}
],
"nextCursor": "1.10",
"hasNextPage": true,
"pagesScraped": 1
}