Books — entry 012 of 22

Open Library

Verified Jul 2026

Open Library, an Internet Archive project, exposes its book catalog for search, work/edition/author lookups by identifier, subjects, and public reading lists, returned as JSON, YAML, or RDF/XML, with a separate Covers API serving cover art by ISBN or Open Library ID. No API key is required, though sending a descriptive User-Agent and contact email triples the default 1-request-per-second anonymous rate limit. Bulk access is deliberately kept off the live API — the project publishes free monthly data dumps for that instead.

Open Library exposes its book catalog as read-only JSON by suffixing almost any page path with `.json` — search results, individual works, editions, and author records all follow this same pattern, with a separate host for cover images.

booksopen-datalibrary-catalogcoversnonprofit
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSON, RDF/XML, YAMLResponses can be requested as JSON or RDF/XML or YAML.

GreatAPIs Score

Score80out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats15/15Supports 3 response formats
Freshness20/20Verified within 6 months

Embed this badge

Scored 80 on greatapis.com
<a href="https://greatapis.com/api/open-library/"><img src="https://greatapis.com/badge/open-library.svg" alt="Scored 80 on greatapis.com"></a>

Auth quickstart

  1. No API key required — requests are public and keyless. Send a descriptive `User-Agent` header with your app name and a contact email; identified requests get a 3x higher rate limit than anonymous ones (3 requests/second vs. 1/second, per the developer docs).
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Search for a book by title

GEThttps://openlibrary.org/search.json?q=the+lord+of+the+rings&fields=key,title,author_name,first_publish_year&limit=1

User-Agent: MyLibraryApp (contact@example.org)

200 application/json

{
  "numFound": 914,
  "start": 0,
  "numFoundExact": true,
  "num_found": 914,
  "documentation_url": "https://openlibrary.org/dev/docs/api/search",
  "q": "the lord of the rings",
  "offset": null,
  "docs": [
    {
      "author_name": [
        "J.R.R. Tolkien"
      ],
      "first_publish_year": 1954,
      "key": "/works/OL27448W",
      "title": "The Lord of the Rings"
    }
  ]
}

Developer reference

Gotchas & limits

  • Always pass `fields=` on search requests — the default `search.json` document includes dozens of extra fields per result and is several times larger than a trimmed one; without it a 1-result query already runs ~1.5KB vs. ~300 bytes trimmed.
  • Identifier lookups like `/isbn/{isbn}.json` respond with a 302 redirect to the canonical record (e.g. `/isbn/9780140328721.json` → `/books/OL7353617M.json`) — follow redirects rather than treating a 3xx as an error.
  • A work record can itself be a redirect stub: `/works/OL45883W.json` returns `{"type":{"key":"/type/redirect"},"location":"/works/OL45804W", ...}` instead of book data — check `type.key` for `/type/redirect` and re-fetch `location` before reading fields.
  • Cover images live on a separate host, `covers.openlibrary.org` (e.g. `/b/isbn/9780140328721-M.jpg`), not `openlibrary.org`. Per the Covers API docs, lookups by any identifier other than the numeric Cover ID or OLID are rate-limited to 100 requests/IP per 5 minutes, with a 403 response once that's exceeded.