Standard Ebooks APIstandardebooks.org ↗
Access Standard Ebooks' catalog via API. Search by title/author, filter by subject, get download links for EPUB, AZW3, and KEPUB formats across 4 endpoints.
What is the Standard Ebooks API?
The Standard Ebooks API exposes 4 endpoints for browsing and retrieving metadata from Standard Ebooks' curated public domain library. The list_ebooks endpoint returns paginated results with title, author, cover image, and URL, and accepts filters for subject, sort order, and keyword search. get_ebook_details returns per-book subjects and direct download URLs across EPUB, AZW3, KEPUB, and Advanced EPUB formats.
curl -X GET 'https://api.parse.bot/scraper/1a44c9f8-3d74-4b09-94c2-e2bcdbd22011/list_ebooks?page=1&sort=se-date-desc&limit=5&query=shakespeare&per_page=5&subjects=adventure' \ -H 'X-API-Key: $PARSE_API_KEY'
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 standardebooks-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.
"""Standard Ebooks: search, browse subjects, drill into details + downloads."""
from parse_apis.standard_ebooks_api import StandardEbooks, Sort, EbookNotFound
client = StandardEbooks()
# Browse available subject categories
for subject in client.subjects.list(limit=5):
print(subject.name, subject.value)
# Search for fiction ebooks sorted by title
for book in client.ebooksummaries.search(query="shakespeare", sort=Sort.TITLE_ASC, limit=3):
print(book.title, book.author, book.url)
# Drill into one ebook's full details (subjects + download links)
book = client.ebooksummaries.search(query="othello", limit=1).first()
if book:
detail = book.details()
print(detail.title, detail.author, detail.subjects)
print(detail.downloads.epub_url, detail.downloads.azw3_url)
# Batch AZW3/Kindle entries
for entry in client.azw3entries.list(limit_pages=1, limit=3):
print(entry.title, entry.azw3_url, entry.kindle_cover_thumbnail_url)
# Typed error handling for a missing ebook
try:
missing = client.ebooksummary(url="/ebooks/nonexistent/book").details()
except EbookNotFound as exc:
print(f"Not found: {exc.url}")
print("exercised: subjects.list / ebooksummaries.search / details / azw3entries.list / EbookNotFound")
Search and browse ebooks with filters and pagination. Returns a paginated list of ebooks with title, author, URL, and cover image. Supports filtering by subject category and free-text query against title/author. Pagination via page number; per_page controls page size. Sort controls result ordering.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sort | string | Sort order for results. |
| query | string | Search keyword to filter ebooks by title or author. |
| per_page | integer | Number of results per page. |
| subjects | string | Filter by subject. Use the value field from get_ebook_subjects_list (e.g. 'adventure', 'fiction', 'science-fiction'). |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"ebooks": "array of ebook objects with title, url, author, and cover_image_url",
"has_next": "boolean, whether more pages are available"
},
"sample": {
"data": {
"page": 1,
"ebooks": [
{
"url": "https://standardebooks.org/ebooks/william-shakespeare/richard-iii",
"title": "Richard III",
"author": "William Shakespeare",
"cover_image_url": "https://standardebooks.org/images/covers/[email protected]"
}
],
"has_next": true
},
"status": "success"
}
}About the Standard Ebooks API
Browse and Search the Catalog
The list_ebooks endpoint accepts a query string to filter by title or author, a subjects parameter (values sourced from get_ebook_subjects_list), and sort options including title-asc, author-desc, se-date-desc, and reading-ease order. Pagination is controlled with page and per_page. Each result object in the ebooks array includes title, author, url, and cover_image_url. The has_next boolean field tells you whether additional pages exist.
Per-Book Details and Download Links
get_ebook_details accepts either a full URL or a relative path like /ebooks/william-shakespeare/othello — the url field returned by list_ebooks works directly as input. The response includes the book's title, author, a subjects array of category strings, and a downloads object with direct file URLs: epub_url, azw3_url, kepub_url, advanced_epub_url, and kindle_cover_thumbnail_url.
Subject Taxonomy and Batch Format Retrieval
get_ebook_subjects_list returns all available subject categories as name/value pairs. Pass the value field directly into list_ebooks's subjects parameter to filter by genre or topic — for example fiction, adventure, or science-fiction. The get_azw3_list endpoint processes multiple listing pages (48 books per page, controlled by limit_pages) and returns AZW3 download URLs, page URLs, and Kindle cover thumbnails in bulk. Because it fetches details per book, response time scales linearly with the number of books requested.
The Standard Ebooks API is a managed, monitored endpoint for standardebooks.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when standardebooks.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 standardebooks.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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Kindle-compatible reading list by collecting AZW3 URLs via get_azw3_list for a given number of listing pages.
- Populate a subject-filtered ebook catalog using list_ebooks with the subjects parameter sourced from get_ebook_subjects_list.
- Generate a download page for a specific title by pulling all format links from the downloads object in get_ebook_details.
- Create an author bibliography tool by querying list_ebooks with an author name and iterating paginated results.
- Sync cover images to a local library app using cover_image_url and kindle_cover_thumbnail_url from the API responses.
- Sort a reading queue by estimated reading ease using the reading-ease sort option in list_ebooks.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.