Discover/Gutenberg API
live

Gutenberg APIgutenberg.org

Search the Project Gutenberg catalog of public domain eBooks by author, title, or subject. Returns title, authors, language, audio availability, and eText number.

This API takes change requests — .
Endpoint health
verified 4h ago
search_books
1/1 passing latest checkself-healing
Endpoints
1
Updated
4h ago

What is the Gutenberg API?

The Project Gutenberg API exposes one endpoint, search_books, that queries the full Gutenberg catalog of over 70,000 public domain eBooks. A single call returns up to 100 results per page, each including the eText number, title, author list with roles, language, and whether an audio version exists. Searches accept partial matches on author, title, and subject, and can be combined.

This call costs1 credit / call— charged only on success
Try it
Page number for pagination. Each page returns up to 100 results.
Book title to search for (partial match). At least one of author, title, or subject must be provided.
Author name to search for (partial match). At least one of author, title, or subject must be provided.
Subject to search for (partial match). At least one of author, title, or subject must be provided.
api.parse.bot/scraper/71cc784f-ad40-4cb7-b84f-af798e166a55/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/71cc784f-ad40-4cb7-b84f-af798e166a55/search_books?author=Shakespeare' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace gutenberg-org-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: Project Gutenberg SDK — search the free eBook catalog."""
from parse_apis.gutenberg_org_api import Gutenberg, InputFormatInvalid

client = Gutenberg()

# Search by author, cap total items to 5.
for book in client.books.search(author="Shakespeare", limit=5):
    print(book.title, "|", ", ".join(book.authors), "|", book.language)

# Drill-down: find the first tragedy-related book by title.
book = client.books.search(title="hamlet", subject="tragedy", limit=1).first()
if book is not None:
    print(f"Found: {book.title} (eText #{book.etext_no}, audio={book.has_audio})")
    print(f"  URL: {book.url}")

# Demonstrate error handling for invalid input.
try:
    client.books.search(title="x", limit=1).first()
except InputFormatInvalid as e:
    print(f"Invalid input: {e.message}")

print("exercised: books.search")
All endpoints · 1 totalmissing one? ·

Search books in the Project Gutenberg catalog by author name, title, and/or subject. At least one search term must be provided. Returns paginated results with up to 100 books per page. Results include the eText number, title, authors with roles, language, audio availability, and a link to the book page.

Input
ParamTypeDescription
pageintegerPage number for pagination. Each page returns up to 100 results.
titlestringBook title to search for (partial match). At least one of author, title, or subject must be provided.
authorstringAuthor name to search for (partial match). At least one of author, title, or subject must be provided.
subjectstringSubject to search for (partial match). At least one of author, title, or subject must be provided.
Response
{
  "type": "object",
  "fields": {
    "page": "Current page number.",
    "books": "Array of book results, each containing etext_no, title, authors, language, has_audio, and url.",
    "total": "Total number of matching books across all pages."
  },
  "sample": {
    "data": {
      "page": 1,
      "books": [
        {
          "url": "https://www.gutenberg.org/ebooks/56851",
          "title": "Shakspeare's Mental Photographs",
          "authors": [
            "Anonymous [Compiler]",
            "Shakespeare, William, 1564-1616"
          ],
          "etext_no": "56851",
          "language": "English",
          "has_audio": false
        }
      ],
      "total": 350
    },
    "status": "success"
  }
}

About the Gutenberg API

What the API Returns

The search_books endpoint searches the Project Gutenberg catalog and returns a paginated result set. Each page holds up to 100 books, and the total field tells you how many matching records exist across all pages. Individual book objects include etext_no (the canonical Gutenberg identifier), title, language, a boolean has_audio flag, and a url pointing to the book's Gutenberg page. The authors field is an array, so multi-author works and entries with editorial roles are represented correctly.

Search Parameters

At least one of author, title, or subject must be supplied — all three accept partial string matches, so searching author=dickens returns works by Charles Dickens without requiring an exact full name. Parameters can be combined: passing both author=tolstoy and subject=war narrows results to Tolstoy's war-related titles. The page integer steps through paginated results when total exceeds 100.

Coverage and Scope

The catalog covers public domain works — predominantly classic literature, historical texts, and reference works whose copyright has expired. Language coverage is multilingual; the language field on each result identifies the primary language of that edition. The has_audio field indicates when a LibriVox or similar audio recording is associated with the Gutenberg record, which is useful for filtering to audiobook-compatible titles without a separate lookup.

Reliability & maintenanceVerified

The Gutenberg API is a managed, monitored endpoint for gutenberg.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gutenberg.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official gutenberg.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
4h ago
Latest check
1/1 endpoint passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a reading list app that lets users browse public domain books by subject and language.
  • Populate an audiobook index by filtering results where has_audio is true.
  • Create an author bibliography page by querying search_books with a specific author name.
  • Feed a recommendation engine with metadata (etext_no, title, subject) from the Gutenberg catalog.
  • Check multilingual availability of a classic text by combining title and language filters.
  • Generate citation data for academic tools using eText numbers and author roles from the authors array.
  • Build a subject-based discovery tool that groups public domain titles by topic across multiple pages.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Project Gutenberg have an official developer API?+
Project Gutenberg does not publish an official REST API for catalog search. It offers bulk catalog data via its feeds and mirror system (documented at gutenberg.org/ebooks/offline_catalogs.html), but that requires downloading and parsing large files rather than querying individual records.
What does the `authors` field contain, and how does it handle edited or translated works?+
The authors field is an array of objects, so a translated work can list both the original author and the translator, each with their respective roles. This means you can distinguish primary authors from editors and translators without additional processing.
Does the API return the full text or download links for each book?+
Not currently. The API returns catalog metadata — title, authors, language, eText number, audio flag, and a Gutenberg page URL — but not direct download links to plain-text, EPUB, or HTML files. You can fork this API on Parse and revise it to add an endpoint that retrieves download format links for a given etext_no.
Can I filter results by language directly in the search query?+
Language is not a standalone filter parameter. The author, title, and subject inputs drive search, and the language field appears in each result for post-retrieval filtering. You can fork this API on Parse and revise it to add a language filter parameter to narrow results server-side.
How fresh is the catalog data, and does it include recently added titles?+
Project Gutenberg adds new public domain titles on an ongoing basis, particularly around each calendar year when copyright expirations occur. The API reflects the current state of the Gutenberg catalog, but there is no timestamp or 'recently added' sort order exposed — results are ranked by relevance to the search terms provided.
Page content last updated . Spec covers 1 endpoint from gutenberg.org.
Related APIs in EducationSee all →
standardebooks.org API
Access Standard Ebooks' curated collection of free public domain ebooks. Search and filter by subject, retrieve full book details, and get direct download links in multiple formats including EPUB, AZW3, and KEPUB.
biblio.com API
Access data from biblio.com.
abebooks.com API
Search for books by title or ISBN, view detailed listing information, and discover available sellers offering new and used copies. Find the best deals by comparing prices across multiple sellers and browsing their inventory.
kobo.com API
Search and browse millions of eBooks and audiobooks from Kobo, discover bestsellers and daily deals across different categories, and get detailed information about specific books and authors. Find free eBooks, explore category collections, and use autocomplete to quickly locate titles that interest you.
booksrun.com API
Search millions of books and get instant buyback quotes on BooksRun. Browse bestsellers and categories, view detailed book information, and check condition guidelines to understand buyback prices and acceptance criteria.
barnesandnoble.com API
Search for books and discover detailed information including metadata, pricing, and customer reviews from Barnes & Noble's catalog. Browse bestsellers by category and access comprehensive book details to find your next read or compare prices and ratings.
bookshop.org API
Search for books by keyword or category, view detailed information like metadata and pricing, discover curated reading lists, and find independent bookstores near you on Bookshop.org. Filter results by format and browse new releases to discover your next read.
librarything.com API
Search millions of books and retrieve detailed metadata, reviews, and author information from LibraryThing's vast catalog. Access member libraries, trending titles, author works, and tag-based book collections to explore one of the web's largest book cataloging communities.