Open Library API: Get book details
Gets 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.
Unofficial. Not affiliated with or endorsed by Open Library.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- ISBN optional
isbn An ISBN to identify the book instead of its title, for example 9780140328721.
9780140328721
Default
.- Title, required
title The title of the book, for example Pride and Prejudice.
Fantastic Mr. Fox
- Author optional
author The author to distinguish books with the same title, for example Jane Austen.
(default)
Input as JSON
{ "isbn": "9780140328721", "title": "Fantastic Mr. Fox"}Output
{ "title": "Fantastic Mr Fox", "authors": [ "Roald Dahl" ], "subjects": [ "Animals", "Hunger", "Open Library Staff Picks" ], "subtitle": null, "work_key": "/works/OL45804W" , "description": "The main character of Fantastic Mr. Fox is an extremely clever anthropomorphized fox named Mr. Fox. He lives with his wife and four little foxes. In order to feed his family, he steals food from the cruel, brutish farmers named Boggis, Bunce, and Bean every night.\r\n\r\nFinally tired of being constantl…", "ratings_count": 121, "average_rating": 3.9504132, "cover_image_link": "https://covers.openlibrary.org/b/id/6498519-L.jpg" , "open_library_link": "https://openlibrary.org/works/OL45804W" , "number_of_editions": 161, "first_published_year": 1970, "reading_availability": "borrow", "typical_number_of_pages": 96}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"openlibrary.org/get_book","input":{"isbn":"9780140328721","title":"Fantastic Mr. Fox"}}' # 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": "openlibrary.org/get_book" , "input": { "isbn": "9780140328721", "title": "Fantastic Mr. Fox" }})# 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": "openlibrary.org/get_book" , "input": { "isbn": "9780140328721", "title": "Fantastic Mr. Fox" } }), 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 openlibrary.org/get_book# with {"isbn":"9780140328721","title":"Fantastic Mr. Fox"}"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": [ "title" ], "properties": { "isbn": { "type": "string", "default": "", "description": "An ISBN to identify the book instead of its title, for example 9780140328721." }, "title": { "type": "string", "description": "The title of the book, for example Pride and Prejudice." }, "author": { "type": "string", "default": "", "description": "The author to distinguish books with the same title, for example Jane Austen." } }}Output schema
{ "type": "object", "required": [ "title", "subtitle", "authors", "first_published_year", "description", "subjects", "typical_number_of_pages", "number_of_editions", "average_rating", "ratings_count", "reading_availability", "cover_image_link", "open_library_link", "work_key" ], "properties": { "title": { "type": [ "string", "null" ], "description": "Book title." }, "authors": { "type": "array", "items": { "type": "string" }, "description": "Authors of the book." }, "subjects": { "type": "array", "items": { "type": "string" }, "description": "Up to 20 catalog subjects." }, "subtitle": { "type": [ "string", "null" ], "description": "Book subtitle, if listed." }, "work_key": { "type": "string", "description": "Open Library work key." }, "description": { "type": [ "string", "null" ], "description": "Plain-text book description." }, "ratings_count": { "type": [ "integer", "null" ], "description": "Number of reader ratings, when available." }, "average_rating": { "type": [ "number", "null" ], "description": "Average reader rating from 1 to 5, when available." }, "cover_image_link": { "type": [ "string", "null" ], "description": "Link to the cover image." }, "open_library_link": { "type": "string", "description": "Link to the book on Open Library." }, "number_of_editions": { "type": [ "integer", "null" ], "description": "Number of known editions." }, "first_published_year": { "type": [ "integer", "null" ], "description": "Year the book was first published." }, "reading_availability": { "enum": [ "read free online", "borrow", "not available" ], "type": "string", "description": "How the book can be read online." }, "typical_number_of_pages": { "type": [ "integer", "null" ], "description": "Typical page count among editions." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
openlibrary.org/get_book- Returns
- title, subtitle, authors, first published year, description, subjects, pages, editions, rating, reading availability, 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 openlibrary.org/get_book with the inputs above.
Ask your agent
- Look up Pride and Prejudice by Jane Austen on Open Library — I need the first publication year, page count, and a short description.
- What subjects and reader rating does 'The Left Hand of Darkness' by Ursula K. Le Guin have, and is it available to borrow or read online?
- Find catalog info for ISBN 9780140328721: title, author, cover image, and how many editions exist.
- Get me details on 'Thinking, Fast and Slow' by Daniel Kahneman from openlibrary.org, including subtitle and link to the record.
- I'm trying to identify the right 'Dune' — the Frank Herbert one. Pull up its description, subjects, and whether any edition can be read for free.
See more
All Open Library methodsFinds Open Library books by search words, optionally narrowed by author and subject, sorted by relevance or publication age. Returns work-level results; free_online means at least one edition is marked public or borrowable, not that a loan is available now.
openlibrary.org/search_booksFinds an Open Library author by name, link or key and lists their works with first publication year, edition count, cover and an author profile.
openlibrary.org/list_author_booksGets 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.
goodreads.com/get_bookFinds ebook and audiobook editions a public library owns on OverDrive, with copies, holds and estimated wait when unavailable.
overdrive.com/check_library_availabilityLooks 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_audiobookLooks 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_bookGets 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_textSearches 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_books